mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-19 02:57:44 +00:00
Merge branch 'develop' into view-in-timeline
Conflicts: Core/src/org/sleuthkit/autopsy/timeline/TimeLineController.java
This commit is contained in:
commit
4168869291
@ -21,6 +21,7 @@ package org.sleuthkit.autopsy.contentviewers;
|
|||||||
import java.awt.Component;
|
import java.awt.Component;
|
||||||
import org.openide.nodes.Node;
|
import org.openide.nodes.Node;
|
||||||
import org.openide.util.NbBundle;
|
import org.openide.util.NbBundle;
|
||||||
|
import org.openide.util.NbBundle.Messages;
|
||||||
import org.openide.util.lookup.ServiceProvider;
|
import org.openide.util.lookup.ServiceProvider;
|
||||||
import org.sleuthkit.autopsy.corecomponentinterfaces.DataContentViewer;
|
import org.sleuthkit.autopsy.corecomponentinterfaces.DataContentViewer;
|
||||||
import org.sleuthkit.autopsy.datamodel.ContentUtils;
|
import org.sleuthkit.autopsy.datamodel.ContentUtils;
|
||||||
@ -112,6 +113,7 @@ public class Metadata extends javax.swing.JPanel implements DataContentViewer {
|
|||||||
sb.append("</td></tr>"); //NON-NLS
|
sb.append("</td></tr>"); //NON-NLS
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Messages({"Metadata.tableRowTitle.mimeType=MIME Type"})
|
||||||
@Override
|
@Override
|
||||||
public void setNode(Node node) {
|
public void setNode(Node node) {
|
||||||
AbstractFile file = node.getLookup().lookup(AbstractFile.class);
|
AbstractFile file = node.getLookup().lookup(AbstractFile.class);
|
||||||
@ -130,7 +132,8 @@ public class Metadata extends javax.swing.JPanel implements DataContentViewer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.type"), file.getType().getName());
|
addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.type"), file.getType().getName());
|
||||||
addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.size"), new Long(file.getSize()).toString());
|
addRow(sb, Bundle.Metadata_tableRowTitle_mimeType(), file.getMIMEType());
|
||||||
|
addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.size"), Long.toString(file.getSize()));
|
||||||
addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.fileNameAlloc"), file.getDirFlagAsString());
|
addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.fileNameAlloc"), file.getDirFlagAsString());
|
||||||
addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.metadataAlloc"), file.getMetaFlagsAsString());
|
addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.metadataAlloc"), file.getMetaFlagsAsString());
|
||||||
addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.modified"), ContentUtils.getStringTime(file.getMtime(), file));
|
addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.modified"), ContentUtils.getStringTime(file.getMtime(), file));
|
||||||
@ -138,6 +141,7 @@ public class Metadata extends javax.swing.JPanel implements DataContentViewer {
|
|||||||
addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.created"), ContentUtils.getStringTime(file.getCrtime(), file));
|
addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.created"), ContentUtils.getStringTime(file.getCrtime(), file));
|
||||||
addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.changed"), ContentUtils.getStringTime(file.getCtime(), file));
|
addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.changed"), ContentUtils.getStringTime(file.getCtime(), file));
|
||||||
|
|
||||||
|
|
||||||
String md5 = file.getMd5Hash();
|
String md5 = file.getMd5Hash();
|
||||||
if (md5 == null) {
|
if (md5 == null) {
|
||||||
md5 = NbBundle.getMessage(this.getClass(), "Metadata.tableRowContent.md5notCalc");
|
md5 = NbBundle.getMessage(this.getClass(), "Metadata.tableRowContent.md5notCalc");
|
||||||
@ -145,7 +149,7 @@ public class Metadata extends javax.swing.JPanel implements DataContentViewer {
|
|||||||
addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.md5"), md5);
|
addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.md5"), md5);
|
||||||
addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.hashLookupResults"), file.getKnown().toString());
|
addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.hashLookupResults"), file.getKnown().toString());
|
||||||
|
|
||||||
addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.internalid"), new Long(file.getId()).toString());
|
addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.internalid"), Long.toString(file.getId()));
|
||||||
if (file.getType().compareTo(TSK_DB_FILES_TYPE_ENUM.LOCAL) == 0) {
|
if (file.getType().compareTo(TSK_DB_FILES_TYPE_ENUM.LOCAL) == 0) {
|
||||||
addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.localPath"), file.getLocalAbsPath());
|
addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.localPath"), file.getLocalAbsPath());
|
||||||
}
|
}
|
||||||
@ -205,10 +209,7 @@ public class Metadata extends javax.swing.JPanel implements DataContentViewer {
|
|||||||
@Override
|
@Override
|
||||||
public boolean isSupported(Node node) {
|
public boolean isSupported(Node node) {
|
||||||
AbstractFile file = node.getLookup().lookup(AbstractFile.class);
|
AbstractFile file = node.getLookup().lookup(AbstractFile.class);
|
||||||
if (file == null) {
|
return file != null;
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -22,21 +22,44 @@
|
|||||||
<Layout>
|
<Layout>
|
||||||
<DimensionLayout dim="0">
|
<DimensionLayout dim="0">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" alignment="0" attributes="0">
|
<Component id="jScrollPane1" alignment="1" pref="657" max="32767" attributes="0"/>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
</Group>
|
||||||
|
</DimensionLayout>
|
||||||
|
<DimensionLayout dim="1">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Component id="jScrollPane1" alignment="0" pref="402" max="32767" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</DimensionLayout>
|
||||||
|
</Layout>
|
||||||
|
<SubComponents>
|
||||||
|
<Container class="javax.swing.JScrollPane" name="jScrollPane1">
|
||||||
|
<Properties>
|
||||||
|
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
|
||||||
|
<Border info="null"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
|
||||||
|
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
|
||||||
|
<SubComponents>
|
||||||
|
<Container class="javax.swing.JPanel" name="jPanel1">
|
||||||
|
|
||||||
|
<Layout>
|
||||||
|
<DimensionLayout dim="0">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" 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">
|
||||||
<EmptySpace min="10" pref="10" max="-2" attributes="0"/>
|
<EmptySpace min="10" pref="10" max="-2" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Component id="keepCurrentViewerRB" min="-2" max="-2" attributes="0"/>
|
<Component id="keepCurrentViewerRB" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="useBestViewerRB" min="-2" max="-2" attributes="0"/>
|
<Component id="useBestViewerRB" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="dataSourcesHideKnownCB" alignment="0" min="-2" max="-2" attributes="0"/>
|
<Component id="dataSourcesHideKnownCB" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="viewsHideKnownCB" alignment="0" min="-2" max="-2" attributes="0"/>
|
<Component id="viewsHideKnownCB" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||||
<Group type="102" attributes="0">
|
<Group type="102" alignment="0" attributes="0">
|
||||||
<Component id="numberOfFileIngestThreadsComboBox" min="-2" max="-2" attributes="0"/>
|
<Component id="numberOfFileIngestThreadsComboBox" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace type="separate" max="-2" attributes="0"/>
|
<EmptySpace type="separate" max="-2" attributes="0"/>
|
||||||
<Component id="restartRequiredLabel" max="32767" attributes="0"/>
|
<Component id="restartRequiredLabel" max="32767" attributes="0"/>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
@ -53,12 +76,7 @@
|
|||||||
</Group>
|
</Group>
|
||||||
<Component id="jLabelSelectFile" min="-2" max="-2" attributes="0"/>
|
<Component id="jLabelSelectFile" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="jLabelNumThreads" alignment="0" min="-2" max="-2" attributes="0"/>
|
<Component id="jLabelNumThreads" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||||
</Group>
|
<Group type="102" alignment="0" attributes="0">
|
||||||
<EmptySpace max="32767" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
<Group type="102" attributes="0">
|
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
|
||||||
<Group type="102" attributes="0">
|
|
||||||
<EmptySpace min="10" pref="10" max="-2" attributes="0"/>
|
<EmptySpace min="10" pref="10" max="-2" attributes="0"/>
|
||||||
<Component id="jCheckBoxEnableProcTimeout" min="-2" max="-2" attributes="0"/>
|
<Component id="jCheckBoxEnableProcTimeout" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
@ -68,15 +86,17 @@
|
|||||||
</Group>
|
</Group>
|
||||||
<Component id="jLabelSetProcessTimeOut" alignment="0" min="-2" max="-2" attributes="0"/>
|
<Component id="jLabelSetProcessTimeOut" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
|
<EmptySpace min="-2" pref="213" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
<DimensionLayout dim="1">
|
<DimensionLayout dim="1">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" alignment="0" attributes="0">
|
<Group type="102" attributes="0">
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
<Component id="jLabelSelectFile" min="-2" max="-2" attributes="0"/>
|
<Component id="jLabelSelectFile" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
<Component id="useBestViewerRB" min="-2" max="-2" attributes="0"/>
|
<Component id="useBestViewerRB" min="-2" max="-2" attributes="0"/>
|
||||||
@ -111,7 +131,7 @@
|
|||||||
<Component id="jLabelProcessTimeOutUnits" alignment="3" min="-2" max="-2" attributes="0"/>
|
<Component id="jLabelProcessTimeOutUnits" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
<EmptySpace pref="103" max="32767" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
@ -122,7 +142,6 @@
|
|||||||
<Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
|
<Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
|
||||||
<ComponentRef name="buttonGroup1"/>
|
<ComponentRef name="buttonGroup1"/>
|
||||||
</Property>
|
</Property>
|
||||||
<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/corecomponents/Bundle.properties" key="AutopsyOptionsPanel.useBestViewerRB.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
<ResourceString bundle="org/sleuthkit/autopsy/corecomponents/Bundle.properties" key="AutopsyOptionsPanel.useBestViewerRB.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
</Property>
|
</Property>
|
||||||
@ -169,7 +188,6 @@
|
|||||||
<Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
|
<Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
|
||||||
<ComponentRef name="buttonGroup3"/>
|
<ComponentRef name="buttonGroup3"/>
|
||||||
</Property>
|
</Property>
|
||||||
<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/corecomponents/Bundle.properties" key="AutopsyOptionsPanel.useLocalTimeRB.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
<ResourceString bundle="org/sleuthkit/autopsy/corecomponents/Bundle.properties" key="AutopsyOptionsPanel.useLocalTimeRB.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
</Property>
|
</Property>
|
||||||
@ -286,4 +304,8 @@
|
|||||||
</AuxValues>
|
</AuxValues>
|
||||||
</Component>
|
</Component>
|
||||||
</SubComponents>
|
</SubComponents>
|
||||||
|
</Container>
|
||||||
|
</SubComponents>
|
||||||
|
</Container>
|
||||||
|
</SubComponents>
|
||||||
</Form>
|
</Form>
|
||||||
|
@ -163,6 +163,8 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel {
|
|||||||
|
|
||||||
buttonGroup1 = new javax.swing.ButtonGroup();
|
buttonGroup1 = new javax.swing.ButtonGroup();
|
||||||
buttonGroup3 = new javax.swing.ButtonGroup();
|
buttonGroup3 = new javax.swing.ButtonGroup();
|
||||||
|
jScrollPane1 = new javax.swing.JScrollPane();
|
||||||
|
jPanel1 = new javax.swing.JPanel();
|
||||||
useBestViewerRB = new javax.swing.JRadioButton();
|
useBestViewerRB = new javax.swing.JRadioButton();
|
||||||
keepCurrentViewerRB = new javax.swing.JRadioButton();
|
keepCurrentViewerRB = new javax.swing.JRadioButton();
|
||||||
jLabelSelectFile = new javax.swing.JLabel();
|
jLabelSelectFile = new javax.swing.JLabel();
|
||||||
@ -173,15 +175,16 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel {
|
|||||||
dataSourcesHideKnownCB = new javax.swing.JCheckBox();
|
dataSourcesHideKnownCB = new javax.swing.JCheckBox();
|
||||||
viewsHideKnownCB = new javax.swing.JCheckBox();
|
viewsHideKnownCB = new javax.swing.JCheckBox();
|
||||||
jLabelNumThreads = new javax.swing.JLabel();
|
jLabelNumThreads = new javax.swing.JLabel();
|
||||||
numberOfFileIngestThreadsComboBox = new javax.swing.JComboBox<Integer>();
|
numberOfFileIngestThreadsComboBox = new javax.swing.JComboBox<>();
|
||||||
restartRequiredLabel = new javax.swing.JLabel();
|
restartRequiredLabel = new javax.swing.JLabel();
|
||||||
jLabelSetProcessTimeOut = new javax.swing.JLabel();
|
jLabelSetProcessTimeOut = new javax.swing.JLabel();
|
||||||
jCheckBoxEnableProcTimeout = new javax.swing.JCheckBox();
|
jCheckBoxEnableProcTimeout = new javax.swing.JCheckBox();
|
||||||
jLabelProcessTimeOutUnits = new javax.swing.JLabel();
|
jLabelProcessTimeOutUnits = new javax.swing.JLabel();
|
||||||
jFormattedTextFieldProcTimeOutHrs = new JFormattedTextField(NumberFormat.getIntegerInstance());
|
jFormattedTextFieldProcTimeOutHrs = new JFormattedTextField(NumberFormat.getIntegerInstance());
|
||||||
|
|
||||||
|
jScrollPane1.setBorder(null);
|
||||||
|
|
||||||
buttonGroup1.add(useBestViewerRB);
|
buttonGroup1.add(useBestViewerRB);
|
||||||
useBestViewerRB.setSelected(true);
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(useBestViewerRB, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.useBestViewerRB.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(useBestViewerRB, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.useBestViewerRB.text")); // NOI18N
|
||||||
useBestViewerRB.setToolTipText(org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.useBestViewerRB.toolTipText")); // NOI18N
|
useBestViewerRB.setToolTipText(org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.useBestViewerRB.toolTipText")); // NOI18N
|
||||||
useBestViewerRB.addActionListener(new java.awt.event.ActionListener() {
|
useBestViewerRB.addActionListener(new java.awt.event.ActionListener() {
|
||||||
@ -204,7 +207,6 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel {
|
|||||||
org.openide.awt.Mnemonics.setLocalizedText(jLabelTimeDisplay, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.jLabelTimeDisplay.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(jLabelTimeDisplay, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.jLabelTimeDisplay.text")); // NOI18N
|
||||||
|
|
||||||
buttonGroup3.add(useLocalTimeRB);
|
buttonGroup3.add(useLocalTimeRB);
|
||||||
useLocalTimeRB.setSelected(true);
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(useLocalTimeRB, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.useLocalTimeRB.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(useLocalTimeRB, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.useLocalTimeRB.text")); // NOI18N
|
||||||
useLocalTimeRB.addActionListener(new java.awt.event.ActionListener() {
|
useLocalTimeRB.addActionListener(new java.awt.event.ActionListener() {
|
||||||
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
@ -265,40 +267,36 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
|
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
|
||||||
this.setLayout(layout);
|
jPanel1.setLayout(jPanel1Layout);
|
||||||
layout.setHorizontalGroup(
|
jPanel1Layout.setHorizontalGroup(
|
||||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(layout.createSequentialGroup()
|
.addGroup(jPanel1Layout.createSequentialGroup()
|
||||||
.addContainerGap()
|
.addContainerGap()
|
||||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(layout.createSequentialGroup()
|
.addGroup(jPanel1Layout.createSequentialGroup()
|
||||||
.addGap(10, 10, 10)
|
.addGap(10, 10, 10)
|
||||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addComponent(keepCurrentViewerRB)
|
.addComponent(keepCurrentViewerRB)
|
||||||
.addComponent(useBestViewerRB)
|
.addComponent(useBestViewerRB)
|
||||||
.addComponent(dataSourcesHideKnownCB)
|
.addComponent(dataSourcesHideKnownCB)
|
||||||
.addComponent(viewsHideKnownCB)
|
.addComponent(viewsHideKnownCB)
|
||||||
.addGroup(layout.createSequentialGroup()
|
.addGroup(jPanel1Layout.createSequentialGroup()
|
||||||
.addComponent(numberOfFileIngestThreadsComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addComponent(numberOfFileIngestThreadsComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
.addGap(18, 18, 18)
|
.addGap(18, 18, 18)
|
||||||
.addComponent(restartRequiredLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
.addComponent(restartRequiredLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
|
||||||
.addContainerGap())))
|
.addGroup(jPanel1Layout.createSequentialGroup()
|
||||||
.addGroup(layout.createSequentialGroup()
|
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
||||||
.addComponent(jLabelHideKnownFiles)
|
.addComponent(jLabelHideKnownFiles)
|
||||||
.addComponent(jLabelTimeDisplay)
|
.addComponent(jLabelTimeDisplay)
|
||||||
.addGroup(layout.createSequentialGroup()
|
.addGroup(jPanel1Layout.createSequentialGroup()
|
||||||
.addGap(10, 10, 10)
|
.addGap(10, 10, 10)
|
||||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addComponent(useLocalTimeRB)
|
.addComponent(useLocalTimeRB)
|
||||||
.addComponent(useGMTTimeRB)))
|
.addComponent(useGMTTimeRB)))
|
||||||
.addComponent(jLabelSelectFile)
|
.addComponent(jLabelSelectFile)
|
||||||
.addComponent(jLabelNumThreads))
|
.addComponent(jLabelNumThreads)
|
||||||
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
.addGroup(jPanel1Layout.createSequentialGroup()
|
||||||
.addGroup(layout.createSequentialGroup()
|
|
||||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
||||||
.addGroup(layout.createSequentialGroup()
|
|
||||||
.addGap(10, 10, 10)
|
.addGap(10, 10, 10)
|
||||||
.addComponent(jCheckBoxEnableProcTimeout)
|
.addComponent(jCheckBoxEnableProcTimeout)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
@ -306,11 +304,13 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel {
|
|||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addComponent(jLabelProcessTimeOutUnits))
|
.addComponent(jLabelProcessTimeOutUnits))
|
||||||
.addComponent(jLabelSetProcessTimeOut))
|
.addComponent(jLabelSetProcessTimeOut))
|
||||||
.addGap(0, 0, Short.MAX_VALUE))))
|
.addGap(213, 213, 213)))
|
||||||
|
.addContainerGap())
|
||||||
);
|
);
|
||||||
layout.setVerticalGroup(
|
jPanel1Layout.setVerticalGroup(
|
||||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(layout.createSequentialGroup()
|
.addGroup(jPanel1Layout.createSequentialGroup()
|
||||||
|
.addContainerGap()
|
||||||
.addComponent(jLabelSelectFile)
|
.addComponent(jLabelSelectFile)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addComponent(useBestViewerRB)
|
.addComponent(useBestViewerRB)
|
||||||
@ -331,18 +331,31 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel {
|
|||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||||
.addComponent(jLabelNumThreads)
|
.addComponent(jLabelNumThreads)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||||
.addComponent(numberOfFileIngestThreadsComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addComponent(numberOfFileIngestThreadsComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
.addComponent(restartRequiredLabel))
|
.addComponent(restartRequiredLabel))
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||||
.addComponent(jLabelSetProcessTimeOut)
|
.addComponent(jLabelSetProcessTimeOut)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addComponent(jCheckBoxEnableProcTimeout)
|
.addComponent(jCheckBoxEnableProcTimeout)
|
||||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||||
.addComponent(jFormattedTextFieldProcTimeOutHrs, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addComponent(jFormattedTextFieldProcTimeOutHrs, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
.addComponent(jLabelProcessTimeOutUnits)))
|
.addComponent(jLabelProcessTimeOutUnits)))
|
||||||
.addContainerGap(103, Short.MAX_VALUE))
|
.addContainerGap())
|
||||||
|
);
|
||||||
|
|
||||||
|
jScrollPane1.setViewportView(jPanel1);
|
||||||
|
|
||||||
|
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
|
||||||
|
this.setLayout(layout);
|
||||||
|
layout.setHorizontalGroup(
|
||||||
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 657, Short.MAX_VALUE)
|
||||||
|
);
|
||||||
|
layout.setVerticalGroup(
|
||||||
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 402, Short.MAX_VALUE)
|
||||||
);
|
);
|
||||||
}// </editor-fold>//GEN-END:initComponents
|
}// </editor-fold>//GEN-END:initComponents
|
||||||
|
|
||||||
@ -395,6 +408,8 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel {
|
|||||||
private javax.swing.JLabel jLabelSelectFile;
|
private javax.swing.JLabel jLabelSelectFile;
|
||||||
private javax.swing.JLabel jLabelSetProcessTimeOut;
|
private javax.swing.JLabel jLabelSetProcessTimeOut;
|
||||||
private javax.swing.JLabel jLabelTimeDisplay;
|
private javax.swing.JLabel jLabelTimeDisplay;
|
||||||
|
private javax.swing.JPanel jPanel1;
|
||||||
|
private javax.swing.JScrollPane jScrollPane1;
|
||||||
private javax.swing.JRadioButton keepCurrentViewerRB;
|
private javax.swing.JRadioButton keepCurrentViewerRB;
|
||||||
private javax.swing.JComboBox<Integer> numberOfFileIngestThreadsComboBox;
|
private javax.swing.JComboBox<Integer> numberOfFileIngestThreadsComboBox;
|
||||||
private javax.swing.JLabel restartRequiredLabel;
|
private javax.swing.JLabel restartRequiredLabel;
|
||||||
|
@ -1,166 +1,166 @@
|
|||||||
CTL_DataContentAction=\u30C7\u30FC\u30BF\u30B3\u30F3\u30C6\u30F3\u30C4
|
CTL_DataContentAction=\u30c7\u30fc\u30bf\u30b3\u30f3\u30c6\u30f3\u30c4
|
||||||
OptionsCategory_Name_General=Autopsy
|
OptionsCategory_Name_General=Autopsy
|
||||||
OptionsCategory_Keywords_General=Autopsy\u30AA\u30D7\u30B7\u30E7\u30F3
|
OptionsCategory_Keywords_General=Autopsy\u30aa\u30d7\u30b7\u30e7\u30f3
|
||||||
CTL_CustomAboutAction=Autopsy\u306B\u3064\u3044\u3066
|
CTL_CustomAboutAction=Autopsy\u306b\u3064\u3044\u3066
|
||||||
CTL_DataContentTopComponent=\u30C7\u30FC\u30BF\u30B3\u30F3\u30C6\u30F3\u30C4
|
CTL_DataContentTopComponent=\u30c7\u30fc\u30bf\u30b3\u30f3\u30c6\u30f3\u30c4
|
||||||
HINT_DataContentTopComponent=\u3053\u308C\u306F\u30C7\u30FC\u30BF\u30B3\u30F3\u30C6\u30F3\u30C4\u306E\u30A6\u30A3\u30F3\u30C9\u30A6\u3067\u3059
|
HINT_DataContentTopComponent=\u3053\u308c\u306f\u30c7\u30fc\u30bf\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u30a6\u30a3\u30f3\u30c9\u30a6\u3067\u3059
|
||||||
HINT_NodeTableTopComponent=\u3053\u308C\u306F\u30C7\u30FC\u30BF\u7D50\u679C\u306E\u30A6\u30A3\u30F3\u30C9\u30A6\u3067\u3059
|
HINT_NodeTableTopComponent=\u3053\u308c\u306f\u30c7\u30fc\u30bf\u7d50\u679c\u306e\u30a6\u30a3\u30f3\u30c9\u30a6\u3067\u3059
|
||||||
OpenIDE-Module-Name=\u4E3B\u8981\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8
|
OpenIDE-Module-Name=\u4e3b\u8981\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8
|
||||||
DataContentViewerHex.pageLabel.text_1=\u30DA\u30FC\u30B8\uFF1A
|
DataContentViewerHex.pageLabel.text_1=\u30da\u30fc\u30b8\uff1a
|
||||||
DataContentViewerHex.currentPageLabel.text_1=1
|
DataContentViewerHex.currentPageLabel.text_1=1
|
||||||
DataContentViewerHex.totalPageLabel.text_1=100
|
DataContentViewerHex.totalPageLabel.text_1=100
|
||||||
DataContentViewerString.pageLabel.text_1=\u30DA\u30FC\u30B8\uFF1A
|
DataContentViewerString.pageLabel.text_1=\u30da\u30fc\u30b8\uff1a
|
||||||
DataContentViewerString.currentPageLabel.text_1=1
|
DataContentViewerString.currentPageLabel.text_1=1
|
||||||
DataContentViewerString.totalPageLabel.text_1=100
|
DataContentViewerString.totalPageLabel.text_1=100
|
||||||
DataContentViewerHex.pageLabel2.text=\u30DA\u30FC\u30B8
|
DataContentViewerHex.pageLabel2.text=\u30da\u30fc\u30b8
|
||||||
DataContentViewerString.pageLabel2.text=\u30DA\u30FC\u30B8
|
DataContentViewerString.pageLabel2.text=\u30da\u30fc\u30b8
|
||||||
Format_OperatingSystem_Value={0} \u30D0\u30FC\u30B8\u30E7\u30F3 {1} \u30A2\u30FC\u30AD\u30C6\u30AF\u30C1\u30E3 {2}
|
Format_OperatingSystem_Value={0} \u30d0\u30fc\u30b8\u30e7\u30f3 {1} \u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3 {2}
|
||||||
LBL_Close=\u9589\u3058\u308B
|
LBL_Close=\u9589\u3058\u308b
|
||||||
DataContentViewerString.copyMenuItem.text=\u30B3\u30D4\u30FC
|
DataContentViewerString.copyMenuItem.text=\u30b3\u30d4\u30fc
|
||||||
DataContentViewerHex.copyMenuItem.text=\u30B3\u30D4\u30FC
|
DataContentViewerHex.copyMenuItem.text=\u30b3\u30d4\u30fc
|
||||||
DataContentViewerString.selectAllMenuItem.text=\u3059\u3079\u3066\u9078\u629E
|
DataContentViewerString.selectAllMenuItem.text=\u3059\u3079\u3066\u9078\u629e
|
||||||
DataContentViewerHex.selectAllMenuItem.text=\u5168\u3066\u9078\u629E
|
DataContentViewerHex.selectAllMenuItem.text=\u5168\u3066\u9078\u629e
|
||||||
DataContentViewerArtifact.totalPageLabel.text=100
|
DataContentViewerArtifact.totalPageLabel.text=100
|
||||||
DataContentViewerArtifact.pageLabel2.text=\u7D50\u679C
|
DataContentViewerArtifact.pageLabel2.text=\u7d50\u679c
|
||||||
DataContentViewerArtifact.currentPageLabel.text=1
|
DataContentViewerArtifact.currentPageLabel.text=1
|
||||||
DataContentViewerArtifact.copyMenuItem.text=\u30B3\u30D4\u30FC
|
DataContentViewerArtifact.copyMenuItem.text=\u30b3\u30d4\u30fc
|
||||||
DataContentViewerArtifact.selectAllMenuItem.text=\u5168\u3066\u9078\u629E
|
DataContentViewerArtifact.selectAllMenuItem.text=\u5168\u3066\u9078\u629e
|
||||||
DataContentViewerArtifact.pageLabel.text=\u7D50\u679C\uFF1A
|
DataContentViewerArtifact.pageLabel.text=\u7d50\u679c\uff1a
|
||||||
AdvancedConfigurationDialog.applyButton.text=OK
|
AdvancedConfigurationDialog.applyButton.text=OK
|
||||||
DataContentViewerString.goToPageLabel.text=\u6B21\u306E\u30DA\u30FC\u30B8\u3078\u79FB\u52D5\uFF1A
|
DataContentViewerString.goToPageLabel.text=\u6b21\u306e\u30da\u30fc\u30b8\u3078\u79fb\u52d5\uff1a
|
||||||
DataContentViewerHex.goToPageLabel.text=\u6B21\u306E\u30DA\u30FC\u30B8\u3078\u79FB\u52D5\uFF1A
|
DataContentViewerHex.goToPageLabel.text=\u6b21\u306e\u30da\u30fc\u30b8\u3078\u79fb\u52d5\uff1a
|
||||||
DataContentViewerString.languageLabel.text=\u30B9\u30AF\u30EA\u30D7\u30C8\uFF1A
|
DataContentViewerString.languageLabel.text=\u30b9\u30af\u30ea\u30d7\u30c8\uff1a
|
||||||
DataContentViewerString.languageCombo.toolTipText=\u30D0\u30A4\u30CA\u30EA\u30B9\u30C8\u30EA\u30F3\u30B0\u306E\u51E6\u7406\uFF08\u62BD\u51FA\u304A\u3088\u3073\u30C7\u30B3\u30FC\u30C9\uFF09\u306B\u4F7F\u7528\u3059\u308B\u8A00\u8A9E
|
DataContentViewerString.languageCombo.toolTipText=\u30d0\u30a4\u30ca\u30ea\u30b9\u30c8\u30ea\u30f3\u30b0\u306e\u51e6\u7406\uff08\u62bd\u51fa\u304a\u3088\u3073\u30c7\u30b3\u30fc\u30c9\uff09\u306b\u4f7f\u7528\u3059\u308b\u8a00\u8a9e
|
||||||
DataResultViewerThumbnail.pageLabel.text=\u30DA\u30FC\u30B8\uFF1A
|
DataResultViewerThumbnail.pageLabel.text=\u30da\u30fc\u30b8\uff1a
|
||||||
DataResultViewerThumbnail.pagesLabel.text=\u30DA\u30FC\u30B8\uFF1A
|
DataResultViewerThumbnail.pagesLabel.text=\u30da\u30fc\u30b8\uff1a
|
||||||
DataResultViewerThumbnail.imagesLabel.text=\u30A4\u30E1\u30FC\u30B8\uFF1A
|
DataResultViewerThumbnail.imagesLabel.text=\u30a4\u30e1\u30fc\u30b8\uff1a
|
||||||
DataResultViewerThumbnail.imagesRangeLabel.text=-
|
DataResultViewerThumbnail.imagesRangeLabel.text=-
|
||||||
DataResultViewerThumbnail.pageNumLabel.text=-
|
DataResultViewerThumbnail.pageNumLabel.text=-
|
||||||
DataResultViewerThumbnail.goToPageLabel.text=\u6B21\u306E\u30DA\u30FC\u30B8\u306B\u79FB\u52D5\uFF1A
|
DataResultViewerThumbnail.goToPageLabel.text=\u6b21\u306e\u30da\u30fc\u30b8\u306b\u79fb\u52d5\uff1a
|
||||||
AdvancedConfigurationDialog.cancelButton.text=\u30AD\u30E3\u30F3\u30BB\u30EB
|
AdvancedConfigurationDialog.cancelButton.text=\u30ad\u30e3\u30f3\u30bb\u30eb
|
||||||
DataResultPanel.directoryTablePath.text=\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u30D1\u30B9
|
DataResultPanel.directoryTablePath.text=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30d1\u30b9
|
||||||
DataResultPanel.numberMatchLabel.text=0
|
DataResultPanel.numberMatchLabel.text=0
|
||||||
DataResultPanel.matchLabel.text=\u7D50\u679C
|
DataResultPanel.matchLabel.text=\u7d50\u679c
|
||||||
MediaViewVideoPanel.pauseButton.text=\u25BA
|
MediaViewVideoPanel.pauseButton.text=\u25ba
|
||||||
MediaViewVideoPanel.progressLabel.text=00\:00
|
MediaViewVideoPanel.progressLabel.text=00\:00
|
||||||
MediaViewVideoPanel.infoLabel.text=\u60C5\u5831
|
MediaViewVideoPanel.infoLabel.text=\u60c5\u5831
|
||||||
DataContentViewerArtifact.waitText=\u30C7\u30FC\u30BF\u3092\u53D6\u8FBC\u307F\u304A\u3088\u3073\u6E96\u5099\u4E2D\u3002\u3057\u3070\u3089\u304F\u304A\u5F85\u3061\u4E0B\u3055\u3044...
|
DataContentViewerArtifact.waitText=\u30c7\u30fc\u30bf\u3092\u53d6\u8fbc\u307f\u304a\u3088\u3073\u6e96\u5099\u4e2d\u3002\u3057\u3070\u3089\u304f\u304a\u5f85\u3061\u4e0b\u3055\u3044...
|
||||||
DataContentViewerArtifact.errorText=\u7D50\u679C\u3092\u53D6\u8FBC\u307F\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F
|
DataContentViewerArtifact.errorText=\u7d50\u679c\u3092\u53d6\u8fbc\u307f\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f
|
||||||
DataContentViewerArtifact.title=\u7D50\u679C
|
DataContentViewerArtifact.title=\u7d50\u679c
|
||||||
DataContentViewerArtifact.toolTip=\u30D5\u30A1\u30A4\u30EB\u306B\u95A2\u9023\u3059\u308B\u7D50\u679C\u3092\u8868\u793A\u3057\u307E\u3059
|
DataContentViewerArtifact.toolTip=\u30d5\u30a1\u30a4\u30eb\u306b\u95a2\u9023\u3059\u308b\u7d50\u679c\u3092\u8868\u793a\u3057\u307e\u3059
|
||||||
DataContentViewerHex.goToPageTextField.msgDlg=\uFF11\u304B\u3089 {0}\u306E\u9593\u306E\u6709\u52B9\u306A\u30DA\u30FC\u30B8\u6570\u3092\u5165\u529B\u3057\u3066\u4E0B\u3055\u3044
|
DataContentViewerHex.goToPageTextField.msgDlg=\uff11\u304b\u3089 {0}\u306e\u9593\u306e\u6709\u52b9\u306a\u30da\u30fc\u30b8\u6570\u3092\u5165\u529b\u3057\u3066\u4e0b\u3055\u3044
|
||||||
DataContentViewerHex.goToPageTextField.err=\u7121\u52B9\u306A\u30DA\u30FC\u30B8\u6570
|
DataContentViewerHex.goToPageTextField.err=\u7121\u52b9\u306a\u30da\u30fc\u30b8\u6570
|
||||||
DataContentViewerHex.setDataView.errorText=\uFF08\u30AA\u30D5\u30BB\u30C3\u30C8{0}-{1}\u306F\u8AAD\u307F\u53D6\u308C\u307E\u305B\u3093\u3067\u3057\u305F\uFF09
|
DataContentViewerHex.setDataView.errorText=\uff08\u30aa\u30d5\u30bb\u30c3\u30c8{0}-{1}\u306f\u8aad\u307f\u53d6\u308c\u307e\u305b\u3093\u3067\u3057\u305f\uff09
|
||||||
DataContentViewerHex.title=HEX
|
DataContentViewerHex.title=HEX
|
||||||
DataContentViewerHex.toolTip=\u30D0\u30A4\u30CA\u30EA\u30B3\u30F3\u30C6\u30F3\u30C4\u3092HEX\u30D5\u30A1\u30A4\u30EB\u3068\u3057\u3066\u8868\u793A\u3057\u3001ASCII\u3068\u3057\u3066\u8868\u793A\u3067\u304D\u308B\u30D0\u30A4\u30C8\u306F\u53F3\u5074\u306B\u8868\u793A\u3057\u307E\u3059\u3002
|
DataContentViewerHex.toolTip=\u30d0\u30a4\u30ca\u30ea\u30b3\u30f3\u30c6\u30f3\u30c4\u3092HEX\u30d5\u30a1\u30a4\u30eb\u3068\u3057\u3066\u8868\u793a\u3057\u3001ASCII\u3068\u3057\u3066\u8868\u793a\u3067\u304d\u308b\u30d0\u30a4\u30c8\u306f\u53f3\u5074\u306b\u8868\u793a\u3057\u307e\u3059\u3002
|
||||||
DataContentViewerMedia.title=\u30E1\u30C7\u30A3\u30A2
|
DataContentViewerMedia.title=\u30e1\u30c7\u30a3\u30a2
|
||||||
DataContentViewerMedia.toolTip=\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u308B\u30DE\u30EB\u30C1\u30E1\u30C7\u30A3\u30A2\u30D5\u30A1\u30A4\u30EB\uFF08\u30A4\u30E1\u30FC\u30B8\u3001\u30D3\u30C7\u30AA\u3001\u30AA\u30FC\u30C7\u30A3\u30AA\uFF09\u3092\u8868\u793A\u3057\u307E\u3059\u3002
|
DataContentViewerMedia.toolTip=\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u30de\u30eb\u30c1\u30e1\u30c7\u30a3\u30a2\u30d5\u30a1\u30a4\u30eb\uff08\u30a4\u30e1\u30fc\u30b8\u3001\u30d3\u30c7\u30aa\u3001\u30aa\u30fc\u30c7\u30a3\u30aa\uff09\u3092\u8868\u793a\u3057\u307e\u3059\u3002
|
||||||
DataContentViewerString.goToPageTextField.msgDlg=\uFF11\u304B\u3089{0}\u306E\u9593\u306E\u6709\u52B9\u306A\u30DA\u30FC\u30B8\u6570\u3092\u5165\u529B\u3057\u3066\u4E0B\u3055\u3044
|
DataContentViewerString.goToPageTextField.msgDlg=\uff11\u304b\u3089{0}\u306e\u9593\u306e\u6709\u52b9\u306a\u30da\u30fc\u30b8\u6570\u3092\u5165\u529b\u3057\u3066\u4e0b\u3055\u3044
|
||||||
DataContentViewerString.goToPageTextField.err=\u7121\u52B9\u306A\u30DA\u30FC\u30B8\u6570
|
DataContentViewerString.goToPageTextField.err=\u7121\u52b9\u306a\u30da\u30fc\u30b8\u6570
|
||||||
DataContentViewerString.setDataView.errorText=\uFF08\u30AA\u30D5\u30BB\u30C3\u30C8{0}-{1}\u306F\u8AAD\u307F\u53D6\u308C\u307E\u305B\u3093\u3067\u3057\u305F\uFF09
|
DataContentViewerString.setDataView.errorText=\uff08\u30aa\u30d5\u30bb\u30c3\u30c8{0}-{1}\u306f\u8aad\u307f\u53d6\u308c\u307e\u305b\u3093\u3067\u3057\u305f\uff09
|
||||||
DataContentViewerString.title=\u30B9\u30C8\u30EA\u30F3\u30B0
|
DataContentViewerString.title=\u30b9\u30c8\u30ea\u30f3\u30b0
|
||||||
DataContentViewerString.toolTip=\u30D5\u30A1\u30A4\u30EB\u304B\u3089\u62BD\u51FA\u3055\u308C\u305FASCII\u304A\u3088\u3073\u30E6\u30CB\u30B3\u30FC\u30C9\u306E\u30B9\u30C8\u30EA\u30F3\u30B0\u304C\u8868\u793A\u3055\u308C\u307E\u3059\u3002
|
DataContentViewerString.toolTip=\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u62bd\u51fa\u3055\u308c\u305fASCII\u304a\u3088\u3073\u30e6\u30cb\u30b3\u30fc\u30c9\u306e\u30b9\u30c8\u30ea\u30f3\u30b0\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002
|
||||||
DataResultPanel.dummyNodeDisplayName=\u3057\u3070\u3089\u304F\u304A\u5F85\u3061\u304F\u3060\u3055\u3044\u2026
|
DataResultPanel.dummyNodeDisplayName=\u3057\u3070\u3089\u304f\u304a\u5f85\u3061\u304f\u3060\u3055\u3044\u2026
|
||||||
DataResultViewerTable.firstColLbl=\u540D\u524D
|
DataResultViewerTable.firstColLbl=\u540d\u524d
|
||||||
DataResultViewerTable.illegalArgExc.noChildFromParent=\u6307\u5B9A\u3055\u308C\u305F\u30DA\u30A2\u30EC\u30F3\u30C8\u304B\u3089\u30C1\u30E3\u30A4\u30EB\u30C9\u30CE\u30FC\u30C9\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002
|
DataResultViewerTable.illegalArgExc.noChildFromParent=\u6307\u5b9a\u3055\u308c\u305f\u30da\u30a2\u30ec\u30f3\u30c8\u304b\u3089\u30c1\u30e3\u30a4\u30eb\u30c9\u30ce\u30fc\u30c9\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
|
||||||
DataResultViewerTable.illegalArgExc.childWithoutPropertySet=\u30C1\u30E3\u30A4\u30EB\u30C9\u30CE\u30FC\u30C9\u306F\u901A\u5E38\u306EPropertySet\u3092\u6301\u3063\u3066\u3044\u307E\u305B\u3093\u3002
|
DataResultViewerTable.illegalArgExc.childWithoutPropertySet=\u30c1\u30e3\u30a4\u30eb\u30c9\u30ce\u30fc\u30c9\u306f\u901a\u5e38\u306ePropertySet\u3092\u6301\u3063\u3066\u3044\u307e\u305b\u3093\u3002
|
||||||
DataResultViewerTable.title=\u30C6\u30FC\u30D6\u30EB
|
DataResultViewerTable.title=\u30c6\u30fc\u30d6\u30eb
|
||||||
DataResultViewerTable.dummyNodeDisplayName=\u3057\u3070\u3089\u304F\u304A\u5F85\u3061\u304F\u3060\u3055\u3044\u2026
|
DataResultViewerTable.dummyNodeDisplayName=\u3057\u3070\u3089\u304f\u304a\u5f85\u3061\u304f\u3060\u3055\u3044\u2026
|
||||||
DataResultViewerThumbnail.title=\u30B5\u30E0\u30CD\u30A4\u30EB
|
DataResultViewerThumbnail.title=\u30b5\u30e0\u30cd\u30a4\u30eb
|
||||||
DataResultViewerThumbnail.goToPageTextField.msgDlg=\uFF11\u304B\u3089{0}\u306E\u9593\u306E\u6709\u52B9\u306A\u30DA\u30FC\u30B8\u6570\u3092\u5165\u529B\u3057\u3066\u4E0B\u3055\u3044
|
DataResultViewerThumbnail.goToPageTextField.msgDlg=\uff11\u304b\u3089{0}\u306e\u9593\u306e\u6709\u52b9\u306a\u30da\u30fc\u30b8\u6570\u3092\u5165\u529b\u3057\u3066\u4e0b\u3055\u3044
|
||||||
DataResultViewerThumbnail.goToPageTextField.err=\u7121\u52B9\u306A\u30DA\u30FC\u30B8\u6570
|
DataResultViewerThumbnail.goToPageTextField.err=\u7121\u52b9\u306a\u30da\u30fc\u30b8\u6570
|
||||||
DataResultViewerThumbnail.genThumbs=\u30B5\u30E0\u30CD\u30A4\u30EB\u3092\u4F5C\u6210\u4E2D\u2026
|
DataResultViewerThumbnail.genThumbs=\u30b5\u30e0\u30cd\u30a4\u30eb\u3092\u4f5c\u6210\u4e2d\u2026
|
||||||
DataResultViewerThumbnail.pageNumbers.curOfTotal={0}\uFF0F{1}\u76EE
|
DataResultViewerThumbnail.pageNumbers.curOfTotal={0}\uff0f{1}\u76ee
|
||||||
FXVideoPanel.mediaPane.infoLabel=\u524A\u9664\u3055\u308C\u305F\u30D3\u30C7\u30AA\u306E\u518D\u751F\u306F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u5916\u90E8\u30D7\u30EC\u30FC\u30E4\u30FC\u3092\u4F7F\u7528\u3057\u3066\u4E0B\u3055\u3044\u3002
|
FXVideoPanel.mediaPane.infoLabel=\u524a\u9664\u3055\u308c\u305f\u30d3\u30c7\u30aa\u306e\u518d\u751f\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u5916\u90e8\u30d7\u30ec\u30fc\u30e4\u30fc\u3092\u4f7f\u7528\u3057\u3066\u4e0b\u3055\u3044\u3002
|
||||||
FXVideoPanel.progress.bufferingFile={0}\u3092\u30D0\u30C3\u30D5\u30A1\u30EA\u30F3\u30B0
|
FXVideoPanel.progress.bufferingFile={0}\u3092\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0
|
||||||
FXVideoPanel.progressLabel.buffering=\u30D0\u30C3\u30D5\u30A1\u30EA\u30F3\u30B0\u4E2D\u2026
|
FXVideoPanel.progressLabel.buffering=\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0\u4e2d\u2026
|
||||||
FXVideoPanel.media.unsupportedFormat=\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u306A\u3044\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8\u3067\u3059\u3002
|
FXVideoPanel.media.unsupportedFormat=\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u306a\u3044\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3067\u3059\u3002
|
||||||
GeneralOptionsPanelController.moduleErr=\u30E2\u30B8\u30E5\u30FC\u30EB\u30A8\u30E9\u30FC
|
GeneralOptionsPanelController.moduleErr=\u30e2\u30b8\u30e5\u30fc\u30eb\u30a8\u30e9\u30fc
|
||||||
GeneralOptionsPanelController.moduleErr.msg=GeneralOptionsPanelController\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u3092\u78BA\u8A8D\u4E2D\u306B\u30E2\u30B8\u30E5\u30FC\u30EB\u304C\u30A8\u30E9\u30FC\u3092\u8D77\u3053\u3057\u307E\u3057\u305F\u3002\u3069\u306E\u30E2\u30B8\u30E5\u30FC\u30EB\u304B\u30ED\u30B0\u3092\u78BA\u8A8D\u3057\u3066\u4E0B\u3055\u3044\u3002\u4E00\u90E8\u306E\u30C7\u30FC\u30BF\u304C\u4E0D\u5B8C\u5168\u304B\u3082\u3057\u308C\u307E\u305B\u3093\u3002
|
GeneralOptionsPanelController.moduleErr.msg=GeneralOptionsPanelController\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3092\u78ba\u8a8d\u4e2d\u306b\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u30a8\u30e9\u30fc\u3092\u8d77\u3053\u3057\u307e\u3057\u305f\u3002\u3069\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u304b\u30ed\u30b0\u3092\u78ba\u8a8d\u3057\u3066\u4e0b\u3055\u3044\u3002\u4e00\u90e8\u306e\u30c7\u30fc\u30bf\u304c\u4e0d\u5b8c\u5168\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002
|
||||||
GstVideoPanel.cannotProcFile.err=\u30E1\u30C7\u30A4\u30A2\u30D7\u30EC\u30FC\u30E4\u30FC\u3067\u306F\u3053\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u51E6\u7406\u3067\u304D\u307E\u305B\u3093\u3002
|
GstVideoPanel.cannotProcFile.err=\u30e1\u30c7\u30a4\u30a2\u30d7\u30ec\u30fc\u30e4\u30fc\u3067\u306f\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u51e6\u7406\u3067\u304d\u307e\u305b\u3093\u3002
|
||||||
GstVideoPanel.initGst.gstException.msg=\u30AA\u30FC\u30C7\u30A3\u30AA\uFF0F\u30D3\u30C7\u30AA\u306E\u518D\u751F\u304A\u3088\u3073\u30D5\u30EC\u30FC\u30E0\u306E\u62BD\u51FA\u306B\u4F7F\u7528\u3059\u308BGStreamer\u306E\u521D\u671F\u5316\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002\u30D3\u30C7\u30AA\u304A\u3088\u3073\u30AA\u30FC\u30C7\u30A3\u30AA\u518D\u751F\u304C\u7121\u52B9\u5316\u3055\u308C\u307E\u3059\u3002
|
GstVideoPanel.initGst.gstException.msg=\u30aa\u30fc\u30c7\u30a3\u30aa\uff0f\u30d3\u30c7\u30aa\u306e\u518d\u751f\u304a\u3088\u3073\u30d5\u30ec\u30fc\u30e0\u306e\u62bd\u51fa\u306b\u4f7f\u7528\u3059\u308bGStreamer\u306e\u521d\u671f\u5316\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u30d3\u30c7\u30aa\u304a\u3088\u3073\u30aa\u30fc\u30c7\u30a3\u30aa\u518d\u751f\u304c\u7121\u52b9\u5316\u3055\u308c\u307e\u3059\u3002
|
||||||
GstVideoPanel.initGst.otherException.msg=\u30AA\u30FC\u30C7\u30A3\u30AA\uFF0F\u30D3\u30C7\u30AA\u306E\u518D\u751F\u304A\u3088\u3073\u30D5\u30EC\u30FC\u30E0\u306E\u62BD\u51FA\u306B\u4F7F\u7528\u3059\u308BGStreamer\u306E\u521D\u671F\u5316\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002\u30D3\u30C7\u30AA\u304A\u3088\u3073\u30AA\u30FC\u30C7\u30A3\u30AA\u518D\u751F\u304C\u7121\u52B9\u5316\u3055\u308C\u307E\u3059\u3002
|
GstVideoPanel.initGst.otherException.msg=\u30aa\u30fc\u30c7\u30a3\u30aa\uff0f\u30d3\u30c7\u30aa\u306e\u518d\u751f\u304a\u3088\u3073\u30d5\u30ec\u30fc\u30e0\u306e\u62bd\u51fa\u306b\u4f7f\u7528\u3059\u308bGStreamer\u306e\u521d\u671f\u5316\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u30d3\u30c7\u30aa\u304a\u3088\u3073\u30aa\u30fc\u30c7\u30a3\u30aa\u518d\u751f\u304c\u7121\u52b9\u5316\u3055\u308c\u307e\u3059\u3002
|
||||||
GstVideoPanel.setupVideo.infoLabel.text=\u524A\u9664\u3055\u308C\u305F\u30D3\u30C7\u30AA\u306E\u518D\u751F\u306F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u5916\u90E8\u30D7\u30EC\u30FC\u30E4\u30FC\u3092\u4F7F\u7528\u3057\u3066\u4E0B\u3055\u3044\u3002
|
GstVideoPanel.setupVideo.infoLabel.text=\u524a\u9664\u3055\u308c\u305f\u30d3\u30c7\u30aa\u306e\u518d\u751f\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u5916\u90e8\u30d7\u30ec\u30fc\u30e4\u30fc\u3092\u4f7f\u7528\u3057\u3066\u4e0b\u3055\u3044\u3002
|
||||||
GstVideoPanel.exception.problemFile.msg=\u30D5\u30A1\u30A4\u30EB({0})\u304B\u3089\u30D5\u30EC\u30FC\u30E0\u3092\u62BD\u51FA\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002
|
GstVideoPanel.exception.problemFile.msg=\u30d5\u30a1\u30a4\u30eb({0})\u304b\u3089\u30d5\u30ec\u30fc\u30e0\u3092\u62bd\u51fa\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
|
||||||
GstVideoPanel.exception.problemPlay.msg=\u30D3\u30C7\u30AA\u30D5\u30A1\u30A4\u30EB\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002\u9577\u3055\u3092\u78BA\u8A8D\u4E2D\u306B\u518D\u751F\u3092\u3057\u3088\u3046\u3068\u3057\u305F\u969B\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002
|
GstVideoPanel.exception.problemPlay.msg=\u30d3\u30c7\u30aa\u30d5\u30a1\u30a4\u30eb\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u9577\u3055\u3092\u78ba\u8a8d\u4e2d\u306b\u518d\u751f\u3092\u3057\u3088\u3046\u3068\u3057\u305f\u969b\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
|
||||||
LBL_Description=<div style\="font-size\: 12pt; font-family\: Verdana, 'Verdana CE', Arial, 'Arial CE', 'Lucida Grande CE', lucida, 'Helvetica CE', sans-serif;">\n <b>\u88FD\u54C1\u30D0\u30FC\u30B8\u30E7\u30F3\uFF1A</b> {0} ({9}) <br><b>Sleuth Kit\u30D0\u30FC\u30B8\u30E7\u30F3\uFF1A</b> {7} <br><b>Netbeans RCP\u30D3\u30EB\u30C9\:</b> {8} <br> <b>Java\:</b> {1}; {2}<br> <b>\u30B7\u30B9\u30C6\u30E0\uFF1A</b> {3}; {4}; {5}<br><b>\u30E6\u30FC\u30B6\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u540D</b> {6}</div>
|
LBL_Description=<div style\="font-size\: 12pt; font-family\: Verdana, 'Verdana CE', Arial, 'Arial CE', 'Lucida Grande CE', lucida, 'Helvetica CE', sans-serif;">\n <b>\u88fd\u54c1\u30d0\u30fc\u30b8\u30e7\u30f3\uff1a</b> {0} ({9}) <br><b>Sleuth Kit\u30d0\u30fc\u30b8\u30e7\u30f3\uff1a</b> {7} <br><b>Netbeans RCP\u30d3\u30eb\u30c9\:</b> {8} <br> <b>Java\:</b> {1}; {2}<br> <b>\u30b7\u30b9\u30c6\u30e0\uff1a</b> {3}; {4}; {5}<br><b>\u30e6\u30fc\u30b6\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u540d</b> {6}</div>
|
||||||
LBL_Copyright=<div style\="font-size\: 12pt; font-family\: Verdana, 'Verdana CE', Arial, 'Arial CE', 'Lucida Grande CE', lucida, 'Helvetica CE', sans-serif; ">Autopsy™\u306FSleuth Kit™\u3084\u305D\u306E\u4ED6\u30C4\u30FC\u30EB\u3092\u57FA\u306B\u3057\u305F\u30C7\u30B8\u30BF\u30EB\u30FB\u30D5\u30A9\u30EC\u30F3\u30B8\u30C3\u30AF\u30FB\u30D7\u30E9\u30C3\u30C8\u30D5\u30A9\u30FC\u30E0\u3067\u3059\u3002<br> <br>Copyright © 2003-2013. \u8A73\u7D30\u306F\u4E0B\u8A18\u3092\u3054\u89A7\u4E0B\u3055\u3044\u3002 <a style\="color\: \#1E2A60;" href\="http\://www.sleuthkit.org">http\://www.sleuthkit.org</a>. </div>
|
LBL_Copyright=<div style\="font-size\: 12pt; font-family\: Verdana, 'Verdana CE', Arial, 'Arial CE', 'Lucida Grande CE', lucida, 'Helvetica CE', sans-serif; ">Autopsy™\u306fSleuth Kit™\u3084\u305d\u306e\u4ed6\u30c4\u30fc\u30eb\u3092\u57fa\u306b\u3057\u305f\u30c7\u30b8\u30bf\u30eb\u30fb\u30d5\u30a9\u30ec\u30f3\u30b8\u30c3\u30af\u30fb\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067\u3059\u3002<br> <br>Copyright © 2003-2013. \u8a73\u7d30\u306f\u4e0b\u8a18\u3092\u3054\u89a7\u4e0b\u3055\u3044\u3002 <a style\="color\: \#1E2A60;" href\="http\://www.sleuthkit.org">http\://www.sleuthkit.org</a>. </div>
|
||||||
GstVideoPanel.exception.problemPause.msg=\u30D3\u30C7\u30AA\u30D5\u30A1\u30A4\u30EB\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002\u9577\u3055\u3092\u78BA\u8A8D\u4E2D\u306B\u4E00\u6642\u505C\u6B62\u3092\u3057\u3088\u3046\u3068\u3057\u305F\u969B\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002
|
GstVideoPanel.exception.problemPause.msg=\u30d3\u30c7\u30aa\u30d5\u30a1\u30a4\u30eb\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u9577\u3055\u3092\u78ba\u8a8d\u4e2d\u306b\u4e00\u6642\u505c\u6b62\u3092\u3057\u3088\u3046\u3068\u3057\u305f\u969b\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
|
||||||
GstVideoPanel.exception.problemPauseCaptFrame.msg=\u30D3\u30C7\u30AA\u30D5\u30A1\u30A4\u30EB\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002\u30D5\u30EC\u30FC\u30E0\u306E\u62BD\u51FA\u4E2D\u306B\u4E00\u6642\u505C\u6B62\u3092\u3057\u3088\u3046\u3068\u3057\u305F\u969B\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002
|
GstVideoPanel.exception.problemPauseCaptFrame.msg=\u30d3\u30c7\u30aa\u30d5\u30a1\u30a4\u30eb\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u30d5\u30ec\u30fc\u30e0\u306e\u62bd\u51fa\u4e2d\u306b\u4e00\u6642\u505c\u6b62\u3092\u3057\u3088\u3046\u3068\u3057\u305f\u969b\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
|
||||||
GstVideoPanel.exception.problemPlayCaptFrame.msg=\u30D3\u30C7\u30AA\u30D5\u30A1\u30A4\u30EB\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002\u30D5\u30EC\u30FC\u30E0\u306E\u62BD\u51FA\u4E2D\u306B\u518D\u751F\u3057\u3088\u3046\u3068\u3057\u305F\u969B\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002
|
GstVideoPanel.exception.problemPlayCaptFrame.msg=\u30d3\u30c7\u30aa\u30d5\u30a1\u30a4\u30eb\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u30d5\u30ec\u30fc\u30e0\u306e\u62bd\u51fa\u4e2d\u306b\u518d\u751f\u3057\u3088\u3046\u3068\u3057\u305f\u969b\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
|
||||||
GstVideoPanel.exception.problemStopCaptFrame.msg=\u30D3\u30C7\u30AA\u30D5\u30A1\u30A4\u30EB\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002\u30D5\u30EC\u30FC\u30E0\u306E\u62BD\u51FA\u4E2D\u306B\u505C\u6B62\u3057\u3088\u3046\u3068\u3057\u305F\u969B\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002
|
GstVideoPanel.exception.problemStopCaptFrame.msg=\u30d3\u30c7\u30aa\u30d5\u30a1\u30a4\u30eb\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u30d5\u30ec\u30fc\u30e0\u306e\u62bd\u51fa\u4e2d\u306b\u505c\u6b62\u3057\u3088\u3046\u3068\u3057\u305f\u969b\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
|
||||||
GstVideoPanel.progress.buffering=\u30D0\u30C3\u30D5\u30A1\u30EA\u30F3\u30B0\u4E2D\u2026
|
GstVideoPanel.progress.buffering=\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0\u4e2d\u2026
|
||||||
GstVideoPanel.progressLabel.bufferingErr=\u30D5\u30A1\u30A4\u30EB\u306E\u30D0\u30C3\u30D5\u30A1\u30EA\u30F3\u30B0\u30A8\u30E9\u30FC
|
GstVideoPanel.progressLabel.bufferingErr=\u30d5\u30a1\u30a4\u30eb\u306e\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0\u30a8\u30e9\u30fc
|
||||||
MediaViewImagePanel.imgFileTooLarge.msg=\u30A4\u30E1\u30FC\u30B8\u30D5\u30A1\u30A4\u30EB\u3092\u8AAD\u307F\u8FBC\u3081\u307E\u305B\u3093\u3067\u3057\u305F\uFF08\u5927\u304D\u3059\u304E\u3067\u3059\uFF09\uFF1A {0}
|
MediaViewImagePanel.imgFileTooLarge.msg=\u30a4\u30e1\u30fc\u30b8\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\u3067\u3057\u305f\uff08\u5927\u304d\u3059\u304e\u3067\u3059\uff09\uff1a {0}
|
||||||
ProductInformationPanel.verbLoggingEnabled.text=Verbose\u30ED\u30B0\u304C\u6709\u52B9\u3067\u3059
|
ProductInformationPanel.verbLoggingEnabled.text=Verbose\u30ed\u30b0\u304c\u6709\u52b9\u3067\u3059
|
||||||
ProductInformationPanel.propertyUnknown.text=\u4E0D\u660E
|
ProductInformationPanel.propertyUnknown.text=\u4e0d\u660e
|
||||||
ProductInformationPanel.getVMValue.text={0} {1}
|
ProductInformationPanel.getVMValue.text={0} {1}
|
||||||
TableFilterNode.displayName.text=\u540D\u524D
|
TableFilterNode.displayName.text=\u540d\u524d
|
||||||
DataContentViewerHex.ofLabel.text_1=of
|
DataContentViewerHex.ofLabel.text_1=of
|
||||||
DataContentViewerString.ofLabel.text_1=of
|
DataContentViewerString.ofLabel.text_1=of
|
||||||
DataContentViewerArtifact.ofLabel.text=of
|
DataContentViewerArtifact.ofLabel.text=of
|
||||||
DataContentViewerString.setDataView.errorNoText=\uFF08\u30AA\u30D5\u30BB\u30C3\u30C8{0}-{1}\u306B\u306F\u30C6\u30AD\u30B9\u30C8\u304C\u3042\u308A\u307E\u305B\u3093\uFF09
|
DataContentViewerString.setDataView.errorNoText=\uff08\u30aa\u30d5\u30bb\u30c3\u30c8{0}-{1}\u306b\u306f\u30c6\u30ad\u30b9\u30c8\u304c\u3042\u308a\u307e\u305b\u3093\uff09
|
||||||
DataResultViewerThumbnail.comboBox.smallThumbnails=\u30B5\u30E0\u30CD\u30A4\u30EB\uFF08\u5C0F\uFF09
|
DataResultViewerThumbnail.comboBox.smallThumbnails=\u30b5\u30e0\u30cd\u30a4\u30eb\uff08\u5c0f\uff09
|
||||||
DataResultViewerThumbnail.comboBox.mediumThumbnails=\u30B5\u30E0\u30CD\u30A4\u30EB\uFF08\u4E2D\uFF09
|
DataResultViewerThumbnail.comboBox.mediumThumbnails=\u30b5\u30e0\u30cd\u30a4\u30eb\uff08\u4e2d\uff09
|
||||||
DataResultViewerThumbnail.comboBox.largeThumbnails=\u30B5\u30E0\u30CD\u30A4\u30EB\uFF08\u5927\uFF09
|
DataResultViewerThumbnail.comboBox.largeThumbnails=\u30b5\u30e0\u30cd\u30a4\u30eb\uff08\u5927\uff09
|
||||||
DataResultViewerThumbnail.switchPage.done.errMsg=\u30B5\u30E0\u30CD\u30A4\u30EB\u4F5C\u6210\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\uFF1A {0}
|
DataResultViewerThumbnail.switchPage.done.errMsg=\u30b5\u30e0\u30cd\u30a4\u30eb\u4f5c\u6210\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\uff1a {0}
|
||||||
FXVideoPanel.pauseButton.infoLabel.playbackErr=\u30D3\u30C7\u30AA\u3092\u518D\u751F\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002
|
FXVideoPanel.pauseButton.infoLabel.playbackErr=\u30d3\u30c7\u30aa\u3092\u518d\u751f\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
|
||||||
GstVideoPanel.progress.infoLabel.updateErr=\u30D3\u30C7\u30AA\u30D7\u30ED\u30B0\u30EC\u30B9\u306E\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\uFF1A {0}
|
GstVideoPanel.progress.infoLabel.updateErr=\u30d3\u30c7\u30aa\u30d7\u30ed\u30b0\u30ec\u30b9\u306e\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\uff1a {0}
|
||||||
GstVideoPanel.ExtractMedia.progress.buffering={0}\u3092\u30D0\u30C3\u30D5\u30A1\u30EA\u30F3\u30B0\u4E2D
|
GstVideoPanel.ExtractMedia.progress.buffering={0}\u3092\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0\u4e2d
|
||||||
AboutWindowPanel.actVerboseLogging.text=Verbose\u30ED\u30B0\u3092\u30A2\u30AF\u30C6\u30A3\u30D9\u30FC\u30C8
|
AboutWindowPanel.actVerboseLogging.text=Verbose\u30ed\u30b0\u3092\u30a2\u30af\u30c6\u30a3\u30d9\u30fc\u30c8
|
||||||
AutopsyOptionsPanel.viewsHideKnownCB.text=\u30D3\u30E5\u30FC\u30A8\u30EA\u30A2
|
AutopsyOptionsPanel.viewsHideKnownCB.text=\u30d3\u30e5\u30fc\u30a8\u30ea\u30a2
|
||||||
AutopsyOptionsPanel.dataSourcesHideKnownCB.text=\u30C7\u30FC\u30BF\u30BD\u30FC\u30B9\u30A8\u30EA\u30A2\uFF08\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u968E\u5C64\uFF09
|
AutopsyOptionsPanel.dataSourcesHideKnownCB.text=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u30a8\u30ea\u30a2\uff08\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u968e\u5c64\uff09
|
||||||
AutopsyOptionsPanel.useBestViewerRB.toolTipText=\u4F8B\u3048\u3070\u3001JPEG\u304C\u9078\u629E\u3055\u308C\u305F\u5834\u5408\u306B\u306FHEX\u304B\u3089\u30E1\u30C7\u30A3\u30A2\u306B\u5909\u66F4\u3059\u308B\u3002
|
AutopsyOptionsPanel.useBestViewerRB.toolTipText=\u4f8b\u3048\u3070\u3001JPEG\u304c\u9078\u629e\u3055\u308c\u305f\u5834\u5408\u306b\u306fHEX\u304b\u3089\u30e1\u30c7\u30a3\u30a2\u306b\u5909\u66f4\u3059\u308b\u3002
|
||||||
AutopsyOptionsPanel.useBestViewerRB.text=\u6700\u3082\u5C02\u9580\u7684\u306A\u30D5\u30A1\u30A4\u30EB\u30D3\u30E5\u30FC\u30A2\u306B\u5909\u66F4
|
AutopsyOptionsPanel.useBestViewerRB.text=\u6700\u3082\u5c02\u9580\u7684\u306a\u30d5\u30a1\u30a4\u30eb\u30d3\u30e5\u30fc\u30a2\u306b\u5909\u66f4
|
||||||
AutopsyOptionsPanel.useGMTTimeRB.text=GMT\u3092\u4F7F\u7528
|
AutopsyOptionsPanel.useGMTTimeRB.text=GMT\u3092\u4f7f\u7528
|
||||||
AutopsyOptionsPanel.useLocalTimeRB.text=\u30ED\u30FC\u30AB\u30EB\u30BF\u30A4\u30E0\u30BE\u30FC\u30F3\u3092\u4F7F\u7528
|
AutopsyOptionsPanel.useLocalTimeRB.text=\u30ed\u30fc\u30ab\u30eb\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u4f7f\u7528
|
||||||
AutopsyOptionsPanel.keepCurrentViewerRB.toolTipText=\u4F8B\u3048\u3070\u3001JPEG\u304C\u9078\u629E\u3055\u308C\u305F\u5834\u5408\u306B\u305D\u306E\u307E\u307EHEX\u30D3\u30E5\u30FC\u3092\u4F7F\u7528\u3002
|
AutopsyOptionsPanel.keepCurrentViewerRB.toolTipText=\u4f8b\u3048\u3070\u3001JPEG\u304c\u9078\u629e\u3055\u308c\u305f\u5834\u5408\u306b\u305d\u306e\u307e\u307eHEX\u30d3\u30e5\u30fc\u3092\u4f7f\u7528\u3002
|
||||||
AutopsyOptionsPanel.keepCurrentViewerRB.text=\u305D\u306E\u307E\u307E\u540C\u3058\u30D5\u30A1\u30A4\u30EB\u30D3\u30E5\u30FC\u30A2\u3092\u4F7F\u7528
|
AutopsyOptionsPanel.keepCurrentViewerRB.text=\u305d\u306e\u307e\u307e\u540c\u3058\u30d5\u30a1\u30a4\u30eb\u30d3\u30e5\u30fc\u30a2\u3092\u4f7f\u7528
|
||||||
AutopsyOptionsPanel.restartRequiredLabel.text=\u3053\u306E\u30B3\u30F3\u30D4\u30E5\u30FC\u30BF\u30FC\u3067\u306F\u6700\u5927{0}\u306E\u30D5\u30A1\u30A4\u30EB\u30A4\u30F3\u30B8\u30A7\u30B9\u30C8\u30B9\u30EC\u30C3\u30C9\u3092\u4F7F\u7528\u3059\u3079\u304D\u3067\u3059\u3002\u6709\u52B9\u306B\u3059\u308B\u306B\u306F\u518D\u8D77\u52D5\u304C\u5FC5\u8981\u3067\u3059\u3002
|
AutopsyOptionsPanel.restartRequiredLabel.text=\u3053\u306e\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u30fc\u3067\u306f\u6700\u5927{0}\u306e\u30d5\u30a1\u30a4\u30eb\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30b9\u30ec\u30c3\u30c9\u3092\u4f7f\u7528\u3059\u3079\u304d\u3067\u3059\u3002\u6709\u52b9\u306b\u3059\u308b\u306b\u306f\u518d\u8d77\u52d5\u304c\u5fc5\u8981\u3067\u3059\u3002
|
||||||
AutopsyOptionsPanel.jLabelSelectFile.text=\u30D5\u30A1\u30A4\u30EB\u3092\u9078\u629E\u3059\u308B\u5834\u5408\uFF1A
|
AutopsyOptionsPanel.jLabelSelectFile.text=\u30d5\u30a1\u30a4\u30eb\u3092\u9078\u629e\u3059\u308b\u5834\u5408\uff1a
|
||||||
AutopsyOptionsPanel.jLabelHideKnownFiles.text=\u65E2\u77E5\u30D5\u30A1\u30A4\u30EB\uFF08NIST NSRL\u5185\u306E\uFF09\u3092\u6B21\u306B\u96A0\u3059\uFF1A
|
AutopsyOptionsPanel.jLabelHideKnownFiles.text=\u65e2\u77e5\u30d5\u30a1\u30a4\u30eb\uff08NIST NSRL\u5185\u306e\uff09\u3092\u6b21\u306b\u96a0\u3059\uff1a
|
||||||
AutopsyOptionsPanel.jLabelTimeDisplay.text=\u6642\u9593\u3092\u8868\u793A\u3059\u308B\u5834\u5408\uFF1A
|
AutopsyOptionsPanel.jLabelTimeDisplay.text=\u6642\u9593\u3092\u8868\u793a\u3059\u308b\u5834\u5408\uff1a
|
||||||
AutopsyOptionsPanel.jLabelNumThreads.text=\u30D5\u30A1\u30A4\u30EB\u30A4\u30F3\u30B8\u30A7\u30B9\u30C8\u306B\u4F7F\u7528\u3059\u308B\u30B9\u30EC\u30C3\u30C9\u6570\uFF1A
|
AutopsyOptionsPanel.jLabelNumThreads.text=\u30d5\u30a1\u30a4\u30eb\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u306b\u4f7f\u7528\u3059\u308b\u30b9\u30ec\u30c3\u30c9\u6570\uff1a
|
||||||
FXVideoPanel.progress.bufferingCancelled=\u30E1\u30C7\u30A3\u30A2\u306E\u30D0\u30C3\u30D5\u30A1\u30EA\u30F3\u30B0\u304C\u30AD\u30E3\u30F3\u30BB\u30EB\u3055\u308C\u307E\u3057\u305F
|
FXVideoPanel.progress.bufferingCancelled=\u30e1\u30c7\u30a3\u30a2\u306e\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0\u304c\u30ad\u30e3\u30f3\u30bb\u30eb\u3055\u308c\u307e\u3057\u305f
|
||||||
FXVideoPanel.progress.bufferingInterrupted=\u30E1\u30C7\u30A3\u30A2\u306E\u30D0\u30C3\u30D5\u30A1\u30EA\u30F3\u30B0\u304C\u4E2D\u65AD\u3055\u308C\u307E\u3057\u305F
|
FXVideoPanel.progress.bufferingInterrupted=\u30e1\u30c7\u30a3\u30a2\u306e\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0\u304c\u4e2d\u65ad\u3055\u308c\u307e\u3057\u305f
|
||||||
FXVideoPanel.progress.errorWritingVideoToDisk=\u30D3\u30C7\u30AA\u3092\u30C7\u30A3\u30B9\u30AF\u3078\u66F8\u304D\u8FBC\u307F\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F
|
FXVideoPanel.progress.errorWritingVideoToDisk=\u30d3\u30c7\u30aa\u3092\u30c7\u30a3\u30b9\u30af\u3078\u66f8\u304d\u8fbc\u307f\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f
|
||||||
OptionsCategory_Name_Multi_User_Settings=\u8907\u6570\u306E\u30E6\u30FC\u30B6\u30FC
|
OptionsCategory_Name_Multi_User_Settings=\u8907\u6570\u306e\u30e6\u30fc\u30b6\u30fc
|
||||||
OptionsCategory_Keywords_Multi_User_Options=\u8907\u6570\u306E\u30E6\u30FC\u30B6\u30FC\u30AA\u30D7\u30B7\u30E7\u30F3
|
OptionsCategory_Keywords_Multi_User_Options=\u8907\u6570\u306e\u30e6\u30fc\u30b6\u30fc\u30aa\u30d7\u30b7\u30e7\u30f3
|
||||||
MultiUserSettingsPanel.lbSolrSettings.text=Solr\u8A2D\u5B9A
|
MultiUserSettingsPanel.lbSolrSettings.text=Solr\u8a2d\u5b9a
|
||||||
MultiUserSettingsPanel.cbEnableMultiUser.text=\u8907\u6570\u306E\u30E6\u30FC\u30B6\u30FC\u30B1\u30FC\u30B9\u3092\u6709\u52B9\u5316
|
MultiUserSettingsPanel.cbEnableMultiUser.text=\u8907\u6570\u306e\u30e6\u30fc\u30b6\u30fc\u30b1\u30fc\u30b9\u3092\u6709\u52b9\u5316
|
||||||
MultiUserSettingsPanel.lbDatabaseSettings.text=\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u8A2D\u5B9A
|
MultiUserSettingsPanel.lbDatabaseSettings.text=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u8a2d\u5b9a
|
||||||
MultiUserSettingsPanel.validationErrMsg.incomplete=\u5168\u3066\u306E\u30D0\u30EA\u30E5\u30FC\u3092\u5165\u529B
|
MultiUserSettingsPanel.validationErrMsg.incomplete=\u5168\u3066\u306e\u30d0\u30ea\u30e5\u30fc\u3092\u5165\u529b
|
||||||
MultiUserSettingsPanel.nonWindowsOs.msg=Windows\u3067\u3057\u304B\u8907\u6570\u306E\u30E6\u30FC\u30B6\u30FC\u7248\u306F\u4F7F\u7528\u3067\u304D\u307E\u305B\u3093
|
MultiUserSettingsPanel.nonWindowsOs.msg=Windows\u3067\u3057\u304b\u8907\u6570\u306e\u30e6\u30fc\u30b6\u30fc\u7248\u306f\u4f7f\u7528\u3067\u304d\u307e\u305b\u3093
|
||||||
MultiUserSettingsPanel.validationErrMsg.invalidDatabasePort=\u7121\u52B9\u306A\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u30DD\u30FC\u30C8\u756A\u53F7
|
MultiUserSettingsPanel.validationErrMsg.invalidDatabasePort=\u7121\u52b9\u306a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30dd\u30fc\u30c8\u756a\u53f7
|
||||||
MultiUserSettingsPanel.validationErrMsg.invalidMessageServicePort=\u7121\u52B9\u306A\u30E1\u30C3\u30BB\u30FC\u30B8\u30B5\u30FC\u30D3\u30B9\u30DD\u30FC\u30C8\u756A\u53F7
|
MultiUserSettingsPanel.validationErrMsg.invalidMessageServicePort=\u7121\u52b9\u306a\u30e1\u30c3\u30bb\u30fc\u30b8\u30b5\u30fc\u30d3\u30b9\u30dd\u30fc\u30c8\u756a\u53f7
|
||||||
MultiUserSettingsPanel.validationErrMsg.invalidIndexingServerPort=\u7121\u52B9\u306ASolr\u30B5\u30FC\u30D0\u30FC\u30DD\u30FC\u30C8\u756A\u53F7
|
MultiUserSettingsPanel.validationErrMsg.invalidIndexingServerPort=\u7121\u52b9\u306aSolr\u30b5\u30fc\u30d0\u30fc\u30dd\u30fc\u30c8\u756a\u53f7
|
||||||
MultiUserSettingsPanel.validationErrMsg.invalidMessgeServiceURI=\u7121\u52B9\u306A\u30E1\u30C3\u30BB\u30FC\u30B8\u30B5\u30FC\u30D3\u30B9\u30DB\u30B9\u30C8\u3084\u30DD\u30FC\u30C8\u756A\u53F7
|
MultiUserSettingsPanel.validationErrMsg.invalidMessgeServiceURI=\u7121\u52b9\u306a\u30e1\u30c3\u30bb\u30fc\u30b8\u30b5\u30fc\u30d3\u30b9\u30db\u30b9\u30c8\u3084\u30dd\u30fc\u30c8\u756a\u53f7
|
||||||
AutopsyOptionsPanel.jLabelProcessTimeOutUnits.text=\u6642\u9593
|
AutopsyOptionsPanel.jLabelProcessTimeOutUnits.text=\u6642\u9593
|
||||||
AutopsyOptionsPanel.jLabelSetProcessTimeOut.text=\u4E00\u5B9A\u306E\u6642\u9593\u304C\u904E\u304E\u305F\u5F8C\u306B\u81EA\u52D5\u7684\u306B\u30E2\u30B8\u30E5\u30FC\u30EB\u304C\u505C\u6B62\u3067\u304D\u308B\u3088\u3046\u306B\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8\u3092\u6709\u52B9\u5316\uFF1A
|
AutopsyOptionsPanel.jLabelSetProcessTimeOut.text=\u4e00\u5b9a\u306e\u6642\u9593\u304c\u904e\u304e\u305f\u5f8c\u306b\u81ea\u52d5\u7684\u306b\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u505c\u6b62\u3067\u304d\u308b\u3088\u3046\u306b\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u3092\u6709\u52b9\u5316\uff1a
|
||||||
DataContentViewerHex.goToOffsetLabel.text=\u30AA\u30D5\u30BB\u30C3\u30C8\u306B\u30B8\u30E3\u30F3\u30D7
|
DataContentViewerHex.goToOffsetLabel.text=\u30aa\u30d5\u30bb\u30c3\u30c8\u306b\u30b8\u30e3\u30f3\u30d7
|
||||||
DataContentViewerHex.goToOffsetTextField.msgDlg=\u7121\u52B9\u306A\u30AA\u30D5\u30BB\u30C3\u30C8\uFF1A{0}
|
DataContentViewerHex.goToOffsetTextField.msgDlg=\u7121\u52b9\u306a\u30aa\u30d5\u30bb\u30c3\u30c8\uff1a{0}
|
||||||
DataContentViewerHex.setDataView.invalidOffset.negativeOffsetValue=\u8A08\u7B97\u3055\u308C\u305F\u30AA\u30D5\u30BB\u30C3\u30C8\u306B\u30B8\u30E3\u30F3\u30D7\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F
|
DataContentViewerHex.setDataView.invalidOffset.negativeOffsetValue=\u8a08\u7b97\u3055\u308c\u305f\u30aa\u30d5\u30bb\u30c3\u30c8\u306b\u30b8\u30e3\u30f3\u30d7\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
|
||||||
MultiUserSettingsPanel.bnTestDatabase.text=\u30C6\u30B9\u30C8
|
MultiUserSettingsPanel.bnTestDatabase.text=\u30c6\u30b9\u30c8
|
||||||
MultiUserSettingsPanel.tbDbHostname.toolTipText=\u30DB\u30B9\u30C8\u540D\u307E\u305F\u306FIP\u30A2\u30C9\u30EC\u30B9
|
MultiUserSettingsPanel.tbDbHostname.toolTipText=\u30db\u30b9\u30c8\u540d\u307e\u305f\u306fIP\u30a2\u30c9\u30ec\u30b9
|
||||||
MultiUserSettingsPanel.tbDbPort.toolTipText=\u30DD\u30FC\u30C8\u756A\u53F7
|
MultiUserSettingsPanel.tbDbPort.toolTipText=\u30dd\u30fc\u30c8\u756a\u53f7
|
||||||
MultiUserSettingsPanel.tbDbUsername.toolTipText=\u30E6\u30FC\u30B6\u30FC\u540D
|
MultiUserSettingsPanel.tbDbUsername.toolTipText=\u30e6\u30fc\u30b6\u30fc\u540d
|
||||||
MultiUserSettingsPanel.tbDbPassword.toolTipText=\u30D1\u30B9\u30EF\u30FC\u30C9
|
MultiUserSettingsPanel.tbDbPassword.toolTipText=\u30d1\u30b9\u30ef\u30fc\u30c9
|
||||||
MultiUserSettingsPanel.bnTestSolr.text=\u30C6\u30B9\u30C8
|
MultiUserSettingsPanel.bnTestSolr.text=\u30c6\u30b9\u30c8
|
||||||
MultiUserSettingsPanel.tbSolrHostname.toolTipText=\u30DB\u30B9\u30C8\u540D\u307E\u305F\u306FIP\u30A2\u30C9\u30EC\u30B9
|
MultiUserSettingsPanel.tbSolrHostname.toolTipText=\u30db\u30b9\u30c8\u540d\u307e\u305f\u306fIP\u30a2\u30c9\u30ec\u30b9
|
||||||
MultiUserSettingsPanel.tbSolrPort.toolTipText=\u30DD\u30FC\u30C8\u756A\u53F7
|
MultiUserSettingsPanel.tbSolrPort.toolTipText=\u30dd\u30fc\u30c8\u756a\u53f7
|
||||||
MultiUserSettingsPanel.bnTestMessageService.text=\u30C6\u30B9\u30C8
|
MultiUserSettingsPanel.bnTestMessageService.text=\u30c6\u30b9\u30c8
|
||||||
MultiUserSettingsPanel.lbMessageServiceSettings.text=ActiveMQ\u30E1\u30C3\u30BB\u30FC\u30B8\u30B5\u30FC\u30D3\u30B9\u8A2D\u5B9A
|
MultiUserSettingsPanel.lbMessageServiceSettings.text=ActiveMQ\u30e1\u30c3\u30bb\u30fc\u30b8\u30b5\u30fc\u30d3\u30b9\u8a2d\u5b9a
|
||||||
MultiUserSettingsPanel.tbMsgPort.toolTipText=\u30DD\u30FC\u30C8\u756A\u53F7
|
MultiUserSettingsPanel.tbMsgPort.toolTipText=\u30dd\u30fc\u30c8\u756a\u53f7
|
||||||
MultiUserSettingsPanel.tbMsgUsername.toolTipText=\u30E6\u30FC\u30B6\u30FC\u540D\uFF08\u30AA\u30D7\u30B7\u30E7\u30CA\u30EB\uFF09
|
MultiUserSettingsPanel.tbMsgUsername.toolTipText=\u30e6\u30fc\u30b6\u30fc\u540d\uff08\u30aa\u30d7\u30b7\u30e7\u30ca\u30eb\uff09
|
||||||
MultiUserSettingsPanel.tbMsgPassword.toolTipText=\u30D1\u30B9\u30EF\u30FC\u30C9\uFF08\u30AA\u30D7\u30B7\u30E7\u30CA\u30EB\uFF09
|
MultiUserSettingsPanel.tbMsgPassword.toolTipText=\u30d1\u30b9\u30ef\u30fc\u30c9\uff08\u30aa\u30d7\u30b7\u30e7\u30ca\u30eb\uff09
|
||||||
MultiUserSettingsPanel.tbMsgHostname.toolTipText=\u30DB\u30B9\u30C8\u540D\u307E\u305F\u306FIP\u30A2\u30C9\u30EC\u30B9
|
MultiUserSettingsPanel.tbMsgHostname.toolTipText=\u30db\u30b9\u30c8\u540d\u307e\u305f\u306fIP\u30a2\u30c9\u30ec\u30b9
|
||||||
MultiUserSettingsPanel.KeywordSearchNull=\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u30B5\u30FC\u30D3\u30B9\u3092\u898B\u3064\u3051\u308C\u3089\u308C\u307E\u305B\u3093
|
MultiUserSettingsPanel.KeywordSearchNull=\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u30b5\u30fc\u30d3\u30b9\u3092\u898b\u3064\u3051\u308c\u3089\u308c\u307e\u305b\u3093
|
||||||
MultiUserSettingsPanel.InvalidPortNumber=\u7121\u52B9\u306A\u30DD\u30FC\u30C8\u756A\u53F7
|
MultiUserSettingsPanel.InvalidPortNumber=\u7121\u52b9\u306a\u30dd\u30fc\u30c8\u756a\u53f7
|
||||||
CTL_OfflineHelpAction=\u30AA\u30D5\u30E9\u30A4\u30F3Autopsy\u30C9\u30AD\u30E5\u30E1\u30F3\u30C6\u30FC\u30B7\u30E7\u30F3
|
CTL_OfflineHelpAction=\u30aa\u30d5\u30e9\u30a4\u30f3Autopsy\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3
|
||||||
CTL_OnlineHelpAction=\u30AA\u30F3\u30E9\u30A4\u30F3Autopsy\u30C9\u30AD\u30E5\u30E1\u30F3\u30C6\u30FC\u30B7\u30E7\u30F3
|
CTL_OnlineHelpAction=\u30aa\u30f3\u30e9\u30a4\u30f3Autopsy\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3
|
||||||
DataResultViewerThumbnail.thumbnailSizeComboBox.large=\u30B5\u30E0\u30CD\u30A4\u30EB\uFF08\u5927\uFF09
|
DataResultViewerThumbnail.thumbnailSizeComboBox.large=\u30b5\u30e0\u30cd\u30a4\u30eb\uff08\u5927\uff09
|
||||||
DataResultViewerThumbnail.thumbnailSizeComboBox.medium=\u30B5\u30E0\u30CD\u30A4\u30EB\uFF08\u4E2D\uFF09
|
DataResultViewerThumbnail.thumbnailSizeComboBox.medium=\u30b5\u30e0\u30cd\u30a4\u30eb\uff08\u4e2d\uff09
|
||||||
DataResultViewerThumbnail.thumbnailSizeComboBox.small=\u30B5\u30E0\u30CD\u30A4\u30EB\uFF08\u5C0F\uFF09
|
DataResultViewerThumbnail.thumbnailSizeComboBox.small=\u30b5\u30e0\u30cd\u30a4\u30eb\uff08\u5c0f\uff09
|
||||||
MediaViewImagePanel.errorLabel.OOMText=\u30D5\u30A1\u30A4\u30EB\u3092\u30E1\u30C7\u30A3\u30A2\u30D3\u30E5\u30FC\u306B\u8AAD\u307F\u8FBC\u3081\u307E\u305B\u3093\u3067\u3057\u305F\uFF1A\u30E1\u30E2\u30EA\u4E0D\u8DB3\u3002
|
MediaViewImagePanel.errorLabel.OOMText=\u30d5\u30a1\u30a4\u30eb\u3092\u30e1\u30c7\u30a3\u30a2\u30d3\u30e5\u30fc\u306b\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\u3067\u3057\u305f\uff1a\u30e1\u30e2\u30ea\u4e0d\u8db3\u3002
|
||||||
MediaViewImagePanel.errorLabel.text=\u30D5\u30A1\u30A4\u30EB\u3092\u30E1\u30C7\u30A3\u30A2\u30D3\u30E5\u30FC\u306B\u8AAD\u307F\u8FBC\u3081\u307E\u305B\u3093\u3067\u3057\u305F\u3002
|
MediaViewImagePanel.errorLabel.text=\u30d5\u30a1\u30a4\u30eb\u3092\u30e1\u30c7\u30a3\u30a2\u30d3\u30e5\u30fc\u306b\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\u3067\u3057\u305f\u3002
|
||||||
MediaViewImagePanel.externalViewerButton.text=\u5916\u90E8\u30D3\u30E5\u30FC\u30A2\u30FC\u3067\u958B\u304F
|
MediaViewImagePanel.externalViewerButton.text=\u5916\u90e8\u30d3\u30e5\u30fc\u30a2\u30fc\u3067\u958b\u304f
|
||||||
|
@ -42,7 +42,6 @@ import org.openide.util.NbBundle;
|
|||||||
import org.openide.util.Utilities;
|
import org.openide.util.Utilities;
|
||||||
import org.openide.util.lookup.Lookups;
|
import org.openide.util.lookup.Lookups;
|
||||||
import org.sleuthkit.autopsy.casemodule.Case;
|
import org.sleuthkit.autopsy.casemodule.Case;
|
||||||
import org.sleuthkit.autopsy.corecomponents.DataContentTopComponent;
|
|
||||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||||
import org.sleuthkit.datamodel.Report;
|
import org.sleuthkit.datamodel.Report;
|
||||||
import org.sleuthkit.datamodel.TskCoreException;
|
import org.sleuthkit.datamodel.TskCoreException;
|
||||||
@ -111,7 +110,7 @@ public final class Reports implements AutopsyVisitableItem {
|
|||||||
@Override
|
@Override
|
||||||
public void propertyChange(PropertyChangeEvent evt) {
|
public void propertyChange(PropertyChangeEvent evt) {
|
||||||
String eventType = evt.getPropertyName();
|
String eventType = evt.getPropertyName();
|
||||||
if (eventType.equals(Case.Events.REPORT_ADDED.toString())) {
|
if (eventType.equals(Case.Events.REPORT_ADDED.toString()) || eventType.equals(Case.Events.REPORT_DELETED.toString())) {
|
||||||
/**
|
/**
|
||||||
* Checking for a current case is a stop gap measure
|
* Checking for a current case is a stop gap measure
|
||||||
* until a different way of handling the closing of
|
* until a different way of handling the closing of
|
||||||
@ -272,7 +271,6 @@ public final class Reports implements AutopsyVisitableItem {
|
|||||||
JOptionPane.YES_NO_OPTION) == 0) {
|
JOptionPane.YES_NO_OPTION) == 0) {
|
||||||
try {
|
try {
|
||||||
Case.getCurrentCase().deleteReports(selectedReportsCollection, checkbox.isSelected());
|
Case.getCurrentCase().deleteReports(selectedReportsCollection, checkbox.isSelected());
|
||||||
DataContentTopComponent.findInstance().repaint();
|
|
||||||
} catch (TskCoreException | IllegalStateException ex) {
|
} catch (TskCoreException | IllegalStateException ex) {
|
||||||
Logger.getLogger(DeleteReportAction.class.getName()).log(Level.INFO, "Error deleting the reports. ", ex); // NON-NLS - Provide solution to the user?
|
Logger.getLogger(DeleteReportAction.class.getName()).log(Level.INFO, "Error deleting the reports. ", ex); // NON-NLS - Provide solution to the user?
|
||||||
}
|
}
|
||||||
|
@ -22,8 +22,8 @@
|
|||||||
<DimensionLayout dim="1">
|
<DimensionLayout dim="1">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" attributes="0">
|
<Group type="102" attributes="0">
|
||||||
<Component id="jScrollPane1" min="-2" pref="482" max="-2" attributes="0"/>
|
<Component id="jScrollPane1" pref="500" max="32767" attributes="0"/>
|
||||||
<EmptySpace pref="18" max="32767" attributes="0"/>
|
<EmptySpace min="0" pref="0" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
@ -57,9 +57,9 @@
|
|||||||
<DimensionLayout dim="1">
|
<DimensionLayout dim="1">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" attributes="0">
|
<Group type="102" attributes="0">
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="jSplitPane1" min="-2" pref="466" max="-2" attributes="0"/>
|
<Component id="jSplitPane1" max="32767" attributes="0"/>
|
||||||
<EmptySpace min="-2" pref="31" max="-2" attributes="0"/>
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
@ -82,11 +82,12 @@
|
|||||||
<Layout>
|
<Layout>
|
||||||
<DimensionLayout dim="0">
|
<DimensionLayout dim="0">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" attributes="0">
|
<Group type="102" alignment="1" attributes="0">
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="1" attributes="0">
|
||||||
<Component id="jScrollPane2" pref="0" max="32767" attributes="0"/>
|
<Component id="mimeErrLabel" max="32767" attributes="0"/>
|
||||||
<Group type="102" attributes="0">
|
<Component id="jScrollPane2" alignment="0" pref="0" max="32767" attributes="0"/>
|
||||||
|
<Group type="102" alignment="0" attributes="0">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Component id="jLabel1" min="-2" max="-2" attributes="0"/>
|
<Component id="jLabel1" min="-2" max="-2" attributes="0"/>
|
||||||
<Group type="102" alignment="0" attributes="0">
|
<Group type="102" alignment="0" attributes="0">
|
||||||
@ -97,9 +98,8 @@
|
|||||||
<Component id="removeTypeButton" min="-2" max="-2" attributes="0"/>
|
<Component id="removeTypeButton" min="-2" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
|
<EmptySpace min="0" pref="7" max="32767" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
<Component id="mimeErrLabel" alignment="0" max="32767" attributes="0"/>
|
|
||||||
</Group>
|
</Group>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
@ -108,21 +108,20 @@
|
|||||||
<DimensionLayout dim="1">
|
<DimensionLayout dim="1">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" alignment="0" attributes="0">
|
<Group type="102" alignment="0" attributes="0">
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="jLabel1" min="-2" max="-2" attributes="0"/>
|
<Component id="jLabel1" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
<Component id="jScrollPane2" min="-2" pref="374" max="-2" attributes="0"/>
|
<Component id="jScrollPane2" pref="396" max="32767" 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">
|
||||||
<Component id="removeTypeButton" alignment="1" min="-2" pref="25" max="-2" attributes="0"/>
|
<Component id="removeTypeButton" alignment="1" min="-2" pref="25" max="-2" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="3" attributes="0">
|
<Group type="103" alignment="0" groupAlignment="3" attributes="0">
|
||||||
<Component id="userTypeTextField" alignment="3" min="-2" max="-2" attributes="0"/>
|
<Component id="userTypeTextField" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="addTypeButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
<Component id="addTypeButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
<EmptySpace max="32767" attributes="0"/>
|
<EmptySpace min="-2" pref="4" max="-2" attributes="0"/>
|
||||||
<Component id="mimeErrLabel" min="-2" max="-2" attributes="0"/>
|
<Component id="mimeErrLabel" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
@ -207,22 +206,27 @@
|
|||||||
<DimensionLayout dim="0">
|
<DimensionLayout dim="0">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" attributes="0">
|
<Group type="102" attributes="0">
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace min="-2" 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" attributes="0">
|
||||||
<Component id="extHeaderLabel" min="-2" pref="324" max="-2" attributes="0"/>
|
<Component id="extHeaderLabel" min="-2" pref="324" max="-2" attributes="0"/>
|
||||||
<EmptySpace pref="37" max="32767" attributes="0"/>
|
<EmptySpace max="32767" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
<Component id="extErrorLabel" alignment="0" max="32767" attributes="0"/>
|
|
||||||
<Component id="jScrollPane3" alignment="0" pref="0" max="32767" attributes="0"/>
|
<Component id="jScrollPane3" alignment="0" pref="0" max="32767" attributes="0"/>
|
||||||
<Group type="102" alignment="1" attributes="0">
|
<Group type="102" alignment="1" attributes="0">
|
||||||
<Component id="userExtTextField" max="32767" attributes="0"/>
|
<Group type="103" groupAlignment="1" attributes="0">
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<Component id="extErrorLabel" max="32767" attributes="0"/>
|
||||||
|
<Group type="102" attributes="0">
|
||||||
|
<Component id="userExtTextField" pref="152" max="32767" attributes="0"/>
|
||||||
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="addExtButton" min="-2" max="-2" attributes="0"/>
|
<Component id="addExtButton" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace min="-2" pref="4" max="-2" attributes="0"/>
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="removeExtButton" min="-2" max="-2" attributes="0"/>
|
<Component id="removeExtButton" min="-2" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
|
<EmptySpace min="0" pref="0" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
@ -231,17 +235,16 @@
|
|||||||
<Group type="102" alignment="1" attributes="0">
|
<Group type="102" alignment="1" attributes="0">
|
||||||
<EmptySpace min="-2" max="-2" attributes="0"/>
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="extHeaderLabel" min="-2" max="-2" attributes="0"/>
|
<Component id="extHeaderLabel" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="jScrollPane3" pref="367" max="32767" attributes="0"/>
|
<Component id="jScrollPane3" pref="396" max="32767" attributes="0"/>
|
||||||
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
<EmptySpace min="-2" pref="5" max="-2" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="3" attributes="0">
|
<Group type="103" groupAlignment="3" attributes="0">
|
||||||
<Component id="userExtTextField" alignment="3" min="-2" max="-2" attributes="0"/>
|
|
||||||
<Component id="addExtButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
|
||||||
<Component id="removeExtButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
<Component id="removeExtButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="addExtButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="userExtTextField" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
<EmptySpace min="-2" pref="5" max="-2" attributes="0"/>
|
<EmptySpace min="-2" pref="5" max="-2" attributes="0"/>
|
||||||
<Component id="extErrorLabel" min="-2" max="-2" attributes="0"/>
|
<Component id="extErrorLabel" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
@ -252,6 +255,9 @@
|
|||||||
<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/modules/fileextmismatch/Bundle.properties" key="FileExtMismatchSettingsPanel.userExtTextField.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
<ResourceString bundle="org/sleuthkit/autopsy/modules/fileextmismatch/Bundle.properties" key="FileExtMismatchSettingsPanel.userExtTextField.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
</Property>
|
</Property>
|
||||||
|
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||||
|
<Dimension value="[20, 20]"/>
|
||||||
|
</Property>
|
||||||
</Properties>
|
</Properties>
|
||||||
<Events>
|
<Events>
|
||||||
<EventHandler event="focusGained" listener="java.awt.event.FocusListener" parameters="java.awt.event.FocusEvent" handler="userExtTextFieldFocusGained"/>
|
<EventHandler event="focusGained" listener="java.awt.event.FocusListener" parameters="java.awt.event.FocusEvent" handler="userExtTextFieldFocusGained"/>
|
||||||
|
@ -220,11 +220,12 @@ final class FileExtMismatchSettingsPanel extends IngestModuleGlobalSettingsPanel
|
|||||||
mimePanel.setLayout(mimePanelLayout);
|
mimePanel.setLayout(mimePanelLayout);
|
||||||
mimePanelLayout.setHorizontalGroup(
|
mimePanelLayout.setHorizontalGroup(
|
||||||
mimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
mimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(mimePanelLayout.createSequentialGroup()
|
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, mimePanelLayout.createSequentialGroup()
|
||||||
.addContainerGap()
|
.addContainerGap()
|
||||||
.addGroup(mimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGroup(mimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
|
||||||
.addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
|
.addComponent(mimeErrLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||||
.addGroup(mimePanelLayout.createSequentialGroup()
|
.addComponent(jScrollPane2, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
|
||||||
|
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, mimePanelLayout.createSequentialGroup()
|
||||||
.addGroup(mimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGroup(mimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addComponent(jLabel1)
|
.addComponent(jLabel1)
|
||||||
.addGroup(mimePanelLayout.createSequentialGroup()
|
.addGroup(mimePanelLayout.createSequentialGroup()
|
||||||
@ -233,8 +234,7 @@ final class FileExtMismatchSettingsPanel extends IngestModuleGlobalSettingsPanel
|
|||||||
.addComponent(addTypeButton)
|
.addComponent(addTypeButton)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addComponent(removeTypeButton)))
|
.addComponent(removeTypeButton)))
|
||||||
.addGap(0, 0, Short.MAX_VALUE))
|
.addGap(0, 7, Short.MAX_VALUE)))
|
||||||
.addComponent(mimeErrLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
|
||||||
.addContainerGap())
|
.addContainerGap())
|
||||||
);
|
);
|
||||||
mimePanelLayout.setVerticalGroup(
|
mimePanelLayout.setVerticalGroup(
|
||||||
@ -243,21 +243,21 @@ final class FileExtMismatchSettingsPanel extends IngestModuleGlobalSettingsPanel
|
|||||||
.addContainerGap()
|
.addContainerGap()
|
||||||
.addComponent(jLabel1)
|
.addComponent(jLabel1)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 374, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 396, Short.MAX_VALUE)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addGroup(mimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGroup(mimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addComponent(removeTypeButton, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addComponent(removeTypeButton, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
.addGroup(mimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
.addGroup(mimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||||
.addComponent(userTypeTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addComponent(userTypeTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
.addComponent(addTypeButton)))
|
.addComponent(addTypeButton)))
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
.addGap(4, 4, 4)
|
||||||
.addComponent(mimeErrLabel)
|
.addComponent(mimeErrLabel))
|
||||||
.addContainerGap())
|
|
||||||
);
|
);
|
||||||
|
|
||||||
jSplitPane1.setLeftComponent(mimePanel);
|
jSplitPane1.setLeftComponent(mimePanel);
|
||||||
|
|
||||||
userExtTextField.setText(org.openide.util.NbBundle.getMessage(FileExtMismatchSettingsPanel.class, "FileExtMismatchSettingsPanel.userExtTextField.text")); // NOI18N
|
userExtTextField.setText(org.openide.util.NbBundle.getMessage(FileExtMismatchSettingsPanel.class, "FileExtMismatchSettingsPanel.userExtTextField.text")); // NOI18N
|
||||||
|
userExtTextField.setMinimumSize(new java.awt.Dimension(20, 20));
|
||||||
userExtTextField.addFocusListener(new java.awt.event.FocusAdapter() {
|
userExtTextField.addFocusListener(new java.awt.event.FocusAdapter() {
|
||||||
public void focusGained(java.awt.event.FocusEvent evt) {
|
public void focusGained(java.awt.event.FocusEvent evt) {
|
||||||
userExtTextFieldFocusGained(evt);
|
userExtTextFieldFocusGained(evt);
|
||||||
@ -297,15 +297,18 @@ final class FileExtMismatchSettingsPanel extends IngestModuleGlobalSettingsPanel
|
|||||||
.addGroup(extensionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGroup(extensionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(extensionPanelLayout.createSequentialGroup()
|
.addGroup(extensionPanelLayout.createSequentialGroup()
|
||||||
.addComponent(extHeaderLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 324, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addComponent(extHeaderLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 324, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
.addContainerGap(37, Short.MAX_VALUE))
|
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
||||||
.addComponent(extErrorLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
|
||||||
.addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
|
.addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
|
||||||
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, extensionPanelLayout.createSequentialGroup()
|
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, extensionPanelLayout.createSequentialGroup()
|
||||||
.addComponent(userExtTextField)
|
.addGroup(extensionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
|
||||||
|
.addComponent(extErrorLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||||
|
.addGroup(extensionPanelLayout.createSequentialGroup()
|
||||||
|
.addComponent(userExtTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 152, Short.MAX_VALUE)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addComponent(addExtButton)
|
.addComponent(addExtButton)
|
||||||
.addGap(4, 4, 4)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addComponent(removeExtButton))))
|
.addComponent(removeExtButton)))
|
||||||
|
.addGap(0, 0, 0))))
|
||||||
);
|
);
|
||||||
extensionPanelLayout.setVerticalGroup(
|
extensionPanelLayout.setVerticalGroup(
|
||||||
extensionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
extensionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
@ -313,15 +316,14 @@ final class FileExtMismatchSettingsPanel extends IngestModuleGlobalSettingsPanel
|
|||||||
.addContainerGap()
|
.addContainerGap()
|
||||||
.addComponent(extHeaderLabel)
|
.addComponent(extHeaderLabel)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 367, Short.MAX_VALUE)
|
.addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 396, Short.MAX_VALUE)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
|
||||||
.addGroup(extensionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
|
||||||
.addComponent(userExtTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
||||||
.addComponent(addExtButton)
|
|
||||||
.addComponent(removeExtButton))
|
|
||||||
.addGap(5, 5, 5)
|
.addGap(5, 5, 5)
|
||||||
.addComponent(extErrorLabel)
|
.addGroup(extensionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||||
.addContainerGap())
|
.addComponent(removeExtButton)
|
||||||
|
.addComponent(addExtButton)
|
||||||
|
.addComponent(userExtTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||||
|
.addGap(5, 5, 5)
|
||||||
|
.addComponent(extErrorLabel))
|
||||||
);
|
);
|
||||||
|
|
||||||
jSplitPane1.setRightComponent(extensionPanel);
|
jSplitPane1.setRightComponent(extensionPanel);
|
||||||
@ -338,8 +340,8 @@ final class FileExtMismatchSettingsPanel extends IngestModuleGlobalSettingsPanel
|
|||||||
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(jPanel1Layout.createSequentialGroup()
|
.addGroup(jPanel1Layout.createSequentialGroup()
|
||||||
.addContainerGap()
|
.addContainerGap()
|
||||||
.addComponent(jSplitPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 466, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addComponent(jSplitPane1)
|
||||||
.addGap(31, 31, 31))
|
.addContainerGap())
|
||||||
);
|
);
|
||||||
|
|
||||||
jScrollPane1.setViewportView(jPanel1);
|
jScrollPane1.setViewportView(jPanel1);
|
||||||
@ -353,8 +355,8 @@ final class FileExtMismatchSettingsPanel extends IngestModuleGlobalSettingsPanel
|
|||||||
layout.setVerticalGroup(
|
layout.setVerticalGroup(
|
||||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(layout.createSequentialGroup()
|
.addGroup(layout.createSequentialGroup()
|
||||||
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 482, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 500, Short.MAX_VALUE)
|
||||||
.addContainerGap(18, Short.MAX_VALUE))
|
.addGap(0, 0, 0))
|
||||||
);
|
);
|
||||||
}// </editor-fold>//GEN-END:initComponents
|
}// </editor-fold>//GEN-END:initComponents
|
||||||
|
|
||||||
@ -392,6 +394,7 @@ final class FileExtMismatchSettingsPanel extends IngestModuleGlobalSettingsPanel
|
|||||||
updateExtList();
|
updateExtList();
|
||||||
extTableModel.resync();
|
extTableModel.resync();
|
||||||
this.userExtTextField.setText("");
|
this.userExtTextField.setText("");
|
||||||
|
pcs.firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
|
||||||
}//GEN-LAST:event_addExtButtonActionPerformed
|
}//GEN-LAST:event_addExtButtonActionPerformed
|
||||||
|
|
||||||
private void addTypeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addTypeButtonActionPerformed
|
private void addTypeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addTypeButtonActionPerformed
|
||||||
@ -414,7 +417,17 @@ final class FileExtMismatchSettingsPanel extends IngestModuleGlobalSettingsPanel
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean mimeTypeDetectable = (null != fileTypeDetector) ? fileTypeDetector.isDetectable(newMime) : false;
|
FileTypeDetector detector;
|
||||||
|
try {
|
||||||
|
detector = new FileTypeDetector();
|
||||||
|
} catch (FileTypeDetector.FileTypeDetectorInitException ex) {
|
||||||
|
mimeErrLabel.setForeground(Color.red);
|
||||||
|
mimeErrLabel.setText(NbBundle.getMessage(this.getClass(),
|
||||||
|
"FileExtMismatchConfigPanel.addTypeButton.mimeTypeNotDetectable"));
|
||||||
|
logger.log(Level.WARNING, "Couldn't create file type detector for file ext mismatch settings.", ex);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
boolean mimeTypeDetectable = (null != detector) ? detector.isDetectable(newMime) : false;
|
||||||
if (!mimeTypeDetectable) {
|
if (!mimeTypeDetectable) {
|
||||||
mimeErrLabel.setForeground(Color.red);
|
mimeErrLabel.setForeground(Color.red);
|
||||||
mimeErrLabel.setText(NbBundle.getMessage(this.getClass(),
|
mimeErrLabel.setText(NbBundle.getMessage(this.getClass(),
|
||||||
@ -428,6 +441,7 @@ final class FileExtMismatchSettingsPanel extends IngestModuleGlobalSettingsPanel
|
|||||||
updateMimeList();
|
updateMimeList();
|
||||||
mimeTableModel.resync();
|
mimeTableModel.resync();
|
||||||
userTypeTextField.setText("");
|
userTypeTextField.setText("");
|
||||||
|
this.clearErrLabels();
|
||||||
pcs.firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
|
pcs.firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
|
||||||
}//GEN-LAST:event_addTypeButtonActionPerformed
|
}//GEN-LAST:event_addTypeButtonActionPerformed
|
||||||
|
|
||||||
|
@ -25,6 +25,8 @@ import java.awt.event.ActionEvent;
|
|||||||
import java.awt.event.ActionListener;
|
import java.awt.event.ActionListener;
|
||||||
import java.awt.event.WindowAdapter;
|
import java.awt.event.WindowAdapter;
|
||||||
import java.awt.event.WindowEvent;
|
import java.awt.event.WindowEvent;
|
||||||
|
import java.beans.PropertyChangeEvent;
|
||||||
|
import java.beans.PropertyChangeListener;
|
||||||
import javax.swing.BoxLayout;
|
import javax.swing.BoxLayout;
|
||||||
import javax.swing.JButton;
|
import javax.swing.JButton;
|
||||||
import javax.swing.JDialog;
|
import javax.swing.JDialog;
|
||||||
@ -36,7 +38,7 @@ import org.openide.util.NbBundle.Messages;
|
|||||||
/**
|
/**
|
||||||
* Dialog used for editing or adding file types.
|
* Dialog used for editing or adding file types.
|
||||||
*/
|
*/
|
||||||
public class AddFileTypeDialog extends JDialog {
|
class AddFileTypeDialog extends JDialog {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Enum used for letting creator of this dialog know whether or not OK was
|
* Enum used for letting creator of this dialog know whether or not OK was
|
||||||
@ -51,6 +53,8 @@ public class AddFileTypeDialog extends JDialog {
|
|||||||
private FileType fileType;
|
private FileType fileType;
|
||||||
private AddFileTypePanel addMimeTypePanel;
|
private AddFileTypePanel addMimeTypePanel;
|
||||||
private BUTTON_PRESSED result;
|
private BUTTON_PRESSED result;
|
||||||
|
private JButton okButton;
|
||||||
|
private JButton closeButton;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a dialog for creating a file type
|
* Creates a dialog for creating a file type
|
||||||
@ -100,13 +104,12 @@ public class AddFileTypeDialog extends JDialog {
|
|||||||
add(this.addMimeTypePanel, BorderLayout.PAGE_START);
|
add(this.addMimeTypePanel, BorderLayout.PAGE_START);
|
||||||
|
|
||||||
// Add the add/done button.
|
// Add the add/done button.
|
||||||
JButton addButton;
|
|
||||||
if (add) {
|
if (add) {
|
||||||
addButton = new JButton(Bundle.AddMimeTypeDialog_addButton_title());
|
okButton = new JButton(Bundle.AddMimeTypeDialog_addButton_title());
|
||||||
} else {
|
} else {
|
||||||
addButton = new JButton(Bundle.AddMimeTypeDialog_addButton_title2());
|
okButton = new JButton(Bundle.AddMimeTypeDialog_addButton_title2());
|
||||||
}
|
}
|
||||||
addButton.addActionListener(new ActionListener() {
|
okButton.addActionListener(new ActionListener() {
|
||||||
@Override
|
@Override
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
doButtonAction(true);
|
doButtonAction(true);
|
||||||
@ -114,7 +117,7 @@ public class AddFileTypeDialog extends JDialog {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Add a close button.
|
// Add a close button.
|
||||||
JButton closeButton = new JButton(Bundle.AddMimeTypeDialog_cancelButton_title());
|
closeButton = new JButton(Bundle.AddMimeTypeDialog_cancelButton_title());
|
||||||
closeButton.addActionListener(new ActionListener() {
|
closeButton.addActionListener(new ActionListener() {
|
||||||
@Override
|
@Override
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
@ -126,7 +129,7 @@ public class AddFileTypeDialog extends JDialog {
|
|||||||
JPanel buttonPanel = new JPanel();
|
JPanel buttonPanel = new JPanel();
|
||||||
buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.LINE_AXIS));
|
buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.LINE_AXIS));
|
||||||
buttonPanel.add(new javax.swing.Box.Filler(new Dimension(10, 10), new Dimension(10, 10), new Dimension(10, 10)));
|
buttonPanel.add(new javax.swing.Box.Filler(new Dimension(10, 10), new Dimension(10, 10), new Dimension(10, 10)));
|
||||||
buttonPanel.add(addButton);
|
buttonPanel.add(okButton);
|
||||||
buttonPanel.add(new javax.swing.Box.Filler(new Dimension(10, 10), new Dimension(10, 10), new Dimension(10, 10)));
|
buttonPanel.add(new javax.swing.Box.Filler(new Dimension(10, 10), new Dimension(10, 10), new Dimension(10, 10)));
|
||||||
buttonPanel.add(closeButton);
|
buttonPanel.add(closeButton);
|
||||||
add(buttonPanel, BorderLayout.LINE_START);
|
add(buttonPanel, BorderLayout.LINE_START);
|
||||||
@ -141,13 +144,22 @@ public class AddFileTypeDialog extends JDialog {
|
|||||||
doButtonAction(false);
|
doButtonAction(false);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
this.addMimeTypePanel.addPropertyChangeListener(new PropertyChangeListener() {
|
||||||
|
@Override
|
||||||
|
public void propertyChange(PropertyChangeEvent evt) {
|
||||||
|
if (evt.getPropertyName().equals(AddFileTypePanel.EVENT.SIG_LIST_CHANGED.toString())) {
|
||||||
|
enableOkButton();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
enableOkButton();
|
||||||
/**
|
/**
|
||||||
* Show the dialog.
|
* Show the dialog.
|
||||||
*/
|
*/
|
||||||
pack();
|
pack();
|
||||||
setResizable(false);
|
setResizable(false);
|
||||||
setVisible(true);
|
setVisible(true);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -189,4 +201,8 @@ public class AddFileTypeDialog extends JDialog {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void enableOkButton() {
|
||||||
|
this.okButton.setEnabled(addMimeTypePanel.hasSignature());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,8 @@
|
|||||||
*/
|
*/
|
||||||
package org.sleuthkit.autopsy.modules.filetypeid;
|
package org.sleuthkit.autopsy.modules.filetypeid;
|
||||||
|
|
||||||
|
import java.beans.PropertyChangeListener;
|
||||||
|
import java.beans.PropertyChangeSupport;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import javax.swing.DefaultListModel;
|
import javax.swing.DefaultListModel;
|
||||||
@ -26,18 +28,20 @@ import javax.swing.event.ListSelectionEvent;
|
|||||||
import javax.swing.event.ListSelectionListener;
|
import javax.swing.event.ListSelectionListener;
|
||||||
import org.openide.util.NbBundle;
|
import org.openide.util.NbBundle;
|
||||||
import org.openide.util.NbBundle.Messages;
|
import org.openide.util.NbBundle.Messages;
|
||||||
|
import static org.sleuthkit.autopsy.modules.filetypeid.AddFileTypePanel.EVENT.SIG_LIST_CHANGED;
|
||||||
import org.sleuthkit.autopsy.modules.filetypeid.AddFileTypeSignatureDialog.BUTTON_PRESSED;
|
import org.sleuthkit.autopsy.modules.filetypeid.AddFileTypeSignatureDialog.BUTTON_PRESSED;
|
||||||
import org.sleuthkit.autopsy.modules.filetypeid.FileType.Signature;
|
import org.sleuthkit.autopsy.modules.filetypeid.FileType.Signature;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Panel for adding or editing file types.
|
* Panel for adding or editing file types.
|
||||||
*/
|
*/
|
||||||
public class AddFileTypePanel extends javax.swing.JPanel {
|
class AddFileTypePanel extends javax.swing.JPanel {
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
private AddFileTypeSignatureDialog addSigDialog;
|
private AddFileTypeSignatureDialog addSigDialog;
|
||||||
private DefaultListModel<FileType.Signature> signaturesListModel;
|
private DefaultListModel<FileType.Signature> signaturesListModel;
|
||||||
|
private PropertyChangeSupport pcs = new PropertyChangeSupport(this);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a panel for a new file type.
|
* Creates a panel for a new file type.
|
||||||
@ -50,6 +54,10 @@ public class AddFileTypePanel extends javax.swing.JPanel {
|
|||||||
this.enableButtons();
|
this.enableButtons();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum EVENT {
|
||||||
|
SIG_LIST_CHANGED
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a panel for editing a file type.
|
* Creates a panel for editing a file type.
|
||||||
*
|
*
|
||||||
@ -137,6 +145,20 @@ public class AddFileTypePanel extends javax.swing.JPanel {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean hasSignature() {
|
||||||
|
return !this.signaturesListModel.isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addPropertyChangeListener(PropertyChangeListener l) {
|
||||||
|
pcs.addPropertyChangeListener(l);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void removePropertyChangeListener(PropertyChangeListener l) {
|
||||||
|
pcs.removePropertyChangeListener(l);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method is called from within the constructor to initialize the form.
|
* 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
|
* WARNING: Do NOT modify this code. The content of this method is always
|
||||||
@ -257,6 +279,7 @@ public class AddFileTypePanel extends javax.swing.JPanel {
|
|||||||
if (!this.signaturesListModel.isEmpty()) {
|
if (!this.signaturesListModel.isEmpty()) {
|
||||||
signatureList.setSelectedIndex(0);
|
signatureList.setSelectedIndex(0);
|
||||||
}
|
}
|
||||||
|
pcs.firePropertyChange(SIG_LIST_CHANGED.toString(), null, null);
|
||||||
}
|
}
|
||||||
}//GEN-LAST:event_deleteSigButtonActionPerformed
|
}//GEN-LAST:event_deleteSigButtonActionPerformed
|
||||||
|
|
||||||
@ -266,6 +289,7 @@ public class AddFileTypePanel extends javax.swing.JPanel {
|
|||||||
if (addSigDialog.getResult() == AddFileTypeSignatureDialog.BUTTON_PRESSED.OK) {
|
if (addSigDialog.getResult() == AddFileTypeSignatureDialog.BUTTON_PRESSED.OK) {
|
||||||
signaturesListModel.addElement(this.addSigDialog.getSignature());
|
signaturesListModel.addElement(this.addSigDialog.getSignature());
|
||||||
}
|
}
|
||||||
|
pcs.firePropertyChange(SIG_LIST_CHANGED.toString(), null, null);
|
||||||
}
|
}
|
||||||
}//GEN-LAST:event_addSigButtonActionPerformed
|
}//GEN-LAST:event_addSigButtonActionPerformed
|
||||||
|
|
||||||
|
@ -20,22 +20,16 @@ package org.sleuthkit.autopsy.modules.filetypeid;
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.FileNotFoundException;
|
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.UnsupportedEncodingException;
|
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.logging.Level;
|
|
||||||
import javax.xml.bind.DatatypeConverter;
|
import javax.xml.bind.DatatypeConverter;
|
||||||
import javax.xml.parsers.ParserConfigurationException;
|
import javax.xml.parsers.ParserConfigurationException;
|
||||||
import javax.xml.transform.TransformerException;
|
|
||||||
import org.openide.util.NbBundle;
|
|
||||||
import org.openide.util.io.NbObjectInputStream;
|
import org.openide.util.io.NbObjectInputStream;
|
||||||
import org.openide.util.io.NbObjectOutputStream;
|
import org.openide.util.io.NbObjectOutputStream;
|
||||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
|
||||||
import org.sleuthkit.autopsy.coreutils.PlatformUtil;
|
import org.sleuthkit.autopsy.coreutils.PlatformUtil;
|
||||||
import org.sleuthkit.autopsy.coreutils.XMLUtil;
|
import org.sleuthkit.autopsy.coreutils.XMLUtil;
|
||||||
import org.sleuthkit.autopsy.modules.filetypeid.FileType.Signature;
|
import org.sleuthkit.autopsy.modules.filetypeid.FileType.Signature;
|
||||||
@ -46,25 +40,13 @@ import org.w3c.dom.NodeList;
|
|||||||
import org.xml.sax.SAXException;
|
import org.xml.sax.SAXException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Manages user-defined file types characterized by MIME type, signature, and
|
* A singleton manager for the custom file types defined by Autopsy and by
|
||||||
* optional membership in an interesting files set.
|
* users.
|
||||||
* <p>
|
|
||||||
* Note that this class exposes a very simple get/set API that operates on the
|
|
||||||
* user-defined file types as a complete set - there is no concept of adding,
|
|
||||||
* editing or deleting file types singly. This works because this class is not
|
|
||||||
* exposed outside of this ingest module package and is ONLY used in a very
|
|
||||||
* specific paradigm. In this paradigm, there is a single modal writer of file
|
|
||||||
* types in the form of a global settings panel that disables itself when ingest
|
|
||||||
* is running so that multiple readers in the form of file ingest modules get a
|
|
||||||
* consistent set of file type definitions.
|
|
||||||
* <p>
|
|
||||||
* Thread-safe.
|
|
||||||
*/
|
*/
|
||||||
final class UserDefinedFileTypesManager {
|
final class CustomFileTypesManager {
|
||||||
|
|
||||||
private static final Logger logger = Logger.getLogger(UserDefinedFileTypesManager.class.getName());
|
private static final String XML_SETTINGS_FILE = "UserFileTypeDefinitions.xml"; //NON-NLS
|
||||||
private static final String USER_DEFINED_TYPES_XML_FILE = "UserFileTypeDefinitions.xml"; //NON-NLS
|
private static final String SERIALIZED_SETTINGS_FILE = "UserFileTypeDefinitions.settings"; //NON-NLS
|
||||||
private static final String USER_DEFINED_TYPES_SERIALIZATION_FILE = "UserFileTypeDefinitions.settings";
|
|
||||||
private static final String FILE_TYPES_TAG_NAME = "FileTypes"; //NON-NLS
|
private static final String FILE_TYPES_TAG_NAME = "FileTypes"; //NON-NLS
|
||||||
private static final String FILE_TYPE_TAG_NAME = "FileType"; //NON-NLS
|
private static final String FILE_TYPE_TAG_NAME = "FileType"; //NON-NLS
|
||||||
private static final String MIME_TYPE_TAG_NAME = "MimeType"; //NON-NLS
|
private static final String MIME_TYPE_TAG_NAME = "MimeType"; //NON-NLS
|
||||||
@ -73,58 +55,39 @@ final class UserDefinedFileTypesManager {
|
|||||||
private static final String BYTES_TAG_NAME = "Bytes"; //NON-NLS
|
private static final String BYTES_TAG_NAME = "Bytes"; //NON-NLS
|
||||||
private static final String OFFSET_TAG_NAME = "Offset"; //NON-NLS
|
private static final String OFFSET_TAG_NAME = "Offset"; //NON-NLS
|
||||||
private static final String RELATIVE_ATTRIBUTE = "RelativeToStart"; //NON-NLS
|
private static final String RELATIVE_ATTRIBUTE = "RelativeToStart"; //NON-NLS
|
||||||
private static final String INTERESTING_FILES_SET_TAG_NAME = "InterestingFileSset"; //NON-NLS
|
private static CustomFileTypesManager instance;
|
||||||
private static final String ALERT_ATTRIBUTE = "alert"; //NON-NLS
|
|
||||||
private static final String ENCODING_FOR_XML_FILE = "UTF-8"; //NON-NLS
|
|
||||||
private static UserDefinedFileTypesManager instance;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* File types to be persisted to the user-defined file type definitions file
|
|
||||||
* are stored in this mapping of MIME types to file types. Access to this
|
|
||||||
* map is guarded by the intrinsic lock of the user-defined file types
|
|
||||||
* manager for thread-safety.
|
|
||||||
*/
|
|
||||||
private final List<FileType> userDefinedFileTypes = new ArrayList<>();
|
private final List<FileType> userDefinedFileTypes = new ArrayList<>();
|
||||||
|
private final List<FileType> allFileTypes = new ArrayList<>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The combined set of user-defined file types and file types predefined by
|
* Gets the singleton manager of the custom file types defined by Autopsy
|
||||||
* Autopsy are stored in this mapping of MIME types to file types. This is
|
* and by users.
|
||||||
* the current working set of file types. Access to this map is guarded by
|
|
||||||
* the intrinsic lock of the user-defined file types manager for
|
|
||||||
* thread-safety.
|
|
||||||
*/
|
|
||||||
private final List<FileType> fileTypes = new ArrayList<>();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the singleton manager of user-defined file types characterized by
|
|
||||||
* MIME type, signature, and optional membership in an interesting files
|
|
||||||
* set.
|
|
||||||
*
|
*
|
||||||
* @return The user-defined file types manager singleton.
|
* @return The custom file types manager singleton.
|
||||||
*/
|
*/
|
||||||
synchronized static UserDefinedFileTypesManager getInstance() {
|
synchronized static CustomFileTypesManager getInstance() {
|
||||||
if (instance == null) {
|
if (instance == null) {
|
||||||
instance = new UserDefinedFileTypesManager();
|
instance = new CustomFileTypesManager();
|
||||||
}
|
}
|
||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a manager of user-defined file types characterized by MIME type,
|
* Constructs a manager for the custom file types defined by Autopsy and by
|
||||||
* signature, and optional membership in an interesting files set.
|
* users.
|
||||||
*/
|
*/
|
||||||
private UserDefinedFileTypesManager() {
|
private CustomFileTypesManager() {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets both the predefined and the user-defined file types.
|
* Gets all of the custom file types defined by Autopsy and by users.
|
||||||
*
|
*
|
||||||
* @return A mapping of file type names to file types, possibly empty.
|
* @return A list of file types, possibly empty.
|
||||||
*
|
*
|
||||||
* @throws
|
* @throws CustomFileTypesException if there is a problem accessing the
|
||||||
* org.sleuthkit.autopsy.modules.filetypeid.UserDefinedFileTypesManager.UserDefinedFileTypesException
|
* file types.
|
||||||
*/
|
*/
|
||||||
synchronized List<FileType> getFileTypes() throws UserDefinedFileTypesException {
|
synchronized List<FileType> getFileTypes() throws CustomFileTypesException {
|
||||||
loadFileTypes();
|
loadFileTypes();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -133,18 +96,18 @@ final class UserDefinedFileTypesManager {
|
|||||||
* Collections.unmodifiableCollection() is not used here because this
|
* Collections.unmodifiableCollection() is not used here because this
|
||||||
* view of the file types is a snapshot.
|
* view of the file types is a snapshot.
|
||||||
*/
|
*/
|
||||||
return new ArrayList<>(fileTypes);
|
return new ArrayList<>(allFileTypes);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the user-defined file types.
|
* Gets the custom file types defined by users.
|
||||||
*
|
*
|
||||||
* @return A mapping of file type names to file types, possibly empty.
|
* @return A list of file types, possibly empty.
|
||||||
*
|
*
|
||||||
* @throws
|
* @throws CustomFileTypesException if there is a problem accessing the
|
||||||
* org.sleuthkit.autopsy.modules.filetypeid.UserDefinedFileTypesManager.UserDefinedFileTypesException
|
* file types.
|
||||||
*/
|
*/
|
||||||
synchronized List<FileType> getUserDefinedFileTypes() throws UserDefinedFileTypesException {
|
synchronized List<FileType> getUserDefinedFileTypes() throws CustomFileTypesException {
|
||||||
loadFileTypes();
|
loadFileTypes();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -157,15 +120,15 @@ final class UserDefinedFileTypesManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Loads the MIME type to file type mappings with predefined and
|
* Loads or re-loads the custom file types defined by Autopsy and by users.
|
||||||
* user-defined types.
|
|
||||||
*
|
*
|
||||||
* @throws
|
* @throws CustomFileTypesException if there is a problem loading the
|
||||||
* org.sleuthkit.autopsy.modules.filetypeid.UserDefinedFileTypesManager.UserDefinedFileTypesException
|
* file types.
|
||||||
*/
|
*/
|
||||||
private void loadFileTypes() throws UserDefinedFileTypesException {
|
private void loadFileTypes() throws CustomFileTypesException {
|
||||||
fileTypes.clear();
|
allFileTypes.clear();
|
||||||
userDefinedFileTypes.clear();
|
userDefinedFileTypes.clear();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load the predefined types first so that they can be overwritten by
|
* Load the predefined types first so that they can be overwritten by
|
||||||
* any user-defined types with the same names.
|
* any user-defined types with the same names.
|
||||||
@ -175,156 +138,185 @@ final class UserDefinedFileTypesManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds the predefined file types to the in-memory mappings of MIME types to
|
* Loads or re-loads the custom file types defined by Autopsy.
|
||||||
* file types.
|
|
||||||
*
|
*
|
||||||
* @throws
|
* @throws CustomFileTypesException if there is a problem loading the
|
||||||
* org.sleuthkit.autopsy.modules.filetypeid.UserDefinedFileTypesManager.UserDefinedFileTypesException
|
* file types.
|
||||||
*/
|
*/
|
||||||
private void loadPredefinedFileTypes() throws UserDefinedFileTypesException {
|
private void loadPredefinedFileTypes() throws CustomFileTypesException {
|
||||||
byte[] byteArray;
|
byte[] byteArray;
|
||||||
FileType fileType;
|
FileType fileType;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
/*
|
||||||
|
* Add type for xml.
|
||||||
|
*/
|
||||||
List<Signature> signatureList;
|
List<Signature> signatureList;
|
||||||
signatureList = new ArrayList<>();
|
signatureList = new ArrayList<>();
|
||||||
signatureList.add(new Signature("<?xml", 0L));
|
signatureList.add(new Signature("<?xml", 0L)); //NON-NLS
|
||||||
fileType = new FileType("text/xml", signatureList); //NON-NLS
|
fileType = new FileType("text/xml", signatureList); //NON-NLS
|
||||||
fileTypes.add(fileType);
|
allFileTypes.add(fileType);
|
||||||
|
|
||||||
// Add rule for gzip
|
/*
|
||||||
|
* Add type for gzip.
|
||||||
|
*/
|
||||||
byteArray = DatatypeConverter.parseHexBinary("1F8B"); //NON-NLS
|
byteArray = DatatypeConverter.parseHexBinary("1F8B"); //NON-NLS
|
||||||
signatureList.clear();
|
signatureList.clear();
|
||||||
signatureList.add(new Signature(byteArray, 0L));
|
signatureList.add(new Signature(byteArray, 0L));
|
||||||
fileType = new FileType("application/x-gzip", signatureList); //NON-NLS
|
fileType = new FileType("application/x-gzip", signatureList); //NON-NLS
|
||||||
fileTypes.add(fileType);
|
allFileTypes.add(fileType);
|
||||||
|
|
||||||
// Add rule for .wk1
|
/*
|
||||||
|
* Add type for wk1.
|
||||||
|
*/
|
||||||
byteArray = DatatypeConverter.parseHexBinary("0000020006040600080000000000"); //NON-NLS
|
byteArray = DatatypeConverter.parseHexBinary("0000020006040600080000000000"); //NON-NLS
|
||||||
signatureList.clear();
|
signatureList.clear();
|
||||||
signatureList.add(new Signature(byteArray, 0L));
|
signatureList.add(new Signature(byteArray, 0L));
|
||||||
fileType = new FileType("application/x-123", signatureList); //NON-NLS
|
fileType = new FileType("application/x-123", signatureList); //NON-NLS
|
||||||
fileTypes.add(fileType);
|
allFileTypes.add(fileType);
|
||||||
|
|
||||||
// Add rule for Radiance image
|
/*
|
||||||
|
* Add type for Radiance images.
|
||||||
|
*/
|
||||||
byteArray = DatatypeConverter.parseHexBinary("233F52414449414E43450A");//NON-NLS
|
byteArray = DatatypeConverter.parseHexBinary("233F52414449414E43450A");//NON-NLS
|
||||||
signatureList.clear();
|
signatureList.clear();
|
||||||
signatureList.add(new Signature(byteArray, 0L));
|
signatureList.add(new Signature(byteArray, 0L));
|
||||||
fileType = new FileType("image/vnd.radiance", signatureList); //NON-NLS
|
fileType = new FileType("image/vnd.radiance", signatureList); //NON-NLS
|
||||||
fileTypes.add(fileType);
|
allFileTypes.add(fileType);
|
||||||
|
|
||||||
// Add rule for .dcx image
|
/*
|
||||||
|
* Add type for dcx images.
|
||||||
|
*/
|
||||||
byteArray = DatatypeConverter.parseHexBinary("B168DE3A"); //NON-NLS
|
byteArray = DatatypeConverter.parseHexBinary("B168DE3A"); //NON-NLS
|
||||||
signatureList.clear();
|
signatureList.clear();
|
||||||
signatureList.add(new Signature(byteArray, 0L));
|
signatureList.add(new Signature(byteArray, 0L));
|
||||||
fileType = new FileType("image/x-dcx", signatureList); //NON-NLS
|
fileType = new FileType("image/x-dcx", signatureList); //NON-NLS
|
||||||
fileTypes.add(fileType);
|
allFileTypes.add(fileType);
|
||||||
|
|
||||||
// Add rule for .ics image
|
/*
|
||||||
|
* Add type for ics images.
|
||||||
|
*/
|
||||||
signatureList.clear();
|
signatureList.clear();
|
||||||
signatureList.add(new Signature("icns", 0L));
|
signatureList.add(new Signature("icns", 0L)); //NON-NLS
|
||||||
fileType = new FileType("image/x-icns", signatureList); //NON-NLS
|
fileType = new FileType("image/x-icns", signatureList); //NON-NLS
|
||||||
fileTypes.add(fileType);
|
allFileTypes.add(fileType);
|
||||||
|
|
||||||
// Add rule for .pict image
|
/*
|
||||||
|
* Add type for pict images.
|
||||||
|
*/
|
||||||
byteArray = DatatypeConverter.parseHexBinary("001102FF"); //NON-NLS
|
byteArray = DatatypeConverter.parseHexBinary("001102FF"); //NON-NLS
|
||||||
signatureList.clear();
|
signatureList.clear();
|
||||||
signatureList.add(new Signature(byteArray, 522L));
|
signatureList.add(new Signature(byteArray, 522L));
|
||||||
fileType = new FileType("image/x-pict", signatureList); //NON-NLS
|
fileType = new FileType("image/x-pict", signatureList); //NON-NLS
|
||||||
fileTypes.add(fileType);
|
allFileTypes.add(fileType);
|
||||||
byteArray = DatatypeConverter.parseHexBinary("1100"); //NON-NLS
|
byteArray = DatatypeConverter.parseHexBinary("1100"); //NON-NLS
|
||||||
signatureList.clear();
|
signatureList.clear();
|
||||||
signatureList.add(new Signature(byteArray, 522L));
|
signatureList.add(new Signature(byteArray, 522L));
|
||||||
fileType = new FileType("image/x-pict", signatureList); //NON-NLS
|
fileType = new FileType("image/x-pict", signatureList); //NON-NLS
|
||||||
fileTypes.add(fileType);
|
allFileTypes.add(fileType);
|
||||||
|
|
||||||
// Add rule for .pam
|
/*
|
||||||
|
* Add type for pam.
|
||||||
|
*/
|
||||||
signatureList.clear();
|
signatureList.clear();
|
||||||
signatureList.add(new Signature("P7", 0L));
|
signatureList.add(new Signature("P7", 0L)); //NON-NLS
|
||||||
fileType = new FileType("image/x-portable-arbitrarymap", signatureList); //NON-NLS
|
fileType = new FileType("image/x-portable-arbitrarymap", signatureList); //NON-NLS
|
||||||
fileTypes.add(fileType);
|
allFileTypes.add(fileType);
|
||||||
|
|
||||||
// Add rule for .pfm
|
/*
|
||||||
|
* Add type for pfm.
|
||||||
|
*/
|
||||||
signatureList.clear();
|
signatureList.clear();
|
||||||
signatureList.add(new Signature("PF", 0L));
|
signatureList.add(new Signature("PF", 0L)); //NON-NLS
|
||||||
fileType = new FileType("image/x-portable-floatmap", signatureList); //NON-NLS
|
fileType = new FileType("image/x-portable-floatmap", signatureList); //NON-NLS
|
||||||
fileTypes.add(fileType);
|
allFileTypes.add(fileType);
|
||||||
signatureList.clear();
|
signatureList.clear();
|
||||||
signatureList.add(new Signature("Pf", 0L));
|
signatureList.add(new Signature("Pf", 0L)); //NON-NLS
|
||||||
fileType = new FileType("image/x-portable-floatmap", signatureList); //NON-NLS
|
fileType = new FileType("image/x-portable-floatmap", signatureList); //NON-NLS
|
||||||
fileTypes.add(fileType);
|
allFileTypes.add(fileType);
|
||||||
|
|
||||||
// Add rule for .tga
|
/*
|
||||||
|
* Add type for tga.
|
||||||
|
*/
|
||||||
byteArray = DatatypeConverter.parseHexBinary("54525545564953494F4E2D5846494C452E00"); //NON-NLS
|
byteArray = DatatypeConverter.parseHexBinary("54525545564953494F4E2D5846494C452E00"); //NON-NLS
|
||||||
signatureList.clear();
|
signatureList.clear();
|
||||||
signatureList.add(new Signature(byteArray, 17, false));
|
signatureList.add(new Signature(byteArray, 17, false));
|
||||||
fileType = new FileType("image/x-tga", signatureList); //NON-NLS
|
fileType = new FileType("image/x-tga", signatureList); //NON-NLS
|
||||||
fileTypes.add(fileType);
|
allFileTypes.add(fileType);
|
||||||
|
|
||||||
// Add rule for .ilbm
|
/*
|
||||||
|
* Add type for ilbm.
|
||||||
|
*/
|
||||||
signatureList.clear();
|
signatureList.clear();
|
||||||
signatureList.add(new Signature("FORM", 0L));
|
signatureList.add(new Signature("FORM", 0L)); //NON-NLS
|
||||||
signatureList.add(new Signature("ILBM", 8L));
|
signatureList.add(new Signature("ILBM", 8L)); //NON-NLS
|
||||||
fileType = new FileType("image/x-ilbm", signatureList);
|
fileType = new FileType("image/x-ilbm", signatureList); //NON-NLS
|
||||||
fileTypes.add(fileType);
|
allFileTypes.add(fileType);
|
||||||
signatureList.clear();
|
signatureList.clear();
|
||||||
signatureList.add(new Signature("FORM", 0L));
|
signatureList.add(new Signature("FORM", 0L)); //NON-NLS
|
||||||
signatureList.add(new Signature("PBM", 8L));
|
signatureList.add(new Signature("PBM", 8L)); //NON-NLS
|
||||||
fileType = new FileType("image/x-ilbm", signatureList);
|
fileType = new FileType("image/x-ilbm", signatureList); //NON-NLS
|
||||||
fileTypes.add(fileType);
|
allFileTypes.add(fileType);
|
||||||
|
|
||||||
// Add rule for .webp
|
/*
|
||||||
|
* Add type for webp.
|
||||||
|
*/
|
||||||
signatureList.clear();
|
signatureList.clear();
|
||||||
signatureList.add(new Signature("RIFF", 0L));
|
signatureList.add(new Signature("RIFF", 0L)); //NON-NLS
|
||||||
signatureList.add(new Signature("WEBP", 8L));
|
signatureList.add(new Signature("WEBP", 8L)); //NON-NLS
|
||||||
fileType = new FileType("image/webp", signatureList);
|
fileType = new FileType("image/webp", signatureList); //NON-NLS
|
||||||
fileTypes.add(fileType);
|
allFileTypes.add(fileType);
|
||||||
|
|
||||||
// Add rule for .aiff
|
/*
|
||||||
|
* Add type for aiff.
|
||||||
|
*/
|
||||||
signatureList.clear();
|
signatureList.clear();
|
||||||
signatureList.add(new Signature("FORM", 0L));
|
signatureList.add(new Signature("FORM", 0L)); //NON-NLS
|
||||||
signatureList.add(new Signature("AIFF", 8L));
|
signatureList.add(new Signature("AIFF", 8L)); //NON-NLS
|
||||||
fileType = new FileType("audio/aiff", signatureList);
|
fileType = new FileType("audio/aiff", signatureList); //NON-NLS
|
||||||
fileTypes.add(fileType);
|
allFileTypes.add(fileType);
|
||||||
signatureList.clear();
|
signatureList.clear();
|
||||||
signatureList.add(new Signature("FORM", 0L));
|
signatureList.add(new Signature("FORM", 0L)); //NON-NLS
|
||||||
signatureList.add(new Signature("AIFC", 8L));
|
signatureList.add(new Signature("AIFC", 8L)); //NON-NLS
|
||||||
fileType = new FileType("audio/aiff", signatureList);
|
fileType = new FileType("audio/aiff", signatureList); //NON-NLS
|
||||||
fileTypes.add(fileType);
|
allFileTypes.add(fileType);
|
||||||
signatureList.clear();
|
signatureList.clear();
|
||||||
signatureList.add(new Signature("FORM", 0L));
|
signatureList.add(new Signature("FORM", 0L)); //NON-NLS
|
||||||
signatureList.add(new Signature("8SVX", 8L));
|
signatureList.add(new Signature("8SVX", 8L)); //NON-NLS
|
||||||
fileType = new FileType("audio/aiff", signatureList);
|
fileType = new FileType("audio/aiff", signatureList); //NON-NLS
|
||||||
fileTypes.add(fileType);
|
allFileTypes.add(fileType);
|
||||||
|
|
||||||
// Add .iff
|
/*
|
||||||
|
* Add type for iff.
|
||||||
|
*/
|
||||||
signatureList.clear();
|
signatureList.clear();
|
||||||
signatureList.add(new Signature("FORM", 0L));
|
signatureList.add(new Signature("FORM", 0L)); //NON-NLS
|
||||||
fileType = new FileType("application/x-iff", signatureList);
|
fileType = new FileType("application/x-iff", signatureList); //NON-NLS
|
||||||
fileTypes.add(fileType);
|
allFileTypes.add(fileType);
|
||||||
|
|
||||||
} // parseHexBinary() throws this if the argument passed in is not Hex
|
} catch (IllegalArgumentException ex) {
|
||||||
catch (IllegalArgumentException e) {
|
/*
|
||||||
throw new UserDefinedFileTypesException("Error creating predefined file types", e); //
|
* parseHexBinary() throws this if the argument passed in is not hex
|
||||||
|
*/
|
||||||
|
throw new CustomFileTypesException("Error creating predefined file types", ex); //
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds the user-defined file types to the in-memory mappings of MIME types
|
* Loads or re-loads the custom file types defined by users.
|
||||||
* to file types.
|
|
||||||
*
|
*
|
||||||
* @throws
|
* @throws CustomFileTypesException if there is a problem loading the
|
||||||
* org.sleuthkit.autopsy.modules.filetypeid.UserDefinedFileTypesManager.UserDefinedFileTypesException
|
* file types.
|
||||||
*/
|
*/
|
||||||
private void loadUserDefinedFileTypes() throws UserDefinedFileTypesException {
|
private void loadUserDefinedFileTypes() throws CustomFileTypesException {
|
||||||
try {
|
try {
|
||||||
File serialized = new File(getFileTypeDefinitionsFilePath(USER_DEFINED_TYPES_SERIALIZATION_FILE));
|
File serialized = new File(getFileTypeDefinitionsFilePath(SERIALIZED_SETTINGS_FILE));
|
||||||
if (serialized.exists()) {
|
if (serialized.exists()) {
|
||||||
for (FileType fileType : readFileTypesSerialized()) {
|
for (FileType fileType : readSerializedFileTypes()) {
|
||||||
addUserDefinedFileType(fileType);
|
addUserDefinedFileType(fileType);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
String filePath = getFileTypeDefinitionsFilePath(USER_DEFINED_TYPES_XML_FILE);
|
String filePath = getFileTypeDefinitionsFilePath(XML_SETTINGS_FILE);
|
||||||
File xmlFile = new File(filePath);
|
File xmlFile = new File(filePath);
|
||||||
if (xmlFile.exists()) {
|
if (xmlFile.exists()) {
|
||||||
for (FileType fileType : XMLDefinitionsReader.readFileTypes(filePath)) {
|
for (FileType fileType : XMLDefinitionsReader.readFileTypes(filePath)) {
|
||||||
@ -337,31 +329,29 @@ final class UserDefinedFileTypesManager {
|
|||||||
/**
|
/**
|
||||||
* Using an all-or-none policy.
|
* Using an all-or-none policy.
|
||||||
*/
|
*/
|
||||||
fileTypes.clear();
|
allFileTypes.clear();
|
||||||
userDefinedFileTypes.clear();
|
userDefinedFileTypes.clear();
|
||||||
throwUserDefinedFileTypesException(ex, "UserDefinedFileTypesManager.loadFileTypes.errorMessage");
|
throw new CustomFileTypesException("UserDefinedFileTypesManager.loadFileTypes.errorMessage", ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds a user-defined file type to the in-memory mappings of MIME types to
|
* Adds a custom file type to both internal file type lists.
|
||||||
* file types.
|
|
||||||
*
|
*
|
||||||
* @param fileType The file type to add.
|
* @param fileType The file type to add.
|
||||||
*/
|
*/
|
||||||
private void addUserDefinedFileType(FileType fileType) {
|
private void addUserDefinedFileType(FileType fileType) {
|
||||||
userDefinedFileTypes.add(fileType);
|
userDefinedFileTypes.add(fileType);
|
||||||
fileTypes.add(fileType);
|
allFileTypes.add(fileType);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the user-defined file types.
|
* Sets the user-defined custom file types.
|
||||||
*
|
*
|
||||||
* @param newFileTypes A mapping of file type names to user-defined file
|
* @param newFileTypes A list of user-defined file types.
|
||||||
* types.
|
|
||||||
*/
|
*/
|
||||||
synchronized void setUserDefinedFileTypes(List<FileType> newFileTypes) throws UserDefinedFileTypesException {
|
synchronized void setUserDefinedFileTypes(List<FileType> newFileTypes) throws CustomFileTypesException {
|
||||||
String filePath = getFileTypeDefinitionsFilePath(USER_DEFINED_TYPES_SERIALIZATION_FILE);
|
String filePath = getFileTypeDefinitionsFilePath(SERIALIZED_SETTINGS_FILE);
|
||||||
writeFileTypes(newFileTypes, filePath);
|
writeFileTypes(newFileTypes, filePath);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -378,72 +368,68 @@ final class UserDefinedFileTypesManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Writes a set of file types to a file.
|
* Writes a collection of custom file types to disk.
|
||||||
*
|
*
|
||||||
* @param fileTypes A collection of file types.
|
* @param fileTypes A collection of file types.
|
||||||
* @param filePath The path to the destination file.
|
* @param filePath The path to the destination file.
|
||||||
*
|
*
|
||||||
* @throws ParserConfigurationException
|
* @throws CustomFileTypesException if there is a problem writing the
|
||||||
* @throws IOException
|
* file types.
|
||||||
* @throws FileNotFoundException
|
|
||||||
* @throws UnsupportedEncodingException
|
|
||||||
* @throws TransformerException
|
|
||||||
*/
|
*/
|
||||||
private static void writeFileTypes(List<FileType> fileTypes, String filePath) throws UserDefinedFileTypesException {
|
private static void writeFileTypes(List<FileType> fileTypes, String filePath) throws CustomFileTypesException {
|
||||||
try (NbObjectOutputStream out = new NbObjectOutputStream(new FileOutputStream(filePath))) {
|
try (NbObjectOutputStream out = new NbObjectOutputStream(new FileOutputStream(filePath))) {
|
||||||
UserDefinedFileTypesSettings settings = new UserDefinedFileTypesSettings(fileTypes);
|
UserDefinedFileTypesSettings settings = new UserDefinedFileTypesSettings(fileTypes);
|
||||||
out.writeObject(settings);
|
out.writeObject(settings);
|
||||||
} catch (IOException ex) {
|
} catch (IOException ex) {
|
||||||
throw new UserDefinedFileTypesException(String.format("Failed to write settings to %s", filePath), ex);
|
throw new CustomFileTypesException(String.format("Failed to write settings to %s", filePath), ex); //NON-NLS
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reads the file types
|
* Reads a collection of custom file types from disk.
|
||||||
*
|
*
|
||||||
* @param filePath the file path where the file types are to be read
|
* @param filePath The path of the file from which the custom file types are
|
||||||
|
* to be read.
|
||||||
*
|
*
|
||||||
* @return the file types
|
* @return The custom file types.
|
||||||
*
|
*
|
||||||
* @throws ParserConfigurationException If the file cannot be read
|
* @throws CustomFileTypesException if there is a problem reading the
|
||||||
|
* file types.
|
||||||
*/
|
*/
|
||||||
private static List<FileType> readFileTypesSerialized() throws UserDefinedFileTypesException {
|
private static List<FileType> readSerializedFileTypes() throws CustomFileTypesException {
|
||||||
File serializedDefs = new File(getFileTypeDefinitionsFilePath(USER_DEFINED_TYPES_SERIALIZATION_FILE));
|
File serializedDefs = new File(getFileTypeDefinitionsFilePath(SERIALIZED_SETTINGS_FILE));
|
||||||
try {
|
try {
|
||||||
try (NbObjectInputStream in = new NbObjectInputStream(new FileInputStream(serializedDefs))) {
|
try (NbObjectInputStream in = new NbObjectInputStream(new FileInputStream(serializedDefs))) {
|
||||||
UserDefinedFileTypesSettings filesSetsSettings = (UserDefinedFileTypesSettings) in.readObject();
|
UserDefinedFileTypesSettings filesSetsSettings = (UserDefinedFileTypesSettings) in.readObject();
|
||||||
return filesSetsSettings.getUserDefinedFileTypes();
|
return filesSetsSettings.getUserDefinedFileTypes();
|
||||||
}
|
}
|
||||||
} catch (IOException | ClassNotFoundException ex) {
|
} catch (IOException | ClassNotFoundException ex) {
|
||||||
throw new UserDefinedFileTypesException("Couldn't read serialized settings.", ex);
|
throw new CustomFileTypesException("Couldn't read serialized settings.", ex); //NON-NLS
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides a mechanism for reading a set of file type definitions from an
|
* Provides a mechanism for reading a set of custom file type definitions
|
||||||
* XML file.
|
* from an XML file.
|
||||||
*/
|
*/
|
||||||
private static class XMLDefinitionsReader {
|
private static class XMLDefinitionsReader {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reads a set of file type definitions from an XML file.
|
* Reads a set of custom file type definitions from an XML file.
|
||||||
*
|
*
|
||||||
* @param filePath The path to the XML file.
|
* @param filePath The path to the XML file.
|
||||||
*
|
*
|
||||||
* @return A collection of file types read from the XML file.
|
* @return A collection of custom file types read from the XML file.
|
||||||
|
*
|
||||||
|
* @throws IOException if there is problem reading the
|
||||||
|
* XML file.
|
||||||
|
* @throws SAXException if there is a problem parsing
|
||||||
|
* the XML file.
|
||||||
|
* @throws ParserConfigurationException if there is a problem parsing
|
||||||
|
* the XML file.
|
||||||
*/
|
*/
|
||||||
private static List<FileType> readFileTypes(String filePath) throws IOException, SAXException, ParserConfigurationException {
|
private static List<FileType> readFileTypes(String filePath) throws IOException, SAXException, ParserConfigurationException {
|
||||||
List<FileType> fileTypes = new ArrayList<>();
|
List<FileType> fileTypes = new ArrayList<>();
|
||||||
/*
|
|
||||||
* RC: Commenting out the loadDocument overload that validates
|
|
||||||
* against the XSD is a temp fix for a failure to provide an upgrade
|
|
||||||
* path when the RelativeToStart attribute was added to the
|
|
||||||
* Signature element. The upgrade path can be supplied, but the plan
|
|
||||||
* is to replace the use of XML with object serialization for the
|
|
||||||
* settings, so it may not be worth the effort.
|
|
||||||
*/
|
|
||||||
// private static final String FILE_TYPE_DEFINITIONS_SCHEMA_FILE = "FileTypes.xsd"; //NON-NLS
|
|
||||||
// Document doc = XMLUtil.loadDocument(filePath, UserDefinedFileTypesManager.class, FILE_TYPE_DEFINITIONS_SCHEMA_FILE);
|
|
||||||
Document doc = XMLUtil.loadDocument(filePath);
|
Document doc = XMLUtil.loadDocument(filePath);
|
||||||
if (doc != null) {
|
if (doc != null) {
|
||||||
Element fileTypesElem = doc.getDocumentElement();
|
Element fileTypesElem = doc.getDocumentElement();
|
||||||
@ -460,14 +446,16 @@ final class UserDefinedFileTypesManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets a file type definition from a file type XML element.
|
* Gets a custom file type definition from a file type XML element.
|
||||||
*
|
*
|
||||||
* @param fileTypeElem The XML element.
|
* @param fileTypeElem The XML element.
|
||||||
*
|
*
|
||||||
* @return A file type object.
|
* @return A file type object.
|
||||||
*
|
*
|
||||||
* @throws IllegalArgumentException
|
* @throws IllegalArgumentException if there is a problem parsing the
|
||||||
* @throws NumberFormatException
|
* file type.
|
||||||
|
* @throws NumberFormatException if there is a problem parsing the
|
||||||
|
* file type.
|
||||||
*/
|
*/
|
||||||
private static FileType parseFileType(Element fileTypeElem) throws IllegalArgumentException, NumberFormatException {
|
private static FileType parseFileType(Element fileTypeElem) throws IllegalArgumentException, NumberFormatException {
|
||||||
String mimeType = XMLDefinitionsReader.parseMimeType(fileTypeElem);
|
String mimeType = XMLDefinitionsReader.parseMimeType(fileTypeElem);
|
||||||
@ -522,35 +510,6 @@ final class UserDefinedFileTypesManager {
|
|||||||
return new Signature(signatureBytes, offset, signatureType, isRelativeToStart);
|
return new Signature(signatureBytes, offset, signatureType, isRelativeToStart);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the interesting files set name from a file type XML element.
|
|
||||||
*
|
|
||||||
* @param fileTypeElem The XML element.
|
|
||||||
*
|
|
||||||
* @return The files set name, possibly empty.
|
|
||||||
*/
|
|
||||||
private static String parseInterestingFilesSet(Element fileTypeElem) {
|
|
||||||
String filesSetName = "";
|
|
||||||
NodeList filesSetElems = fileTypeElem.getElementsByTagName(INTERESTING_FILES_SET_TAG_NAME);
|
|
||||||
if (filesSetElems.getLength() > 0) {
|
|
||||||
Element filesSetElem = (Element) filesSetElems.item(0);
|
|
||||||
filesSetName = filesSetElem.getTextContent();
|
|
||||||
}
|
|
||||||
return filesSetName;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the alert attribute from a file type XML element.
|
|
||||||
*
|
|
||||||
* @param fileTypeElem The XML element.
|
|
||||||
*
|
|
||||||
* @return True or false;
|
|
||||||
*/
|
|
||||||
private static boolean parseAlert(Element fileTypeElem) {
|
|
||||||
String alertAttribute = fileTypeElem.getAttribute(ALERT_ATTRIBUTE);
|
|
||||||
return Boolean.parseBoolean(alertAttribute);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the text content of a single child element.
|
* Gets the text content of a single child element.
|
||||||
*
|
*
|
||||||
@ -570,7 +529,7 @@ final class UserDefinedFileTypesManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Private constructor suppresses creation of instanmces of this utility
|
* Private constructor suppresses creation of instances of this utility
|
||||||
* class.
|
* class.
|
||||||
*/
|
*/
|
||||||
private XMLDefinitionsReader() {
|
private XMLDefinitionsReader() {
|
||||||
@ -579,36 +538,17 @@ final class UserDefinedFileTypesManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Logs an exception, bundles the exception with a simple message in a
|
* .An exception thrown by the custom file types manager.
|
||||||
* uniform exception type, and throws the wrapper exception.
|
|
||||||
*
|
|
||||||
* @param ex The exception to wrap.
|
|
||||||
* @param messageKey A key into the bundle file that maps to the desired
|
|
||||||
* message.
|
|
||||||
*
|
|
||||||
* @throws
|
|
||||||
* org.sleuthkit.autopsy.modules.filetypeid.UserDefinedFileTypesManager.UserDefinedFileTypesException
|
|
||||||
*/
|
*/
|
||||||
private void throwUserDefinedFileTypesException(Exception ex, String messageKey) throws UserDefinedFileTypesException {
|
static class CustomFileTypesException extends Exception {
|
||||||
String message = NbBundle.getMessage(UserDefinedFileTypesManager.class, messageKey);
|
|
||||||
logger.log(Level.SEVERE, message, ex);
|
|
||||||
throw new UserDefinedFileTypesException(message, ex);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Used to translate more implementation-details-specific exceptions (which
|
|
||||||
* are logged by this class) into more generic exceptions for propagation to
|
|
||||||
* clients of the user-defined file types manager.
|
|
||||||
*/
|
|
||||||
static class UserDefinedFileTypesException extends Exception {
|
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
UserDefinedFileTypesException(String message) {
|
CustomFileTypesException(String message) {
|
||||||
super(message);
|
super(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
UserDefinedFileTypesException(String message, Throwable throwable) {
|
CustomFileTypesException(String message, Throwable throwable) {
|
||||||
super(message, throwable);
|
super(message, throwable);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -60,8 +60,8 @@ public class FileTypeDetector {
|
|||||||
*/
|
*/
|
||||||
public FileTypeDetector() throws FileTypeDetectorInitException {
|
public FileTypeDetector() throws FileTypeDetectorInitException {
|
||||||
try {
|
try {
|
||||||
userDefinedFileTypes = UserDefinedFileTypesManager.getInstance().getFileTypes();
|
userDefinedFileTypes = CustomFileTypesManager.getInstance().getFileTypes();
|
||||||
} catch (UserDefinedFileTypesManager.UserDefinedFileTypesException ex) {
|
} catch (CustomFileTypesManager.CustomFileTypesException ex) {
|
||||||
throw new FileTypeDetectorInitException(Bundle.CouldNotInitializeFileTypeDetector(), ex);
|
throw new FileTypeDetectorInitException(Bundle.CouldNotInitializeFileTypeDetector(), ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,10 +3,10 @@
|
|||||||
<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">
|
||||||
<Properties>
|
<Properties>
|
||||||
<Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
<Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||||
<Dimension value="[552, 297]"/>
|
<Dimension value="[752, 507]"/>
|
||||||
</Property>
|
</Property>
|
||||||
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||||
<Dimension value="[552, 297]"/>
|
<Dimension value="[752, 507]"/>
|
||||||
</Property>
|
</Property>
|
||||||
</Properties>
|
</Properties>
|
||||||
<AuxValues>
|
<AuxValues>
|
||||||
@ -29,14 +29,12 @@
|
|||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Component id="ingestRunningWarningLabel" alignment="0" max="32767" attributes="0"/>
|
<Component id="ingestRunningWarningLabel" alignment="0" max="32767" attributes="0"/>
|
||||||
<Group type="102" alignment="1" attributes="0">
|
<Group type="102" alignment="1" attributes="0">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Component id="jLabel3" pref="753" max="32767" attributes="0"/>
|
||||||
<Component id="jLabel3" alignment="1" max="32767" attributes="0"/>
|
|
||||||
<Component id="jSplitPane1" alignment="1" pref="782" max="32767" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
|
<Component id="jScrollPane2" max="32767" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
<DimensionLayout dim="1">
|
<DimensionLayout dim="1">
|
||||||
@ -44,11 +42,11 @@
|
|||||||
<Group type="102" attributes="0">
|
<Group type="102" attributes="0">
|
||||||
<EmptySpace min="-2" pref="6" max="-2" attributes="0"/>
|
<EmptySpace min="-2" pref="6" max="-2" attributes="0"/>
|
||||||
<Component id="jLabel3" min="-2" max="-2" attributes="0"/>
|
<Component id="jLabel3" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="jSplitPane1" pref="443" max="32767" attributes="0"/>
|
<Component id="jScrollPane2" max="32767" attributes="0"/>
|
||||||
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="ingestRunningWarningLabel" min="-2" pref="16" max="-2" attributes="0"/>
|
<Component id="ingestRunningWarningLabel" min="-2" pref="16" max="-2" attributes="0"/>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace min="-2" pref="12" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
@ -81,11 +79,30 @@
|
|||||||
</Property>
|
</Property>
|
||||||
</Properties>
|
</Properties>
|
||||||
</Component>
|
</Component>
|
||||||
|
<Container class="javax.swing.JScrollPane" name="jScrollPane2">
|
||||||
|
<Properties>
|
||||||
|
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||||
|
<Dimension value="[300, 100]"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
|
||||||
|
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
|
||||||
|
<SubComponents>
|
||||||
<Container class="javax.swing.JSplitPane" name="jSplitPane1">
|
<Container class="javax.swing.JSplitPane" name="jSplitPane1">
|
||||||
|
<Properties>
|
||||||
|
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||||
|
<Dimension value="[558, 285]"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
|
||||||
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout"/>
|
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout"/>
|
||||||
<SubComponents>
|
<SubComponents>
|
||||||
<Container class="javax.swing.JPanel" name="jPanel1">
|
<Container class="javax.swing.JPanel" name="jPanel1">
|
||||||
|
<Properties>
|
||||||
|
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||||
|
<Dimension value="[362, 283]"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
<Constraints>
|
<Constraints>
|
||||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout" value="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout$JSplitPaneConstraintsDescription">
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout" value="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout$JSplitPaneConstraintsDescription">
|
||||||
<JSplitPaneConstraints position="left"/>
|
<JSplitPaneConstraints position="left"/>
|
||||||
@ -118,7 +135,7 @@
|
|||||||
<EmptySpace min="-2" pref="12" max="-2" attributes="0"/>
|
<EmptySpace min="-2" pref="12" max="-2" attributes="0"/>
|
||||||
<Component id="jLabel2" min="-2" max="-2" attributes="0"/>
|
<Component id="jLabel2" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace min="-2" max="-2" attributes="0"/>
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="typesScrollPane" pref="367" max="32767" attributes="0"/>
|
<Component id="typesScrollPane" pref="385" max="32767" attributes="0"/>
|
||||||
<EmptySpace min="-2" max="-2" attributes="0"/>
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="3" attributes="0">
|
<Group type="103" groupAlignment="3" attributes="0">
|
||||||
<Component id="newTypeButton" linkSize="2" alignment="3" min="-2" max="-2" attributes="0"/>
|
<Component id="newTypeButton" linkSize="2" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
@ -225,6 +242,11 @@
|
|||||||
</SubComponents>
|
</SubComponents>
|
||||||
</Container>
|
</Container>
|
||||||
<Container class="javax.swing.JPanel" name="jPanel2">
|
<Container class="javax.swing.JPanel" name="jPanel2">
|
||||||
|
<Properties>
|
||||||
|
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||||
|
<Dimension value="[79, 283]"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
<Constraints>
|
<Constraints>
|
||||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout" value="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout$JSplitPaneConstraintsDescription">
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout" value="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout$JSplitPaneConstraintsDescription">
|
||||||
<JSplitPaneConstraints position="right"/>
|
<JSplitPaneConstraints position="right"/>
|
||||||
@ -239,9 +261,9 @@
|
|||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" attributes="0">
|
<Group type="102" attributes="0">
|
||||||
<Component id="jLabel1" min="-2" max="-2" attributes="0"/>
|
<Component id="jLabel1" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
|
<EmptySpace min="-2" pref="100" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
<Component id="jScrollPane1" pref="385" max="32767" attributes="0"/>
|
<Component id="jScrollPane1" pref="0" max="32767" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
<EmptySpace min="-2" max="-2" attributes="0"/>
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
@ -253,7 +275,7 @@
|
|||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
<Component id="jLabel1" min="-2" max="-2" attributes="0"/>
|
<Component id="jLabel1" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace min="-2" max="-2" attributes="0"/>
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="jScrollPane1" pref="370" max="32767" attributes="0"/>
|
<Component id="jScrollPane1" pref="388" max="32767" attributes="0"/>
|
||||||
<EmptySpace min="-2" pref="40" max="-2" attributes="0"/>
|
<EmptySpace min="-2" pref="40" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
@ -279,6 +301,12 @@
|
|||||||
<Property name="model" type="javax.swing.ListModel" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
|
<Property name="model" type="javax.swing.ListModel" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
|
||||||
<Connection code="new javax.swing.AbstractListModel<Signature>() {
 Signature[] signatures = {};
 public int getSize() { return signatures.length; }
 public Signature getElementAt(int i) { return signatures[i]; }
}" type="code"/>
|
<Connection code="new javax.swing.AbstractListModel<Signature>() {
 Signature[] signatures = {};
 public int getSize() { return signatures.length; }
 public Signature getElementAt(int i) { return signatures[i]; }
}" type="code"/>
|
||||||
</Property>
|
</Property>
|
||||||
|
<Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||||
|
<Dimension value="[32767, 32767]"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||||
|
<Dimension value="null"/>
|
||||||
|
</Property>
|
||||||
</Properties>
|
</Properties>
|
||||||
<AuxValues>
|
<AuxValues>
|
||||||
<AuxValue name="JavaCodeGenerator_TypeParameters" type="java.lang.String" value="<Signature>"/>
|
<AuxValue name="JavaCodeGenerator_TypeParameters" type="java.lang.String" value="<Signature>"/>
|
||||||
@ -291,4 +319,6 @@
|
|||||||
</SubComponents>
|
</SubComponents>
|
||||||
</Container>
|
</Container>
|
||||||
</SubComponents>
|
</SubComponents>
|
||||||
|
</Container>
|
||||||
|
</SubComponents>
|
||||||
</Form>
|
</Form>
|
||||||
|
@ -35,7 +35,7 @@ import org.sleuthkit.autopsy.corecomponents.OptionsPanel;
|
|||||||
import org.sleuthkit.autopsy.ingest.IngestManager;
|
import org.sleuthkit.autopsy.ingest.IngestManager;
|
||||||
import org.sleuthkit.autopsy.ingest.IngestModuleGlobalSettingsPanel;
|
import org.sleuthkit.autopsy.ingest.IngestModuleGlobalSettingsPanel;
|
||||||
import org.sleuthkit.autopsy.modules.filetypeid.FileType.Signature;
|
import org.sleuthkit.autopsy.modules.filetypeid.FileType.Signature;
|
||||||
import org.sleuthkit.autopsy.modules.filetypeid.UserDefinedFileTypesManager.UserDefinedFileTypesException;
|
import org.sleuthkit.autopsy.modules.filetypeid.CustomFileTypesManager.CustomFileTypesException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A panel to allow a user to make custom file type definitions. In addition to
|
* A panel to allow a user to make custom file type definitions. In addition to
|
||||||
@ -207,12 +207,12 @@ final class FileTypeIdGlobalSettingsPanel extends IngestModuleGlobalSettingsPane
|
|||||||
@Override
|
@Override
|
||||||
public void load() {
|
public void load() {
|
||||||
try {
|
try {
|
||||||
fileTypes = UserDefinedFileTypesManager.getInstance().getUserDefinedFileTypes();
|
fileTypes = CustomFileTypesManager.getInstance().getUserDefinedFileTypes();
|
||||||
updateFileTypesListModel();
|
updateFileTypesListModel();
|
||||||
if (!typesListModel.isEmpty()) {
|
if (!typesListModel.isEmpty()) {
|
||||||
typesList.setSelectedIndex(0);
|
typesList.setSelectedIndex(0);
|
||||||
}
|
}
|
||||||
} catch (UserDefinedFileTypesException ex) {
|
} catch (CustomFileTypesException ex) {
|
||||||
JOptionPane.showMessageDialog(null,
|
JOptionPane.showMessageDialog(null,
|
||||||
ex.getLocalizedMessage(),
|
ex.getLocalizedMessage(),
|
||||||
NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.JOptionPane.loadFailed.title"),
|
NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.JOptionPane.loadFailed.title"),
|
||||||
@ -266,8 +266,8 @@ final class FileTypeIdGlobalSettingsPanel extends IngestModuleGlobalSettingsPane
|
|||||||
@Override
|
@Override
|
||||||
public void store() {
|
public void store() {
|
||||||
try {
|
try {
|
||||||
UserDefinedFileTypesManager.getInstance().setUserDefinedFileTypes(fileTypes);
|
CustomFileTypesManager.getInstance().setUserDefinedFileTypes(fileTypes);
|
||||||
} catch (UserDefinedFileTypesManager.UserDefinedFileTypesException ex) {
|
} catch (CustomFileTypesManager.CustomFileTypesException ex) {
|
||||||
JOptionPane.showMessageDialog(null,
|
JOptionPane.showMessageDialog(null,
|
||||||
ex.getLocalizedMessage(),
|
ex.getLocalizedMessage(),
|
||||||
NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.JOptionPane.storeFailed.title"),
|
NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.JOptionPane.storeFailed.title"),
|
||||||
@ -304,21 +304,22 @@ final class FileTypeIdGlobalSettingsPanel extends IngestModuleGlobalSettingsPane
|
|||||||
|
|
||||||
ingestRunningWarningLabel = new javax.swing.JLabel();
|
ingestRunningWarningLabel = new javax.swing.JLabel();
|
||||||
jLabel3 = new javax.swing.JLabel();
|
jLabel3 = new javax.swing.JLabel();
|
||||||
|
jScrollPane2 = new javax.swing.JScrollPane();
|
||||||
jSplitPane1 = new javax.swing.JSplitPane();
|
jSplitPane1 = new javax.swing.JSplitPane();
|
||||||
jPanel1 = new javax.swing.JPanel();
|
jPanel1 = new javax.swing.JPanel();
|
||||||
jLabel2 = new javax.swing.JLabel();
|
jLabel2 = new javax.swing.JLabel();
|
||||||
typesScrollPane = new javax.swing.JScrollPane();
|
typesScrollPane = new javax.swing.JScrollPane();
|
||||||
typesList = new javax.swing.JList<FileType>();
|
typesList = new javax.swing.JList<>();
|
||||||
deleteTypeButton = new javax.swing.JButton();
|
deleteTypeButton = new javax.swing.JButton();
|
||||||
newTypeButton = new javax.swing.JButton();
|
newTypeButton = new javax.swing.JButton();
|
||||||
editTypeButton = new javax.swing.JButton();
|
editTypeButton = new javax.swing.JButton();
|
||||||
jPanel2 = new javax.swing.JPanel();
|
jPanel2 = new javax.swing.JPanel();
|
||||||
jLabel1 = new javax.swing.JLabel();
|
jLabel1 = new javax.swing.JLabel();
|
||||||
jScrollPane1 = new javax.swing.JScrollPane();
|
jScrollPane1 = new javax.swing.JScrollPane();
|
||||||
signatureList = new javax.swing.JList<Signature>();
|
signatureList = new javax.swing.JList<>();
|
||||||
|
|
||||||
setMaximumSize(new java.awt.Dimension(552, 297));
|
setMaximumSize(new java.awt.Dimension(752, 507));
|
||||||
setPreferredSize(new java.awt.Dimension(552, 297));
|
setPreferredSize(new java.awt.Dimension(752, 507));
|
||||||
|
|
||||||
ingestRunningWarningLabel.setFont(ingestRunningWarningLabel.getFont().deriveFont(ingestRunningWarningLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
|
ingestRunningWarningLabel.setFont(ingestRunningWarningLabel.getFont().deriveFont(ingestRunningWarningLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
|
||||||
ingestRunningWarningLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/modules/filetypeid/warning16.png"))); // NOI18N
|
ingestRunningWarningLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/modules/filetypeid/warning16.png"))); // NOI18N
|
||||||
@ -327,6 +328,12 @@ final class FileTypeIdGlobalSettingsPanel extends IngestModuleGlobalSettingsPane
|
|||||||
jLabel3.setFont(jLabel3.getFont().deriveFont(jLabel3.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
|
jLabel3.setFont(jLabel3.getFont().deriveFont(jLabel3.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(jLabel3, org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.jLabel3.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(jLabel3, org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.jLabel3.text")); // NOI18N
|
||||||
|
|
||||||
|
jScrollPane2.setMinimumSize(new java.awt.Dimension(300, 100));
|
||||||
|
|
||||||
|
jSplitPane1.setMinimumSize(new java.awt.Dimension(558, 285));
|
||||||
|
|
||||||
|
jPanel1.setMinimumSize(new java.awt.Dimension(362, 283));
|
||||||
|
|
||||||
jLabel2.setFont(jLabel2.getFont().deriveFont(jLabel2.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
|
jLabel2.setFont(jLabel2.getFont().deriveFont(jLabel2.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(jLabel2, org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.jLabel2.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(jLabel2, org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.jLabel2.text")); // NOI18N
|
||||||
|
|
||||||
@ -384,7 +391,7 @@ final class FileTypeIdGlobalSettingsPanel extends IngestModuleGlobalSettingsPane
|
|||||||
.addGap(12, 12, 12)
|
.addGap(12, 12, 12)
|
||||||
.addComponent(jLabel2)
|
.addComponent(jLabel2)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addComponent(typesScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 367, Short.MAX_VALUE)
|
.addComponent(typesScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 385, Short.MAX_VALUE)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||||
.addComponent(newTypeButton)
|
.addComponent(newTypeButton)
|
||||||
@ -397,6 +404,8 @@ final class FileTypeIdGlobalSettingsPanel extends IngestModuleGlobalSettingsPane
|
|||||||
|
|
||||||
jSplitPane1.setLeftComponent(jPanel1);
|
jSplitPane1.setLeftComponent(jPanel1);
|
||||||
|
|
||||||
|
jPanel2.setMinimumSize(new java.awt.Dimension(79, 283));
|
||||||
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.jLabel1.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.jLabel1.text")); // NOI18N
|
||||||
|
|
||||||
signatureList.setModel(new javax.swing.AbstractListModel<Signature>() {
|
signatureList.setModel(new javax.swing.AbstractListModel<Signature>() {
|
||||||
@ -404,6 +413,8 @@ final class FileTypeIdGlobalSettingsPanel extends IngestModuleGlobalSettingsPane
|
|||||||
public int getSize() { return signatures.length; }
|
public int getSize() { return signatures.length; }
|
||||||
public Signature getElementAt(int i) { return signatures[i]; }
|
public Signature getElementAt(int i) { return signatures[i]; }
|
||||||
});
|
});
|
||||||
|
signatureList.setMaximumSize(new java.awt.Dimension(32767, 32767));
|
||||||
|
signatureList.setPreferredSize(null);
|
||||||
jScrollPane1.setViewportView(signatureList);
|
jScrollPane1.setViewportView(signatureList);
|
||||||
|
|
||||||
javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
|
javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
|
||||||
@ -415,8 +426,8 @@ final class FileTypeIdGlobalSettingsPanel extends IngestModuleGlobalSettingsPane
|
|||||||
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(jPanel2Layout.createSequentialGroup()
|
.addGroup(jPanel2Layout.createSequentialGroup()
|
||||||
.addComponent(jLabel1)
|
.addComponent(jLabel1)
|
||||||
.addGap(0, 0, Short.MAX_VALUE))
|
.addGap(100, 100, 100))
|
||||||
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 385, Short.MAX_VALUE))
|
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE))
|
||||||
.addContainerGap())
|
.addContainerGap())
|
||||||
);
|
);
|
||||||
jPanel2Layout.setVerticalGroup(
|
jPanel2Layout.setVerticalGroup(
|
||||||
@ -425,12 +436,14 @@ final class FileTypeIdGlobalSettingsPanel extends IngestModuleGlobalSettingsPane
|
|||||||
.addContainerGap()
|
.addContainerGap()
|
||||||
.addComponent(jLabel1)
|
.addComponent(jLabel1)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 370, Short.MAX_VALUE)
|
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 388, Short.MAX_VALUE)
|
||||||
.addGap(40, 40, 40))
|
.addGap(40, 40, 40))
|
||||||
);
|
);
|
||||||
|
|
||||||
jSplitPane1.setRightComponent(jPanel2);
|
jSplitPane1.setRightComponent(jPanel2);
|
||||||
|
|
||||||
|
jScrollPane2.setViewportView(jSplitPane1);
|
||||||
|
|
||||||
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(
|
||||||
@ -440,10 +453,9 @@ final class FileTypeIdGlobalSettingsPanel extends IngestModuleGlobalSettingsPane
|
|||||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addComponent(ingestRunningWarningLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
.addComponent(ingestRunningWarningLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||||
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
|
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
|
||||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addComponent(jLabel3, javax.swing.GroupLayout.DEFAULT_SIZE, 753, Short.MAX_VALUE)
|
||||||
.addComponent(jLabel3, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
|
||||||
.addComponent(jSplitPane1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 782, Short.MAX_VALUE))
|
|
||||||
.addContainerGap())))
|
.addContainerGap())))
|
||||||
|
.addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||||
);
|
);
|
||||||
layout.setVerticalGroup(
|
layout.setVerticalGroup(
|
||||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
@ -451,10 +463,10 @@ final class FileTypeIdGlobalSettingsPanel extends IngestModuleGlobalSettingsPane
|
|||||||
.addGap(6, 6, 6)
|
.addGap(6, 6, 6)
|
||||||
.addComponent(jLabel3)
|
.addComponent(jLabel3)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addComponent(jSplitPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 443, Short.MAX_VALUE)
|
.addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addComponent(ingestRunningWarningLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 16, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addComponent(ingestRunningWarningLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 16, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
.addContainerGap())
|
.addGap(12, 12, 12))
|
||||||
);
|
);
|
||||||
}// </editor-fold>//GEN-END:initComponents
|
}// </editor-fold>//GEN-END:initComponents
|
||||||
|
|
||||||
@ -501,6 +513,7 @@ final class FileTypeIdGlobalSettingsPanel extends IngestModuleGlobalSettingsPane
|
|||||||
private javax.swing.JPanel jPanel1;
|
private javax.swing.JPanel jPanel1;
|
||||||
private javax.swing.JPanel jPanel2;
|
private javax.swing.JPanel jPanel2;
|
||||||
private javax.swing.JScrollPane jScrollPane1;
|
private javax.swing.JScrollPane jScrollPane1;
|
||||||
|
private javax.swing.JScrollPane jScrollPane2;
|
||||||
private javax.swing.JSplitPane jSplitPane1;
|
private javax.swing.JSplitPane jSplitPane1;
|
||||||
private javax.swing.JButton newTypeButton;
|
private javax.swing.JButton newTypeButton;
|
||||||
private javax.swing.JList<Signature> signatureList;
|
private javax.swing.JList<Signature> signatureList;
|
||||||
|
@ -160,14 +160,14 @@ HashDbManager.saveErrorExceptionMsg=Error saving hash configuration
|
|||||||
HashLookupSettingsPanel.optionsLabel.text=Options
|
HashLookupSettingsPanel.optionsLabel.text=Options
|
||||||
HashLookupSettingsPanel.jButton3.text=Import Database
|
HashLookupSettingsPanel.jButton3.text=Import Database
|
||||||
HashLookupSettingsPanel.indexPathLabelLabel.text=Index Path:
|
HashLookupSettingsPanel.indexPathLabelLabel.text=Index Path:
|
||||||
HashLookupSettingsPanel.createDatabaseButton.text=Create Database
|
HashLookupSettingsPanel.createDatabaseButton.text=Create DB
|
||||||
HashLookupSettingsPanel.jLabel6.text=Type:
|
HashLookupSettingsPanel.jLabel6.text=Type:
|
||||||
HashLookupSettingsPanel.jLabel4.text=Location:
|
HashLookupSettingsPanel.jLabel4.text=Location:
|
||||||
HashLookupSettingsPanel.jLabel2.text=Name:
|
HashLookupSettingsPanel.jLabel2.text=Name:
|
||||||
HashLookupSettingsPanel.indexPathLabel.text=No database selected
|
HashLookupSettingsPanel.indexPathLabel.text=No database selected
|
||||||
HashLookupSettingsPanel.ingestWarningLabel.text=Ingest is ongoing, some settings will be unavailable until it finishes.
|
HashLookupSettingsPanel.ingestWarningLabel.text=Ingest is ongoing, some settings will be unavailable until it finishes.
|
||||||
HashLookupSettingsPanel.deleteDatabaseButton.text=Delete Database
|
HashLookupSettingsPanel.deleteDatabaseButton.text=Delete DB
|
||||||
HashLookupSettingsPanel.importDatabaseButton.text=Import Database
|
HashLookupSettingsPanel.importDatabaseButton.text=Import DB
|
||||||
HashLookupSettingsPanel.hashDatabasesLabel.text=Hash Databases:
|
HashLookupSettingsPanel.hashDatabasesLabel.text=Hash Databases:
|
||||||
HashLookupSettingsPanel.nameLabel.text=Hash Set Name:
|
HashLookupSettingsPanel.nameLabel.text=Hash Set Name:
|
||||||
HashLookupSettingsPanel.informationLabel.text=Information
|
HashLookupSettingsPanel.informationLabel.text=Information
|
||||||
|
@ -53,10 +53,10 @@
|
|||||||
</NonVisualComponents>
|
</NonVisualComponents>
|
||||||
<Properties>
|
<Properties>
|
||||||
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||||
<Dimension value="[700, 430]"/>
|
<Dimension value="[700, 500]"/>
|
||||||
</Property>
|
</Property>
|
||||||
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||||
<Dimension value="[700, 430]"/>
|
<Dimension value="[700, 500]"/>
|
||||||
</Property>
|
</Property>
|
||||||
</Properties>
|
</Properties>
|
||||||
<AuxValues>
|
<AuxValues>
|
||||||
@ -74,18 +74,14 @@
|
|||||||
<Layout>
|
<Layout>
|
||||||
<DimensionLayout dim="0">
|
<DimensionLayout dim="0">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" alignment="0" attributes="0">
|
<Component id="jScrollPane2" alignment="0" pref="800" max="32767" attributes="0"/>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
|
||||||
<Component id="jScrollPane2" pref="690" max="32767" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
</Group>
|
</Group>
|
||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
<DimensionLayout dim="1">
|
<DimensionLayout dim="1">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" alignment="0" attributes="0">
|
<Group type="102" alignment="0" attributes="0">
|
||||||
|
<Component id="jScrollPane2" pref="537" max="32767" attributes="0"/>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
<Component id="jScrollPane2" min="-2" pref="410" max="-2" attributes="0"/>
|
|
||||||
<EmptySpace max="32767" attributes="0"/>
|
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
@ -98,7 +94,7 @@
|
|||||||
<Container class="javax.swing.JPanel" name="jPanel1">
|
<Container class="javax.swing.JPanel" name="jPanel1">
|
||||||
<Properties>
|
<Properties>
|
||||||
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||||
<Dimension value="[671, 430]"/>
|
<Dimension value="[671, 400]"/>
|
||||||
</Property>
|
</Property>
|
||||||
</Properties>
|
</Properties>
|
||||||
|
|
||||||
@ -106,16 +102,22 @@
|
|||||||
<DimensionLayout dim="0">
|
<DimensionLayout dim="0">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" attributes="0">
|
<Group type="102" attributes="0">
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" alignment="0" attributes="0">
|
<Group type="102" alignment="0" attributes="0">
|
||||||
<Group type="103" groupAlignment="1" max="-2" attributes="0">
|
<Group type="103" groupAlignment="1" attributes="0">
|
||||||
<Group type="102" attributes="0">
|
<Group type="102" alignment="1" attributes="0">
|
||||||
<Component id="createDatabaseButton" min="-2" pref="137" max="-2" attributes="0"/>
|
<Component id="createDatabaseButton" min="-2" pref="102" max="-2" attributes="0"/>
|
||||||
<EmptySpace max="32767" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
<Component id="importDatabaseButton" min="-2" pref="133" max="-2" attributes="0"/>
|
<Component id="importDatabaseButton" min="-2" pref="103" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="deleteDatabaseButton" min="-2" pref="102" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace min="0" pref="84" max="32767" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<Group type="102" alignment="1" attributes="0">
|
||||||
|
<EmptySpace min="1" pref="1" max="-2" attributes="0"/>
|
||||||
|
<Component id="jScrollPane1" pref="0" max="32767" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
<Component id="jScrollPane1" min="-2" pref="275" max="-2" attributes="0"/>
|
|
||||||
</Group>
|
</Group>
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" alignment="0" attributes="0">
|
<Group type="102" alignment="0" attributes="0">
|
||||||
@ -124,7 +126,7 @@
|
|||||||
<Group type="102" alignment="0" attributes="0">
|
<Group type="102" alignment="0" attributes="0">
|
||||||
<Component id="informationLabel" min="-2" max="-2" attributes="0"/>
|
<Component id="informationLabel" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
<Component id="informationSeparator" max="32767" attributes="0"/>
|
<Component id="informationSeparator" min="-2" pref="305" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
<Component id="ingestWarningLabel" alignment="0" min="-2" max="-2" attributes="0"/>
|
<Component id="ingestWarningLabel" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||||
<Group type="102" alignment="1" attributes="0">
|
<Group type="102" alignment="1" attributes="0">
|
||||||
@ -140,27 +142,23 @@
|
|||||||
</Group>
|
</Group>
|
||||||
<EmptySpace min="10" pref="10" max="-2" attributes="0"/>
|
<EmptySpace min="10" pref="10" max="-2" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Component id="hashDbTypeLabel" max="32767" attributes="0"/>
|
<Component id="hashDbTypeLabel" min="-2" pref="225" max="-2" attributes="0"/>
|
||||||
<Component id="hashDbLocationLabel" alignment="0" max="32767" attributes="0"/>
|
<Component id="hashDbLocationLabel" alignment="0" min="-2" pref="225" max="-2" attributes="0"/>
|
||||||
<Component id="indexPathLabel" max="32767" attributes="0"/>
|
<Component id="indexPathLabel" min="-2" pref="225" max="-2" attributes="0"/>
|
||||||
<Component id="hashDbIndexStatusLabel" alignment="0" max="32767" attributes="0"/>
|
<Component id="hashDbIndexStatusLabel" alignment="0" min="-2" pref="225" max="-2" attributes="0"/>
|
||||||
<Group type="102" alignment="0" attributes="0">
|
<Component id="addHashesToDatabaseButton" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="addHashesToDatabaseButton" min="-2" max="-2" attributes="0"/>
|
|
||||||
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
<Group type="102" alignment="0" attributes="0">
|
<Group type="102" alignment="0" attributes="0">
|
||||||
<Component id="nameLabel" min="-2" max="-2" attributes="0"/>
|
<Component id="nameLabel" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace min="-2" pref="53" max="-2" attributes="0"/>
|
<EmptySpace min="-2" pref="53" max="-2" attributes="0"/>
|
||||||
<Component id="hashDbNameLabel" min="-2" max="-2" attributes="0"/>
|
<Component id="hashDbNameLabel" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
|
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
<Group type="102" alignment="0" attributes="0">
|
<Group type="102" alignment="0" attributes="0">
|
||||||
<Component id="optionsLabel" min="-2" max="-2" attributes="0"/>
|
<Component id="optionsLabel" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="optionsSeparator" min="-2" pref="324" max="-2" attributes="0"/>
|
<Component id="optionsSeparator" min="-2" pref="324" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
@ -168,26 +166,22 @@
|
|||||||
<Group type="102" alignment="0" attributes="0">
|
<Group type="102" alignment="0" attributes="0">
|
||||||
<EmptySpace min="-2" pref="23" max="-2" attributes="0"/>
|
<EmptySpace min="-2" pref="23" max="-2" attributes="0"/>
|
||||||
<Component id="sendIngestMessagesCheckBox" min="-2" max="-2" attributes="0"/>
|
<Component id="sendIngestMessagesCheckBox" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
|
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
<Group type="102" attributes="0">
|
<Group type="102" attributes="0">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
|
||||||
<Component id="hashDatabasesLabel" min="-2" max="-2" attributes="0"/>
|
<Component id="hashDatabasesLabel" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="deleteDatabaseButton" alignment="0" min="-2" pref="137" max="-2" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
|
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
<DimensionLayout dim="1">
|
<DimensionLayout dim="1">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" attributes="0">
|
<Group type="102" attributes="0">
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="hashDatabasesLabel" min="-2" max="-2" attributes="0"/>
|
<Component id="hashDatabasesLabel" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace min="-2" pref="6" max="-2" attributes="0"/>
|
<EmptySpace min="-2" pref="6" max="-2" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
@ -239,16 +233,15 @@
|
|||||||
<EmptySpace type="separate" max="-2" attributes="0"/>
|
<EmptySpace type="separate" max="-2" attributes="0"/>
|
||||||
<Component id="ingestWarningLabel" min="-2" max="-2" attributes="0"/>
|
<Component id="ingestWarningLabel" min="-2" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
<Component id="jScrollPane1" min="-2" pref="304" max="-2" attributes="0"/>
|
<Component id="jScrollPane1" pref="425" max="32767" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="3" attributes="0">
|
<Group type="103" groupAlignment="3" attributes="0">
|
||||||
<Component id="importDatabaseButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
<Component id="importDatabaseButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="createDatabaseButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
<Component id="createDatabaseButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="deleteDatabaseButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace min="-2" pref="48" max="-2" attributes="0"/>
|
||||||
<Component id="deleteDatabaseButton" min="-2" max="-2" attributes="0"/>
|
|
||||||
<EmptySpace pref="33" max="32767" attributes="0"/>
|
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
|
@ -516,10 +516,10 @@ public final class HashLookupSettingsPanel extends IngestModuleGlobalSettingsPan
|
|||||||
jButton3.setFont(jButton3.getFont().deriveFont(jButton3.getFont().getStyle() & ~java.awt.Font.BOLD, 14));
|
jButton3.setFont(jButton3.getFont().deriveFont(jButton3.getFont().getStyle() & ~java.awt.Font.BOLD, 14));
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(jButton3, org.openide.util.NbBundle.getMessage(HashLookupSettingsPanel.class, "HashLookupSettingsPanel.jButton3.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(jButton3, org.openide.util.NbBundle.getMessage(HashLookupSettingsPanel.class, "HashLookupSettingsPanel.jButton3.text")); // NOI18N
|
||||||
|
|
||||||
setMinimumSize(new java.awt.Dimension(700, 430));
|
setMinimumSize(new java.awt.Dimension(700, 500));
|
||||||
setPreferredSize(new java.awt.Dimension(700, 430));
|
setPreferredSize(new java.awt.Dimension(700, 500));
|
||||||
|
|
||||||
jPanel1.setPreferredSize(new java.awt.Dimension(671, 430));
|
jPanel1.setPreferredSize(new java.awt.Dimension(671, 400));
|
||||||
|
|
||||||
ingestWarningLabel.setFont(ingestWarningLabel.getFont().deriveFont(ingestWarningLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
|
ingestWarningLabel.setFont(ingestWarningLabel.getFont().deriveFont(ingestWarningLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
|
||||||
ingestWarningLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/modules/hashdatabase/warning16.png"))); // NOI18N
|
ingestWarningLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/modules/hashdatabase/warning16.png"))); // NOI18N
|
||||||
@ -652,12 +652,17 @@ public final class HashLookupSettingsPanel extends IngestModuleGlobalSettingsPan
|
|||||||
.addContainerGap()
|
.addContainerGap()
|
||||||
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(jPanel1Layout.createSequentialGroup()
|
.addGroup(jPanel1Layout.createSequentialGroup()
|
||||||
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
|
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
|
||||||
.addGroup(jPanel1Layout.createSequentialGroup()
|
.addGroup(jPanel1Layout.createSequentialGroup()
|
||||||
.addComponent(createDatabaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, 137, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addComponent(createDatabaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, 102, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addComponent(importDatabaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, 133, javax.swing.GroupLayout.PREFERRED_SIZE))
|
.addComponent(importDatabaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, 103, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 275, javax.swing.GroupLayout.PREFERRED_SIZE))
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
|
.addComponent(deleteDatabaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, 102, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
|
.addGap(0, 84, Short.MAX_VALUE))
|
||||||
|
.addGroup(jPanel1Layout.createSequentialGroup()
|
||||||
|
.addGap(1, 1, 1)
|
||||||
|
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)))
|
||||||
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(jPanel1Layout.createSequentialGroup()
|
.addGroup(jPanel1Layout.createSequentialGroup()
|
||||||
.addGap(10, 10, 10)
|
.addGap(10, 10, 10)
|
||||||
@ -665,7 +670,7 @@ public final class HashLookupSettingsPanel extends IngestModuleGlobalSettingsPan
|
|||||||
.addGroup(jPanel1Layout.createSequentialGroup()
|
.addGroup(jPanel1Layout.createSequentialGroup()
|
||||||
.addComponent(informationLabel)
|
.addComponent(informationLabel)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addComponent(informationSeparator))
|
.addComponent(informationSeparator, javax.swing.GroupLayout.PREFERRED_SIZE, 305, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||||
.addComponent(ingestWarningLabel)
|
.addComponent(ingestWarningLabel)
|
||||||
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
|
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
|
||||||
.addGap(10, 10, 10)
|
.addGap(10, 10, 10)
|
||||||
@ -679,30 +684,24 @@ public final class HashLookupSettingsPanel extends IngestModuleGlobalSettingsPan
|
|||||||
.addComponent(indexPathLabelLabel))
|
.addComponent(indexPathLabelLabel))
|
||||||
.addGap(10, 10, 10)
|
.addGap(10, 10, 10)
|
||||||
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addComponent(hashDbTypeLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
.addComponent(hashDbTypeLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 225, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
.addComponent(hashDbLocationLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
.addComponent(hashDbLocationLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 225, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
.addComponent(indexPathLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
.addComponent(indexPathLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 225, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
.addComponent(hashDbIndexStatusLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
.addComponent(hashDbIndexStatusLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 225, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
.addGroup(jPanel1Layout.createSequentialGroup()
|
.addComponent(addHashesToDatabaseButton)))
|
||||||
.addComponent(addHashesToDatabaseButton)
|
|
||||||
.addGap(0, 0, Short.MAX_VALUE))))
|
|
||||||
.addGroup(jPanel1Layout.createSequentialGroup()
|
.addGroup(jPanel1Layout.createSequentialGroup()
|
||||||
.addComponent(nameLabel)
|
.addComponent(nameLabel)
|
||||||
.addGap(53, 53, 53)
|
.addGap(53, 53, 53)
|
||||||
.addComponent(hashDbNameLabel)
|
.addComponent(hashDbNameLabel))))
|
||||||
.addGap(0, 0, Short.MAX_VALUE))))
|
|
||||||
.addGroup(jPanel1Layout.createSequentialGroup()
|
.addGroup(jPanel1Layout.createSequentialGroup()
|
||||||
.addComponent(optionsLabel)
|
.addComponent(optionsLabel)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addComponent(optionsSeparator, javax.swing.GroupLayout.PREFERRED_SIZE, 324, javax.swing.GroupLayout.PREFERRED_SIZE))))
|
.addComponent(optionsSeparator, javax.swing.GroupLayout.PREFERRED_SIZE, 324, javax.swing.GroupLayout.PREFERRED_SIZE))))
|
||||||
.addGroup(jPanel1Layout.createSequentialGroup()
|
.addGroup(jPanel1Layout.createSequentialGroup()
|
||||||
.addGap(23, 23, 23)
|
.addGap(23, 23, 23)
|
||||||
.addComponent(sendIngestMessagesCheckBox)
|
.addComponent(sendIngestMessagesCheckBox))))
|
||||||
.addGap(0, 0, Short.MAX_VALUE))))
|
|
||||||
.addGroup(jPanel1Layout.createSequentialGroup()
|
.addGroup(jPanel1Layout.createSequentialGroup()
|
||||||
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
||||||
.addComponent(hashDatabasesLabel)
|
.addComponent(hashDatabasesLabel)
|
||||||
.addComponent(deleteDatabaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, 137, javax.swing.GroupLayout.PREFERRED_SIZE))
|
|
||||||
.addGap(0, 0, Short.MAX_VALUE)))
|
.addGap(0, 0, Short.MAX_VALUE)))
|
||||||
.addContainerGap())
|
.addContainerGap())
|
||||||
);
|
);
|
||||||
@ -751,14 +750,13 @@ public final class HashLookupSettingsPanel extends IngestModuleGlobalSettingsPan
|
|||||||
.addComponent(sendIngestMessagesCheckBox)
|
.addComponent(sendIngestMessagesCheckBox)
|
||||||
.addGap(18, 18, 18)
|
.addGap(18, 18, 18)
|
||||||
.addComponent(ingestWarningLabel))
|
.addComponent(ingestWarningLabel))
|
||||||
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 304, javax.swing.GroupLayout.PREFERRED_SIZE))
|
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 425, Short.MAX_VALUE))
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||||
.addComponent(importDatabaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addComponent(importDatabaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
.addComponent(createDatabaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
|
.addComponent(createDatabaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addComponent(deleteDatabaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||||
.addComponent(deleteDatabaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addGap(48, 48, 48))
|
||||||
.addContainerGap(33, Short.MAX_VALUE))
|
|
||||||
);
|
);
|
||||||
|
|
||||||
jScrollPane2.setViewportView(jPanel1);
|
jScrollPane2.setViewportView(jPanel1);
|
||||||
@ -767,16 +765,13 @@ public final class HashLookupSettingsPanel extends IngestModuleGlobalSettingsPan
|
|||||||
this.setLayout(layout);
|
this.setLayout(layout);
|
||||||
layout.setHorizontalGroup(
|
layout.setHorizontalGroup(
|
||||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(layout.createSequentialGroup()
|
.addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 800, Short.MAX_VALUE)
|
||||||
.addContainerGap()
|
|
||||||
.addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 690, Short.MAX_VALUE))
|
|
||||||
);
|
);
|
||||||
layout.setVerticalGroup(
|
layout.setVerticalGroup(
|
||||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(layout.createSequentialGroup()
|
.addGroup(layout.createSequentialGroup()
|
||||||
.addContainerGap()
|
.addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 537, Short.MAX_VALUE)
|
||||||
.addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 410, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addContainerGap())
|
||||||
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
|
||||||
);
|
);
|
||||||
}// </editor-fold>//GEN-END:initComponents
|
}// </editor-fold>//GEN-END:initComponents
|
||||||
|
|
||||||
|
@ -29,15 +29,12 @@
|
|||||||
<Layout>
|
<Layout>
|
||||||
<DimensionLayout dim="0">
|
<DimensionLayout dim="0">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" alignment="0" attributes="0">
|
<Component id="jScrollPane1" alignment="0" pref="762" max="32767" attributes="0"/>
|
||||||
<Component id="jScrollPane1" min="-2" pref="728" max="-2" attributes="0"/>
|
|
||||||
<EmptySpace min="0" pref="34" max="32767" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
</Group>
|
</Group>
|
||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
<DimensionLayout dim="1">
|
<DimensionLayout dim="1">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Component id="jScrollPane1" alignment="0" pref="503" max="32767" attributes="0"/>
|
<Component id="jScrollPane1" alignment="0" max="32767" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
</Layout>
|
</Layout>
|
||||||
@ -64,14 +61,30 @@
|
|||||||
|
|
||||||
<Layout>
|
<Layout>
|
||||||
<DimensionLayout dim="0">
|
<DimensionLayout dim="0">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Group type="102" attributes="0">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Group type="102" attributes="0">
|
||||||
|
<EmptySpace min="360" pref="360" max="-2" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Component id="rulesListLabel" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="jLabel5" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="ignoreKnownFilesCheckbox" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="jLabel6" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<Group type="102" alignment="0" attributes="0">
|
||||||
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" alignment="0" attributes="0">
|
<Group type="102" alignment="0" attributes="0">
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Component id="setsListLabel" alignment="0" min="-2" max="-2" attributes="0"/>
|
<Component id="setsListLabel" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||||
<Group type="103" alignment="0" groupAlignment="1" max="-2" attributes="0">
|
<Component id="setsListScrollPane" alignment="0" min="-2" pref="314" max="-2" attributes="0"/>
|
||||||
<Component id="setsListScrollPane" alignment="0" pref="314" max="32767" attributes="0"/>
|
<Component id="jScrollPane2" alignment="0" min="-2" pref="314" max="-2" attributes="0"/>
|
||||||
<Component id="jScrollPane2" alignment="0" max="32767" attributes="0"/>
|
</Group>
|
||||||
|
<EmptySpace type="separate" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="separator" min="-2" pref="6" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
<Group type="102" alignment="0" attributes="0">
|
<Group type="102" alignment="0" attributes="0">
|
||||||
<Component id="newSetButton" min="-2" pref="93" max="-2" attributes="0"/>
|
<Component id="newSetButton" min="-2" pref="93" max="-2" attributes="0"/>
|
||||||
@ -81,36 +94,17 @@
|
|||||||
<Component id="deleteSetButton" min="-2" max="-2" attributes="0"/>
|
<Component id="deleteSetButton" min="-2" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
<EmptySpace type="separate" max="-2" attributes="0"/>
|
|
||||||
<Component id="separator" min="-2" pref="6" max="-2" attributes="0"/>
|
|
||||||
<EmptySpace min="-2" pref="12" max="-2" attributes="0"/>
|
<EmptySpace min="-2" pref="12" max="-2" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="1" attributes="0">
|
|
||||||
<Group type="102" alignment="1" attributes="0">
|
|
||||||
<Component id="jLabel1" min="-2" max="-2" attributes="0"/>
|
|
||||||
<EmptySpace max="32767" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
<Group type="102" alignment="1" attributes="0">
|
|
||||||
<Component id="jLabel2" min="-2" max="-2" attributes="0"/>
|
|
||||||
<EmptySpace min="-2" pref="27" max="-2" attributes="0"/>
|
|
||||||
<Component id="filesRadioButton" min="-2" pref="47" max="-2" attributes="0"/>
|
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
|
||||||
<Component id="dirsRadioButton" min="-2" max="-2" attributes="0"/>
|
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
|
||||||
<Component id="bothRadioButton" min="-2" max="-2" attributes="0"/>
|
|
||||||
<EmptySpace min="-2" pref="27" max="-2" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
</Group>
|
|
||||||
</Group>
|
|
||||||
<Group type="102" 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">
|
||||||
<EmptySpace min="380" pref="380" max="-2" attributes="0"/>
|
<EmptySpace min="20" pref="20" max="-2" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Group type="102" alignment="0" attributes="0">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" 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="0" attributes="0">
|
||||||
<Component id="jLabel3" alignment="0" min="-2" max="-2" attributes="0"/>
|
<Component id="jLabel3" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="jLabel7" alignment="0" min="-2" max="-2" attributes="0"/>
|
<Component id="jLabel2" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="jLabel8" alignment="0" min="-2" max="-2" attributes="0"/>
|
|
||||||
</Group>
|
</Group>
|
||||||
<EmptySpace min="-2" pref="6" max="-2" attributes="0"/>
|
<EmptySpace min="-2" pref="6" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
@ -119,45 +113,50 @@
|
|||||||
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
<Group type="103" groupAlignment="1" max="-2" attributes="0">
|
<Group type="103" groupAlignment="1" attributes="0">
|
||||||
<Component id="rulePathConditionTextField" alignment="0" max="32767" attributes="0"/>
|
<Component id="rulePathConditionTextField" alignment="0" max="32767" attributes="0"/>
|
||||||
<Group type="102" alignment="0" attributes="0">
|
|
||||||
<Component id="equalitySignComboBox" min="-2" pref="38" max="-2" attributes="0"/>
|
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
|
||||||
<Component id="jSpinner1" min="-2" pref="104" max="-2" attributes="0"/>
|
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
|
||||||
<Component id="fileSizeUnitComboBox" min="-2" pref="83" max="-2" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
<Component id="mimeTypeComboBox" alignment="0" pref="245" max="32767" attributes="0"/>
|
|
||||||
<Component id="fileNameTextField" max="32767" attributes="0"/>
|
<Component id="fileNameTextField" max="32767" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
<Group type="102" alignment="0" attributes="0">
|
<Group type="102" alignment="0" attributes="0">
|
||||||
<EmptySpace min="360" pref="360" max="-2" attributes="0"/>
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Component id="rulesListLabel" min="-2" max="-2" attributes="0"/>
|
<Component id="jLabel7" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="jLabel8" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace min="-2" pref="6" max="-2" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="1" attributes="0">
|
||||||
|
<Group type="102" alignment="0" attributes="0">
|
||||||
|
<Component id="equalitySignComboBox" min="-2" pref="38" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="fileSizeSpinner" max="32767" attributes="0"/>
|
||||||
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="fileSizeUnitComboBox" min="-2" pref="83" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace min="8" pref="8" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<Component id="mimeTypeComboBox" alignment="0" max="32767" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
<Group type="102" attributes="0">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Component id="setDescScrollPanel" alignment="0" max="32767" attributes="0"/>
|
||||||
|
<Component id="rulesListScrollPane" alignment="0" max="32767" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace min="7" pref="7" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<Group type="102" attributes="0">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Component id="jLabel1" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Group type="102" alignment="0" attributes="0">
|
||||||
|
<EmptySpace min="-2" pref="92" max="-2" attributes="0"/>
|
||||||
|
<Component id="filesRadioButton" min="-2" pref="47" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
||||||
|
<Component id="dirsRadioButton" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="bothRadioButton" min="-2" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
<Group type="102" alignment="0" attributes="0">
|
<Group type="102" alignment="0" attributes="0">
|
||||||
<EmptySpace min="360" pref="360" max="-2" attributes="0"/>
|
|
||||||
<Component id="jLabel5" min="-2" max="-2" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
<Group type="102" alignment="0" attributes="0">
|
|
||||||
<EmptySpace min="360" pref="360" max="-2" attributes="0"/>
|
|
||||||
<Component id="ignoreKnownFilesCheckbox" min="-2" max="-2" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
<Group type="102" alignment="0" attributes="0">
|
|
||||||
<EmptySpace min="360" pref="360" max="-2" attributes="0"/>
|
|
||||||
<Component id="setDescScrollPanel" min="-2" pref="336" max="-2" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
<Group type="102" alignment="0" attributes="0">
|
|
||||||
<EmptySpace min="360" pref="360" max="-2" attributes="0"/>
|
|
||||||
<Component id="jLabel6" min="-2" max="-2" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
<Group type="102" alignment="0" attributes="0">
|
|
||||||
<EmptySpace min="360" pref="360" max="-2" attributes="0"/>
|
|
||||||
<Component id="rulesListScrollPane" min="-2" pref="336" max="-2" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
<Group type="102" alignment="0" attributes="0">
|
|
||||||
<EmptySpace min="360" pref="360" max="-2" attributes="0"/>
|
|
||||||
<Component id="newRuleButton" min="-2" max="-2" attributes="0"/>
|
<Component id="newRuleButton" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace type="separate" max="-2" attributes="0"/>
|
<EmptySpace type="separate" max="-2" attributes="0"/>
|
||||||
<Component id="editRuleButton" min="-2" max="-2" attributes="0"/>
|
<Component id="editRuleButton" min="-2" max="-2" attributes="0"/>
|
||||||
@ -165,7 +164,7 @@
|
|||||||
<Component id="deleteRuleButton" min="-2" max="-2" attributes="0"/>
|
<Component id="deleteRuleButton" min="-2" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
<Group type="102" alignment="0" attributes="0">
|
<Group type="102" alignment="0" attributes="0">
|
||||||
<EmptySpace min="456" pref="456" max="-2" attributes="0"/>
|
<EmptySpace min="-2" pref="96" max="-2" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" alignment="0" attributes="0">
|
<Group type="102" alignment="0" attributes="0">
|
||||||
<Component id="fileNameRadioButton" min="-2" max="-2" attributes="0"/>
|
<Component id="fileNameRadioButton" min="-2" max="-2" attributes="0"/>
|
||||||
@ -178,25 +177,30 @@
|
|||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
<EmptySpace min="-2" pref="20" max="-2" attributes="0"/>
|
<EmptySpace min="-2" pref="4" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace min="-2" pref="23" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
<DimensionLayout dim="1">
|
<DimensionLayout dim="1">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" attributes="0">
|
<Group type="102" attributes="0">
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Component id="separator" max="32767" attributes="0"/>
|
<Component id="separator" max="32767" attributes="0"/>
|
||||||
<Group type="102" attributes="0">
|
<Group type="102" attributes="0">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" attributes="0">
|
<Group type="102" attributes="0">
|
||||||
<Component id="jScrollPane2" min="-2" max="-2" attributes="0"/>
|
<Component id="jScrollPane2" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace type="separate" max="-2" attributes="0"/>
|
<EmptySpace type="separate" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="setsListLabel" min="-2" max="-2" attributes="0"/>
|
<Component id="setsListLabel" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="setsListScrollPane" min="-2" pref="199" max="-2" attributes="0"/>
|
<Component id="setsListScrollPane" pref="354" max="32767" attributes="0"/>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="3" attributes="0">
|
<Group type="103" groupAlignment="3" attributes="0">
|
||||||
<Component id="newSetButton" linkSize="2" alignment="3" min="-2" max="-2" attributes="0"/>
|
<Component id="newSetButton" linkSize="2" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="editSetButton" linkSize="2" alignment="3" min="-2" max="-2" attributes="0"/>
|
<Component id="editSetButton" linkSize="2" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
@ -205,23 +209,23 @@
|
|||||||
</Group>
|
</Group>
|
||||||
<Group type="102" alignment="0" attributes="0">
|
<Group type="102" alignment="0" attributes="0">
|
||||||
<Component id="jLabel6" min="-2" max="-2" attributes="0"/>
|
<Component id="jLabel6" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="jLabel5" min="-2" max="-2" attributes="0"/>
|
<Component id="jLabel5" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="setDescScrollPanel" min="-2" pref="42" max="-2" attributes="0"/>
|
<Component id="setDescScrollPanel" min="-2" pref="42" max="-2" attributes="0"/>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="ignoreKnownFilesCheckbox" min="-2" max="-2" attributes="0"/>
|
<Component id="ignoreKnownFilesCheckbox" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
<EmptySpace type="unrelated" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="rulesListLabel" min="-2" max="-2" attributes="0"/>
|
<Component id="rulesListLabel" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="rulesListScrollPane" min="-2" pref="64" max="-2" attributes="0"/>
|
<Component id="rulesListScrollPane" pref="67" max="32767" attributes="0"/>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace min="-2" pref="10" max="-2" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="3" attributes="0">
|
<Group type="103" groupAlignment="3" attributes="0">
|
||||||
<Component id="newRuleButton" linkSize="2" alignment="3" min="-2" max="-2" attributes="0"/>
|
<Component id="newRuleButton" linkSize="2" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="editRuleButton" linkSize="2" alignment="3" min="-2" max="-2" attributes="0"/>
|
<Component id="editRuleButton" linkSize="2" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="deleteRuleButton" linkSize="2" alignment="3" min="-2" max="-2" attributes="0"/>
|
<Component id="deleteRuleButton" linkSize="2" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="jLabel1" min="-2" max="-2" attributes="0"/>
|
<Component id="jLabel1" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace min="-2" pref="2" max="-2" attributes="0"/>
|
<EmptySpace min="-2" pref="2" max="-2" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="3" attributes="0">
|
<Group type="103" groupAlignment="3" attributes="0">
|
||||||
@ -235,22 +239,20 @@
|
|||||||
<Component id="jLabel3" alignment="3" min="-2" max="-2" attributes="0"/>
|
<Component id="jLabel3" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="fileNameTextField" alignment="3" min="-2" pref="20" max="-2" attributes="0"/>
|
<Component id="fileNameTextField" alignment="3" min="-2" pref="20" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="3" attributes="0">
|
<Group type="103" groupAlignment="3" attributes="0">
|
||||||
<Component id="fileNameRadioButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
<Component id="fileNameRadioButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="fileNameExtensionRadioButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
<Component id="fileNameExtensionRadioButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="fileNameRegexCheckbox" alignment="3" min="-2" max="-2" attributes="0"/>
|
<Component id="fileNameRegexCheckbox" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
|
||||||
</Group>
|
|
||||||
<EmptySpace min="-2" pref="14" max="-2" attributes="0"/>
|
<EmptySpace min="-2" pref="14" max="-2" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="3" attributes="0">
|
<Group type="103" groupAlignment="3" attributes="0">
|
||||||
<Component id="jLabel4" alignment="3" min="-2" max="-2" attributes="0"/>
|
<Component id="jLabel4" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="rulePathConditionTextField" alignment="3" min="-2" pref="20" max="-2" attributes="0"/>
|
<Component id="rulePathConditionTextField" alignment="3" min="-2" pref="20" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="rulePathConditionRegexCheckBox" min="-2" max="-2" attributes="0"/>
|
<Component id="rulePathConditionRegexCheckBox" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace min="-2" pref="10" max="-2" attributes="0"/>
|
<EmptySpace type="unrelated" min="-2" max="-2" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="3" attributes="0">
|
<Group type="103" groupAlignment="3" attributes="0">
|
||||||
<Component id="jLabel7" alignment="3" min="-2" max="-2" attributes="0"/>
|
<Component id="jLabel7" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="mimeTypeComboBox" alignment="3" min="-2" max="-2" attributes="0"/>
|
<Component id="mimeTypeComboBox" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
@ -259,12 +261,15 @@
|
|||||||
<Group type="103" groupAlignment="3" attributes="0">
|
<Group type="103" groupAlignment="3" attributes="0">
|
||||||
<Component id="jLabel8" alignment="3" min="-2" max="-2" attributes="0"/>
|
<Component id="jLabel8" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="equalitySignComboBox" alignment="3" min="-2" max="-2" attributes="0"/>
|
<Component id="equalitySignComboBox" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="jSpinner1" alignment="3" min="-2" max="-2" attributes="0"/>
|
<Component id="fileSizeSpinner" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="fileSizeUnitComboBox" alignment="3" min="-2" max="-2" attributes="0"/>
|
<Component id="fileSizeUnitComboBox" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
|
<EmptySpace min="13" pref="13" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace min="-2" pref="5" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
@ -405,6 +410,12 @@
|
|||||||
</Property>
|
</Property>
|
||||||
<Property name="lineWrap" type="boolean" value="true"/>
|
<Property name="lineWrap" type="boolean" value="true"/>
|
||||||
<Property name="rows" type="int" value="2"/>
|
<Property name="rows" type="int" value="2"/>
|
||||||
|
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||||
|
<Dimension value="[10, 22]"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||||
|
<Dimension value="[14, 40]"/>
|
||||||
|
</Property>
|
||||||
</Properties>
|
</Properties>
|
||||||
</Component>
|
</Component>
|
||||||
</SubComponents>
|
</SubComponents>
|
||||||
@ -778,6 +789,12 @@
|
|||||||
<Connection code="new javax.swing.DefaultComboBoxModel<String>(new String[] {""})" type="code"/>
|
<Connection code="new javax.swing.DefaultComboBoxModel<String>(new String[] {""})" type="code"/>
|
||||||
</Property>
|
</Property>
|
||||||
<Property name="enabled" type="boolean" value="false"/>
|
<Property name="enabled" type="boolean" value="false"/>
|
||||||
|
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||||
|
<Dimension value="[0, 20]"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||||
|
<Dimension value="[12, 20]"/>
|
||||||
|
</Property>
|
||||||
</Properties>
|
</Properties>
|
||||||
<AuxValues>
|
<AuxValues>
|
||||||
<AuxValue name="JavaCodeGenerator_TypeParameters" type="java.lang.String" value="<String>"/>
|
<AuxValue name="JavaCodeGenerator_TypeParameters" type="java.lang.String" value="<String>"/>
|
||||||
@ -802,9 +819,12 @@
|
|||||||
<AuxValue name="JavaCodeGenerator_TypeParameters" type="java.lang.String" value="<String>"/>
|
<AuxValue name="JavaCodeGenerator_TypeParameters" type="java.lang.String" value="<String>"/>
|
||||||
</AuxValues>
|
</AuxValues>
|
||||||
</Component>
|
</Component>
|
||||||
<Component class="javax.swing.JSpinner" name="jSpinner1">
|
<Component class="javax.swing.JSpinner" name="fileSizeSpinner">
|
||||||
<Properties>
|
<Properties>
|
||||||
<Property name="enabled" type="boolean" value="false"/>
|
<Property name="enabled" type="boolean" value="false"/>
|
||||||
|
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||||
|
<Dimension value="[2, 20]"/>
|
||||||
|
</Property>
|
||||||
</Properties>
|
</Properties>
|
||||||
</Component>
|
</Component>
|
||||||
<Component class="javax.swing.JComboBox" name="fileSizeUnitComboBox">
|
<Component class="javax.swing.JComboBox" name="fileSizeUnitComboBox">
|
||||||
|
@ -208,6 +208,10 @@ final class InterestingItemDefsPanel extends IngestModuleGlobalSettingsPanel imp
|
|||||||
this.filesRadioButton.setSelected(true);
|
this.filesRadioButton.setSelected(true);
|
||||||
this.rulePathConditionTextField.setText("");
|
this.rulePathConditionTextField.setText("");
|
||||||
this.rulePathConditionRegexCheckBox.setSelected(false);
|
this.rulePathConditionRegexCheckBox.setSelected(false);
|
||||||
|
this.mimeTypeComboBox.setSelectedIndex(0);
|
||||||
|
this.equalitySignComboBox.setSelectedIndex(2);
|
||||||
|
this.fileSizeUnitComboBox.setSelectedIndex(1);
|
||||||
|
this.fileSizeSpinner.setValue(0);
|
||||||
this.newRuleButton.setEnabled(!this.setsListModel.isEmpty());
|
this.newRuleButton.setEnabled(!this.setsListModel.isEmpty());
|
||||||
this.editRuleButton.setEnabled(false);
|
this.editRuleButton.setEnabled(false);
|
||||||
this.deleteRuleButton.setEnabled(false);
|
this.deleteRuleButton.setEnabled(false);
|
||||||
@ -317,11 +321,11 @@ final class InterestingItemDefsPanel extends IngestModuleGlobalSettingsPanel imp
|
|||||||
if (fileSizeCondition != null) {
|
if (fileSizeCondition != null) {
|
||||||
InterestingItemDefsPanel.this.fileSizeUnitComboBox.setSelectedItem(fileSizeCondition.getUnit().getName());
|
InterestingItemDefsPanel.this.fileSizeUnitComboBox.setSelectedItem(fileSizeCondition.getUnit().getName());
|
||||||
InterestingItemDefsPanel.this.equalitySignComboBox.setSelectedItem(fileSizeCondition.getComparator().getSymbol());
|
InterestingItemDefsPanel.this.equalitySignComboBox.setSelectedItem(fileSizeCondition.getComparator().getSymbol());
|
||||||
InterestingItemDefsPanel.this.jSpinner1.setValue(fileSizeCondition.getSizeValue());
|
InterestingItemDefsPanel.this.fileSizeSpinner.setValue(fileSizeCondition.getSizeValue());
|
||||||
} else {
|
} else {
|
||||||
InterestingItemDefsPanel.this.fileSizeUnitComboBox.setSelectedIndex(1);
|
InterestingItemDefsPanel.this.fileSizeUnitComboBox.setSelectedIndex(1);
|
||||||
InterestingItemDefsPanel.this.equalitySignComboBox.setSelectedIndex(2);
|
InterestingItemDefsPanel.this.equalitySignComboBox.setSelectedIndex(2);
|
||||||
InterestingItemDefsPanel.this.jSpinner1.setValue(0);
|
InterestingItemDefsPanel.this.fileSizeSpinner.setValue(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Enable the new, edit and delete rule buttons.
|
// Enable the new, edit and delete rule buttons.
|
||||||
@ -493,12 +497,12 @@ final class InterestingItemDefsPanel extends IngestModuleGlobalSettingsPanel imp
|
|||||||
editRuleButton = new javax.swing.JButton();
|
editRuleButton = new javax.swing.JButton();
|
||||||
rulesListLabel = new javax.swing.JLabel();
|
rulesListLabel = new javax.swing.JLabel();
|
||||||
rulesListScrollPane = new javax.swing.JScrollPane();
|
rulesListScrollPane = new javax.swing.JScrollPane();
|
||||||
rulesList = new javax.swing.JList<FilesSet.Rule>();
|
rulesList = new javax.swing.JList<>();
|
||||||
setDescScrollPanel = new javax.swing.JScrollPane();
|
setDescScrollPanel = new javax.swing.JScrollPane();
|
||||||
setDescriptionTextArea = new javax.swing.JTextArea();
|
setDescriptionTextArea = new javax.swing.JTextArea();
|
||||||
editSetButton = new javax.swing.JButton();
|
editSetButton = new javax.swing.JButton();
|
||||||
setsListScrollPane = new javax.swing.JScrollPane();
|
setsListScrollPane = new javax.swing.JScrollPane();
|
||||||
setsList = new javax.swing.JList<FilesSet>();
|
setsList = new javax.swing.JList<>();
|
||||||
fileNameExtensionRadioButton = new javax.swing.JRadioButton();
|
fileNameExtensionRadioButton = new javax.swing.JRadioButton();
|
||||||
jLabel3 = new javax.swing.JLabel();
|
jLabel3 = new javax.swing.JLabel();
|
||||||
fileNameTextField = new javax.swing.JTextField();
|
fileNameTextField = new javax.swing.JTextField();
|
||||||
@ -521,10 +525,10 @@ final class InterestingItemDefsPanel extends IngestModuleGlobalSettingsPanel imp
|
|||||||
jScrollPane2 = new javax.swing.JScrollPane();
|
jScrollPane2 = new javax.swing.JScrollPane();
|
||||||
jTextArea1 = new javax.swing.JTextArea();
|
jTextArea1 = new javax.swing.JTextArea();
|
||||||
jLabel7 = new javax.swing.JLabel();
|
jLabel7 = new javax.swing.JLabel();
|
||||||
mimeTypeComboBox = new javax.swing.JComboBox<String>();
|
mimeTypeComboBox = new javax.swing.JComboBox<>();
|
||||||
jLabel8 = new javax.swing.JLabel();
|
jLabel8 = new javax.swing.JLabel();
|
||||||
equalitySignComboBox = new javax.swing.JComboBox<String>();
|
equalitySignComboBox = new javax.swing.JComboBox<String>();
|
||||||
jSpinner1 = new javax.swing.JSpinner();
|
fileSizeSpinner = new javax.swing.JSpinner();
|
||||||
fileSizeUnitComboBox = new javax.swing.JComboBox<String>();
|
fileSizeUnitComboBox = new javax.swing.JComboBox<String>();
|
||||||
|
|
||||||
setFont(getFont().deriveFont(getFont().getStyle() & ~java.awt.Font.BOLD, 11));
|
setFont(getFont().deriveFont(getFont().getStyle() & ~java.awt.Font.BOLD, 11));
|
||||||
@ -578,6 +582,8 @@ final class InterestingItemDefsPanel extends IngestModuleGlobalSettingsPanel imp
|
|||||||
setDescriptionTextArea.setFont(setDescriptionTextArea.getFont().deriveFont(setDescriptionTextArea.getFont().getStyle() & ~java.awt.Font.BOLD, 13));
|
setDescriptionTextArea.setFont(setDescriptionTextArea.getFont().deriveFont(setDescriptionTextArea.getFont().getStyle() & ~java.awt.Font.BOLD, 13));
|
||||||
setDescriptionTextArea.setLineWrap(true);
|
setDescriptionTextArea.setLineWrap(true);
|
||||||
setDescriptionTextArea.setRows(2);
|
setDescriptionTextArea.setRows(2);
|
||||||
|
setDescriptionTextArea.setMinimumSize(new java.awt.Dimension(10, 22));
|
||||||
|
setDescriptionTextArea.setPreferredSize(new java.awt.Dimension(14, 40));
|
||||||
setDescScrollPanel.setViewportView(setDescriptionTextArea);
|
setDescScrollPanel.setViewportView(setDescriptionTextArea);
|
||||||
|
|
||||||
editSetButton.setFont(editSetButton.getFont().deriveFont(editSetButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
|
editSetButton.setFont(editSetButton.getFont().deriveFont(editSetButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
|
||||||
@ -717,13 +723,16 @@ final class InterestingItemDefsPanel extends IngestModuleGlobalSettingsPanel imp
|
|||||||
mimeTypeComboBox.setEditable(true);
|
mimeTypeComboBox.setEditable(true);
|
||||||
mimeTypeComboBox.setModel(new javax.swing.DefaultComboBoxModel<String>(new String[] {""}));
|
mimeTypeComboBox.setModel(new javax.swing.DefaultComboBoxModel<String>(new String[] {""}));
|
||||||
mimeTypeComboBox.setEnabled(false);
|
mimeTypeComboBox.setEnabled(false);
|
||||||
|
mimeTypeComboBox.setMinimumSize(new java.awt.Dimension(0, 20));
|
||||||
|
mimeTypeComboBox.setPreferredSize(new java.awt.Dimension(12, 20));
|
||||||
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(jLabel8, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.jLabel8.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(jLabel8, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.jLabel8.text")); // NOI18N
|
||||||
|
|
||||||
equalitySignComboBox.setModel(new javax.swing.DefaultComboBoxModel<String>(new String[] { "=", ">", "≥", "<", "≤" }));
|
equalitySignComboBox.setModel(new javax.swing.DefaultComboBoxModel<String>(new String[] { "=", ">", "≥", "<", "≤" }));
|
||||||
equalitySignComboBox.setEnabled(false);
|
equalitySignComboBox.setEnabled(false);
|
||||||
|
|
||||||
jSpinner1.setEnabled(false);
|
fileSizeSpinner.setEnabled(false);
|
||||||
|
fileSizeSpinner.setMinimumSize(new java.awt.Dimension(2, 20));
|
||||||
|
|
||||||
fileSizeUnitComboBox.setModel(new javax.swing.DefaultComboBoxModel<String>(new String[] { Bundle.InterestingItemDefsPanel_bytes(), Bundle.InterestingItemDefsPanel_kiloBytes(), Bundle.InterestingItemDefsPanel_megaBytes(), Bundle.InterestingItemDefsPanel_gigaBytes() }));
|
fileSizeUnitComboBox.setModel(new javax.swing.DefaultComboBoxModel<String>(new String[] { Bundle.InterestingItemDefsPanel_bytes(), Bundle.InterestingItemDefsPanel_kiloBytes(), Bundle.InterestingItemDefsPanel_megaBytes(), Bundle.InterestingItemDefsPanel_gigaBytes() }));
|
||||||
fileSizeUnitComboBox.setEnabled(false);
|
fileSizeUnitComboBox.setEnabled(false);
|
||||||
@ -732,86 +741,87 @@ final class InterestingItemDefsPanel extends IngestModuleGlobalSettingsPanel imp
|
|||||||
jPanel1.setLayout(jPanel1Layout);
|
jPanel1.setLayout(jPanel1Layout);
|
||||||
jPanel1Layout.setHorizontalGroup(
|
jPanel1Layout.setHorizontalGroup(
|
||||||
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addGroup(jPanel1Layout.createSequentialGroup()
|
||||||
|
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addGroup(jPanel1Layout.createSequentialGroup()
|
||||||
|
.addGap(360, 360, 360)
|
||||||
|
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addComponent(rulesListLabel)
|
||||||
|
.addComponent(jLabel5)
|
||||||
|
.addComponent(ignoreKnownFilesCheckbox)
|
||||||
|
.addComponent(jLabel6))
|
||||||
|
.addGap(0, 0, Short.MAX_VALUE))
|
||||||
.addGroup(jPanel1Layout.createSequentialGroup()
|
.addGroup(jPanel1Layout.createSequentialGroup()
|
||||||
.addContainerGap()
|
.addContainerGap()
|
||||||
|
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addGroup(jPanel1Layout.createSequentialGroup()
|
||||||
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addComponent(setsListLabel)
|
.addComponent(setsListLabel)
|
||||||
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
|
.addComponent(setsListScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 314, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
.addComponent(setsListScrollPane, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 314, Short.MAX_VALUE)
|
.addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 314, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||||
.addComponent(jScrollPane2, javax.swing.GroupLayout.Alignment.LEADING))
|
.addGap(18, 18, 18)
|
||||||
|
.addComponent(separator, javax.swing.GroupLayout.PREFERRED_SIZE, 6, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||||
.addGroup(jPanel1Layout.createSequentialGroup()
|
.addGroup(jPanel1Layout.createSequentialGroup()
|
||||||
.addComponent(newSetButton, javax.swing.GroupLayout.PREFERRED_SIZE, 93, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addComponent(newSetButton, javax.swing.GroupLayout.PREFERRED_SIZE, 93, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||||
.addComponent(editSetButton, javax.swing.GroupLayout.PREFERRED_SIZE, 89, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addComponent(editSetButton, javax.swing.GroupLayout.PREFERRED_SIZE, 89, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||||
.addComponent(deleteSetButton)))
|
.addComponent(deleteSetButton)))
|
||||||
.addGap(18, 18, 18)
|
|
||||||
.addComponent(separator, javax.swing.GroupLayout.PREFERRED_SIZE, 6, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
||||||
.addGap(12, 12, 12)
|
.addGap(12, 12, 12)
|
||||||
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
|
|
||||||
.addGroup(jPanel1Layout.createSequentialGroup()
|
|
||||||
.addComponent(jLabel1)
|
|
||||||
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
|
||||||
.addGroup(jPanel1Layout.createSequentialGroup()
|
|
||||||
.addComponent(jLabel2)
|
|
||||||
.addGap(27, 27, 27)
|
|
||||||
.addComponent(filesRadioButton, javax.swing.GroupLayout.PREFERRED_SIZE, 47, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
||||||
.addComponent(dirsRadioButton)
|
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
||||||
.addComponent(bothRadioButton)
|
|
||||||
.addGap(27, 27, 27))))
|
|
||||||
.addGroup(jPanel1Layout.createSequentialGroup()
|
|
||||||
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(jPanel1Layout.createSequentialGroup()
|
.addGroup(jPanel1Layout.createSequentialGroup()
|
||||||
.addGap(380, 380, 380)
|
.addGap(20, 20, 20)
|
||||||
|
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addGroup(jPanel1Layout.createSequentialGroup()
|
||||||
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(jPanel1Layout.createSequentialGroup()
|
.addGroup(jPanel1Layout.createSequentialGroup()
|
||||||
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addComponent(jLabel3)
|
.addComponent(jLabel3)
|
||||||
.addComponent(jLabel7)
|
.addComponent(jLabel2))
|
||||||
.addComponent(jLabel8))
|
|
||||||
.addGap(6, 6, 6))
|
.addGap(6, 6, 6))
|
||||||
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
|
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
|
||||||
.addComponent(jLabel4)
|
.addComponent(jLabel4)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)))
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)))
|
||||||
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
|
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
|
||||||
.addComponent(rulePathConditionTextField, javax.swing.GroupLayout.Alignment.LEADING)
|
.addComponent(rulePathConditionTextField, javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addComponent(fileNameTextField)))
|
||||||
|
.addGroup(jPanel1Layout.createSequentialGroup()
|
||||||
|
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addComponent(jLabel7)
|
||||||
|
.addComponent(jLabel8))
|
||||||
|
.addGap(6, 6, 6)
|
||||||
|
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
|
||||||
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel1Layout.createSequentialGroup()
|
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel1Layout.createSequentialGroup()
|
||||||
.addComponent(equalitySignComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 38, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addComponent(equalitySignComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 38, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addComponent(jSpinner1, javax.swing.GroupLayout.PREFERRED_SIZE, 104, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addComponent(fileSizeSpinner, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addComponent(fileSizeUnitComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 83, javax.swing.GroupLayout.PREFERRED_SIZE))
|
.addComponent(fileSizeUnitComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 83, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
.addComponent(mimeTypeComboBox, javax.swing.GroupLayout.Alignment.LEADING, 0, 245, Short.MAX_VALUE)
|
.addGap(8, 8, 8))
|
||||||
.addComponent(fileNameTextField)))
|
.addComponent(mimeTypeComboBox, javax.swing.GroupLayout.Alignment.LEADING, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))))
|
||||||
.addGroup(jPanel1Layout.createSequentialGroup()
|
.addGroup(jPanel1Layout.createSequentialGroup()
|
||||||
.addGap(360, 360, 360)
|
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addComponent(rulesListLabel))
|
.addComponent(setDescScrollPanel)
|
||||||
|
.addComponent(rulesListScrollPane))
|
||||||
|
.addGap(7, 7, 7))
|
||||||
.addGroup(jPanel1Layout.createSequentialGroup()
|
.addGroup(jPanel1Layout.createSequentialGroup()
|
||||||
.addGap(360, 360, 360)
|
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addComponent(jLabel5))
|
.addComponent(jLabel1)
|
||||||
.addGroup(jPanel1Layout.createSequentialGroup()
|
.addGroup(jPanel1Layout.createSequentialGroup()
|
||||||
.addGap(360, 360, 360)
|
.addGap(92, 92, 92)
|
||||||
.addComponent(ignoreKnownFilesCheckbox))
|
.addComponent(filesRadioButton, javax.swing.GroupLayout.PREFERRED_SIZE, 47, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||||
|
.addComponent(dirsRadioButton)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
|
.addComponent(bothRadioButton))
|
||||||
.addGroup(jPanel1Layout.createSequentialGroup()
|
.addGroup(jPanel1Layout.createSequentialGroup()
|
||||||
.addGap(360, 360, 360)
|
|
||||||
.addComponent(setDescScrollPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 336, javax.swing.GroupLayout.PREFERRED_SIZE))
|
|
||||||
.addGroup(jPanel1Layout.createSequentialGroup()
|
|
||||||
.addGap(360, 360, 360)
|
|
||||||
.addComponent(jLabel6))
|
|
||||||
.addGroup(jPanel1Layout.createSequentialGroup()
|
|
||||||
.addGap(360, 360, 360)
|
|
||||||
.addComponent(rulesListScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 336, javax.swing.GroupLayout.PREFERRED_SIZE))
|
|
||||||
.addGroup(jPanel1Layout.createSequentialGroup()
|
|
||||||
.addGap(360, 360, 360)
|
|
||||||
.addComponent(newRuleButton)
|
.addComponent(newRuleButton)
|
||||||
.addGap(18, 18, 18)
|
.addGap(18, 18, 18)
|
||||||
.addComponent(editRuleButton)
|
.addComponent(editRuleButton)
|
||||||
.addGap(18, 18, 18)
|
.addGap(18, 18, 18)
|
||||||
.addComponent(deleteRuleButton))
|
.addComponent(deleteRuleButton))
|
||||||
.addGroup(jPanel1Layout.createSequentialGroup()
|
.addGroup(jPanel1Layout.createSequentialGroup()
|
||||||
.addGap(456, 456, 456)
|
.addGap(96, 96, 96)
|
||||||
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(jPanel1Layout.createSequentialGroup()
|
.addGroup(jPanel1Layout.createSequentialGroup()
|
||||||
.addComponent(fileNameRadioButton)
|
.addComponent(fileNameRadioButton)
|
||||||
@ -820,7 +830,8 @@ final class InterestingItemDefsPanel extends IngestModuleGlobalSettingsPanel imp
|
|||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||||
.addComponent(fileNameRegexCheckbox))
|
.addComponent(fileNameRegexCheckbox))
|
||||||
.addComponent(rulePathConditionRegexCheckBox))))
|
.addComponent(rulePathConditionRegexCheckBox))))
|
||||||
.addGap(20, 20, 20))
|
.addGap(4, 4, 4)))))
|
||||||
|
.addGap(23, 23, 23))
|
||||||
);
|
);
|
||||||
jPanel1Layout.setVerticalGroup(
|
jPanel1Layout.setVerticalGroup(
|
||||||
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
@ -835,7 +846,7 @@ final class InterestingItemDefsPanel extends IngestModuleGlobalSettingsPanel imp
|
|||||||
.addGap(18, 18, 18)
|
.addGap(18, 18, 18)
|
||||||
.addComponent(setsListLabel)
|
.addComponent(setsListLabel)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addComponent(setsListScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 199, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addComponent(setsListScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 354, Short.MAX_VALUE)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||||
.addComponent(newSetButton)
|
.addComponent(newSetButton)
|
||||||
@ -852,8 +863,8 @@ final class InterestingItemDefsPanel extends IngestModuleGlobalSettingsPanel imp
|
|||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||||
.addComponent(rulesListLabel)
|
.addComponent(rulesListLabel)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addComponent(rulesListScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 64, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addComponent(rulesListScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 67, Short.MAX_VALUE)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addGap(10, 10, 10)
|
||||||
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||||
.addComponent(newRuleButton)
|
.addComponent(newRuleButton)
|
||||||
.addComponent(editRuleButton)
|
.addComponent(editRuleButton)
|
||||||
@ -874,14 +885,14 @@ final class InterestingItemDefsPanel extends IngestModuleGlobalSettingsPanel imp
|
|||||||
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||||
.addComponent(fileNameRadioButton)
|
.addComponent(fileNameRadioButton)
|
||||||
.addComponent(fileNameExtensionRadioButton)
|
.addComponent(fileNameExtensionRadioButton)
|
||||||
.addComponent(fileNameRegexCheckbox))))
|
.addComponent(fileNameRegexCheckbox))
|
||||||
.addGap(14, 14, 14)
|
.addGap(14, 14, 14)
|
||||||
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||||
.addComponent(jLabel4)
|
.addComponent(jLabel4)
|
||||||
.addComponent(rulePathConditionTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE))
|
.addComponent(rulePathConditionTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addComponent(rulePathConditionRegexCheckBox)
|
.addComponent(rulePathConditionRegexCheckBox)
|
||||||
.addGap(10, 10, 10)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||||
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||||
.addComponent(jLabel7)
|
.addComponent(jLabel7)
|
||||||
.addComponent(mimeTypeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
|
.addComponent(mimeTypeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||||
@ -889,9 +900,10 @@ final class InterestingItemDefsPanel extends IngestModuleGlobalSettingsPanel imp
|
|||||||
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||||
.addComponent(jLabel8)
|
.addComponent(jLabel8)
|
||||||
.addComponent(equalitySignComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addComponent(equalitySignComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
.addComponent(jSpinner1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addComponent(fileSizeSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
.addComponent(fileSizeUnitComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))
|
.addComponent(fileSizeUnitComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||||
.addContainerGap())
|
.addGap(13, 13, 13)))
|
||||||
|
.addGap(5, 5, 5))))
|
||||||
);
|
);
|
||||||
|
|
||||||
jPanel1Layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {deleteRuleButton, deleteSetButton, editRuleButton, editSetButton, newRuleButton, newSetButton});
|
jPanel1Layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {deleteRuleButton, deleteSetButton, editRuleButton, editSetButton, newRuleButton, newSetButton});
|
||||||
@ -902,13 +914,11 @@ final class InterestingItemDefsPanel extends IngestModuleGlobalSettingsPanel imp
|
|||||||
this.setLayout(layout);
|
this.setLayout(layout);
|
||||||
layout.setHorizontalGroup(
|
layout.setHorizontalGroup(
|
||||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(layout.createSequentialGroup()
|
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 762, Short.MAX_VALUE)
|
||||||
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 728, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
||||||
.addGap(0, 34, Short.MAX_VALUE))
|
|
||||||
);
|
);
|
||||||
layout.setVerticalGroup(
|
layout.setVerticalGroup(
|
||||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 503, Short.MAX_VALUE)
|
.addComponent(jScrollPane1)
|
||||||
);
|
);
|
||||||
}// </editor-fold>//GEN-END:initComponents
|
}// </editor-fold>//GEN-END:initComponents
|
||||||
|
|
||||||
@ -931,6 +941,11 @@ final class InterestingItemDefsPanel extends IngestModuleGlobalSettingsPanel imp
|
|||||||
FilesSet.Rule selectedRule = this.rulesList.getSelectedValue();
|
FilesSet.Rule selectedRule = this.rulesList.getSelectedValue();
|
||||||
rules.remove(selectedRule.getUuid());
|
rules.remove(selectedRule.getUuid());
|
||||||
this.replaceFilesSet(oldSet, oldSet.getName(), oldSet.getDescription(), oldSet.ignoresKnownFiles(), rules);
|
this.replaceFilesSet(oldSet, oldSet.getName(), oldSet.getDescription(), oldSet.ignoresKnownFiles(), rules);
|
||||||
|
if (!this.rulesListModel.isEmpty()) {
|
||||||
|
this.rulesList.setSelectedIndex(0);
|
||||||
|
} else {
|
||||||
|
this.resetRuleComponents();
|
||||||
|
}
|
||||||
pcs.firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
|
pcs.firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
|
||||||
}//GEN-LAST:event_deleteRuleButtonActionPerformed
|
}//GEN-LAST:event_deleteRuleButtonActionPerformed
|
||||||
|
|
||||||
@ -985,6 +1000,7 @@ final class InterestingItemDefsPanel extends IngestModuleGlobalSettingsPanel imp
|
|||||||
private javax.swing.JRadioButton fileNameRadioButton;
|
private javax.swing.JRadioButton fileNameRadioButton;
|
||||||
private javax.swing.JCheckBox fileNameRegexCheckbox;
|
private javax.swing.JCheckBox fileNameRegexCheckbox;
|
||||||
private javax.swing.JTextField fileNameTextField;
|
private javax.swing.JTextField fileNameTextField;
|
||||||
|
private javax.swing.JSpinner fileSizeSpinner;
|
||||||
private javax.swing.JComboBox<String> fileSizeUnitComboBox;
|
private javax.swing.JComboBox<String> fileSizeUnitComboBox;
|
||||||
private javax.swing.JRadioButton filesRadioButton;
|
private javax.swing.JRadioButton filesRadioButton;
|
||||||
private javax.swing.JCheckBox ignoreKnownFilesCheckbox;
|
private javax.swing.JCheckBox ignoreKnownFilesCheckbox;
|
||||||
@ -999,7 +1015,6 @@ final class InterestingItemDefsPanel extends IngestModuleGlobalSettingsPanel imp
|
|||||||
private javax.swing.JPanel jPanel1;
|
private javax.swing.JPanel jPanel1;
|
||||||
private javax.swing.JScrollPane jScrollPane1;
|
private javax.swing.JScrollPane jScrollPane1;
|
||||||
private javax.swing.JScrollPane jScrollPane2;
|
private javax.swing.JScrollPane jScrollPane2;
|
||||||
private javax.swing.JSpinner jSpinner1;
|
|
||||||
private javax.swing.JTextArea jTextArea1;
|
private javax.swing.JTextArea jTextArea1;
|
||||||
private javax.swing.JComboBox<String> mimeTypeComboBox;
|
private javax.swing.JComboBox<String> mimeTypeComboBox;
|
||||||
private javax.swing.JButton newRuleButton;
|
private javax.swing.JButton newRuleButton;
|
||||||
|
@ -87,9 +87,6 @@
|
|||||||
<ResourceString bundle="org/sleuthkit/autopsy/report/Bundle.properties" key="ReportVisualPanel2.taggedResultsRadioButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
<ResourceString bundle="org/sleuthkit/autopsy/report/Bundle.properties" key="ReportVisualPanel2.taggedResultsRadioButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
</Property>
|
</Property>
|
||||||
</Properties>
|
</Properties>
|
||||||
<Events>
|
|
||||||
<EventHandler event="stateChanged" listener="javax.swing.event.ChangeListener" parameters="javax.swing.event.ChangeEvent" handler="taggedResultsRadioButtonStateChanged"/>
|
|
||||||
</Events>
|
|
||||||
</Component>
|
</Component>
|
||||||
<Component class="javax.swing.JRadioButton" name="allResultsRadioButton">
|
<Component class="javax.swing.JRadioButton" name="allResultsRadioButton">
|
||||||
<Properties>
|
<Properties>
|
||||||
|
@ -22,7 +22,6 @@ import java.awt.Component;
|
|||||||
import java.awt.event.MouseAdapter;
|
import java.awt.event.MouseAdapter;
|
||||||
import java.awt.event.MouseEvent;
|
import java.awt.event.MouseEvent;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.EnumMap;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -36,12 +35,13 @@ import javax.swing.JList;
|
|||||||
import javax.swing.JPanel;
|
import javax.swing.JPanel;
|
||||||
import javax.swing.ListCellRenderer;
|
import javax.swing.ListCellRenderer;
|
||||||
import javax.swing.ListModel;
|
import javax.swing.ListModel;
|
||||||
|
import javax.swing.event.ChangeEvent;
|
||||||
|
import javax.swing.event.ChangeListener;
|
||||||
import javax.swing.event.ListDataListener;
|
import javax.swing.event.ListDataListener;
|
||||||
import org.openide.util.NbBundle;
|
import org.openide.util.NbBundle;
|
||||||
import org.sleuthkit.autopsy.casemodule.Case;
|
import org.sleuthkit.autopsy.casemodule.Case;
|
||||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||||
import org.sleuthkit.datamodel.BlackboardArtifact;
|
import org.sleuthkit.datamodel.BlackboardArtifact;
|
||||||
import org.sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE;
|
|
||||||
import org.sleuthkit.datamodel.TagName;
|
import org.sleuthkit.datamodel.TagName;
|
||||||
import org.sleuthkit.datamodel.TskCoreException;
|
import org.sleuthkit.datamodel.TskCoreException;
|
||||||
|
|
||||||
@ -68,6 +68,26 @@ final class ReportVisualPanel2 extends JPanel {
|
|||||||
deselectAllButton.setEnabled(false);
|
deselectAllButton.setEnabled(false);
|
||||||
allResultsRadioButton.setSelected(true);
|
allResultsRadioButton.setSelected(true);
|
||||||
this.wizPanel = wizPanel;
|
this.wizPanel = wizPanel;
|
||||||
|
this.allResultsRadioButton.addChangeListener(new ChangeListener() {
|
||||||
|
@Override
|
||||||
|
public void stateChanged(ChangeEvent e) {
|
||||||
|
tagsList.setEnabled(taggedResultsRadioButton.isSelected());
|
||||||
|
selectAllButton.setEnabled(taggedResultsRadioButton.isSelected());
|
||||||
|
deselectAllButton.setEnabled(taggedResultsRadioButton.isSelected());
|
||||||
|
advancedButton.setEnabled(!taggedResultsRadioButton.isSelected());
|
||||||
|
updateFinishButton();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.taggedResultsRadioButton.addChangeListener(new ChangeListener() {
|
||||||
|
@Override
|
||||||
|
public void stateChanged(ChangeEvent e) {
|
||||||
|
tagsList.setEnabled(taggedResultsRadioButton.isSelected());
|
||||||
|
selectAllButton.setEnabled(taggedResultsRadioButton.isSelected());
|
||||||
|
deselectAllButton.setEnabled(taggedResultsRadioButton.isSelected());
|
||||||
|
advancedButton.setEnabled(!taggedResultsRadioButton.isSelected());
|
||||||
|
updateFinishButton();
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialize the list of Tags
|
// Initialize the list of Tags
|
||||||
@ -164,21 +184,11 @@ final class ReportVisualPanel2 extends JPanel {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean areArtifactsSelected() {
|
|
||||||
boolean result = false;
|
|
||||||
for (Entry<BlackboardArtifact.Type, Boolean> entry : artifactStates.entrySet()) {
|
|
||||||
if (entry.getValue()) {
|
|
||||||
result = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void updateFinishButton() {
|
private void updateFinishButton() {
|
||||||
if (taggedResultsRadioButton.isSelected()) {
|
if (taggedResultsRadioButton.isSelected()) {
|
||||||
wizPanel.setFinish(areTagsSelected());
|
wizPanel.setFinish(areTagsSelected());
|
||||||
} else {
|
} else {
|
||||||
wizPanel.setFinish(areArtifactsSelected());
|
wizPanel.setFinish(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -211,11 +221,6 @@ final class ReportVisualPanel2 extends JPanel {
|
|||||||
|
|
||||||
optionsButtonGroup.add(taggedResultsRadioButton);
|
optionsButtonGroup.add(taggedResultsRadioButton);
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(taggedResultsRadioButton, org.openide.util.NbBundle.getMessage(ReportVisualPanel2.class, "ReportVisualPanel2.taggedResultsRadioButton.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(taggedResultsRadioButton, org.openide.util.NbBundle.getMessage(ReportVisualPanel2.class, "ReportVisualPanel2.taggedResultsRadioButton.text")); // NOI18N
|
||||||
taggedResultsRadioButton.addChangeListener(new javax.swing.event.ChangeListener() {
|
|
||||||
public void stateChanged(javax.swing.event.ChangeEvent evt) {
|
|
||||||
taggedResultsRadioButtonStateChanged(evt);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
optionsButtonGroup.add(allResultsRadioButton);
|
optionsButtonGroup.add(allResultsRadioButton);
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(allResultsRadioButton, org.openide.util.NbBundle.getMessage(ReportVisualPanel2.class, "ReportVisualPanel2.allResultsRadioButton.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(allResultsRadioButton, org.openide.util.NbBundle.getMessage(ReportVisualPanel2.class, "ReportVisualPanel2.allResultsRadioButton.text")); // NOI18N
|
||||||
@ -293,14 +298,6 @@ final class ReportVisualPanel2 extends JPanel {
|
|||||||
);
|
);
|
||||||
}// </editor-fold>//GEN-END:initComponents
|
}// </editor-fold>//GEN-END:initComponents
|
||||||
|
|
||||||
private void taggedResultsRadioButtonStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_taggedResultsRadioButtonStateChanged
|
|
||||||
tagsList.setEnabled(taggedResultsRadioButton.isSelected());
|
|
||||||
selectAllButton.setEnabled(taggedResultsRadioButton.isSelected());
|
|
||||||
deselectAllButton.setEnabled(taggedResultsRadioButton.isSelected());
|
|
||||||
advancedButton.setEnabled(!taggedResultsRadioButton.isSelected());
|
|
||||||
updateFinishButton();
|
|
||||||
}//GEN-LAST:event_taggedResultsRadioButtonStateChanged
|
|
||||||
|
|
||||||
private void selectAllButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_selectAllButtonActionPerformed
|
private void selectAllButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_selectAllButtonActionPerformed
|
||||||
for (String tag : tags) {
|
for (String tag : tags) {
|
||||||
tagStates.put(tag, Boolean.TRUE);
|
tagStates.put(tag, Boolean.TRUE);
|
||||||
@ -319,8 +316,8 @@ final class ReportVisualPanel2 extends JPanel {
|
|||||||
|
|
||||||
private void advancedButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_advancedButtonActionPerformed
|
private void advancedButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_advancedButtonActionPerformed
|
||||||
artifactStates = dialog.display();
|
artifactStates = dialog.display();
|
||||||
wizPanel.setFinish(areArtifactsSelected());
|
|
||||||
}//GEN-LAST:event_advancedButtonActionPerformed
|
}//GEN-LAST:event_advancedButtonActionPerformed
|
||||||
|
|
||||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||||
private javax.swing.JButton advancedButton;
|
private javax.swing.JButton advancedButton;
|
||||||
private javax.swing.JRadioButton allResultsRadioButton;
|
private javax.swing.JRadioButton allResultsRadioButton;
|
||||||
|
@ -20,7 +20,6 @@ package org.sleuthkit.autopsy.timeline;
|
|||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import javafx.collections.FXCollections;
|
import javafx.collections.FXCollections;
|
||||||
@ -34,8 +33,6 @@ import javafx.scene.control.ListView;
|
|||||||
import javafx.scene.image.Image;
|
import javafx.scene.image.Image;
|
||||||
import javafx.stage.Modality;
|
import javafx.stage.Modality;
|
||||||
import javafx.stage.Stage;
|
import javafx.stage.Stage;
|
||||||
import javax.annotation.Nullable;
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
|
||||||
import org.controlsfx.dialog.ProgressDialog;
|
import org.controlsfx.dialog.ProgressDialog;
|
||||||
import org.controlsfx.tools.Borders;
|
import org.controlsfx.tools.Borders;
|
||||||
import org.openide.util.NbBundle;
|
import org.openide.util.NbBundle;
|
||||||
@ -50,13 +47,13 @@ class PromptDialogManager {
|
|||||||
|
|
||||||
private static final Logger LOGGER = Logger.getLogger(PromptDialogManager.class.getName());
|
private static final Logger LOGGER = Logger.getLogger(PromptDialogManager.class.getName());
|
||||||
|
|
||||||
@NbBundle.Messages("PrompDialogManager.buttonType.showTimeline=Show Timeline")
|
@NbBundle.Messages("PrompDialogManager.buttonType.showTimeline=Continue")
|
||||||
private static final ButtonType SHOW_TIMELINE = new ButtonType(Bundle.PrompDialogManager_buttonType_showTimeline(), ButtonBar.ButtonData.OK_DONE);
|
private static final ButtonType CONTINUE = new ButtonType(Bundle.PrompDialogManager_buttonType_showTimeline(), ButtonBar.ButtonData.OK_DONE);
|
||||||
|
|
||||||
@NbBundle.Messages("PrompDialogManager.buttonType.continueNoUpdate=Continue Without Updating")
|
@NbBundle.Messages("PrompDialogManager.buttonType.continueNoUpdate=Continue Without Updating")
|
||||||
private static final ButtonType CONTINUE_NO_UPDATE = new ButtonType(Bundle.PrompDialogManager_buttonType_continueNoUpdate(), ButtonBar.ButtonData.CANCEL_CLOSE);
|
private static final ButtonType CONTINUE_NO_UPDATE = new ButtonType(Bundle.PrompDialogManager_buttonType_continueNoUpdate(), ButtonBar.ButtonData.CANCEL_CLOSE);
|
||||||
|
|
||||||
@NbBundle.Messages("PrompDialogManager.buttonType.update=Update")
|
@NbBundle.Messages("PrompDialogManager.buttonType.update=Update DB")
|
||||||
private static final ButtonType UPDATE = new ButtonType(Bundle.PrompDialogManager_buttonType_update(), ButtonBar.ButtonData.OK_DONE);
|
private static final ButtonType UPDATE = new ButtonType(Bundle.PrompDialogManager_buttonType_update(), ButtonBar.ButtonData.OK_DONE);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -89,7 +86,7 @@ class PromptDialogManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Bring the currently managed dialog (if there is one) to the front
|
* Bring the currently managed dialog (if there is one) to the front.
|
||||||
*
|
*
|
||||||
* @return True if a dialog was brought to the front, or false of there is
|
* @return True if a dialog was brought to the front, or false of there is
|
||||||
* no currently managed open dialog
|
* no currently managed open dialog
|
||||||
@ -151,60 +148,45 @@ class PromptDialogManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Prompt the user that ingest is running and the db may not end up
|
* Prompt the user that ingest is running and the DB may not end up
|
||||||
* complete.
|
* complete.
|
||||||
*
|
*
|
||||||
* @return True if they want to continue anyways
|
* @return True if they want to continue anyways.
|
||||||
*/
|
*/
|
||||||
@NbBundle.Messages({
|
@NbBundle.Messages({
|
||||||
"PromptDialogManager.confirmDuringIngest.headerText=You are trying to show a timeline before ingest has been completed.\nThe timeline may be incomplete.",
|
"PromptDialogManager.confirmDuringIngest.headerText=You are trying to update the Timeline DB before ingest has been completed. The Timeline DB may be incomplete.",
|
||||||
"PromptDialogManager.confirmDuringIngest.contentText=Do you want to continue?"})
|
"PromptDialogManager.confirmDuringIngest.contentText=Do you want to continue?"})
|
||||||
@ThreadConfined(type = ThreadConfined.ThreadType.JFX)
|
@ThreadConfined(type = ThreadConfined.ThreadType.JFX)
|
||||||
boolean confirmDuringIngest() {
|
boolean confirmDuringIngest() {
|
||||||
currentDialog = new Alert(Alert.AlertType.CONFIRMATION, Bundle.PromptDialogManager_confirmDuringIngest_contentText(), SHOW_TIMELINE, ButtonType.CANCEL);
|
currentDialog = new Alert(Alert.AlertType.CONFIRMATION, Bundle.PromptDialogManager_confirmDuringIngest_contentText(), CONTINUE, ButtonType.CANCEL);
|
||||||
currentDialog.initModality(Modality.APPLICATION_MODAL);
|
currentDialog.initModality(Modality.APPLICATION_MODAL);
|
||||||
currentDialog.setTitle(Bundle.Timeline_dialogs_title());
|
currentDialog.setTitle(Bundle.Timeline_dialogs_title());
|
||||||
setDialogIcons(currentDialog);
|
setDialogIcons(currentDialog);
|
||||||
currentDialog.setHeaderText(Bundle.PromptDialogManager_confirmDuringIngest_headerText());
|
currentDialog.setHeaderText(Bundle.PromptDialogManager_confirmDuringIngest_headerText());
|
||||||
|
|
||||||
//show dialog and map all results except "show timeline" to false.
|
//show dialog and map all results except "continue" to false.
|
||||||
return currentDialog.showAndWait().map(SHOW_TIMELINE::equals).orElse(false);
|
return currentDialog.showAndWait().map(CONTINUE::equals).orElse(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Prompt the user to confirm rebuilding the database for the given list of
|
* Prompt the user to confirm rebuilding the database for the given list of
|
||||||
* reasons, adding that "ingest has finished" for the datasource with the
|
* reasons.
|
||||||
* given name, if not blank, as a reason and as extra header text.
|
|
||||||
*
|
*
|
||||||
* @param finishedDataSourceName The name of the datasource that has
|
* @param rebuildReasons A List of reasons why the database is out of date.
|
||||||
* finished be analyzed. Will be ignored if it
|
|
||||||
* is null or empty.
|
|
||||||
* @param rebuildReasons A List of reasons why the database is out
|
|
||||||
* of date.
|
|
||||||
*
|
*
|
||||||
* @return True if the user a confirms rebuilding the database.
|
* @return True if the user a confirms rebuilding the database.
|
||||||
*/
|
*/
|
||||||
@NbBundle.Messages({
|
@NbBundle.Messages({
|
||||||
"PromptDialogManager.rebuildPrompt.headerText=The Timeline database is incomplete and/or out of date."
|
"PromptDialogManager.rebuildPrompt.headerText=The Timeline DB is incomplete and/or out of date. Some events may be missing or inaccurate and some features may be unavailable.",
|
||||||
+ " Some events may be missing or inaccurate and some features may be unavailable.",
|
|
||||||
"# {0} - data source name",
|
|
||||||
"PromptDialogManager.rebuildPrompt.ingestDone=Ingest has finished for {0}.",
|
|
||||||
"PromptDialogManager.rebuildPrompt.details=Details"})
|
"PromptDialogManager.rebuildPrompt.details=Details"})
|
||||||
@ThreadConfined(type = ThreadConfined.ThreadType.JFX)
|
@ThreadConfined(type = ThreadConfined.ThreadType.JFX)
|
||||||
boolean confirmRebuild(@Nullable String finishedDataSourceName, List<String> rebuildReasons) {
|
boolean confirmRebuild(List<String> rebuildReasons) {
|
||||||
currentDialog = new Alert(Alert.AlertType.CONFIRMATION, Bundle.TimeLinecontroller_updateNowQuestion(), UPDATE, CONTINUE_NO_UPDATE);
|
currentDialog = new Alert(Alert.AlertType.CONFIRMATION, Bundle.TimeLinecontroller_updateNowQuestion(), UPDATE, CONTINUE_NO_UPDATE);
|
||||||
currentDialog.initModality(Modality.APPLICATION_MODAL);
|
currentDialog.initModality(Modality.APPLICATION_MODAL);
|
||||||
currentDialog.setTitle(Bundle.Timeline_dialogs_title());
|
currentDialog.setTitle(Bundle.Timeline_dialogs_title());
|
||||||
setDialogIcons(currentDialog);
|
setDialogIcons(currentDialog);
|
||||||
|
|
||||||
//configure header text depending on presence of finishedDataSourceName
|
currentDialog.setHeaderText(Bundle.PromptDialogManager_rebuildPrompt_headerText());
|
||||||
String headerText = Bundle.PromptDialogManager_rebuildPrompt_headerText();
|
|
||||||
if (StringUtils.isNotBlank(finishedDataSourceName)) {
|
|
||||||
String datasourceMessage = Bundle.PromptDialogManager_rebuildPrompt_ingestDone(finishedDataSourceName);
|
|
||||||
rebuildReasons.add(0, datasourceMessage);
|
|
||||||
headerText = datasourceMessage + "\n\n" + headerText;
|
|
||||||
}
|
|
||||||
currentDialog.setHeaderText(headerText);
|
|
||||||
|
|
||||||
//set up listview of reasons to rebuild
|
//set up listview of reasons to rebuild
|
||||||
ListView<String> listView = new ListView<>(FXCollections.observableArrayList(rebuildReasons));
|
ListView<String> listView = new ListView<>(FXCollections.observableArrayList(rebuildReasons));
|
||||||
@ -224,17 +206,4 @@ class PromptDialogManager {
|
|||||||
//show dialog and map all results except "update" to false.
|
//show dialog and map all results except "update" to false.
|
||||||
return currentDialog.showAndWait().map(UPDATE::equals).orElse(false);
|
return currentDialog.showAndWait().map(UPDATE::equals).orElse(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Prompt the user to confirm rebuilding the database for the given list of
|
|
||||||
* reasons.
|
|
||||||
*
|
|
||||||
* @param rebuildReasons S List of reasons why the database is out of date.
|
|
||||||
*
|
|
||||||
* @return True if the user a confirms rebuilding the database.
|
|
||||||
*/
|
|
||||||
@ThreadConfined(type = ThreadConfined.ThreadType.JFX)
|
|
||||||
boolean confirmRebuild(ArrayList<String> rebuildReasons) {
|
|
||||||
return confirmRebuild(null, rebuildReasons);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -51,7 +51,6 @@ import javafx.concurrent.Task;
|
|||||||
import javafx.concurrent.Worker;
|
import javafx.concurrent.Worker;
|
||||||
import static javafx.concurrent.Worker.State.FAILED;
|
import static javafx.concurrent.Worker.State.FAILED;
|
||||||
import static javafx.concurrent.Worker.State.SUCCEEDED;
|
import static javafx.concurrent.Worker.State.SUCCEEDED;
|
||||||
import javax.annotation.Nullable;
|
|
||||||
import javax.annotation.concurrent.GuardedBy;
|
import javax.annotation.concurrent.GuardedBy;
|
||||||
import javax.annotation.concurrent.Immutable;
|
import javax.annotation.concurrent.Immutable;
|
||||||
import javax.swing.SwingUtilities;
|
import javax.swing.SwingUtilities;
|
||||||
@ -74,9 +73,9 @@ import org.sleuthkit.autopsy.coreutils.LoggedTask;
|
|||||||
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.ThreadConfined;
|
import org.sleuthkit.autopsy.coreutils.ThreadConfined;
|
||||||
|
import org.sleuthkit.autopsy.events.AutopsyEvent;
|
||||||
import org.sleuthkit.autopsy.ingest.IngestManager;
|
import org.sleuthkit.autopsy.ingest.IngestManager;
|
||||||
import static org.sleuthkit.autopsy.ingest.IngestManager.IngestJobEvent.CANCELLED;
|
import static org.sleuthkit.autopsy.ingest.IngestManager.IngestJobEvent.CANCELLED;
|
||||||
import org.sleuthkit.autopsy.ingest.events.DataSourceAnalysisEvent;
|
|
||||||
import org.sleuthkit.autopsy.timeline.datamodel.FilteredEventsModel;
|
import org.sleuthkit.autopsy.timeline.datamodel.FilteredEventsModel;
|
||||||
import org.sleuthkit.autopsy.timeline.datamodel.TimeLineEvent;
|
import org.sleuthkit.autopsy.timeline.datamodel.TimeLineEvent;
|
||||||
import org.sleuthkit.autopsy.timeline.datamodel.eventtype.EventType;
|
import org.sleuthkit.autopsy.timeline.datamodel.eventtype.EventType;
|
||||||
@ -89,12 +88,11 @@ import org.sleuthkit.autopsy.timeline.zooming.DescriptionLoD;
|
|||||||
import org.sleuthkit.autopsy.timeline.zooming.EventTypeZoomLevel;
|
import org.sleuthkit.autopsy.timeline.zooming.EventTypeZoomLevel;
|
||||||
import org.sleuthkit.autopsy.timeline.zooming.TimeUnits;
|
import org.sleuthkit.autopsy.timeline.zooming.TimeUnits;
|
||||||
import org.sleuthkit.autopsy.timeline.zooming.ZoomParams;
|
import org.sleuthkit.autopsy.timeline.zooming.ZoomParams;
|
||||||
import org.sleuthkit.datamodel.Content;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Controller in the MVC design along with model = {@link FilteredEventsModel}
|
* Controller in the MVC design along with FilteredEventsModel TimeLineView.
|
||||||
* and views = {@link TimeLineView}. Forwards interpreted user gestures form
|
* Forwards interpreted user gestures form views to model. Provides model to
|
||||||
* views to model. Provides model to view. Is entry point for timeline module.
|
* view. Is entry point for timeline module.
|
||||||
*
|
*
|
||||||
* Concurrency Policy:<ul>
|
* Concurrency Policy:<ul>
|
||||||
* <li>Since filteredEvents is internally synchronized, only compound access to
|
* <li>Since filteredEvents is internally synchronized, only compound access to
|
||||||
@ -141,7 +139,7 @@ public class TimeLineController {
|
|||||||
|
|
||||||
private final ReadOnlyStringWrapper taskTitle = new ReadOnlyStringWrapper();
|
private final ReadOnlyStringWrapper taskTitle = new ReadOnlyStringWrapper();
|
||||||
|
|
||||||
private final ReadOnlyStringWrapper status = new ReadOnlyStringWrapper();
|
private final ReadOnlyStringWrapper statusMessage = new ReadOnlyStringWrapper();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Status is a string that will be displayed in the status bar as a kind of
|
* Status is a string that will be displayed in the status bar as a kind of
|
||||||
@ -149,12 +147,12 @@ public class TimeLineController {
|
|||||||
*
|
*
|
||||||
* @return The status property
|
* @return The status property
|
||||||
*/
|
*/
|
||||||
public ReadOnlyStringProperty getStatusProperty() {
|
public ReadOnlyStringProperty statusMessageProperty() {
|
||||||
return status.getReadOnlyProperty();
|
return statusMessage.getReadOnlyProperty();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setStatus(String string) {
|
public void setStatusMessage(String string) {
|
||||||
status.set(string);
|
statusMessage.set(string);
|
||||||
}
|
}
|
||||||
private final Case autoCase;
|
private final Case autoCase;
|
||||||
private final PerCaseTimelineProperties perCaseTimelineProperties;
|
private final PerCaseTimelineProperties perCaseTimelineProperties;
|
||||||
@ -201,10 +199,10 @@ public class TimeLineController {
|
|||||||
private final PropertyChangeListener ingestModuleListener = new AutopsyIngestModuleListener();
|
private final PropertyChangeListener ingestModuleListener = new AutopsyIngestModuleListener();
|
||||||
|
|
||||||
@GuardedBy("this")
|
@GuardedBy("this")
|
||||||
private final ReadOnlyObjectWrapper<VisualizationMode> viewMode = new ReadOnlyObjectWrapper<>(VisualizationMode.COUNTS);
|
private final ReadOnlyObjectWrapper<VisualizationMode> visualizationMode = new ReadOnlyObjectWrapper<>(VisualizationMode.COUNTS);
|
||||||
|
|
||||||
synchronized public ReadOnlyObjectProperty<VisualizationMode> viewModeProperty() {
|
synchronized public ReadOnlyObjectProperty<VisualizationMode> visualizationModeProperty() {
|
||||||
return viewMode.getReadOnlyProperty();
|
return visualizationMode.getReadOnlyProperty();
|
||||||
}
|
}
|
||||||
|
|
||||||
@GuardedBy("filteredEvents")
|
@GuardedBy("filteredEvents")
|
||||||
@ -263,6 +261,7 @@ public class TimeLineController {
|
|||||||
@NbBundle.Messages({
|
@NbBundle.Messages({
|
||||||
"TimeLineController.setEventsDBStale.errMsgStale=Failed to mark the timeline db as stale. Some results may be out of date or missing.",
|
"TimeLineController.setEventsDBStale.errMsgStale=Failed to mark the timeline db as stale. Some results may be out of date or missing.",
|
||||||
"TimeLineController.setEventsDBStale.errMsgNotStale=Failed to mark the timeline db as not stale. Some results may be out of date or missing."})
|
"TimeLineController.setEventsDBStale.errMsgNotStale=Failed to mark the timeline db as not stale. Some results may be out of date or missing."})
|
||||||
|
@ThreadConfined(type = ThreadConfined.ThreadType.JFX)
|
||||||
private void setEventsDBStale(final Boolean stale) {
|
private void setEventsDBStale(final Boolean stale) {
|
||||||
eventsDBStale.set(stale);
|
eventsDBStale.set(stale);
|
||||||
try {
|
try {
|
||||||
@ -395,6 +394,7 @@ public class TimeLineController {
|
|||||||
}
|
}
|
||||||
if (markDBNotStale) {
|
if (markDBNotStale) {
|
||||||
setEventsDBStale(false);
|
setEventsDBStale(false);
|
||||||
|
filteredEvents.postDBUpdated();
|
||||||
}
|
}
|
||||||
SwingUtilities.invokeLater(this::showWindow);
|
SwingUtilities.invokeLater(this::showWindow);
|
||||||
TimeLineController.this.showRange(interval);
|
TimeLineController.this.showRange(interval);
|
||||||
@ -473,6 +473,7 @@ public class TimeLineController {
|
|||||||
mainFrame.close();
|
mainFrame.close();
|
||||||
mainFrame = null;
|
mainFrame = null;
|
||||||
}
|
}
|
||||||
|
OpenTimelineAction.invalidateController();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -489,18 +490,14 @@ public class TimeLineController {
|
|||||||
listeningToAutopsy = true;
|
listeningToAutopsy = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
Platform.runLater(() -> promptForRebuild(null, interval));
|
Platform.runLater(() -> promptForRebuild( interval));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Prompt the user to confirm rebuilding the db because ingest has finished
|
* Prompt the user to confirm rebuilding the db. Checks if a database
|
||||||
* on the datasource with the given name. Checks if a database rebuild is
|
* rebuild is necessary and includes the reasons in the prompt. If the user
|
||||||
* necessary for any other reasons and includes those in the prompt. If the
|
* confirms, rebuilds the database. Shows the timeline window when the
|
||||||
* user confirms, rebuilds the database. Shows the timeline window when the
|
* rebuild is done, or immediately if the rebuild is not confirmed. F
|
||||||
* rebuild is done, or immediately if the rebuild is not confirmed.
|
|
||||||
*
|
|
||||||
* @param dataSourceName The name of the datasource that ingest has finished
|
|
||||||
* processing. Will be ignored if it is null or empty.
|
|
||||||
*/
|
*/
|
||||||
@ThreadConfined(type = ThreadConfined.ThreadType.JFX)
|
@ThreadConfined(type = ThreadConfined.ThreadType.JFX)
|
||||||
private void promptForRebuild(@Nullable String dataSourceName, Interval interval) {
|
private void promptForRebuild(@Nullable String dataSourceName, Interval interval) {
|
||||||
@ -518,7 +515,7 @@ public class TimeLineController {
|
|||||||
//if necessary prompt user with reasons to rebuild
|
//if necessary prompt user with reasons to rebuild
|
||||||
List<String> rebuildReasons = getRebuildReasons();
|
List<String> rebuildReasons = getRebuildReasons();
|
||||||
if (false == rebuildReasons.isEmpty()) {
|
if (false == rebuildReasons.isEmpty()) {
|
||||||
if (promptDialogManager.confirmRebuild(dataSourceName, rebuildReasons)) {
|
if (promptDialogManager.confirmRebuild(rebuildReasons)) {
|
||||||
rebuildRepo(interval);
|
rebuildRepo(interval);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -578,7 +575,7 @@ public class TimeLineController {
|
|||||||
* Request a time range the same length as the given period and centered
|
* Request a time range the same length as the given period and centered
|
||||||
* around the middle of the currently viewed time range.
|
* around the middle of the currently viewed time range.
|
||||||
*
|
*
|
||||||
* @param period The period of time to shw around the current center of the
|
* @param period The period of time to show around the current center of the
|
||||||
* view.
|
* view.
|
||||||
*/
|
*/
|
||||||
synchronized public void pushPeriod(ReadablePeriod period) {
|
synchronized public void pushPeriod(ReadablePeriod period) {
|
||||||
@ -604,9 +601,14 @@ public class TimeLineController {
|
|||||||
pushTimeRange(new Interval(start, end));
|
pushTimeRange(new Interval(start, end));
|
||||||
}
|
}
|
||||||
|
|
||||||
synchronized public void setViewMode(VisualizationMode visualizationMode) {
|
/**
|
||||||
if (viewMode.get() != visualizationMode) {
|
* Set a new Visualization mode as the active one.
|
||||||
viewMode.set(visualizationMode);
|
*
|
||||||
|
* @param visualizationMode The new VisaualizationMode to set.
|
||||||
|
*/
|
||||||
|
synchronized public void setVisualizationMode(VisualizationMode visualizationMode) {
|
||||||
|
if (this.visualizationMode.get() != visualizationMode) {
|
||||||
|
this.visualizationMode.set(visualizationMode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -636,7 +638,8 @@ public class TimeLineController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* private method to build gui if necessary and make it visible.
|
* Show the timeline TimeLineTopComponent. This method will construct a new
|
||||||
|
* instance of TimeLineTopComponent if necessary.
|
||||||
*/
|
*/
|
||||||
@ThreadConfined(type = ThreadConfined.ThreadType.AWT)
|
@ThreadConfined(type = ThreadConfined.ThreadType.AWT)
|
||||||
synchronized private void showWindow() {
|
synchronized private void showWindow() {
|
||||||
@ -645,6 +648,11 @@ public class TimeLineController {
|
|||||||
}
|
}
|
||||||
mainFrame.open();
|
mainFrame.open();
|
||||||
mainFrame.toFront();
|
mainFrame.toFront();
|
||||||
|
/*
|
||||||
|
* Make this top component active so its ExplorerManager's lookup gets
|
||||||
|
* proxied in Utilities.actionsGlobalContext()
|
||||||
|
*/
|
||||||
|
mainFrame.requestActive();
|
||||||
}
|
}
|
||||||
|
|
||||||
synchronized public void pushEventTypeZoom(EventTypeZoomLevel typeZoomeLevel) {
|
synchronized public void pushEventTypeZoom(EventTypeZoomLevel typeZoomeLevel) {
|
||||||
@ -824,47 +832,6 @@ public class TimeLineController {
|
|||||||
TimeLineController.timeZone.set(timeZone);
|
TimeLineController.timeZone.set(timeZone);
|
||||||
}
|
}
|
||||||
|
|
||||||
Interval getSpanningInterval(Collection<Long> eventIDs) {
|
|
||||||
return filteredEvents.getSpanningInterval(eventIDs);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Is the timeline window open?
|
|
||||||
*
|
|
||||||
* @return True if the timeline is open.
|
|
||||||
*/
|
|
||||||
@ThreadConfined(type = ThreadConfined.ThreadType.AWT)
|
|
||||||
private boolean isWindowOpen() {
|
|
||||||
return mainFrame != null && mainFrame.isOpened() && mainFrame.isVisible();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Rebuild the db ONLY IF THE TIMELINE WINDOW IS OPEN. The user will be
|
|
||||||
* prompted with reasons why the database needs to be rebuilt and can still
|
|
||||||
* cancel the rebuild. The prompt will include that ingest has finished for
|
|
||||||
* the given datasource name, if not blank.
|
|
||||||
*
|
|
||||||
* @param dataSourceName The name of the datasource that has finished
|
|
||||||
* ingest. Will be ignored if it is null or empty.
|
|
||||||
*/
|
|
||||||
@ThreadConfined(type = ThreadConfined.ThreadType.AWT)
|
|
||||||
private void rebuildIfWindowOpen(@Nullable String dataSourceName) {
|
|
||||||
if (isWindowOpen()) {
|
|
||||||
Platform.runLater(() -> this.promptForRebuild(dataSourceName));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Rebuild the db ONLY IF THE TIMELINE WINDOW IS OPEN. The user will be
|
|
||||||
* prompted with reasons why the database needs to be rebuilt and can still
|
|
||||||
* cancel the rebuild.
|
|
||||||
*/
|
|
||||||
@ThreadConfined(type = ThreadConfined.ThreadType.AWT)
|
|
||||||
public void rebuildIfWindowOpen() {
|
|
||||||
rebuildIfWindowOpen(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Listener for IngestManager.IngestModuleEvents.
|
* Listener for IngestManager.IngestModuleEvents.
|
||||||
*/
|
*/
|
||||||
@ -882,16 +849,14 @@ public class TimeLineController {
|
|||||||
try {
|
try {
|
||||||
Case.getCurrentCase();
|
Case.getCurrentCase();
|
||||||
} catch (IllegalStateException notUsed) {
|
} catch (IllegalStateException notUsed) {
|
||||||
/**
|
// Case is closed, do nothing.
|
||||||
* Case is closed, do nothing.
|
|
||||||
*/
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (IngestManager.IngestModuleEvent.valueOf(evt.getPropertyName())) {
|
switch (IngestManager.IngestModuleEvent.valueOf(evt.getPropertyName())) {
|
||||||
case CONTENT_CHANGED:
|
case CONTENT_CHANGED:
|
||||||
case DATA_ADDED:
|
case DATA_ADDED:
|
||||||
//since black board artifacts or new derived content have been added, the db is stale.
|
//since black board artifacts or new derived content have been added, the DB is stale.
|
||||||
Platform.runLater(() -> setEventsDBStale(true));
|
Platform.runLater(() -> setEventsDBStale(true));
|
||||||
break;
|
break;
|
||||||
case FILE_DONE:
|
case FILE_DONE:
|
||||||
@ -914,9 +879,9 @@ public class TimeLineController {
|
|||||||
public void propertyChange(PropertyChangeEvent evt) {
|
public void propertyChange(PropertyChangeEvent evt) {
|
||||||
switch (IngestManager.IngestJobEvent.valueOf(evt.getPropertyName())) {
|
switch (IngestManager.IngestJobEvent.valueOf(evt.getPropertyName())) {
|
||||||
case DATA_SOURCE_ANALYSIS_COMPLETED:
|
case DATA_SOURCE_ANALYSIS_COMPLETED:
|
||||||
// include data source name in rebuild prompt on ingest completed
|
//mark db stale, and prompt to rebuild
|
||||||
final Content dataSource = ((DataSourceAnalysisEvent) evt).getDataSource();
|
Platform.runLater(() -> setEventsDBStale(true));
|
||||||
SwingUtilities.invokeLater(() -> rebuildIfWindowOpen(dataSource.getName()));
|
filteredEvents.postAutopsyEventLocally((AutopsyEvent) evt);
|
||||||
break;
|
break;
|
||||||
case DATA_SOURCE_ANALYSIS_STARTED:
|
case DATA_SOURCE_ANALYSIS_STARTED:
|
||||||
case CANCELLED:
|
case CANCELLED:
|
||||||
@ -951,10 +916,10 @@ public class TimeLineController {
|
|||||||
case DATA_SOURCE_ADDED:
|
case DATA_SOURCE_ADDED:
|
||||||
//mark db stale, and prompt to rebuild
|
//mark db stale, and prompt to rebuild
|
||||||
Platform.runLater(() -> setEventsDBStale(true));
|
Platform.runLater(() -> setEventsDBStale(true));
|
||||||
|
filteredEvents.postAutopsyEventLocally((AutopsyEvent) evt);
|
||||||
break;
|
break;
|
||||||
case CURRENT_CASE:
|
case CURRENT_CASE:
|
||||||
//close timeline on case changes.
|
//close timeline on case changes.
|
||||||
OpenTimelineAction.invalidateController();
|
|
||||||
SwingUtilities.invokeLater(TimeLineController.this::shutDownTimeLine);
|
SwingUtilities.invokeLater(TimeLineController.this::shutDownTimeLine);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -108,12 +108,12 @@ public final class TimeLineTopComponent extends TopComponent implements Explorer
|
|||||||
final Tab eventsTreeTab = new Tab(Bundle.TimeLineTopComponent_eventsTab_name(), eventsTree);
|
final Tab eventsTreeTab = new Tab(Bundle.TimeLineTopComponent_eventsTab_name(), eventsTree);
|
||||||
eventsTreeTab.setClosable(false);
|
eventsTreeTab.setClosable(false);
|
||||||
eventsTreeTab.setGraphic(new ImageView("org/sleuthkit/autopsy/timeline/images/timeline_marker.png")); // NON-NLS
|
eventsTreeTab.setGraphic(new ImageView("org/sleuthkit/autopsy/timeline/images/timeline_marker.png")); // NON-NLS
|
||||||
eventsTreeTab.disableProperty().bind(controller.viewModeProperty().isEqualTo(VisualizationMode.COUNTS));
|
eventsTreeTab.disableProperty().bind(controller.visualizationModeProperty().isEqualTo(VisualizationMode.COUNTS));
|
||||||
|
|
||||||
final TabPane leftTabPane = new TabPane(filterTab, eventsTreeTab);
|
final TabPane leftTabPane = new TabPane(filterTab, eventsTreeTab);
|
||||||
VBox.setVgrow(leftTabPane, Priority.ALWAYS);
|
VBox.setVgrow(leftTabPane, Priority.ALWAYS);
|
||||||
controller.viewModeProperty().addListener((Observable observable) -> {
|
controller.visualizationModeProperty().addListener((Observable observable) -> {
|
||||||
if (controller.viewModeProperty().get().equals(VisualizationMode.COUNTS)) {
|
if (controller.visualizationModeProperty().get().equals(VisualizationMode.COUNTS)) {
|
||||||
//if view mode is counts, make sure events tabd is not active
|
//if view mode is counts, make sure events tabd is not active
|
||||||
leftTabPane.getSelectionModel().select(filterTab);
|
leftTabPane.getSelectionModel().select(filterTab);
|
||||||
}
|
}
|
||||||
|
@ -25,18 +25,26 @@ import org.openide.util.NbBundle;
|
|||||||
import org.sleuthkit.autopsy.timeline.TimeLineController;
|
import org.sleuthkit.autopsy.timeline.TimeLineController;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An action that rebuilds the events database to include any new results from
|
* An action that rebuilds the timeline database to include any new results from
|
||||||
* ingest.
|
* ingest.
|
||||||
*/
|
*/
|
||||||
public class RebuildDataBase extends Action {
|
public class UpdateDB extends Action {
|
||||||
|
|
||||||
private static final Image DB_REFRESH = new Image("org/sleuthkit/autopsy/timeline/images/database_refresh.png");
|
private static final Image DB_REFRESH = new Image("org/sleuthkit/autopsy/timeline/images/database_refresh.png");
|
||||||
|
|
||||||
@NbBundle.Messages({"RebuildDataBase.text=Update"})
|
/**
|
||||||
public RebuildDataBase(TimeLineController controller) {
|
* Constructor
|
||||||
|
*
|
||||||
|
* @param controller The TimeLineController for this action.
|
||||||
|
*/
|
||||||
|
@NbBundle.Messages({
|
||||||
|
"RebuildDataBase.text=Update DB",
|
||||||
|
"RebuildDataBase.longText=Update the DB to include new events."})
|
||||||
|
public UpdateDB(TimeLineController controller) {
|
||||||
super(Bundle.RebuildDataBase_text());
|
super(Bundle.RebuildDataBase_text());
|
||||||
|
setLongText(Bundle.RebuildDataBase_longText());
|
||||||
setGraphic(new ImageView(DB_REFRESH));
|
setGraphic(new ImageView(DB_REFRESH));
|
||||||
setEventHandler(actionEvent -> controller.rebuildRepo());
|
setEventHandler(actionEvent -> controller.rebuildRepo());
|
||||||
|
disabledProperty().bind(controller.eventsDBStaleProperty().not());
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -40,9 +40,11 @@ import org.sleuthkit.autopsy.casemodule.events.ContentTagAddedEvent;
|
|||||||
import org.sleuthkit.autopsy.casemodule.events.ContentTagDeletedEvent;
|
import org.sleuthkit.autopsy.casemodule.events.ContentTagDeletedEvent;
|
||||||
import org.sleuthkit.autopsy.casemodule.events.ContentTagDeletedEvent.DeletedContentTagInfo;
|
import org.sleuthkit.autopsy.casemodule.events.ContentTagDeletedEvent.DeletedContentTagInfo;
|
||||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||||
|
import org.sleuthkit.autopsy.events.AutopsyEvent;
|
||||||
import org.sleuthkit.autopsy.timeline.datamodel.eventtype.EventType;
|
import org.sleuthkit.autopsy.timeline.datamodel.eventtype.EventType;
|
||||||
import org.sleuthkit.autopsy.timeline.datamodel.eventtype.RootEventType;
|
import org.sleuthkit.autopsy.timeline.datamodel.eventtype.RootEventType;
|
||||||
import org.sleuthkit.autopsy.timeline.db.EventsRepository;
|
import org.sleuthkit.autopsy.timeline.db.EventsRepository;
|
||||||
|
import org.sleuthkit.autopsy.timeline.events.DBUpdatedEvent;
|
||||||
import org.sleuthkit.autopsy.timeline.events.RefreshRequestedEvent;
|
import org.sleuthkit.autopsy.timeline.events.RefreshRequestedEvent;
|
||||||
import org.sleuthkit.autopsy.timeline.events.TagsAddedEvent;
|
import org.sleuthkit.autopsy.timeline.events.TagsAddedEvent;
|
||||||
import org.sleuthkit.autopsy.timeline.events.TagsDeletedEvent;
|
import org.sleuthkit.autopsy.timeline.events.TagsDeletedEvent;
|
||||||
@ -412,6 +414,15 @@ public final class FilteredEventsModel {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Post a TagsAddedEvent to all registered subscribers, if the given set of
|
||||||
|
* updated event IDs is not empty.
|
||||||
|
*
|
||||||
|
* @param updatedEventIDs The set of event ids to be included in the
|
||||||
|
* TagsAddedEvent.
|
||||||
|
*
|
||||||
|
* @return True if an event was posted.
|
||||||
|
*/
|
||||||
private boolean postTagsAdded(Set<Long> updatedEventIDs) {
|
private boolean postTagsAdded(Set<Long> updatedEventIDs) {
|
||||||
boolean tagsUpdated = !updatedEventIDs.isEmpty();
|
boolean tagsUpdated = !updatedEventIDs.isEmpty();
|
||||||
if (tagsUpdated) {
|
if (tagsUpdated) {
|
||||||
@ -420,6 +431,15 @@ public final class FilteredEventsModel {
|
|||||||
return tagsUpdated;
|
return tagsUpdated;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Post a TagsDeletedEvent to all registered subscribers, if the given set
|
||||||
|
* of updated event IDs is not empty.
|
||||||
|
*
|
||||||
|
* @param updatedEventIDs The set of event ids to be included in the
|
||||||
|
* TagsDeletedEvent.
|
||||||
|
*
|
||||||
|
* @return True if an event was posted.
|
||||||
|
*/
|
||||||
private boolean postTagsDeleted(Set<Long> updatedEventIDs) {
|
private boolean postTagsDeleted(Set<Long> updatedEventIDs) {
|
||||||
boolean tagsUpdated = !updatedEventIDs.isEmpty();
|
boolean tagsUpdated = !updatedEventIDs.isEmpty();
|
||||||
if (tagsUpdated) {
|
if (tagsUpdated) {
|
||||||
@ -428,16 +448,45 @@ public final class FilteredEventsModel {
|
|||||||
return tagsUpdated;
|
return tagsUpdated;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register the given object to receive events.
|
||||||
|
*
|
||||||
|
* @param o The object to register. Must implement public methods annotated
|
||||||
|
* with Subscribe.
|
||||||
|
*/
|
||||||
synchronized public void registerForEvents(Object o) {
|
synchronized public void registerForEvents(Object o) {
|
||||||
eventbus.register(o);
|
eventbus.register(o);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Un-register the given object, so it no longer receives events.
|
||||||
|
*
|
||||||
|
* @param o The object to un-register.
|
||||||
|
*/
|
||||||
synchronized public void unRegisterForEvents(Object o) {
|
synchronized public void unRegisterForEvents(Object o) {
|
||||||
eventbus.unregister(0);
|
eventbus.unregister(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void refresh() {
|
/**
|
||||||
|
* Post a DBUpdatedEvent to all registered subscribers.
|
||||||
|
*/
|
||||||
|
public void postDBUpdated() {
|
||||||
|
eventbus.post(new DBUpdatedEvent());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Post a RefreshRequestedEvent to all registered subscribers.
|
||||||
|
*/
|
||||||
|
public void postRefreshRequest() {
|
||||||
eventbus.post(new RefreshRequestedEvent());
|
eventbus.post(new RefreshRequestedEvent());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* (Re)Post an AutopsyEvent received from another event distribution system
|
||||||
|
* locally to all registered subscribers.
|
||||||
|
*/
|
||||||
|
public void postAutopsyEventLocally(AutopsyEvent event) {
|
||||||
|
eventbus.post(event);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,29 @@
|
|||||||
|
/*
|
||||||
|
* Autopsy Forensic Browser
|
||||||
|
*
|
||||||
|
* Copyright 2016 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.timeline.events;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A "local" event published by filteredEventsModel to indicate that DB has been
|
||||||
|
* updated.
|
||||||
|
*
|
||||||
|
* This event is not intended for use out side of the Timeline module.
|
||||||
|
*/
|
||||||
|
public class DBUpdatedEvent {
|
||||||
|
|
||||||
|
}
|
@ -22,8 +22,8 @@ package org.sleuthkit.autopsy.timeline.events;
|
|||||||
* A "local" event published by filteredEventsModel to indicate that the user
|
* A "local" event published by filteredEventsModel to indicate that the user
|
||||||
* requested that the current visualization be refreshed with out changing any
|
* requested that the current visualization be refreshed with out changing any
|
||||||
* of the parameters ( to include more up to date tag data for example.)
|
* of the parameters ( to include more up to date tag data for example.)
|
||||||
* <p>
|
*
|
||||||
* This event is not intended for use out side of the timeline module.
|
* This event is not intended for use out side of the Timeline module.
|
||||||
*/
|
*/
|
||||||
public class RefreshRequestedEvent {
|
public class RefreshRequestedEvent {
|
||||||
|
|
||||||
|
@ -1,14 +1,36 @@
|
|||||||
/*
|
/*
|
||||||
* To change this license header, choose License Headers in Project Properties.
|
* Autopsy Forensic Browser
|
||||||
* To change this template file, choose Tools | Templates
|
*
|
||||||
* and open the template in the editor.
|
* Copyright 2014-2016 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.timeline.events;
|
package org.sleuthkit.autopsy.timeline.events;
|
||||||
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A TagsUpdatedEvent for tags that have been added to events.
|
||||||
|
*/
|
||||||
public class TagsAddedEvent extends TagsUpdatedEvent {
|
public class TagsAddedEvent extends TagsUpdatedEvent {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*
|
||||||
|
* @param updatedEventIDs The event IDs of the events that have had tags
|
||||||
|
* added to them.
|
||||||
|
*/
|
||||||
public TagsAddedEvent(Set<Long> updatedEventIDs) {
|
public TagsAddedEvent(Set<Long> updatedEventIDs) {
|
||||||
super(updatedEventIDs);
|
super(updatedEventIDs);
|
||||||
}
|
}
|
||||||
|
@ -1,17 +1,37 @@
|
|||||||
/*
|
/*
|
||||||
* To change this license header, choose License Headers in Project Properties.
|
* Autopsy Forensic Browser
|
||||||
* To change this template file, choose Tools | Templates
|
*
|
||||||
* and open the template in the editor.
|
* Copyright 2015-16 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.timeline.events;
|
package org.sleuthkit.autopsy.timeline.events;
|
||||||
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A TagsUpdatedEvent for tags that have been removed from events.
|
||||||
|
*/
|
||||||
public class TagsDeletedEvent extends TagsUpdatedEvent {
|
public class TagsDeletedEvent extends TagsUpdatedEvent {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*
|
||||||
|
* @param updatedEventIDs The event IDs of the events that have had tags
|
||||||
|
* removed from them.
|
||||||
|
*/
|
||||||
public TagsDeletedEvent(Set<Long> updatedEventIDs) {
|
public TagsDeletedEvent(Set<Long> updatedEventIDs) {
|
||||||
super(updatedEventIDs);
|
super(updatedEventIDs);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Autopsy Forensic Browser
|
* Autopsy Forensic Browser
|
||||||
*
|
*
|
||||||
* Copyright 2015 Basis Technology Corp.
|
* Copyright 2015-16 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,19 +23,31 @@ import java.util.Set;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* A "local" event published by filteredEventsModel to indicate that events have
|
* A "local" event published by filteredEventsModel to indicate that events have
|
||||||
* been(un)tagged. This event is not intended for use out side of the timeline
|
* been tagged or un-tagged. This event is not intended for use out side of the
|
||||||
* module.
|
* Timeline module.
|
||||||
*/
|
*/
|
||||||
abstract public class TagsUpdatedEvent {
|
abstract public class TagsUpdatedEvent {
|
||||||
|
|
||||||
private final Set<Long> updatedEventIDs;
|
private final Set<Long> updatedEventIDs;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the set of event IDs for the events that have been tagged or
|
||||||
|
* un-tagged.
|
||||||
|
*
|
||||||
|
* @return The set of event IDs for the events that have been tagged or
|
||||||
|
* un-tagged.
|
||||||
|
*/
|
||||||
public ImmutableSet<Long> getUpdatedEventIDs() {
|
public ImmutableSet<Long> getUpdatedEventIDs() {
|
||||||
return ImmutableSet.copyOf(updatedEventIDs);
|
return ImmutableSet.copyOf(updatedEventIDs);
|
||||||
}
|
}
|
||||||
|
|
||||||
public TagsUpdatedEvent(Set<Long> updatedEventIDs) {
|
/**
|
||||||
|
* Constructor
|
||||||
|
*
|
||||||
|
* @param updatedEventIDs The set of event IDs for the events that have been
|
||||||
|
* tagged or un-tagged.
|
||||||
|
*/
|
||||||
|
TagsUpdatedEvent(Set<Long> updatedEventIDs) {
|
||||||
this.updatedEventIDs = updatedEventIDs;
|
this.updatedEventIDs = updatedEventIDs;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Binary file not shown.
After Width: | Height: | Size: 897 B |
Binary file not shown.
After Width: | Height: | Size: 651 B |
BIN
Core/src/org/sleuthkit/autopsy/timeline/images/warning.png
Normal file
BIN
Core/src/org/sleuthkit/autopsy/timeline/images/warning.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.5 KiB |
Binary file not shown.
After Width: | Height: | Size: 1.6 KiB |
Binary file not shown.
After Width: | Height: | Size: 1.4 KiB |
@ -18,7 +18,6 @@
|
|||||||
*/
|
*/
|
||||||
package org.sleuthkit.autopsy.timeline.ui;
|
package org.sleuthkit.autopsy.timeline.ui;
|
||||||
|
|
||||||
import com.google.common.eventbus.Subscribe;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
@ -72,7 +71,6 @@ import org.sleuthkit.autopsy.coreutils.ThreadConfined;
|
|||||||
import org.sleuthkit.autopsy.timeline.TimeLineController;
|
import org.sleuthkit.autopsy.timeline.TimeLineController;
|
||||||
import org.sleuthkit.autopsy.timeline.datamodel.FilteredEventsModel;
|
import org.sleuthkit.autopsy.timeline.datamodel.FilteredEventsModel;
|
||||||
import org.sleuthkit.autopsy.timeline.datamodel.eventtype.EventType;
|
import org.sleuthkit.autopsy.timeline.datamodel.eventtype.EventType;
|
||||||
import org.sleuthkit.autopsy.timeline.events.RefreshRequestedEvent;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Abstract base class for TimeLineChart based visualizations.
|
* Abstract base class for TimeLineChart based visualizations.
|
||||||
@ -98,18 +96,29 @@ public abstract class AbstractVisualizationPane<X, Y, NodeType extends Node, Cha
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the tool tip to use for this visualization when no more specific
|
* Get the tool tip to use for this visualization when no more specific
|
||||||
* tooltip is needed.
|
* Tooltip is needed.
|
||||||
*
|
*
|
||||||
* @return The default tooltip.
|
* @return The default Tooltip.
|
||||||
*/
|
*/
|
||||||
public static Tooltip getDefaultTooltip() {
|
public static Tooltip getDefaultTooltip() {
|
||||||
return DEFAULT_TOOLTIP;
|
return DEFAULT_TOOLTIP;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Boolean property that holds true if the visualization may not represent
|
||||||
|
* the current state of the DB, because, for example, tags have been updated
|
||||||
|
* but the vis. was not refreshed.
|
||||||
|
*/
|
||||||
|
private final ReadOnlyBooleanWrapper outOfDate = new ReadOnlyBooleanWrapper(false);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Boolean property that holds true if the visualization does not show any
|
||||||
|
* events with the current zoom and filter settings.
|
||||||
|
*/
|
||||||
private final ReadOnlyBooleanWrapper hasVisibleEvents = new ReadOnlyBooleanWrapper(true);
|
private final ReadOnlyBooleanWrapper hasVisibleEvents = new ReadOnlyBooleanWrapper(true);
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* access to chart data via series
|
* Access to chart data via series
|
||||||
*/
|
*/
|
||||||
protected final ObservableList<XYChart.Series<X, Y>> dataSeries = FXCollections.<XYChart.Series<X, Y>>observableArrayList();
|
protected final ObservableList<XYChart.Series<X, Y>> dataSeries = FXCollections.<XYChart.Series<X, Y>>observableArrayList();
|
||||||
protected final Map<EventType, XYChart.Series<X, Y>> eventTypeToSeriesMap = new HashMap<>();
|
protected final Map<EventType, XYChart.Series<X, Y>> eventTypeToSeriesMap = new HashMap<>();
|
||||||
@ -131,7 +140,41 @@ public abstract class AbstractVisualizationPane<X, Y, NodeType extends Node, Cha
|
|||||||
|
|
||||||
final private ObservableList<NodeType> selectedNodes = FXCollections.observableArrayList();
|
final private ObservableList<NodeType> selectedNodes = FXCollections.observableArrayList();
|
||||||
|
|
||||||
private InvalidationListener updateListener = any -> update();
|
/**
|
||||||
|
* Listener that is attached to various properties that should trigger a vis
|
||||||
|
* update when they change.
|
||||||
|
*/
|
||||||
|
private InvalidationListener updateListener = any -> refresh();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Does the visualization represent an out-of-date state of the DB. It might
|
||||||
|
* if, for example, tags have been updated but the vis. was not refreshed.
|
||||||
|
*
|
||||||
|
* @return True if the visualization does not represent the curent state of
|
||||||
|
* the DB.
|
||||||
|
*/
|
||||||
|
public boolean isOutOfDate() {
|
||||||
|
return outOfDate.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set this visualization out of date because, for example, tags have been
|
||||||
|
* updated but the vis. was not refreshed.
|
||||||
|
*/
|
||||||
|
void setOutOfDate() {
|
||||||
|
outOfDate.set(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a ReadOnlyBooleanProperty that holds true if this visualization does
|
||||||
|
* not represent the current state of the DB>
|
||||||
|
*
|
||||||
|
* @return A ReadOnlyBooleanProperty that holds the out-of-date state for
|
||||||
|
* this visualization.
|
||||||
|
*/
|
||||||
|
public ReadOnlyBooleanProperty outOfDateProperty() {
|
||||||
|
return outOfDate.getReadOnlyProperty();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The visualization nodes that are selected.
|
* The visualization nodes that are selected.
|
||||||
@ -220,6 +263,17 @@ public abstract class AbstractVisualizationPane<X, Y, NodeType extends Node, Cha
|
|||||||
return hasVisibleEvents.getReadOnlyProperty();
|
return hasVisibleEvents.getReadOnlyProperty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Are there are any events visible in this visualization with the current
|
||||||
|
* view parameters?
|
||||||
|
*
|
||||||
|
* @return True if there are events visible in this visualization with the
|
||||||
|
* current view parameters.
|
||||||
|
*/
|
||||||
|
boolean hasVisibleEvents() {
|
||||||
|
return hasVisibleEventsProperty().get();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Apply this visualization's 'selection effect' to the given node.
|
* Apply this visualization's 'selection effect' to the given node.
|
||||||
*
|
*
|
||||||
@ -315,13 +369,13 @@ public abstract class AbstractVisualizationPane<X, Y, NodeType extends Node, Cha
|
|||||||
abstract protected void clearChartData();
|
abstract protected void clearChartData();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update this visualization based on current state of zoom / filters.
|
* Refresh this visualization based on current state of zoom / filters.
|
||||||
* Primarily this invokes the background VisualizationUpdateTask returned by
|
* Primarily this invokes the background VisualizationUpdateTask returned by
|
||||||
* getUpdateTask(), which derived classes must implement.
|
* getUpdateTask(), which derived classes must implement.
|
||||||
*
|
*
|
||||||
* TODO: replace this logic with a javafx Service ? -jm
|
* TODO: replace this logic with a javafx Service ? -jm
|
||||||
*/
|
*/
|
||||||
protected final synchronized void update() {
|
protected final synchronized void refresh() {
|
||||||
if (updateTask != null) {
|
if (updateTask != null) {
|
||||||
updateTask.cancel(true);
|
updateTask.cancel(true);
|
||||||
updateTask = null;
|
updateTask = null;
|
||||||
@ -423,21 +477,10 @@ public abstract class AbstractVisualizationPane<X, Y, NodeType extends Node, Cha
|
|||||||
TimeLineController.getTimeZone().addListener(updateListener);
|
TimeLineController.getTimeZone().addListener(updateListener);
|
||||||
|
|
||||||
//show tooltip text in status bar
|
//show tooltip text in status bar
|
||||||
hoverProperty().addListener(hoverProp -> controller.setStatus(isHover() ? DEFAULT_TOOLTIP.getText() : ""));
|
hoverProperty().addListener(hoverProp -> controller.setStatusMessage(isHover() ? DEFAULT_TOOLTIP.getText() : ""));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle a RefreshRequestedEvent from the events model by updating the
|
|
||||||
* visualization.
|
|
||||||
*
|
|
||||||
* @param event The RefreshRequestedEvent to handle.
|
|
||||||
*/
|
|
||||||
@Subscribe
|
|
||||||
public void handleRefreshRequested(RefreshRequestedEvent event) {
|
|
||||||
update();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Iterate through the list of tick-marks building a two level structure of
|
* Iterate through the list of tick-marks building a two level structure of
|
||||||
* replacement tick mark labels. (Visually) upper level has most
|
* replacement tick mark labels. (Visually) upper level has most
|
||||||
@ -626,13 +669,13 @@ public abstract class AbstractVisualizationPane<X, Y, NodeType extends Node, Cha
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Base class for Tasks that update a visualization when the view settings
|
* Base class for Tasks that refresh a visualization when the view settings
|
||||||
* change.
|
* change.
|
||||||
*
|
*
|
||||||
* @param <AxisValuesType> The type of a single object that can represent
|
* @param <AxisValuesType> The type of a single object that can represent
|
||||||
* the range of data displayed along the X-Axis.
|
* the range of data displayed along the X-Axis.
|
||||||
*/
|
*/
|
||||||
abstract protected class VisualizationUpdateTask<AxisValuesType> extends LoggedTask<Boolean> {
|
abstract protected class VisualizationRefreshTask<AxisValuesType> extends LoggedTask<Boolean> {
|
||||||
|
|
||||||
private final Node center;
|
private final Node center;
|
||||||
|
|
||||||
@ -640,10 +683,10 @@ public abstract class AbstractVisualizationPane<X, Y, NodeType extends Node, Cha
|
|||||||
* Constructor
|
* Constructor
|
||||||
*
|
*
|
||||||
* @param taskName The name of this task.
|
* @param taskName The name of this task.
|
||||||
* @param logStateChanges Whether or not task state chanes should be
|
* @param logStateChanges Whether or not task state changes should be
|
||||||
* logged.
|
* logged.
|
||||||
*/
|
*/
|
||||||
protected VisualizationUpdateTask(String taskName, boolean logStateChanges) {
|
protected VisualizationRefreshTask(String taskName, boolean logStateChanges) {
|
||||||
super(taskName, logStateChanges);
|
super(taskName, logStateChanges);
|
||||||
this.center = getCenter();
|
this.center = getCenter();
|
||||||
}
|
}
|
||||||
@ -682,6 +725,7 @@ public abstract class AbstractVisualizationPane<X, Y, NodeType extends Node, Cha
|
|||||||
@Override
|
@Override
|
||||||
protected void succeeded() {
|
protected void succeeded() {
|
||||||
super.succeeded();
|
super.succeeded();
|
||||||
|
outOfDate.set(false);
|
||||||
layoutDateLabels();
|
layoutDateLabels();
|
||||||
cleanup();
|
cleanup();
|
||||||
}
|
}
|
||||||
|
@ -1,52 +1,26 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
<?import javafx.scene.control.Button?>
|
|
||||||
<?import javafx.scene.control.Label?>
|
<?import javafx.scene.control.Label?>
|
||||||
<?import javafx.scene.control.ProgressBar?>
|
<?import javafx.scene.control.ProgressBar?>
|
||||||
<?import javafx.scene.control.Separator?>
|
<?import javafx.scene.control.Separator?>
|
||||||
<?import javafx.scene.control.ToolBar?>
|
<?import javafx.scene.control.ToolBar?>
|
||||||
<?import javafx.scene.image.Image?>
|
<?import javafx.scene.image.Image?>
|
||||||
<?import javafx.scene.image.ImageView?>
|
<?import javafx.scene.image.ImageView?>
|
||||||
<?import javafx.scene.layout.HBox?>
|
|
||||||
<?import javafx.scene.layout.Region?>
|
|
||||||
<?import javafx.scene.layout.StackPane?>
|
<?import javafx.scene.layout.StackPane?>
|
||||||
|
<?import javafx.scene.layout.HBox?>
|
||||||
|
|
||||||
<fx:root maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" type="ToolBar" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1">
|
<fx:root maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" type="ToolBar" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1">
|
||||||
<items>
|
<items>
|
||||||
<HBox fx:id="refreshBox" alignment="CENTER" spacing="5.0">
|
<Label fx:id="statusLabel" layoutX="10.0" layoutY="11.0" HBox.hgrow="ALWAYS">
|
||||||
<children>
|
|
||||||
<Label fx:id="refreshLabel">
|
|
||||||
<graphic>
|
<graphic>
|
||||||
<ImageView fitHeight="16.0" fitWidth="16.0" pickOnBounds="true" preserveRatio="true">
|
<ImageView fitHeight="16.0" fitWidth="16.0" pickOnBounds="true" preserveRatio="true">
|
||||||
<image>
|
<image>
|
||||||
<Image url="@../images/info-icon-16.png" />
|
<Image url="@../images/information-white.png" />
|
||||||
</image>
|
</image>
|
||||||
</ImageView>
|
</ImageView>
|
||||||
</graphic>
|
</graphic>
|
||||||
</Label>
|
</Label>
|
||||||
<Button fx:id="updateDBButton" mnemonicParsing="false" text="Update">
|
<Separator halignment="RIGHT" orientation="VERTICAL" />
|
||||||
<graphic>
|
|
||||||
<ImageView fitHeight="16.0" fitWidth="16.0" pickOnBounds="true" preserveRatio="true">
|
|
||||||
<image>
|
|
||||||
<Image url="@../images/database_refresh.png" />
|
|
||||||
</image>
|
|
||||||
</ImageView>
|
|
||||||
</graphic>
|
|
||||||
</Button>
|
|
||||||
</children>
|
|
||||||
</HBox>
|
|
||||||
<Separator orientation="VERTICAL" />
|
|
||||||
<Label fx:id="statusLabel" layoutX="10.0" layoutY="11.0">
|
|
||||||
<graphic>
|
|
||||||
<ImageView fitHeight="16.0" fitWidth="16.0" pickOnBounds="true" preserveRatio="true">
|
|
||||||
<image>
|
|
||||||
<Image url="@../images/information-gray.png" />
|
|
||||||
</image>
|
|
||||||
</ImageView>
|
|
||||||
</graphic>
|
|
||||||
</Label>
|
|
||||||
<Region fx:id="spacer" maxWidth="1.7976931348623157E308" />
|
|
||||||
<Separator orientation="VERTICAL" />
|
|
||||||
<Label fx:id="taskLabel" contentDisplay="RIGHT">
|
<Label fx:id="taskLabel" contentDisplay="RIGHT">
|
||||||
<graphic>
|
<graphic>
|
||||||
<StackPane>
|
<StackPane>
|
||||||
|
@ -19,41 +19,26 @@
|
|||||||
package org.sleuthkit.autopsy.timeline.ui;
|
package org.sleuthkit.autopsy.timeline.ui;
|
||||||
|
|
||||||
import javafx.fxml.FXML;
|
import javafx.fxml.FXML;
|
||||||
import javafx.scene.control.Button;
|
|
||||||
import javafx.scene.control.Label;
|
import javafx.scene.control.Label;
|
||||||
import javafx.scene.control.ProgressBar;
|
import javafx.scene.control.ProgressBar;
|
||||||
import javafx.scene.control.ToolBar;
|
import javafx.scene.control.ToolBar;
|
||||||
import javafx.scene.layout.HBox;
|
|
||||||
import javafx.scene.layout.Priority;
|
|
||||||
import javafx.scene.layout.Region;
|
|
||||||
import org.controlsfx.control.action.ActionUtils;
|
|
||||||
import org.openide.util.NbBundle;
|
|
||||||
import org.sleuthkit.autopsy.timeline.FXMLConstructor;
|
import org.sleuthkit.autopsy.timeline.FXMLConstructor;
|
||||||
import org.sleuthkit.autopsy.timeline.TimeLineController;
|
import org.sleuthkit.autopsy.timeline.TimeLineController;
|
||||||
import org.sleuthkit.autopsy.timeline.actions.RebuildDataBase;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Simple status bar that shows a possible message determined by
|
* Simple status bar that shows a possible message determined by
|
||||||
* TimeLineController.eventsDBStaleProperty() and the warning/button to update
|
* TimeLineController.statusMessageProperty() and progress of background tasks.
|
||||||
* the db if it is stale
|
|
||||||
*/
|
*/
|
||||||
public class StatusBar extends ToolBar {
|
public class StatusBar extends ToolBar {
|
||||||
|
|
||||||
private final TimeLineController controller;
|
private final TimeLineController controller;
|
||||||
|
|
||||||
@FXML
|
|
||||||
private Label refreshLabel;
|
|
||||||
@FXML
|
|
||||||
private HBox refreshBox;
|
|
||||||
@FXML
|
|
||||||
private Button updateDBButton;
|
|
||||||
@FXML
|
@FXML
|
||||||
private Label statusLabel;
|
private Label statusLabel;
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private ProgressBar progressBar;
|
private ProgressBar progressBar;
|
||||||
@FXML
|
@FXML
|
||||||
private Region spacer;
|
|
||||||
@FXML
|
|
||||||
private Label taskLabel;
|
private Label taskLabel;
|
||||||
@FXML
|
@FXML
|
||||||
private Label messageLabel;
|
private Label messageLabel;
|
||||||
@ -64,28 +49,19 @@ public class StatusBar extends ToolBar {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
@NbBundle.Messages({"StatusBar.refreshLabel.text=The timeline may be out of date."})
|
|
||||||
void initialize() {
|
void initialize() {
|
||||||
assert refreshLabel != null : "fx:id=\"refreshLabel\" was not injected: check your FXML file 'StatusBar.fxml'."; // NON-NLS
|
|
||||||
assert progressBar != null : "fx:id=\"progressBar\" was not injected: check your FXML file 'StatusBar.fxml'."; // NON-NLS
|
assert progressBar != null : "fx:id=\"progressBar\" was not injected: check your FXML file 'StatusBar.fxml'."; // NON-NLS
|
||||||
assert spacer != null : "fx:id=\"spacer\" was not injected: check your FXML file 'StatusBar.fxml'."; // NON-NLS
|
|
||||||
assert taskLabel != null : "fx:id=\"taskLabel\" was not injected: check your FXML file 'StatusBar.fxml'."; // NON-NLS
|
assert taskLabel != null : "fx:id=\"taskLabel\" was not injected: check your FXML file 'StatusBar.fxml'."; // NON-NLS
|
||||||
assert messageLabel != null : "fx:id=\"messageLabel\" was not injected: check your FXML file 'StatusBar.fxml'."; // NON-NLS
|
assert messageLabel != null : "fx:id=\"messageLabel\" was not injected: check your FXML file 'StatusBar.fxml'."; // NON-NLS
|
||||||
HBox.setHgrow(spacer, Priority.ALWAYS);
|
|
||||||
|
|
||||||
refreshLabel.setText(Bundle.StatusBar_refreshLabel_text());
|
|
||||||
refreshBox.visibleProperty().bind(this.controller.eventsDBStaleProperty());
|
|
||||||
refreshBox.managedProperty().bind(this.controller.eventsDBStaleProperty());
|
|
||||||
|
|
||||||
taskLabel.setVisible(false);
|
taskLabel.setVisible(false);
|
||||||
taskLabel.textProperty().bind(this.controller.taskTitleProperty());
|
taskLabel.textProperty().bind(this.controller.taskTitleProperty());
|
||||||
messageLabel.textProperty().bind(this.controller.taskMessageProperty());
|
|
||||||
progressBar.progressProperty().bind(this.controller.taskProgressProperty());
|
|
||||||
taskLabel.visibleProperty().bind(this.controller.getTasks().emptyProperty().not());
|
taskLabel.visibleProperty().bind(this.controller.getTasks().emptyProperty().not());
|
||||||
|
|
||||||
statusLabel.textProperty().bind(this.controller.getStatusProperty());
|
messageLabel.textProperty().bind(this.controller.taskMessageProperty());
|
||||||
statusLabel.visibleProperty().bind(statusLabel.textProperty().isNotEmpty());
|
progressBar.progressProperty().bind(this.controller.taskProgressProperty());
|
||||||
|
|
||||||
ActionUtils.configureButton(new RebuildDataBase(controller), updateDBButton);
|
statusLabel.textProperty().bind(this.controller.statusMessageProperty());
|
||||||
|
statusLabel.visibleProperty().bind(statusLabel.textProperty().isNotEmpty());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,16 +14,16 @@
|
|||||||
<?import javafx.scene.layout.StackPane?>
|
<?import javafx.scene.layout.StackPane?>
|
||||||
<?import javafx.scene.layout.VBox?>
|
<?import javafx.scene.layout.VBox?>
|
||||||
<?import javafx.scene.text.Font?>
|
<?import javafx.scene.text.Font?>
|
||||||
|
<?import jfxtras.scene.control.LocalDateTimeTextField?>
|
||||||
<?import org.controlsfx.control.SegmentedButton?>
|
<?import org.controlsfx.control.SegmentedButton?>
|
||||||
<?import jfxtras.scene.control.*?>
|
|
||||||
|
|
||||||
<fx:root prefHeight="-1.0" prefWidth="-1.0" type="javafx.scene.layout.BorderPane" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1">
|
<fx:root prefHeight="-1.0" prefWidth="-1.0" type="javafx.scene.layout.BorderPane" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1">
|
||||||
<top>
|
<top>
|
||||||
<ToolBar fx:id="toolBar" prefWidth="200.0" BorderPane.alignment="CENTER">
|
<ToolBar fx:id="toolBar" HBox.hgrow="ALWAYS">
|
||||||
<items>
|
<items>
|
||||||
<HBox alignment="CENTER" BorderPane.alignment="CENTER">
|
<HBox alignment="CENTER_LEFT" BorderPane.alignment="CENTER" HBox.hgrow="NEVER">
|
||||||
<children>
|
<children>
|
||||||
<Label fx:id="visualizationModeLabel">
|
<Label fx:id="visualizationModeLabel" text="Visualisation Mode:" textAlignment="CENTER" wrapText="true" HBox.hgrow="NEVER">
|
||||||
<HBox.margin>
|
<HBox.margin>
|
||||||
<Insets right="5.0" />
|
<Insets right="5.0" />
|
||||||
</HBox.margin>
|
</HBox.margin>
|
||||||
@ -32,7 +32,7 @@
|
|||||||
</font>
|
</font>
|
||||||
</Label>
|
</Label>
|
||||||
|
|
||||||
<org.controlsfx.control.SegmentedButton maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity">
|
<SegmentedButton maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" HBox.hgrow="NEVER">
|
||||||
<buttons>
|
<buttons>
|
||||||
<ToggleButton fx:id="countsToggle" alignment="TOP_LEFT" mnemonicParsing="false" selected="true">
|
<ToggleButton fx:id="countsToggle" alignment="TOP_LEFT" mnemonicParsing="false" selected="true">
|
||||||
<graphic>
|
<graphic>
|
||||||
@ -60,7 +60,7 @@
|
|||||||
</ToggleButton>
|
</ToggleButton>
|
||||||
</buttons>
|
</buttons>
|
||||||
|
|
||||||
</org.controlsfx.control.SegmentedButton>
|
</SegmentedButton>
|
||||||
</children>
|
</children>
|
||||||
<padding>
|
<padding>
|
||||||
<Insets bottom="3.0" left="3.0" right="3.0" top="3.0" />
|
<Insets bottom="3.0" left="3.0" right="3.0" top="3.0" />
|
||||||
@ -69,8 +69,9 @@
|
|||||||
<Insets left="10.0" />
|
<Insets left="10.0" />
|
||||||
</BorderPane.margin>
|
</BorderPane.margin>
|
||||||
</HBox>
|
</HBox>
|
||||||
<Separator orientation="VERTICAL" />
|
<Separator halignment="LEFT" maxWidth="1.7976931348623157E308" orientation="VERTICAL" />
|
||||||
<Button fx:id="snapShotButton" mnemonicParsing="false">
|
<Separator halignment="LEFT" maxWidth="1.7976931348623157E308" orientation="VERTICAL" HBox.hgrow="ALWAYS" />
|
||||||
|
<Button fx:id="snapShotButton" mnemonicParsing="false" text="Snapshot Report">
|
||||||
<graphic>
|
<graphic>
|
||||||
<ImageView fitHeight="16.0" fitWidth="16.0" pickOnBounds="true" preserveRatio="true">
|
<ImageView fitHeight="16.0" fitWidth="16.0" pickOnBounds="true" preserveRatio="true">
|
||||||
<image>
|
<image>
|
||||||
@ -79,7 +80,25 @@
|
|||||||
</ImageView>
|
</ImageView>
|
||||||
</graphic>
|
</graphic>
|
||||||
</Button>
|
</Button>
|
||||||
<Separator orientation="VERTICAL" />
|
<Separator maxWidth="1.7976931348623157E308" orientation="VERTICAL" />
|
||||||
|
<Button fx:id="refreshButton" alignment="CENTER_RIGHT" mnemonicParsing="false" text="Refresh Vis.">
|
||||||
|
<graphic>
|
||||||
|
<ImageView fitHeight="16.0" fitWidth="16.0" pickOnBounds="true" preserveRatio="true">
|
||||||
|
<image>
|
||||||
|
<Image url="@../images/arrow-circle-double-135.png" />
|
||||||
|
</image>
|
||||||
|
</ImageView>
|
||||||
|
</graphic>
|
||||||
|
</Button>
|
||||||
|
<Button fx:id="updateDBButton" mnemonicParsing="false" text="Update DB">
|
||||||
|
<graphic>
|
||||||
|
<ImageView fitHeight="16.0" fitWidth="16.0" pickOnBounds="true" preserveRatio="true">
|
||||||
|
<image>
|
||||||
|
<Image url="@../images/database_refresh.png" />
|
||||||
|
</image>
|
||||||
|
</ImageView>
|
||||||
|
</graphic>
|
||||||
|
</Button>
|
||||||
</items>
|
</items>
|
||||||
</ToolBar>
|
</ToolBar>
|
||||||
</top>
|
</top>
|
||||||
|
@ -31,7 +31,6 @@ import javafx.beans.InvalidationListener;
|
|||||||
import javafx.beans.Observable;
|
import javafx.beans.Observable;
|
||||||
import javafx.beans.value.ChangeListener;
|
import javafx.beans.value.ChangeListener;
|
||||||
import javafx.beans.value.ObservableValue;
|
import javafx.beans.value.ObservableValue;
|
||||||
import javafx.event.ActionEvent;
|
|
||||||
import javafx.fxml.FXML;
|
import javafx.fxml.FXML;
|
||||||
import javafx.geometry.Insets;
|
import javafx.geometry.Insets;
|
||||||
import javafx.scene.control.Button;
|
import javafx.scene.control.Button;
|
||||||
@ -68,55 +67,72 @@ import org.controlsfx.control.action.ActionUtils;
|
|||||||
import org.joda.time.DateTime;
|
import org.joda.time.DateTime;
|
||||||
import org.joda.time.Interval;
|
import org.joda.time.Interval;
|
||||||
import org.openide.util.NbBundle;
|
import org.openide.util.NbBundle;
|
||||||
|
import org.sleuthkit.autopsy.casemodule.events.DataSourceAddedEvent;
|
||||||
import org.sleuthkit.autopsy.coreutils.LoggedTask;
|
import org.sleuthkit.autopsy.coreutils.LoggedTask;
|
||||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||||
|
import org.sleuthkit.autopsy.ingest.events.DataSourceAnalysisCompletedEvent;
|
||||||
import org.sleuthkit.autopsy.timeline.FXMLConstructor;
|
import org.sleuthkit.autopsy.timeline.FXMLConstructor;
|
||||||
import org.sleuthkit.autopsy.timeline.TimeLineController;
|
import org.sleuthkit.autopsy.timeline.TimeLineController;
|
||||||
import org.sleuthkit.autopsy.timeline.VisualizationMode;
|
import org.sleuthkit.autopsy.timeline.VisualizationMode;
|
||||||
import org.sleuthkit.autopsy.timeline.actions.Back;
|
import org.sleuthkit.autopsy.timeline.actions.Back;
|
||||||
import org.sleuthkit.autopsy.timeline.actions.ResetFilters;
|
import org.sleuthkit.autopsy.timeline.actions.ResetFilters;
|
||||||
import org.sleuthkit.autopsy.timeline.actions.SaveSnapshotAsReport;
|
import org.sleuthkit.autopsy.timeline.actions.SaveSnapshotAsReport;
|
||||||
|
import org.sleuthkit.autopsy.timeline.actions.UpdateDB;
|
||||||
import org.sleuthkit.autopsy.timeline.actions.ZoomIn;
|
import org.sleuthkit.autopsy.timeline.actions.ZoomIn;
|
||||||
import org.sleuthkit.autopsy.timeline.actions.ZoomOut;
|
import org.sleuthkit.autopsy.timeline.actions.ZoomOut;
|
||||||
import org.sleuthkit.autopsy.timeline.actions.ZoomToEvents;
|
import org.sleuthkit.autopsy.timeline.actions.ZoomToEvents;
|
||||||
import org.sleuthkit.autopsy.timeline.datamodel.FilteredEventsModel;
|
import org.sleuthkit.autopsy.timeline.datamodel.FilteredEventsModel;
|
||||||
|
import org.sleuthkit.autopsy.timeline.events.DBUpdatedEvent;
|
||||||
|
import org.sleuthkit.autopsy.timeline.events.RefreshRequestedEvent;
|
||||||
import org.sleuthkit.autopsy.timeline.events.TagsUpdatedEvent;
|
import org.sleuthkit.autopsy.timeline.events.TagsUpdatedEvent;
|
||||||
import org.sleuthkit.autopsy.timeline.filters.TagsFilter;
|
|
||||||
import org.sleuthkit.autopsy.timeline.ui.countsview.CountsViewPane;
|
import org.sleuthkit.autopsy.timeline.ui.countsview.CountsViewPane;
|
||||||
import org.sleuthkit.autopsy.timeline.ui.detailview.DetailViewPane;
|
import org.sleuthkit.autopsy.timeline.ui.detailview.DetailViewPane;
|
||||||
import org.sleuthkit.autopsy.timeline.ui.detailview.tree.EventsTree;
|
import org.sleuthkit.autopsy.timeline.ui.detailview.tree.EventsTree;
|
||||||
import org.sleuthkit.autopsy.timeline.utils.RangeDivisionInfo;
|
import org.sleuthkit.autopsy.timeline.utils.RangeDivisionInfo;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A container for an {@link AbstractVisualizationPane}, has a toolbar on top to
|
* A container for an AbstractVisualizationPane. Has a Toolbar on top to hold
|
||||||
* hold settings widgets supplied by contained {@link AbstAbstractVisualization}
|
* settings widgets supplied by contained AbstractVisualizationPane, and the
|
||||||
* and, the histogram / time selection on bottom. Also supplies containers for
|
* histogram / time selection on bottom.
|
||||||
* replacement axis to contained {@link AbstractAbstractVisualization}
|
|
||||||
*
|
*
|
||||||
* TODO: refactor common code out of histogram and CountsView? -jm
|
* TODO: Refactor common code out of histogram and CountsView? -jm
|
||||||
*/
|
*/
|
||||||
final public class VisualizationPanel extends BorderPane {
|
final public class VisualizationPanel extends BorderPane {
|
||||||
|
|
||||||
private static final Logger LOGGER = Logger.getLogger(VisualizationPanel.class.getName());
|
private static final Logger LOGGER = Logger.getLogger(VisualizationPanel.class.getName());
|
||||||
|
|
||||||
private static final Image INFORMATION = new Image("org/sleuthkit/autopsy/timeline/images/information.png", 16, 16, true, true); // NON-NLS
|
private static final Image INFORMATION = new Image("org/sleuthkit/autopsy/timeline/images/information.png", 16, 16, true, true); // NON-NLS
|
||||||
|
private static final Image WARNING = new Image("org/sleuthkit/autopsy/timeline/images/warning_triangle.png", 16, 16, true, true); // NON-NLS
|
||||||
private static final Image REFRESH = new Image("org/sleuthkit/autopsy/timeline/images/arrow-circle-double-135.png"); // NON-NLS
|
private static final Image REFRESH = new Image("org/sleuthkit/autopsy/timeline/images/arrow-circle-double-135.png"); // NON-NLS
|
||||||
private static final Background background = new Background(new BackgroundFill(Color.GREY, CornerRadii.EMPTY, Insets.EMPTY));
|
private static final Background GRAY_BACKGROUND = new Background(new BackgroundFill(Color.GREY, CornerRadii.EMPTY, Insets.EMPTY));
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Region that will be stacked in between the no-events "dialog" and the
|
||||||
|
* hosted AbstractVisualizationPane in order to gray out the visualization.
|
||||||
|
*/
|
||||||
|
private final static Region NO_EVENTS_BACKGROUND = new Region() {
|
||||||
|
{
|
||||||
|
setBackground(GRAY_BACKGROUND);
|
||||||
|
setOpacity(.3);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
@GuardedBy("this")
|
@GuardedBy("this")
|
||||||
private LoggedTask<Void> histogramTask;
|
private LoggedTask<Void> histogramTask;
|
||||||
|
|
||||||
private final EventsTree eventsTree;
|
private final EventsTree eventsTree;
|
||||||
private AbstractVisualizationPane<?, ?, ?, ?> visualization;
|
private AbstractVisualizationPane<?, ?, ?, ?> visualization;
|
||||||
//// range slider and histogram componenets
|
|
||||||
/**
|
/*
|
||||||
* hbox that contains the histogram bars. //TODO: abstract this into a
|
* HBox that contains the histogram bars.
|
||||||
* seperate class, and/or use a real bar chart?
|
*
|
||||||
|
* //TODO: Abstract this into a seperate class, and/or use a real bar
|
||||||
|
* chart? -jm
|
||||||
*/
|
*/
|
||||||
@FXML
|
@FXML
|
||||||
private HBox histogramBox;
|
private HBox histogramBox;
|
||||||
/**
|
/*
|
||||||
* stack pane that superimposes rangeslider over histogram
|
* Stack pane that superimposes rangeslider over histogram
|
||||||
*/
|
*/
|
||||||
@FXML
|
@FXML
|
||||||
private StackPane rangeHistogramStack;
|
private StackPane rangeHistogramStack;
|
||||||
@ -126,7 +142,6 @@ final public class VisualizationPanel extends BorderPane {
|
|||||||
//// time range selection components
|
//// time range selection components
|
||||||
@FXML
|
@FXML
|
||||||
private MenuButton zoomMenuButton;
|
private MenuButton zoomMenuButton;
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private Button zoomOutButton;
|
private Button zoomOutButton;
|
||||||
@FXML
|
@FXML
|
||||||
@ -144,16 +159,20 @@ final public class VisualizationPanel extends BorderPane {
|
|||||||
@FXML
|
@FXML
|
||||||
private ToolBar toolBar;
|
private ToolBar toolBar;
|
||||||
@FXML
|
@FXML
|
||||||
|
private Label visualizationModeLabel;
|
||||||
|
@FXML
|
||||||
private ToggleButton countsToggle;
|
private ToggleButton countsToggle;
|
||||||
@FXML
|
@FXML
|
||||||
private ToggleButton detailsToggle;
|
private ToggleButton detailsToggle;
|
||||||
@FXML
|
@FXML
|
||||||
private Button snapShotButton;
|
private Button snapShotButton;
|
||||||
@FXML
|
@FXML
|
||||||
private Label visualizationModeLabel;
|
private Button refreshButton;
|
||||||
|
@FXML
|
||||||
|
private Button updateDBButton;
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* wraps contained visualization so that we can show notifications over it.
|
* Wraps contained visualization so that we can show notifications over it.
|
||||||
*/
|
*/
|
||||||
private final NotificationPane notificationPane = new NotificationPane();
|
private final NotificationPane notificationPane = new NotificationPane();
|
||||||
|
|
||||||
@ -161,8 +180,8 @@ final public class VisualizationPanel extends BorderPane {
|
|||||||
private final FilteredEventsModel filteredEvents;
|
private final FilteredEventsModel filteredEvents;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* listen to change in range slider selected time and push to controller.
|
* Listen to changes in the range slider selection and forward to the
|
||||||
* waits until the user releases thumb to send controller.
|
* controller. Waits until the user releases thumb to send to controller.
|
||||||
*/
|
*/
|
||||||
private final InvalidationListener rangeSliderListener = new InvalidationListener() {
|
private final InvalidationListener rangeSliderListener = new InvalidationListener() {
|
||||||
@Override
|
@Override
|
||||||
@ -182,7 +201,7 @@ final public class VisualizationPanel extends BorderPane {
|
|||||||
/**
|
/**
|
||||||
* hides the notification pane on any event
|
* hides the notification pane on any event
|
||||||
*/
|
*/
|
||||||
private final InvalidationListener zoomListener = any -> notificationPane.hide();
|
private final InvalidationListener zoomListener = any -> handleRefreshRequested(null);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* listen to change in end time picker and push to controller
|
* listen to change in end time picker and push to controller
|
||||||
@ -195,29 +214,36 @@ final public class VisualizationPanel extends BorderPane {
|
|||||||
private final InvalidationListener startListener = new PickerListener(() -> startPicker, Interval::withStartMillis);
|
private final InvalidationListener startListener = new PickerListener(() -> startPicker, Interval::withStartMillis);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* convert the given LocalDateTime to epoch millis USING THE CURERNT
|
* Convert the given LocalDateTime to epoch millis USING THE CURRENT
|
||||||
* TIMEZONE FROM TIMELINECONTROLLER
|
* TIMEZONE FROM THE TIMELINECONTROLLER
|
||||||
*
|
*
|
||||||
* @param localDateTime
|
* @param localDateTime The LocalDateTime to convert to millis since the
|
||||||
|
* Unix epoch.
|
||||||
*
|
*
|
||||||
* @return the given localdatetime as epoch millis
|
* @return the given LocalDateTime as epoch millis
|
||||||
*/
|
*/
|
||||||
private static long localDateTimeToEpochMilli(LocalDateTime localDateTime) {
|
private static long localDateTimeToEpochMilli(LocalDateTime localDateTime) {
|
||||||
return localDateTime.atZone(TimeLineController.getTimeZoneID()).toInstant().toEpochMilli();
|
return localDateTime.atZone(TimeLineController.getTimeZoneID()).toInstant().toEpochMilli();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* convert the given epoch millis to a LocalDateTime USING THE CURERNT
|
* Convert the given "millis from the Unix Epoch" to a LocalDateTime USING
|
||||||
* TIMEZONE FROM TIMELINECONTROLLER
|
* THE CURRENT TIMEZONE FROM THE TIMELINECONTROLLER
|
||||||
*
|
*
|
||||||
* @param millis
|
* @param millis The milliseconds to convert.
|
||||||
*
|
*
|
||||||
* @return the given epoch millis as a LocalDateTime
|
* @return The given epoch millis as a LocalDateTime
|
||||||
*/
|
*/
|
||||||
private static LocalDateTime epochMillisToLocalDateTime(long millis) {
|
private static LocalDateTime epochMillisToLocalDateTime(long millis) {
|
||||||
return LocalDateTime.ofInstant(Instant.ofEpochMilli(millis), TimeLineController.getTimeZoneID());
|
return LocalDateTime.ofInstant(Instant.ofEpochMilli(millis), TimeLineController.getTimeZoneID());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*
|
||||||
|
* @param controller The TimeLineController for this VisualizationPanel
|
||||||
|
* @param eventsTree The EventsTree this VisualizationPanel hosts.
|
||||||
|
*/
|
||||||
public VisualizationPanel(@Nonnull TimeLineController controller, @Nonnull EventsTree eventsTree) {
|
public VisualizationPanel(@Nonnull TimeLineController controller, @Nonnull EventsTree eventsTree) {
|
||||||
this.controller = controller;
|
this.controller = controller;
|
||||||
this.filteredEvents = controller.getEventsModel();
|
this.filteredEvents = controller.getEventsModel();
|
||||||
@ -225,14 +251,16 @@ final public class VisualizationPanel extends BorderPane {
|
|||||||
FXMLConstructor.construct(this, "VisualizationPanel.fxml"); // NON-NLS
|
FXMLConstructor.construct(this, "VisualizationPanel.fxml"); // NON-NLS
|
||||||
}
|
}
|
||||||
|
|
||||||
@FXML // This method is called by the FXMLLoader when initialization is complete
|
@FXML
|
||||||
@NbBundle.Messages({"VisualizationPanel.refresh=refresh",
|
@NbBundle.Messages({
|
||||||
"VisualizationPanel.visualizationModeLabel.text=Visualization Mode:",
|
"VisualizationPanel.visualizationModeLabel.text=Visualization Mode:",
|
||||||
"VisualizationPanel.startLabel.text=Start:",
|
"VisualizationPanel.startLabel.text=Start:",
|
||||||
"VisualizationPanel.endLabel.text=End:",
|
"VisualizationPanel.endLabel.text=End:",
|
||||||
"VisualizationPanel.countsToggle.text=Counts",
|
"VisualizationPanel.countsToggle.text=Counts",
|
||||||
"VisualizationPanel.detailsToggle.text=Details",
|
"VisualizationPanel.detailsToggle.text=Details",
|
||||||
"VisualizationPanel.zoomMenuButton.text=Zoom in/out to"})
|
"VisualizationPanel.zoomMenuButton.text=Zoom in/out to",
|
||||||
|
"VisualizationPanel.tagsAddedOrDeleted=Tags have been created and/or deleted. The visualization may not be up to date."
|
||||||
|
})
|
||||||
void initialize() {
|
void initialize() {
|
||||||
assert endPicker != null : "fx:id=\"endPicker\" was not injected: check your FXML file 'ViewWrapper.fxml'."; // NON-NLS
|
assert endPicker != null : "fx:id=\"endPicker\" was not injected: check your FXML file 'ViewWrapper.fxml'."; // NON-NLS
|
||||||
assert histogramBox != null : "fx:id=\"histogramBox\" was not injected: check your FXML file 'ViewWrapper.fxml'."; // NON-NLS
|
assert histogramBox != null : "fx:id=\"histogramBox\" was not injected: check your FXML file 'ViewWrapper.fxml'."; // NON-NLS
|
||||||
@ -243,15 +271,6 @@ final public class VisualizationPanel extends BorderPane {
|
|||||||
|
|
||||||
//configure notification pane
|
//configure notification pane
|
||||||
notificationPane.getStyleClass().add(NotificationPane.STYLE_CLASS_DARK);
|
notificationPane.getStyleClass().add(NotificationPane.STYLE_CLASS_DARK);
|
||||||
notificationPane.getActions().setAll(new Action(Bundle.VisualizationPanel_refresh()) {
|
|
||||||
{
|
|
||||||
setGraphic(new ImageView(REFRESH));
|
|
||||||
setEventHandler((ActionEvent t) -> {
|
|
||||||
filteredEvents.refresh();
|
|
||||||
notificationPane.hide();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
setCenter(notificationPane);
|
setCenter(notificationPane);
|
||||||
|
|
||||||
//configure visualization mode toggle
|
//configure visualization mode toggle
|
||||||
@ -262,24 +281,25 @@ final public class VisualizationPanel extends BorderPane {
|
|||||||
if (newValue == null) {
|
if (newValue == null) {
|
||||||
countsToggle.getToggleGroup().selectToggle(oldValue != null ? oldValue : countsToggle);
|
countsToggle.getToggleGroup().selectToggle(oldValue != null ? oldValue : countsToggle);
|
||||||
} else if (newValue == countsToggle && oldValue != null) {
|
} else if (newValue == countsToggle && oldValue != null) {
|
||||||
controller.setViewMode(VisualizationMode.COUNTS);
|
controller.setVisualizationMode(VisualizationMode.COUNTS);
|
||||||
} else if (newValue == detailsToggle && oldValue != null) {
|
} else if (newValue == detailsToggle && oldValue != null) {
|
||||||
controller.setViewMode(VisualizationMode.DETAIL);
|
controller.setVisualizationMode(VisualizationMode.DETAIL);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
if (countsToggle.getToggleGroup() != null) {
|
if (countsToggle.getToggleGroup() != null) {
|
||||||
countsToggle.getToggleGroup().selectedToggleProperty().addListener(toggleListener);
|
countsToggle.getToggleGroup().selectedToggleProperty().addListener(toggleListener);
|
||||||
} else {
|
} else {
|
||||||
countsToggle.toggleGroupProperty().addListener((Observable observable) -> {
|
countsToggle.toggleGroupProperty().addListener((Observable toggleGroup) -> {
|
||||||
countsToggle.getToggleGroup().selectedToggleProperty().addListener(toggleListener);
|
countsToggle.getToggleGroup().selectedToggleProperty().addListener(toggleListener);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
controller.viewModeProperty().addListener(observable -> setViewMode(controller.viewModeProperty().get()));
|
|
||||||
setViewMode(controller.viewModeProperty().get());
|
|
||||||
|
|
||||||
//configure snapshor button / action
|
controller.visualizationModeProperty().addListener(visualizationMode -> syncVisualizationMode());
|
||||||
|
syncVisualizationMode();
|
||||||
|
|
||||||
ActionUtils.configureButton(new SaveSnapshotAsReport(controller, notificationPane::getContent), snapShotButton);
|
ActionUtils.configureButton(new SaveSnapshotAsReport(controller, notificationPane::getContent), snapShotButton);
|
||||||
|
ActionUtils.configureButton(new UpdateDB(controller), updateDBButton);
|
||||||
|
|
||||||
/////configure start and end pickers
|
/////configure start and end pickers
|
||||||
startLabel.setText(Bundle.VisualizationPanel_startLabel_text());
|
startLabel.setText(Bundle.VisualizationPanel_startLabel_text());
|
||||||
@ -337,81 +357,109 @@ final public class VisualizationPanel extends BorderPane {
|
|||||||
filteredEvents.zoomParametersProperty().addListener(zoomListener);
|
filteredEvents.zoomParametersProperty().addListener(zoomListener);
|
||||||
refreshTimeUI(); //populate the viz
|
refreshTimeUI(); //populate the viz
|
||||||
|
|
||||||
//this should use an event(EventBus) , not this weird observable pattern
|
|
||||||
controller.eventsDBStaleProperty().addListener(staleProperty -> {
|
|
||||||
if (controller.isEventsDBStale()) {
|
|
||||||
Platform.runLater(VisualizationPanel.this::refreshHistorgram);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
refreshHistorgram();
|
refreshHistorgram();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setViewMode(VisualizationMode visualizationMode) {
|
/**
|
||||||
switch (visualizationMode) {
|
* Handle TagsUpdatedEvents by marking that the visualization needs to be
|
||||||
case COUNTS:
|
* refreshed.
|
||||||
setVisualization(new CountsViewPane(controller));
|
*
|
||||||
countsToggle.setSelected(true);
|
* NOTE: This VisualizationPanel must be registered with the
|
||||||
break;
|
* filteredEventsModel's EventBus in order for this handler to be invoked.
|
||||||
case DETAIL:
|
*
|
||||||
setVisualization(new DetailViewPane(controller));
|
* @param event The TagsUpdatedEvent to handle.
|
||||||
detailsToggle.setSelected(true);
|
*/
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private synchronized void setVisualization(final AbstractVisualizationPane<?, ?, ?, ?> newViz) {
|
|
||||||
Platform.runLater(() -> {
|
|
||||||
synchronized (VisualizationPanel.this) {
|
|
||||||
if (visualization != null) {
|
|
||||||
toolBar.getItems().removeAll(visualization.getSettingsNodes());
|
|
||||||
visualization.dispose();
|
|
||||||
}
|
|
||||||
|
|
||||||
visualization = newViz;
|
|
||||||
visualization.update();
|
|
||||||
toolBar.getItems().addAll(newViz.getSettingsNodes());
|
|
||||||
|
|
||||||
notificationPane.setContent(visualization);
|
|
||||||
if (visualization instanceof DetailViewPane) {
|
|
||||||
Platform.runLater(() -> {
|
|
||||||
((DetailViewPane) visualization).setHighLightedEvents(eventsTree.getSelectedEvents());
|
|
||||||
eventsTree.setDetailViewPane((DetailViewPane) visualization);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
visualization.hasVisibleEventsProperty().addListener((observable, oldValue, newValue) -> {
|
|
||||||
if (newValue == false) {
|
|
||||||
|
|
||||||
notificationPane.setContent(
|
|
||||||
new StackPane(visualization,
|
|
||||||
new Region() {
|
|
||||||
{
|
|
||||||
setBackground(new Background(new BackgroundFill(Color.GREY, CornerRadii.EMPTY, Insets.EMPTY)));
|
|
||||||
setOpacity(.3);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
new NoEventsDialog(() -> notificationPane.setContent(visualization))));
|
|
||||||
} else {
|
|
||||||
notificationPane.setContent(visualization);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
@NbBundle.Messages("VisualizationPanel.tagsAddedOrDeleted=Tags have been created and/or deleted. The visualization may not be up to date.")
|
public void handleTimeLineTagUpdate(TagsUpdatedEvent event) {
|
||||||
public void handleTimeLineTagEvent(TagsUpdatedEvent event) {
|
visualization.setOutOfDate();
|
||||||
TagsFilter tagsFilter = filteredEvents.getFilter().getTagsFilter();
|
|
||||||
if (tagsFilter.isSelected() && tagsFilter.isDisabled() == false) {
|
|
||||||
Platform.runLater(() -> {
|
Platform.runLater(() -> {
|
||||||
|
if (notificationPane.isShowing() == false) {
|
||||||
|
notificationPane.getActions().setAll(new Refresh());
|
||||||
notificationPane.show(Bundle.VisualizationPanel_tagsAddedOrDeleted(), new ImageView(INFORMATION));
|
notificationPane.show(Bundle.VisualizationPanel_tagsAddedOrDeleted(), new ImageView(INFORMATION));
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle a RefreshRequestedEvent from the events model by refreshing the
|
||||||
|
* visualization.
|
||||||
|
*
|
||||||
|
* NOTE: This VisualizationPanel must be registered with the
|
||||||
|
* filteredEventsModel's EventBus in order for this handler to be invoked.
|
||||||
|
*
|
||||||
|
* @param event The RefreshRequestedEvent to handle.
|
||||||
|
*/
|
||||||
|
@Subscribe
|
||||||
|
public void handleRefreshRequested(RefreshRequestedEvent event) {
|
||||||
|
visualization.refresh();
|
||||||
|
Platform.runLater(() -> {
|
||||||
|
if (Bundle.VisualizationPanel_tagsAddedOrDeleted().equals(notificationPane.getText())) {
|
||||||
|
notificationPane.hide();
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
synchronized private void refreshHistorgram() {
|
/**
|
||||||
|
* Handle a DBUpdatedEvent from the events model by refreshing the
|
||||||
|
* visualization.
|
||||||
|
*
|
||||||
|
* NOTE: This VisualizationPanel must be registered with the
|
||||||
|
* filteredEventsModel's EventBus in order for this handler to be invoked.
|
||||||
|
*
|
||||||
|
* @param event The DBUpdatedEvent to handle.
|
||||||
|
*/
|
||||||
|
@Subscribe
|
||||||
|
public void handleDBUpdated(DBUpdatedEvent event) {
|
||||||
|
visualization.refresh();
|
||||||
|
refreshHistorgram();
|
||||||
|
Platform.runLater(notificationPane::hide);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle a DataSourceAddedEvent from the events model by showing a
|
||||||
|
* notification.
|
||||||
|
*
|
||||||
|
* NOTE: This VisualizationPanel must be registered with the
|
||||||
|
* filteredEventsModel's EventBus in order for this handler to be invoked.
|
||||||
|
*
|
||||||
|
* @param event The DataSourceAddedEvent to handle.
|
||||||
|
*/
|
||||||
|
@Subscribe
|
||||||
|
@NbBundle.Messages({
|
||||||
|
"# {0} - datasource name",
|
||||||
|
"VisualizationPanel.notification.newDataSource={0} has been added as a new datasource. The Timeline DB may be out of date."})
|
||||||
|
public void handlDataSourceAdded(DataSourceAddedEvent event) {
|
||||||
|
Platform.runLater(() -> {
|
||||||
|
notificationPane.getActions().setAll(new UpdateDB(controller));
|
||||||
|
notificationPane.show(Bundle.VisualizationPanel_notification_newDataSource(event.getDataSource().getName()), new ImageView(WARNING));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle a DataSourceAnalysisCompletedEvent from the events modelby showing
|
||||||
|
* a notification.
|
||||||
|
*
|
||||||
|
* NOTE: This VisualizationPanel must be registered with the
|
||||||
|
* filteredEventsModel's EventBus in order for this handler to be invoked.
|
||||||
|
*
|
||||||
|
* @param event The DataSourceAnalysisCompletedEvent to handle.
|
||||||
|
*/
|
||||||
|
@Subscribe
|
||||||
|
@NbBundle.Messages({
|
||||||
|
"# {0} - datasource name",
|
||||||
|
"VisualizationPanel.notification.analysisComplete=Analysis has finished for {0}. The Timeline DB may be out of date."})
|
||||||
|
public void handleAnalysisCompleted(DataSourceAnalysisCompletedEvent event) {
|
||||||
|
Platform.runLater(() -> {
|
||||||
|
notificationPane.getActions().setAll(new UpdateDB(controller));
|
||||||
|
notificationPane.show(Bundle.VisualizationPanel_notification_analysisComplete(event.getDataSource().getName()), new ImageView(WARNING));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Refresh the Histogram to represent the current state of the DB.
|
||||||
|
*/
|
||||||
|
synchronized private void refreshHistorgram() {
|
||||||
if (histogramTask != null) {
|
if (histogramTask != null) {
|
||||||
histogramTask.cancel(true);
|
histogramTask.cancel(true);
|
||||||
}
|
}
|
||||||
@ -476,7 +524,7 @@ final public class VisualizationPanel extends BorderPane {
|
|||||||
bar.prefHeightProperty().bind(histogramBox.heightProperty().multiply(Math.log(bin)).divide(fMax));
|
bar.prefHeightProperty().bind(histogramBox.heightProperty().multiply(Math.log(bin)).divide(fMax));
|
||||||
bar.setMaxHeight(USE_PREF_SIZE);
|
bar.setMaxHeight(USE_PREF_SIZE);
|
||||||
bar.setMinHeight(USE_PREF_SIZE);
|
bar.setMinHeight(USE_PREF_SIZE);
|
||||||
bar.setBackground(background);
|
bar.setBackground(GRAY_BACKGROUND);
|
||||||
bar.setOnMouseEntered((MouseEvent event) -> {
|
bar.setOnMouseEntered((MouseEvent event) -> {
|
||||||
Tooltip.install(bar, new Tooltip(bin.toString()));
|
Tooltip.install(bar, new Tooltip(bin.toString()));
|
||||||
});
|
});
|
||||||
@ -532,6 +580,61 @@ final public class VisualizationPanel extends BorderPane {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Switch to the given VisualizationMode, by swapping out the hosted
|
||||||
|
* AbstractVislualization for one of the correct type.
|
||||||
|
*/
|
||||||
|
private void syncVisualizationMode() {
|
||||||
|
AbstractVisualizationPane<?, ?, ?, ?> vizPane;
|
||||||
|
VisualizationMode visMode = controller.visualizationModeProperty().get();
|
||||||
|
|
||||||
|
//make new visualization.
|
||||||
|
switch (visMode) {
|
||||||
|
case COUNTS:
|
||||||
|
vizPane = new CountsViewPane(controller);
|
||||||
|
Platform.runLater(() -> countsToggle.setSelected(true));
|
||||||
|
break;
|
||||||
|
case DETAIL:
|
||||||
|
DetailViewPane detailViewPane = new DetailViewPane(controller);
|
||||||
|
Platform.runLater(() -> {
|
||||||
|
detailsToggle.setSelected(true);
|
||||||
|
detailViewPane.setHighLightedEvents(eventsTree.getSelectedEvents());
|
||||||
|
eventsTree.setDetailViewPane(detailViewPane);
|
||||||
|
});
|
||||||
|
vizPane = detailViewPane;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new IllegalArgumentException("Unknown VisualizationMode: " + visMode.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
//Set the new AbstractVisualizationPane as the one hosted by this VisualizationPanel.
|
||||||
|
Platform.runLater(() -> {
|
||||||
|
//clear out old vis.
|
||||||
|
if (visualization != null) {
|
||||||
|
toolBar.getItems().removeAll(visualization.getSettingsNodes());
|
||||||
|
visualization.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
visualization = vizPane;
|
||||||
|
//setup new vis.
|
||||||
|
ActionUtils.configureButton(new Refresh(), refreshButton);//configure new refresh action for new visualization
|
||||||
|
visualization.refresh();
|
||||||
|
toolBar.getItems().addAll(2, vizPane.getSettingsNodes());
|
||||||
|
notificationPane.setContent(visualization);
|
||||||
|
|
||||||
|
//listen to has events property and show "dialog" if it is false.
|
||||||
|
visualization.hasVisibleEventsProperty().addListener(hasEvents -> {
|
||||||
|
notificationPane.setContent(visualization.hasVisibleEvents()
|
||||||
|
? visualization
|
||||||
|
: new StackPane(visualization,
|
||||||
|
NO_EVENTS_BACKGROUND,
|
||||||
|
new NoEventsDialog(() -> notificationPane.setContent(visualization))
|
||||||
|
)
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
@NbBundle.Messages("NoEventsDialog.titledPane.text=No Visible Events")
|
@NbBundle.Messages("NoEventsDialog.titledPane.text=No Visible Events")
|
||||||
private class NoEventsDialog extends StackPane {
|
private class NoEventsDialog extends StackPane {
|
||||||
|
|
||||||
@ -657,4 +760,21 @@ final public class VisualizationPanel extends BorderPane {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Action that refreshes the Visualization.
|
||||||
|
*/
|
||||||
|
private class Refresh extends Action {
|
||||||
|
|
||||||
|
@NbBundle.Messages({
|
||||||
|
"VisualizationPanel.refresh.text=Refresh Vis.",
|
||||||
|
"VisualizationPanel.refresh.longText=Refresh the visualization to include information that is in the DB but not visualized, such as newly updated tags."})
|
||||||
|
Refresh() {
|
||||||
|
super(Bundle.VisualizationPanel_refresh_text());
|
||||||
|
setLongText(Bundle.VisualizationPanel_refresh_longText());
|
||||||
|
setGraphic(new ImageView(REFRESH));
|
||||||
|
setEventHandler(actionEvent -> filteredEvents.postRefreshRequest());
|
||||||
|
disabledProperty().bind(visualization.outOfDateProperty().not());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -132,7 +132,7 @@ public class CountsViewPane extends AbstractVisualizationPane<String, Number, No
|
|||||||
countAxis.tickMarkVisibleProperty().bind(scaleIsLinear);
|
countAxis.tickMarkVisibleProperty().bind(scaleIsLinear);
|
||||||
countAxis.minorTickVisibleProperty().bind(scaleIsLinear);
|
countAxis.minorTickVisibleProperty().bind(scaleIsLinear);
|
||||||
scaleProp.addListener(scale -> {
|
scaleProp.addListener(scale -> {
|
||||||
update();
|
refresh();
|
||||||
syncAxisScaleLabel();
|
syncAxisScaleLabel();
|
||||||
});
|
});
|
||||||
syncAxisScaleLabel();
|
syncAxisScaleLabel();
|
||||||
@ -306,7 +306,7 @@ public class CountsViewPane extends AbstractVisualizationPane<String, Number, No
|
|||||||
@NbBundle.Messages({
|
@NbBundle.Messages({
|
||||||
"CountsViewPane.loggedTask.name=Updating Counts View",
|
"CountsViewPane.loggedTask.name=Updating Counts View",
|
||||||
"CountsViewPane.loggedTask.updatingCounts=Populating visualization"})
|
"CountsViewPane.loggedTask.updatingCounts=Populating visualization"})
|
||||||
private class CountsUpdateTask extends VisualizationUpdateTask<List<String>> {
|
private class CountsUpdateTask extends VisualizationRefreshTask<List<String>> {
|
||||||
|
|
||||||
CountsUpdateTask() {
|
CountsUpdateTask() {
|
||||||
super(Bundle.CountsViewPane_loggedTask_name(), true);
|
super(Bundle.CountsViewPane_loggedTask_name(), true);
|
||||||
|
@ -403,7 +403,7 @@ final class EventCountsChart extends StackedBarChart<String, Number> implements
|
|||||||
Bundle.CountsViewPane_detailSwitchMessage(),
|
Bundle.CountsViewPane_detailSwitchMessage(),
|
||||||
Bundle.CountsViewPane_detailSwitchTitle(), JOptionPane.YES_NO_OPTION);
|
Bundle.CountsViewPane_detailSwitchTitle(), JOptionPane.YES_NO_OPTION);
|
||||||
if (showConfirmDialog == JOptionPane.YES_OPTION) {
|
if (showConfirmDialog == JOptionPane.YES_OPTION) {
|
||||||
controller.setViewMode(VisualizationMode.DETAIL);
|
controller.setVisualizationMode(VisualizationMode.DETAIL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -344,7 +344,7 @@ public class DetailViewPane extends AbstractVisualizationPane<DateTime, EventStr
|
|||||||
"DetailViewPane.loggedTask.backButton=Back (Cancel)",
|
"DetailViewPane.loggedTask.backButton=Back (Cancel)",
|
||||||
"# {0} - number of events",
|
"# {0} - number of events",
|
||||||
"DetailViewPane.loggedTask.prompt=You are about to show details for {0} events. This might be very slow or even crash Autopsy.\n\nDo you want to continue?"})
|
"DetailViewPane.loggedTask.prompt=You are about to show details for {0} events. This might be very slow or even crash Autopsy.\n\nDo you want to continue?"})
|
||||||
private class DetailsUpdateTask extends VisualizationUpdateTask<Interval> {
|
private class DetailsUpdateTask extends VisualizationRefreshTask<Interval> {
|
||||||
|
|
||||||
DetailsUpdateTask() {
|
DetailsUpdateTask() {
|
||||||
super(Bundle.DetailViewPane_loggedTask_name(), true);
|
super(Bundle.DetailViewPane_loggedTask_name(), true);
|
||||||
|
@ -129,9 +129,9 @@ final public class FilterSetPanel extends BorderPane {
|
|||||||
hiddenDescriptionsListView.setItems(controller.getQuickHideFilters());
|
hiddenDescriptionsListView.setItems(controller.getQuickHideFilters());
|
||||||
hiddenDescriptionsListView.setCellFactory(listView -> getNewDiscriptionFilterListCell());
|
hiddenDescriptionsListView.setCellFactory(listView -> getNewDiscriptionFilterListCell());
|
||||||
|
|
||||||
controller.viewModeProperty().addListener(observable -> {
|
controller.visualizationModeProperty().addListener(observable -> {
|
||||||
applyFilters();
|
applyFilters();
|
||||||
if (controller.viewModeProperty().get() == VisualizationMode.COUNTS) {
|
if (controller.visualizationModeProperty().get() == VisualizationMode.COUNTS) {
|
||||||
dividerPosition = splitPane.getDividerPositions()[0];
|
dividerPosition = splitPane.getDividerPositions()[0];
|
||||||
splitPane.setDividerPositions(1);
|
splitPane.setDividerPositions(1);
|
||||||
hiddenDescriptionsPane.setExpanded(false);
|
hiddenDescriptionsPane.setExpanded(false);
|
||||||
|
@ -102,7 +102,7 @@ public class ZoomSettingsPane extends TitledPane {
|
|||||||
Function.identity());
|
Function.identity());
|
||||||
descrLODLabel.setText(Bundle.ZoomSettingsPane_descrLODLabel_text());
|
descrLODLabel.setText(Bundle.ZoomSettingsPane_descrLODLabel_text());
|
||||||
//the description slider is only usefull in the detail view
|
//the description slider is only usefull in the detail view
|
||||||
descrLODSlider.disableProperty().bind(controller.viewModeProperty().isEqualTo(VisualizationMode.COUNTS));
|
descrLODSlider.disableProperty().bind(controller.visualizationModeProperty().isEqualTo(VisualizationMode.COUNTS));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* In order for the selected value in the time unit slider to correspond
|
* In order for the selected value in the time unit slider to correspond
|
||||||
|
@ -23,16 +23,40 @@
|
|||||||
<Layout>
|
<Layout>
|
||||||
<DimensionLayout dim="0">
|
<DimensionLayout dim="0">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" alignment="0" attributes="0">
|
<Component id="jScrollPane1" alignment="1" max="32767" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</DimensionLayout>
|
||||||
|
<DimensionLayout dim="1">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Component id="jScrollPane1" alignment="1" pref="334" max="32767" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</DimensionLayout>
|
||||||
|
</Layout>
|
||||||
|
<SubComponents>
|
||||||
|
<Container class="javax.swing.JScrollPane" name="jScrollPane1">
|
||||||
|
<Properties>
|
||||||
|
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
|
||||||
|
<Border info="null"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
|
||||||
|
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
|
||||||
|
<SubComponents>
|
||||||
|
<Container class="javax.swing.JPanel" name="jPanel1">
|
||||||
|
|
||||||
|
<Layout>
|
||||||
|
<DimensionLayout dim="0">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Group type="102" 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">
|
||||||
<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">
|
||||||
<EmptySpace min="21" pref="21" max="-2" attributes="0"/>
|
<EmptySpace min="21" pref="21" max="-2" attributes="0"/>
|
||||||
<Component id="unavailableDuringInjestLabel" min="-2" max="-2" attributes="0"/>
|
<Component id="unavailableDuringInjestLabel" min="-2" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
<Group type="103" groupAlignment="0" max="-2" attributes="0">
|
<Group type="103" alignment="0" groupAlignment="0" max="-2" attributes="0">
|
||||||
<Component id="enabledByDefaultBox" min="-2" max="-2" attributes="0"/>
|
<Component id="enabledByDefaultBox" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="enabledForCaseBox" alignment="0" min="-2" max="-2" attributes="0"/>
|
<Component id="enabledForCaseBox" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="descriptionLabel" alignment="1" max="32767" attributes="0"/>
|
<Component id="descriptionLabel" alignment="1" max="32767" attributes="0"/>
|
||||||
@ -40,7 +64,7 @@
|
|||||||
<EmptySpace min="21" pref="21" max="-2" attributes="0"/>
|
<EmptySpace min="21" pref="21" max="-2" attributes="0"/>
|
||||||
<Component id="infoIconLabel" min="-2" max="-2" attributes="0"/>
|
<Component id="infoIconLabel" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
<Component id="furtherDescriptionArea" max="32767" attributes="0"/>
|
<Component id="furtherDescriptionArea" min="-2" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
<Component id="groupCategorizationWarningBox" alignment="0" min="-2" max="-2" attributes="0"/>
|
<Component id="groupCategorizationWarningBox" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||||
@ -55,8 +79,8 @@
|
|||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
<DimensionLayout dim="1">
|
<DimensionLayout dim="1">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" alignment="0" attributes="0">
|
<Group type="102" attributes="0">
|
||||||
<EmptySpace min="-2" max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
<Component id="descriptionLabel" min="-2" max="-2" attributes="0"/>
|
<Component id="descriptionLabel" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace type="unrelated" min="-2" max="-2" attributes="0"/>
|
<EmptySpace type="unrelated" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="enabledByDefaultBox" min="-2" max="-2" attributes="0"/>
|
<Component id="enabledByDefaultBox" min="-2" max="-2" attributes="0"/>
|
||||||
@ -73,7 +97,7 @@
|
|||||||
<Component id="jSeparator1" min="-2" pref="10" max="-2" attributes="0"/>
|
<Component id="jSeparator1" min="-2" pref="10" max="-2" attributes="0"/>
|
||||||
<EmptySpace type="unrelated" min="-2" max="-2" attributes="0"/>
|
<EmptySpace type="unrelated" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="groupCategorizationWarningBox" min="-2" max="-2" attributes="0"/>
|
<Component id="groupCategorizationWarningBox" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace max="32767" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
@ -94,6 +118,20 @@
|
|||||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="enabledByDefaultBoxActionPerformed"/>
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="enabledByDefaultBoxActionPerformed"/>
|
||||||
</Events>
|
</Events>
|
||||||
</Component>
|
</Component>
|
||||||
|
<Component class="javax.swing.JSeparator" name="jSeparator1">
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JLabel" name="infoIconLabel">
|
||||||
|
<Properties>
|
||||||
|
<Property name="font" type="java.awt.Font" editor="org.netbeans.modules.form.editors2.FontEditor">
|
||||||
|
<FontInfo relative="true">
|
||||||
|
<Font bold="false" component="infoIconLabel" property="font" relativeSize="false" size="11"/>
|
||||||
|
</FontInfo>
|
||||||
|
</Property>
|
||||||
|
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
|
||||||
|
<Image iconType="3" name="/org/sleuthkit/autopsy/imagegallery/images/info-icon-16.png"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
<Component class="javax.swing.JCheckBox" name="enabledForCaseBox">
|
<Component class="javax.swing.JCheckBox" name="enabledForCaseBox">
|
||||||
<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">
|
||||||
@ -112,6 +150,28 @@
|
|||||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="enabledForCaseBoxActionPerformed"/>
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="enabledForCaseBoxActionPerformed"/>
|
||||||
</Events>
|
</Events>
|
||||||
</Component>
|
</Component>
|
||||||
|
<Component class="javax.swing.JLabel" name="unavailableDuringInjestLabel">
|
||||||
|
<Properties>
|
||||||
|
<Property name="font" type="java.awt.Font" editor="org.netbeans.modules.form.editors2.FontEditor">
|
||||||
|
<FontInfo relative="true">
|
||||||
|
<Font bold="false" component="unavailableDuringInjestLabel" property="font" relativeSize="false" size="11"/>
|
||||||
|
</FontInfo>
|
||||||
|
</Property>
|
||||||
|
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
|
||||||
|
<Image iconType="3" name="/org/sleuthkit/autopsy/imagegallery/images/warning16.png"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/sleuthkit/autopsy/imagegallery/Bundle.properties" key="ImageGalleryOptionsPanel.unavailableDuringInjestLabel.text" replaceFormat="NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JCheckBox" name="groupCategorizationWarningBox">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/sleuthkit/autopsy/imagegallery/Bundle.properties" key="ImageGalleryOptionsPanel.groupCategorizationWarningBox.text" replaceFormat="NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
<Component class="javax.swing.JLabel" name="descriptionLabel">
|
<Component class="javax.swing.JLabel" name="descriptionLabel">
|
||||||
<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">
|
||||||
@ -146,41 +206,9 @@
|
|||||||
</Property>
|
</Property>
|
||||||
</Properties>
|
</Properties>
|
||||||
</Component>
|
</Component>
|
||||||
<Component class="javax.swing.JLabel" name="infoIconLabel">
|
</SubComponents>
|
||||||
<Properties>
|
</Container>
|
||||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.modules.form.editors2.FontEditor">
|
</SubComponents>
|
||||||
<FontInfo relative="true">
|
</Container>
|
||||||
<Font bold="false" component="infoIconLabel" property="font" relativeSize="false" size="11"/>
|
|
||||||
</FontInfo>
|
|
||||||
</Property>
|
|
||||||
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
|
|
||||||
<Image iconType="3" name="/org/sleuthkit/autopsy/imagegallery/images/info-icon-16.png"/>
|
|
||||||
</Property>
|
|
||||||
</Properties>
|
|
||||||
</Component>
|
|
||||||
<Component class="javax.swing.JLabel" name="unavailableDuringInjestLabel">
|
|
||||||
<Properties>
|
|
||||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.modules.form.editors2.FontEditor">
|
|
||||||
<FontInfo relative="true">
|
|
||||||
<Font bold="false" component="unavailableDuringInjestLabel" property="font" relativeSize="false" size="11"/>
|
|
||||||
</FontInfo>
|
|
||||||
</Property>
|
|
||||||
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
|
|
||||||
<Image iconType="3" name="/org/sleuthkit/autopsy/imagegallery/images/warning16.png"/>
|
|
||||||
</Property>
|
|
||||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
|
||||||
<ResourceString bundle="org/sleuthkit/autopsy/imagegallery/Bundle.properties" key="ImageGalleryOptionsPanel.unavailableDuringInjestLabel.text" replaceFormat="NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
|
||||||
</Property>
|
|
||||||
</Properties>
|
|
||||||
</Component>
|
|
||||||
<Component class="javax.swing.JSeparator" name="jSeparator1">
|
|
||||||
</Component>
|
|
||||||
<Component class="javax.swing.JCheckBox" name="groupCategorizationWarningBox">
|
|
||||||
<Properties>
|
|
||||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
|
||||||
<ResourceString bundle="org/sleuthkit/autopsy/imagegallery/Bundle.properties" key="ImageGalleryOptionsPanel.groupCategorizationWarningBox.text" replaceFormat="NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
|
||||||
</Property>
|
|
||||||
</Properties>
|
|
||||||
</Component>
|
|
||||||
</SubComponents>
|
</SubComponents>
|
||||||
</Form>
|
</Form>
|
||||||
|
@ -58,17 +58,21 @@ final class ImageGalleryOptionsPanel 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() {
|
||||||
|
|
||||||
|
jScrollPane1 = new javax.swing.JScrollPane();
|
||||||
|
jPanel1 = new javax.swing.JPanel();
|
||||||
enabledByDefaultBox = new javax.swing.JCheckBox();
|
enabledByDefaultBox = new javax.swing.JCheckBox();
|
||||||
|
jSeparator1 = new javax.swing.JSeparator();
|
||||||
|
infoIconLabel = new javax.swing.JLabel();
|
||||||
enabledForCaseBox = new javax.swing.JCheckBox();
|
enabledForCaseBox = new javax.swing.JCheckBox();
|
||||||
|
unavailableDuringInjestLabel = new javax.swing.JLabel();
|
||||||
|
groupCategorizationWarningBox = new javax.swing.JCheckBox();
|
||||||
descriptionLabel = new javax.swing.JLabel();
|
descriptionLabel = new javax.swing.JLabel();
|
||||||
furtherDescriptionArea = new javax.swing.JTextArea();
|
furtherDescriptionArea = new javax.swing.JTextArea();
|
||||||
infoIconLabel = new javax.swing.JLabel();
|
|
||||||
unavailableDuringInjestLabel = new javax.swing.JLabel();
|
|
||||||
jSeparator1 = new javax.swing.JSeparator();
|
|
||||||
groupCategorizationWarningBox = new javax.swing.JCheckBox();
|
|
||||||
|
|
||||||
setFont(getFont().deriveFont(getFont().getStyle() & ~java.awt.Font.BOLD, 11));
|
setFont(getFont().deriveFont(getFont().getStyle() & ~java.awt.Font.BOLD, 11));
|
||||||
|
|
||||||
|
jScrollPane1.setBorder(null);
|
||||||
|
|
||||||
enabledByDefaultBox.setFont(enabledByDefaultBox.getFont().deriveFont(enabledByDefaultBox.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
|
enabledByDefaultBox.setFont(enabledByDefaultBox.getFont().deriveFont(enabledByDefaultBox.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(enabledByDefaultBox, org.openide.util.NbBundle.getMessage(ImageGalleryOptionsPanel.class, "ImageGalleryOptionsPanel.enabledByDefaultBox.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(enabledByDefaultBox, org.openide.util.NbBundle.getMessage(ImageGalleryOptionsPanel.class, "ImageGalleryOptionsPanel.enabledByDefaultBox.text")); // NOI18N
|
||||||
enabledByDefaultBox.addActionListener(new java.awt.event.ActionListener() {
|
enabledByDefaultBox.addActionListener(new java.awt.event.ActionListener() {
|
||||||
@ -77,6 +81,9 @@ final class ImageGalleryOptionsPanel extends javax.swing.JPanel {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
infoIconLabel.setFont(infoIconLabel.getFont().deriveFont(infoIconLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
|
||||||
|
infoIconLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/imagegallery/images/info-icon-16.png"))); // NOI18N
|
||||||
|
|
||||||
enabledForCaseBox.setFont(enabledForCaseBox.getFont().deriveFont(enabledForCaseBox.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
|
enabledForCaseBox.setFont(enabledForCaseBox.getFont().deriveFont(enabledForCaseBox.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(enabledForCaseBox, org.openide.util.NbBundle.getMessage(ImageGalleryOptionsPanel.class, "ImageGalleryOptionsPanel.enabledForCaseBox.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(enabledForCaseBox, org.openide.util.NbBundle.getMessage(ImageGalleryOptionsPanel.class, "ImageGalleryOptionsPanel.enabledForCaseBox.text")); // NOI18N
|
||||||
enabledForCaseBox.setToolTipText(NbBundle.getMessage(ImageGalleryOptionsPanel.class, "ImageGalleryOptionsPanel.enabledForCaseBox.toolTipText")); // NOI18N
|
enabledForCaseBox.setToolTipText(NbBundle.getMessage(ImageGalleryOptionsPanel.class, "ImageGalleryOptionsPanel.enabledForCaseBox.toolTipText")); // NOI18N
|
||||||
@ -86,6 +93,12 @@ final class ImageGalleryOptionsPanel extends javax.swing.JPanel {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
unavailableDuringInjestLabel.setFont(unavailableDuringInjestLabel.getFont().deriveFont(unavailableDuringInjestLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
|
||||||
|
unavailableDuringInjestLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/imagegallery/images/warning16.png"))); // NOI18N
|
||||||
|
org.openide.awt.Mnemonics.setLocalizedText(unavailableDuringInjestLabel, NbBundle.getMessage(ImageGalleryOptionsPanel.class, "ImageGalleryOptionsPanel.unavailableDuringInjestLabel.text")); // NOI18N
|
||||||
|
|
||||||
|
org.openide.awt.Mnemonics.setLocalizedText(groupCategorizationWarningBox, NbBundle.getMessage(ImageGalleryOptionsPanel.class, "ImageGalleryOptionsPanel.groupCategorizationWarningBox.text")); // NOI18N
|
||||||
|
|
||||||
descriptionLabel.setFont(descriptionLabel.getFont().deriveFont(descriptionLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
|
descriptionLabel.setFont(descriptionLabel.getFont().deriveFont(descriptionLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(descriptionLabel, org.openide.util.NbBundle.getMessage(ImageGalleryOptionsPanel.class, "ImageGalleryOptionsPanel.descriptionLabel.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(descriptionLabel, org.openide.util.NbBundle.getMessage(ImageGalleryOptionsPanel.class, "ImageGalleryOptionsPanel.descriptionLabel.text")); // NOI18N
|
||||||
|
|
||||||
@ -98,44 +111,35 @@ final class ImageGalleryOptionsPanel extends javax.swing.JPanel {
|
|||||||
furtherDescriptionArea.setWrapStyleWord(true);
|
furtherDescriptionArea.setWrapStyleWord(true);
|
||||||
furtherDescriptionArea.setPreferredSize(new java.awt.Dimension(378, 74));
|
furtherDescriptionArea.setPreferredSize(new java.awt.Dimension(378, 74));
|
||||||
|
|
||||||
infoIconLabel.setFont(infoIconLabel.getFont().deriveFont(infoIconLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
|
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
|
||||||
infoIconLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/imagegallery/images/info-icon-16.png"))); // NOI18N
|
jPanel1.setLayout(jPanel1Layout);
|
||||||
|
jPanel1Layout.setHorizontalGroup(
|
||||||
unavailableDuringInjestLabel.setFont(unavailableDuringInjestLabel.getFont().deriveFont(unavailableDuringInjestLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
|
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
unavailableDuringInjestLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/imagegallery/images/warning16.png"))); // NOI18N
|
.addGroup(jPanel1Layout.createSequentialGroup()
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(unavailableDuringInjestLabel, NbBundle.getMessage(ImageGalleryOptionsPanel.class, "ImageGalleryOptionsPanel.unavailableDuringInjestLabel.text")); // NOI18N
|
|
||||||
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(groupCategorizationWarningBox, NbBundle.getMessage(ImageGalleryOptionsPanel.class, "ImageGalleryOptionsPanel.groupCategorizationWarningBox.text")); // NOI18N
|
|
||||||
|
|
||||||
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
|
|
||||||
this.setLayout(layout);
|
|
||||||
layout.setHorizontalGroup(
|
|
||||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
||||||
.addGroup(layout.createSequentialGroup()
|
|
||||||
.addContainerGap()
|
.addContainerGap()
|
||||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(layout.createSequentialGroup()
|
.addGroup(jPanel1Layout.createSequentialGroup()
|
||||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(layout.createSequentialGroup()
|
.addGroup(jPanel1Layout.createSequentialGroup()
|
||||||
.addGap(21, 21, 21)
|
.addGap(21, 21, 21)
|
||||||
.addComponent(unavailableDuringInjestLabel))
|
.addComponent(unavailableDuringInjestLabel))
|
||||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
|
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
|
||||||
.addComponent(enabledByDefaultBox)
|
.addComponent(enabledByDefaultBox)
|
||||||
.addComponent(enabledForCaseBox)
|
.addComponent(enabledForCaseBox)
|
||||||
.addComponent(descriptionLabel, javax.swing.GroupLayout.Alignment.TRAILING)
|
.addComponent(descriptionLabel, javax.swing.GroupLayout.Alignment.TRAILING)
|
||||||
.addGroup(layout.createSequentialGroup()
|
.addGroup(jPanel1Layout.createSequentialGroup()
|
||||||
.addGap(21, 21, 21)
|
.addGap(21, 21, 21)
|
||||||
.addComponent(infoIconLabel)
|
.addComponent(infoIconLabel)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addComponent(furtherDescriptionArea, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
|
.addComponent(furtherDescriptionArea, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
|
||||||
.addComponent(groupCategorizationWarningBox))
|
.addComponent(groupCategorizationWarningBox))
|
||||||
.addGap(0, 36, Short.MAX_VALUE))
|
.addGap(0, 36, Short.MAX_VALUE))
|
||||||
.addComponent(jSeparator1))
|
.addComponent(jSeparator1))
|
||||||
.addContainerGap())
|
.addContainerGap())
|
||||||
);
|
);
|
||||||
layout.setVerticalGroup(
|
jPanel1Layout.setVerticalGroup(
|
||||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(layout.createSequentialGroup()
|
.addGroup(jPanel1Layout.createSequentialGroup()
|
||||||
.addContainerGap()
|
.addContainerGap()
|
||||||
.addComponent(descriptionLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addComponent(descriptionLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||||
@ -145,14 +149,27 @@ final class ImageGalleryOptionsPanel extends javax.swing.JPanel {
|
|||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addComponent(unavailableDuringInjestLabel)
|
.addComponent(unavailableDuringInjestLabel)
|
||||||
.addGap(18, 18, 18)
|
.addGap(18, 18, 18)
|
||||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addComponent(infoIconLabel)
|
.addComponent(infoIconLabel)
|
||||||
.addComponent(furtherDescriptionArea, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE))
|
.addComponent(furtherDescriptionArea, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||||
.addGap(18, 18, 18)
|
.addGap(18, 18, 18)
|
||||||
.addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||||
.addComponent(groupCategorizationWarningBox)
|
.addComponent(groupCategorizationWarningBox)
|
||||||
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
.addContainerGap())
|
||||||
|
);
|
||||||
|
|
||||||
|
jScrollPane1.setViewportView(jPanel1);
|
||||||
|
|
||||||
|
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
|
||||||
|
this.setLayout(layout);
|
||||||
|
layout.setHorizontalGroup(
|
||||||
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING)
|
||||||
|
);
|
||||||
|
layout.setVerticalGroup(
|
||||||
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 334, Short.MAX_VALUE)
|
||||||
);
|
);
|
||||||
}// </editor-fold>//GEN-END:initComponents
|
}// </editor-fold>//GEN-END:initComponents
|
||||||
|
|
||||||
@ -200,6 +217,8 @@ final class ImageGalleryOptionsPanel extends javax.swing.JPanel {
|
|||||||
private javax.swing.JTextArea furtherDescriptionArea;
|
private javax.swing.JTextArea furtherDescriptionArea;
|
||||||
private javax.swing.JCheckBox groupCategorizationWarningBox;
|
private javax.swing.JCheckBox groupCategorizationWarningBox;
|
||||||
private javax.swing.JLabel infoIconLabel;
|
private javax.swing.JLabel infoIconLabel;
|
||||||
|
private javax.swing.JPanel jPanel1;
|
||||||
|
private javax.swing.JScrollPane jScrollPane1;
|
||||||
private javax.swing.JSeparator jSeparator1;
|
private javax.swing.JSeparator jSeparator1;
|
||||||
private javax.swing.JLabel unavailableDuringInjestLabel;
|
private javax.swing.JLabel unavailableDuringInjestLabel;
|
||||||
// End of variables declaration//GEN-END:variables
|
// End of variables declaration//GEN-END:variables
|
||||||
|
@ -288,3 +288,6 @@ SolrConnectionCheck.HostnameOrPort=Invalid hostname and/or port number.
|
|||||||
SolrConnectionCheck.Hostname=Invalid hostname.
|
SolrConnectionCheck.Hostname=Invalid hostname.
|
||||||
SolrConnectionCheck.MissingHostname=Missing hostname.
|
SolrConnectionCheck.MissingHostname=Missing hostname.
|
||||||
RawText.getText.error.msg=Error getting text
|
RawText.getText.error.msg=Error getting text
|
||||||
|
GlobalListsManagementPanel.newListButton.text=New List
|
||||||
|
GlobalListsManagementPanel.importButton.text=Import List
|
||||||
|
GlobalListsManagementPanel.keywordListsLabel.text=Keyword Lists:
|
||||||
|
@ -39,6 +39,11 @@
|
|||||||
</SubComponents>
|
</SubComponents>
|
||||||
</Container>
|
</Container>
|
||||||
</NonVisualComponents>
|
</NonVisualComponents>
|
||||||
|
<Properties>
|
||||||
|
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||||
|
<Dimension value="[0, 0]"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
<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"/>
|
||||||
@ -60,19 +65,24 @@
|
|||||||
<DimensionLayout dim="1">
|
<DimensionLayout dim="1">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" attributes="0">
|
<Group type="102" attributes="0">
|
||||||
<Component id="listEditorPanel" min="-2" max="-2" attributes="0"/>
|
<Component id="listEditorPanel" max="32767" attributes="0"/>
|
||||||
<EmptySpace max="32767" attributes="0"/>
|
<EmptySpace min="-2" pref="5" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
</Layout>
|
</Layout>
|
||||||
<SubComponents>
|
<SubComponents>
|
||||||
<Container class="javax.swing.JPanel" name="listEditorPanel">
|
<Container class="javax.swing.JPanel" name="listEditorPanel">
|
||||||
|
<Properties>
|
||||||
|
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||||
|
<Dimension value="[0, 0]"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
|
||||||
<Layout>
|
<Layout>
|
||||||
<DimensionLayout dim="0">
|
<DimensionLayout dim="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">
|
||||||
<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" alignment="0" attributes="0">
|
<Group type="102" alignment="0" attributes="0">
|
||||||
@ -91,7 +101,10 @@
|
|||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
<Component id="keywordOptionsSeparator" max="32767" attributes="0"/>
|
<Component id="keywordOptionsSeparator" max="32767" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
|
<Group type="102" attributes="0">
|
||||||
|
<EmptySpace min="10" pref="10" max="-2" attributes="0"/>
|
||||||
<Component id="jScrollPane1" max="32767" attributes="0"/>
|
<Component id="jScrollPane1" max="32767" attributes="0"/>
|
||||||
|
</Group>
|
||||||
<Group type="102" attributes="0">
|
<Group type="102" attributes="0">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Component id="keywordsLabel" min="-2" max="-2" attributes="0"/>
|
<Component id="keywordsLabel" min="-2" max="-2" attributes="0"/>
|
||||||
@ -121,10 +134,10 @@
|
|||||||
<DimensionLayout dim="1">
|
<DimensionLayout dim="1">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" alignment="1" attributes="0">
|
<Group type="102" alignment="1" attributes="0">
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="keywordsLabel" min="-2" max="-2" attributes="0"/>
|
<Component id="keywordsLabel" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="jScrollPane1" min="-2" pref="178" max="-2" attributes="0"/>
|
<Component id="jScrollPane1" pref="117" max="32767" attributes="0"/>
|
||||||
<EmptySpace min="-2" pref="10" max="-2" attributes="0"/>
|
<EmptySpace min="-2" pref="10" max="-2" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" alignment="0" attributes="0">
|
<Group type="102" alignment="0" attributes="0">
|
||||||
@ -142,9 +155,9 @@
|
|||||||
<Component id="listOptionsSeparator" min="-2" pref="6" max="-2" attributes="0"/>
|
<Component id="listOptionsSeparator" min="-2" pref="6" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="ingestMessagesCheckbox" min="-2" max="-2" attributes="0"/>
|
<Component id="ingestMessagesCheckbox" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="3" attributes="0">
|
<Group type="103" groupAlignment="3" attributes="0">
|
||||||
<Component id="exportButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
<Component id="exportButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="saveListButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
<Component id="saveListButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
@ -174,6 +187,9 @@
|
|||||||
<Connection code="tableModel" type="code"/>
|
<Connection code="tableModel" type="code"/>
|
||||||
</Property>
|
</Property>
|
||||||
<Property name="autoResizeMode" type="int" value="0"/>
|
<Property name="autoResizeMode" type="int" value="0"/>
|
||||||
|
<Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||||
|
<Dimension value="[30000, 30000]"/>
|
||||||
|
</Property>
|
||||||
<Property name="showHorizontalLines" type="boolean" value="false"/>
|
<Property name="showHorizontalLines" type="boolean" value="false"/>
|
||||||
<Property name="showVerticalLines" type="boolean" value="false"/>
|
<Property name="showVerticalLines" type="boolean" value="false"/>
|
||||||
<Property name="tableHeader" type="javax.swing.table.JTableHeader" editor="org.netbeans.modules.form.editors2.JTableHeaderEditor">
|
<Property name="tableHeader" type="javax.swing.table.JTableHeader" editor="org.netbeans.modules.form.editors2.JTableHeaderEditor">
|
||||||
@ -214,7 +230,7 @@
|
|||||||
</Group>
|
</Group>
|
||||||
<EmptySpace min="-2" pref="6" max="-2" attributes="0"/>
|
<EmptySpace min="-2" pref="6" max="-2" attributes="0"/>
|
||||||
<Component id="chRegex" min="-2" max="-2" attributes="0"/>
|
<Component id="chRegex" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace pref="43" max="32767" attributes="0"/>
|
<EmptySpace min="-2" pref="43" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
|
@ -231,10 +231,15 @@ class GlobalEditListPanel extends javax.swing.JPanel implements ListSelectionLis
|
|||||||
selectAllMenuItem.setText(org.openide.util.NbBundle.getMessage(GlobalEditListPanel.class, "KeywordSearchEditListPanel.selectAllMenuItem.text")); // NOI18N
|
selectAllMenuItem.setText(org.openide.util.NbBundle.getMessage(GlobalEditListPanel.class, "KeywordSearchEditListPanel.selectAllMenuItem.text")); // NOI18N
|
||||||
rightClickMenu.add(selectAllMenuItem);
|
rightClickMenu.add(selectAllMenuItem);
|
||||||
|
|
||||||
|
setMinimumSize(new java.awt.Dimension(0, 0));
|
||||||
|
|
||||||
|
listEditorPanel.setMinimumSize(new java.awt.Dimension(0, 0));
|
||||||
|
|
||||||
jScrollPane1.setPreferredSize(new java.awt.Dimension(340, 300));
|
jScrollPane1.setPreferredSize(new java.awt.Dimension(340, 300));
|
||||||
|
|
||||||
keywordTable.setModel(tableModel);
|
keywordTable.setModel(tableModel);
|
||||||
keywordTable.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);
|
keywordTable.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);
|
||||||
|
keywordTable.setMaximumSize(new java.awt.Dimension(30000, 30000));
|
||||||
keywordTable.setShowHorizontalLines(false);
|
keywordTable.setShowHorizontalLines(false);
|
||||||
keywordTable.setShowVerticalLines(false);
|
keywordTable.setShowVerticalLines(false);
|
||||||
keywordTable.getTableHeader().setReorderingAllowed(false);
|
keywordTable.getTableHeader().setReorderingAllowed(false);
|
||||||
@ -290,7 +295,7 @@ class GlobalEditListPanel extends javax.swing.JPanel implements ListSelectionLis
|
|||||||
.addComponent(deleteWordButton))
|
.addComponent(deleteWordButton))
|
||||||
.addGap(6, 6, 6)
|
.addGap(6, 6, 6)
|
||||||
.addComponent(chRegex)
|
.addComponent(chRegex)
|
||||||
.addContainerGap(43, Short.MAX_VALUE))
|
.addGap(43, 43, 43))
|
||||||
);
|
);
|
||||||
|
|
||||||
ingestMessagesCheckbox.setSelected(true);
|
ingestMessagesCheckbox.setSelected(true);
|
||||||
@ -347,7 +352,9 @@ class GlobalEditListPanel extends javax.swing.JPanel implements ListSelectionLis
|
|||||||
.addComponent(keywordOptionsLabel)
|
.addComponent(keywordOptionsLabel)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addComponent(keywordOptionsSeparator))
|
.addComponent(keywordOptionsSeparator))
|
||||||
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
.addGroup(listEditorPanelLayout.createSequentialGroup()
|
||||||
|
.addGap(10, 10, 10)
|
||||||
|
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
||||||
.addGroup(listEditorPanelLayout.createSequentialGroup()
|
.addGroup(listEditorPanelLayout.createSequentialGroup()
|
||||||
.addGroup(listEditorPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGroup(listEditorPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addComponent(keywordsLabel)
|
.addComponent(keywordsLabel)
|
||||||
@ -370,7 +377,7 @@ class GlobalEditListPanel extends javax.swing.JPanel implements ListSelectionLis
|
|||||||
.addContainerGap()
|
.addContainerGap()
|
||||||
.addComponent(keywordsLabel)
|
.addComponent(keywordsLabel)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 178, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 117, Short.MAX_VALUE)
|
||||||
.addGap(10, 10, 10)
|
.addGap(10, 10, 10)
|
||||||
.addGroup(listEditorPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGroup(listEditorPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(listEditorPanelLayout.createSequentialGroup()
|
.addGroup(listEditorPanelLayout.createSequentialGroup()
|
||||||
@ -403,8 +410,8 @@ class GlobalEditListPanel extends javax.swing.JPanel implements ListSelectionLis
|
|||||||
layout.setVerticalGroup(
|
layout.setVerticalGroup(
|
||||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(layout.createSequentialGroup()
|
.addGroup(layout.createSequentialGroup()
|
||||||
.addComponent(listEditorPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addComponent(listEditorPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||||
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
.addGap(5, 5, 5))
|
||||||
);
|
);
|
||||||
}// </editor-fold>//GEN-END:initComponents
|
}// </editor-fold>//GEN-END:initComponents
|
||||||
|
|
||||||
|
@ -16,15 +16,25 @@
|
|||||||
<Layout>
|
<Layout>
|
||||||
<DimensionLayout dim="0">
|
<DimensionLayout dim="0">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Component id="mainSplitPane" alignment="0" pref="665" max="32767" attributes="0"/>
|
<Group type="102" alignment="0" attributes="0">
|
||||||
|
<Component id="jScrollPane1" pref="675" max="32767" attributes="0"/>
|
||||||
|
<EmptySpace min="-2" pref="0" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
<DimensionLayout dim="1">
|
<DimensionLayout dim="1">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Component id="mainSplitPane" alignment="0" max="32767" attributes="0"/>
|
<Group type="102" alignment="0" attributes="0">
|
||||||
|
<Component id="jScrollPane1" max="32767" attributes="0"/>
|
||||||
|
<EmptySpace min="-2" pref="0" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
</Layout>
|
</Layout>
|
||||||
|
<SubComponents>
|
||||||
|
<Container class="javax.swing.JScrollPane" name="jScrollPane1">
|
||||||
|
|
||||||
|
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
|
||||||
<SubComponents>
|
<SubComponents>
|
||||||
<Container class="javax.swing.JSplitPane" name="mainSplitPane">
|
<Container class="javax.swing.JSplitPane" name="mainSplitPane">
|
||||||
<Properties>
|
<Properties>
|
||||||
@ -71,7 +81,7 @@
|
|||||||
<Layout>
|
<Layout>
|
||||||
<DimensionLayout dim="0">
|
<DimensionLayout dim="0">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<EmptySpace min="0" pref="385" max="32767" attributes="0"/>
|
<EmptySpace min="0" pref="393" max="32767" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
<DimensionLayout dim="1">
|
<DimensionLayout dim="1">
|
||||||
@ -84,4 +94,6 @@
|
|||||||
</SubComponents>
|
</SubComponents>
|
||||||
</Container>
|
</Container>
|
||||||
</SubComponents>
|
</SubComponents>
|
||||||
|
</Container>
|
||||||
|
</SubComponents>
|
||||||
</Form>
|
</Form>
|
||||||
|
@ -144,6 +144,7 @@ final class GlobalListSettingsPanel extends javax.swing.JPanel implements Option
|
|||||||
// <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() {
|
||||||
|
|
||||||
|
jScrollPane1 = new javax.swing.JScrollPane();
|
||||||
mainSplitPane = new javax.swing.JSplitPane();
|
mainSplitPane = new javax.swing.JSplitPane();
|
||||||
leftPanel = new javax.swing.JPanel();
|
leftPanel = new javax.swing.JPanel();
|
||||||
rightPanel = new javax.swing.JPanel();
|
rightPanel = new javax.swing.JPanel();
|
||||||
@ -170,7 +171,7 @@ final class GlobalListSettingsPanel extends javax.swing.JPanel implements Option
|
|||||||
rightPanel.setLayout(rightPanelLayout);
|
rightPanel.setLayout(rightPanelLayout);
|
||||||
rightPanelLayout.setHorizontalGroup(
|
rightPanelLayout.setHorizontalGroup(
|
||||||
rightPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
rightPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGap(0, 385, Short.MAX_VALUE)
|
.addGap(0, 393, Short.MAX_VALUE)
|
||||||
);
|
);
|
||||||
rightPanelLayout.setVerticalGroup(
|
rightPanelLayout.setVerticalGroup(
|
||||||
rightPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
rightPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
@ -179,18 +180,25 @@ final class GlobalListSettingsPanel extends javax.swing.JPanel implements Option
|
|||||||
|
|
||||||
mainSplitPane.setRightComponent(rightPanel);
|
mainSplitPane.setRightComponent(rightPanel);
|
||||||
|
|
||||||
|
jScrollPane1.setViewportView(mainSplitPane);
|
||||||
|
|
||||||
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(
|
||||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addComponent(mainSplitPane, javax.swing.GroupLayout.DEFAULT_SIZE, 665, Short.MAX_VALUE)
|
.addGroup(layout.createSequentialGroup()
|
||||||
|
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 675, Short.MAX_VALUE)
|
||||||
|
.addGap(0, 0, 0))
|
||||||
);
|
);
|
||||||
layout.setVerticalGroup(
|
layout.setVerticalGroup(
|
||||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addComponent(mainSplitPane)
|
.addGroup(layout.createSequentialGroup()
|
||||||
|
.addComponent(jScrollPane1)
|
||||||
|
.addGap(0, 0, 0))
|
||||||
);
|
);
|
||||||
}// </editor-fold>//GEN-END:initComponents
|
}// </editor-fold>//GEN-END:initComponents
|
||||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||||
|
private javax.swing.JScrollPane jScrollPane1;
|
||||||
private javax.swing.JPanel leftPanel;
|
private javax.swing.JPanel leftPanel;
|
||||||
private javax.swing.JSplitPane mainSplitPane;
|
private javax.swing.JSplitPane mainSplitPane;
|
||||||
private javax.swing.JPanel rightPanel;
|
private javax.swing.JPanel rightPanel;
|
||||||
|
@ -5,9 +5,6 @@
|
|||||||
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||||
<Dimension value="[250, 0]"/>
|
<Dimension value="[250, 0]"/>
|
||||||
</Property>
|
</Property>
|
||||||
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
|
||||||
<Dimension value="[250, 492]"/>
|
|
||||||
</Property>
|
|
||||||
</Properties>
|
</Properties>
|
||||||
<AuxValues>
|
<AuxValues>
|
||||||
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
|
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
|
||||||
@ -27,7 +24,7 @@
|
|||||||
<Group type="102" attributes="0">
|
<Group type="102" 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">
|
||||||
<Component id="jScrollPane1" alignment="1" max="32767" attributes="1"/>
|
<Component id="jScrollPane1" alignment="1" pref="0" max="32767" attributes="1"/>
|
||||||
<Group type="102" attributes="0">
|
<Group type="102" attributes="0">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Component id="keywordListsLabel" min="-2" max="-2" attributes="0"/>
|
<Component id="keywordListsLabel" min="-2" max="-2" attributes="0"/>
|
||||||
@ -47,27 +44,22 @@
|
|||||||
<DimensionLayout dim="1">
|
<DimensionLayout dim="1">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" alignment="1" attributes="0">
|
<Group type="102" alignment="1" attributes="0">
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="keywordListsLabel" min="-2" max="-2" attributes="0"/>
|
<Component id="keywordListsLabel" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="jScrollPane1" pref="414" max="32767" attributes="0"/>
|
<Component id="jScrollPane1" pref="355" max="32767" attributes="0"/>
|
||||||
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
<EmptySpace min="-2" pref="5" max="-2" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="3" attributes="0">
|
<Group type="103" groupAlignment="3" attributes="0">
|
||||||
<Component id="newListButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
<Component id="newListButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="importButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
<Component id="importButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
</Layout>
|
</Layout>
|
||||||
<SubComponents>
|
<SubComponents>
|
||||||
<Container class="javax.swing.JScrollPane" name="jScrollPane1">
|
<Container class="javax.swing.JScrollPane" name="jScrollPane1">
|
||||||
<Properties>
|
|
||||||
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
|
||||||
<Dimension value="[200, 402]"/>
|
|
||||||
</Property>
|
|
||||||
</Properties>
|
|
||||||
<AuxValues>
|
<AuxValues>
|
||||||
<AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
|
<AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
|
||||||
</AuxValues>
|
</AuxValues>
|
||||||
@ -79,6 +71,9 @@
|
|||||||
<Property name="model" type="javax.swing.table.TableModel" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
|
<Property name="model" type="javax.swing.table.TableModel" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
|
||||||
<Connection code="tableModel" type="code"/>
|
<Connection code="tableModel" type="code"/>
|
||||||
</Property>
|
</Property>
|
||||||
|
<Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||||
|
<Dimension value="[30000, 30000]"/>
|
||||||
|
</Property>
|
||||||
<Property name="showHorizontalLines" type="boolean" value="false"/>
|
<Property name="showHorizontalLines" type="boolean" value="false"/>
|
||||||
<Property name="showVerticalLines" type="boolean" value="false"/>
|
<Property name="showVerticalLines" type="boolean" value="false"/>
|
||||||
<Property name="tableHeader" type="javax.swing.table.JTableHeader" editor="org.netbeans.modules.form.editors2.JTableHeaderEditor">
|
<Property name="tableHeader" type="javax.swing.table.JTableHeader" editor="org.netbeans.modules.form.editors2.JTableHeaderEditor">
|
||||||
|
@ -105,11 +105,9 @@ class GlobalListsManagementPanel extends javax.swing.JPanel implements OptionsPa
|
|||||||
keywordListsLabel = new javax.swing.JLabel();
|
keywordListsLabel = new javax.swing.JLabel();
|
||||||
|
|
||||||
setMinimumSize(new java.awt.Dimension(250, 0));
|
setMinimumSize(new java.awt.Dimension(250, 0));
|
||||||
setPreferredSize(new java.awt.Dimension(250, 492));
|
|
||||||
|
|
||||||
jScrollPane1.setPreferredSize(new java.awt.Dimension(200, 402));
|
|
||||||
|
|
||||||
listsTable.setModel(tableModel);
|
listsTable.setModel(tableModel);
|
||||||
|
listsTable.setMaximumSize(new java.awt.Dimension(30000, 30000));
|
||||||
listsTable.setShowHorizontalLines(false);
|
listsTable.setShowHorizontalLines(false);
|
||||||
listsTable.setShowVerticalLines(false);
|
listsTable.setShowVerticalLines(false);
|
||||||
listsTable.getTableHeader().setReorderingAllowed(false);
|
listsTable.getTableHeader().setReorderingAllowed(false);
|
||||||
@ -120,23 +118,23 @@ class GlobalListsManagementPanel extends javax.swing.JPanel implements OptionsPa
|
|||||||
});
|
});
|
||||||
jScrollPane1.setViewportView(listsTable);
|
jScrollPane1.setViewportView(listsTable);
|
||||||
|
|
||||||
newListButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/keywordsearch/new16.png"))); // NOI18N NON-NLS
|
newListButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/keywordsearch/new16.png"))); // NOI18N
|
||||||
newListButton.setText(org.openide.util.NbBundle.getMessage(GlobalListsManagementPanel.class, "KeywordSearchListsManagementPanel.newListButton.text")); // NOI18N
|
newListButton.setText(org.openide.util.NbBundle.getMessage(GlobalListsManagementPanel.class, "GlobalListsManagementPanel.newListButton.text")); // NOI18N
|
||||||
newListButton.addActionListener(new java.awt.event.ActionListener() {
|
newListButton.addActionListener(new java.awt.event.ActionListener() {
|
||||||
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
newListButtonActionPerformed(evt);
|
newListButtonActionPerformed(evt);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
importButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/keywordsearch/import16.png"))); // NOI18N NON-NLS
|
importButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/keywordsearch/import16.png"))); // NOI18N
|
||||||
importButton.setText(org.openide.util.NbBundle.getMessage(GlobalListsManagementPanel.class, "KeywordSearchListsManagementPanel.importButton.text")); // NOI18N
|
importButton.setText(org.openide.util.NbBundle.getMessage(GlobalListsManagementPanel.class, "GlobalListsManagementPanel.importButton.text")); // NOI18N
|
||||||
importButton.addActionListener(new java.awt.event.ActionListener() {
|
importButton.addActionListener(new java.awt.event.ActionListener() {
|
||||||
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
importButtonActionPerformed(evt);
|
importButtonActionPerformed(evt);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
keywordListsLabel.setText(org.openide.util.NbBundle.getMessage(GlobalListsManagementPanel.class, "KeywordSearchListsManagementPanel.keywordListsLabel.text")); // NOI18N
|
keywordListsLabel.setText(org.openide.util.NbBundle.getMessage(GlobalListsManagementPanel.class, "GlobalListsManagementPanel.keywordListsLabel.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);
|
||||||
@ -145,7 +143,7 @@ class GlobalListsManagementPanel extends javax.swing.JPanel implements OptionsPa
|
|||||||
.addGroup(layout.createSequentialGroup()
|
.addGroup(layout.createSequentialGroup()
|
||||||
.addContainerGap()
|
.addContainerGap()
|
||||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
.addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
|
||||||
.addGroup(layout.createSequentialGroup()
|
.addGroup(layout.createSequentialGroup()
|
||||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addComponent(keywordListsLabel)
|
.addComponent(keywordListsLabel)
|
||||||
@ -162,8 +160,8 @@ class GlobalListsManagementPanel extends javax.swing.JPanel implements OptionsPa
|
|||||||
.addContainerGap()
|
.addContainerGap()
|
||||||
.addComponent(keywordListsLabel)
|
.addComponent(keywordListsLabel)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 414, Short.MAX_VALUE)
|
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 355, Short.MAX_VALUE)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
.addGap(5, 5, 5)
|
||||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||||
.addComponent(newListButton)
|
.addComponent(newListButton)
|
||||||
.addComponent(importButton))
|
.addComponent(importButton))
|
||||||
|
@ -16,12 +16,18 @@
|
|||||||
<Layout>
|
<Layout>
|
||||||
<DimensionLayout dim="0">
|
<DimensionLayout dim="0">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Component id="tabbedPane" alignment="0" pref="670" max="32767" attributes="0"/>
|
<Group type="102" alignment="0" attributes="0">
|
||||||
|
<Component id="tabbedPane" pref="824" max="32767" attributes="0"/>
|
||||||
|
<EmptySpace min="-2" pref="0" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
<DimensionLayout dim="1">
|
<DimensionLayout dim="1">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Component id="tabbedPane" alignment="0" pref="310" max="32767" attributes="0"/>
|
<Group type="102" alignment="0" attributes="0">
|
||||||
|
<Component id="tabbedPane" pref="543" max="32767" attributes="0"/>
|
||||||
|
<EmptySpace min="-2" pref="0" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
</Layout>
|
</Layout>
|
||||||
|
@ -79,11 +79,15 @@ final class KeywordSearchGlobalSettingsPanel extends IngestModuleGlobalSettingsP
|
|||||||
this.setLayout(layout);
|
this.setLayout(layout);
|
||||||
layout.setHorizontalGroup(
|
layout.setHorizontalGroup(
|
||||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addComponent(tabbedPane, javax.swing.GroupLayout.DEFAULT_SIZE, 670, Short.MAX_VALUE)
|
.addGroup(layout.createSequentialGroup()
|
||||||
|
.addComponent(tabbedPane, javax.swing.GroupLayout.DEFAULT_SIZE, 824, Short.MAX_VALUE)
|
||||||
|
.addGap(0, 0, 0))
|
||||||
);
|
);
|
||||||
layout.setVerticalGroup(
|
layout.setVerticalGroup(
|
||||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addComponent(tabbedPane, javax.swing.GroupLayout.DEFAULT_SIZE, 310, Short.MAX_VALUE)
|
.addGroup(layout.createSequentialGroup()
|
||||||
|
.addComponent(tabbedPane, javax.swing.GroupLayout.DEFAULT_SIZE, 543, Short.MAX_VALUE)
|
||||||
|
.addGap(0, 0, 0))
|
||||||
);
|
);
|
||||||
}// </editor-fold>//GEN-END:initComponents
|
}// </editor-fold>//GEN-END:initComponents
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user