Merge pull request #6253 from wschaeferB/domain-discovery

Merge Develop into Domain discovery
This commit is contained in:
Richard Cordovano 2020-09-11 11:39:53 -04:00 committed by GitHub
commit 5701b6acf7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
296 changed files with 23296 additions and 7322 deletions

1
.gitignore vendored
View File

@ -81,6 +81,7 @@ hs_err_pid*.log
/thunderbirdparser/release/
/RecentActivity/release/
/CentralRepository/release/
/Tika/release
.idea/
*.iml

View File

@ -1,4 +1,4 @@
Last Updated: 1 February 2019
Last Updated: 5 August 2020
This file outlines what it takes to build Autopsy from source.
@ -15,14 +15,13 @@ STEPS:
that we use, you'll need 1.8.0_66 or greater. You can now use 32-bit or 64-bit,
but special work is needed to get The Sleuth Kit to compile as 64-bit.
Autopsy has been used and tested with Oracle JavaSE and the included JavaFX support
(http://www.oracle.com/technetwork/java/javase/downloads/index.html).
Autopsy has been used and tested with the following OpenJDK build
(https://github.com/ojdkbuild/ojdkbuild/releases/tag/java-1.8.0-openjdk-1.8.0.222-1.b10).
OpenJDK and OpenJFX might work, but they are not fully tested with Autopsy.
1b) Ensure that JDK_HOME is set to the root JDK directory.
1c) (optional) Download and install Netbeans IDE (http://netbeans.org/)
1c) (optional) Download and install Netbeans IDE (https://netbeans.apache.org/download/index.html)
Note: Netbeans IDE is not required to build and run Autopsy,
but it is a recommended IDE to use for development of Autopsy modules.

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project name="BootstrapIvy" default="all" basedir="." xmlns:ivy="antlib:org.apache.ivy.ant">
<property name="ivy.install.version" value="2.3.0-rc2" />
<property name="ivy.install.version" value="2.5.0" />
<condition property="ivy.home" value="${env.IVY_HOME}">
<isset property="env.IVY_HOME" />
</condition>
@ -9,18 +9,13 @@
<property name="ivy.jar.file" value="${ivy.jar.dir}/ivy.jar" />
<target name="download-ivy" unless="offline">
<available file="${ivy.jar.file}" property="ivy.available"/>
<antcall target="-download-ivy" />
</target>
<target name="-download-ivy" unless="ivy.available">
<mkdir dir="${ivy.jar.dir}"/>
<get src="https://repo1.maven.org/maven2/org/apache/ivy/ivy/${ivy.install.version}/ivy-${ivy.install.version}.jar"
dest="${ivy.jar.file}" usetimestamp="true"/>
</target>
<!-- init-ivy will bootstrap Ivy if the user doesn't have it already -->
<target name="init-ivy" depends="download-ivy" unless="ivy.lib.path">
<target name="init-ivy" depends="download-ivy">
<path id="ivy.lib.path">
<fileset dir="${ivy.jar.dir}" includes="*.jar"/>
</path>

View File

@ -64,6 +64,11 @@
<fileset dir="${thirdparty.dir}/OfficialHashSets"/>
</copy>
<!--Copy ImageMagick to release-->
<copy todir="${basedir}/release/ImageMagick-7.0.10-27-portable-Q16-x64" >
<fileset dir="${thirdparty.dir}/ImageMagick-7.0.10-27-portable-Q16-x64"/>
</copy>
<!-- The 'libgstlibav.dll' file is too big to store on GitHub, so we
have it stored in a ZIP file. We'll extract it in place and remove
the ZIP file afterward. -->

View File

@ -1,5 +1,5 @@
<ivy-module version="2.0">
<info organisation="org.sleuthkit.autopsy" module="emailparser"/>
<info organisation="org.sleuthkit.autopsy" module="core"/>
<configurations >
<!-- module dependencies -->
<conf name="core"/>
@ -14,16 +14,6 @@
<dependency conf="core->default" org="org.apache.curator" name="curator-recipes" rev="2.8.0"/>
<dependency conf="core->default" org="org.python" name="jython-standalone" rev="2.7.0" />
<dependency conf="core->default" org="org.apache.tika" name="tika-core" rev="1.20"/>
<!-- Exclude the version of cxf-rt-rs-client from Tika 1.20, one of its depedencies breaks Ivy -->
<dependency conf="core->default" org="org.apache.tika" name="tika-parsers" rev="1.20">
<exclude module="cxf-rt-rs-client"/>
<exclude module="cleartk-ml"/>
</dependency>
<!-- Pull down the latest cxf-rt-rs-client which has the Ivy fix -->
<dependency conf="core->default" org="org.apache.cxf" name="cxf-rt-rs-client" rev="3.3.0"/>
<dependency conf="core->default" org="org.cleartk" name="cleartk-ml" rev="2.0.0"/>
<dependency conf="core->default" org="com.adobe.xmp" name="xmpcore" rev="5.1.2"/>
<dependency conf="core->default" org="org.apache.zookeeper" name="zookeeper" rev="3.4.6"/>
@ -37,25 +27,27 @@
<dependency conf="core->default" org="org.jsoup" name="jsoup" rev="1.10.3"/>
<dependency conf="core->default" org="com.fasterxml.jackson.core" name="jackson-core" rev="2.9.7"/>
<dependency conf="core->default" org="com.fasterxml.jackson.core" name="jackson-databind" rev="2.9.7"/>
<dependency conf="core->default" org="com.drewnoakes" name="metadata-extractor" rev="2.11.0"/>
<dependency conf="core->default" org="com.google.cloud" name="google-cloud-translate" rev="1.70.0"/>
<dependency conf="core->default" org="org.apache.opennlp" name="opennlp-tools" rev="1.9.1"/>
<dependency conf="core->default" org="com.ethteck.decodetect" name="decodetect-core" rev="0.3"/>
<dependency conf="core->default" org="com.beetstra.jutf7" name="jutf7" rev="1.0.0"/>
<dependency org="org.sejda.webp-imageio" name="webp-imageio-sejda" rev="0.1.0"/>
<dependency org="com.googlecode.libphonenumber" name="libphonenumber" rev="3.5" />
<dependency conf="core->default" org="org.sejda.webp-imageio" name="webp-imageio-sejda" rev="0.1.0"/>
<dependency conf="core->default" org="com.googlecode.libphonenumber" name="libphonenumber" rev="3.5" />
<dependency conf="core->default" org="commons-validator" name="commons-validator" rev="1.6"/>
<dependency conf="core->default" org="net.htmlparser.jericho" name="jericho-html" rev="3.3"/>
<dependency org="com.squareup.okhttp" name="okhttp" rev="2.7.5"/>
<dependency conf="core->default" org="com.squareup.okhttp" name="okhttp" rev="2.7.5"/>
<dependency conf="core->default" org="org.jfree" name="jfreechart" rev="1.0.19"/>
<!-- map support for geolocation -->
<dependency conf="core->default" org="org.jxmapviewer" name="jxmapviewer2" rev="2.4"/>
<!-- https://mvnrepository.com/artifact/javax.ws.rs/javax.ws.rs-api -->
<dependency org="javax.ws.rs" name="javax.ws.rs-api" rev="2.0"/>
<dependency conf="core->default" org="javax.ws.rs" name="javax.ws.rs-api" rev="2.0"/>
<override org="jakarta.ws.rs" module="jakarta.ws.rs-api" rev="2.1.5"/>
</dependencies>
</ivy-module>

View File

@ -2,7 +2,7 @@ Manifest-Version: 1.0
OpenIDE-Module: org.sleuthkit.autopsy.core/10
OpenIDE-Module-Localizing-Bundle: org/sleuthkit/autopsy/core/Bundle.properties
OpenIDE-Module-Layer: org/sleuthkit/autopsy/core/layer.xml
OpenIDE-Module-Implementation-Version: 32
OpenIDE-Module-Implementation-Version: 33
OpenIDE-Module-Requires: org.openide.windows.WindowManager
AutoUpdate-Show-In-Client: true
AutoUpdate-Essential-Module: true

View File

@ -1,137 +1,118 @@
file.reference.activemq-all-5.11.1.jar=release/modules/ext/activemq-all-5.11.1.jar
file.reference.apache-mime4j-core-0.8.2.jar=release\\modules\\ext\\apache-mime4j-core-0.8.2.jar
file.reference.apache-mime4j-dom-0.8.2.jar=release\\modules\\ext\\apache-mime4j-dom-0.8.2.jar
file.reference.asm-7.0.jar=release\\modules\\ext\\asm-7.0.jar
file.reference.batik-awt-util-1.6.jar=release/modules/ext/batik-awt-util-1.6.jar
file.reference.batik-dom-1.6.jar=release/modules/ext/batik-dom-1.6.jar
file.reference.batik-svg-dom-1.6.jar=release/modules/ext/batik-svg-dom-1.6.jar
file.reference.batik-svggen-1.6.jar=release/modules/ext/batik-svggen-1.6.jar
file.reference.batik-util-1.6.jar=release/modules/ext/batik-util-1.6.jar
file.reference.batik-xml-1.6.jar=release/modules/ext/batik-xml-1.6.jar
file.reference.bcmail-jdk15on-1.60.jar=release\\modules\\ext\\bcmail-jdk15on-1.60.jar
file.reference.bcpkix-jdk15on-1.60.jar=release\\modules\\ext\\bcpkix-jdk15on-1.60.jar
file.reference.bcprov-ext-jdk15on-1.54.jar=release/modules/ext/bcprov-ext-jdk15on-1.54.jar
file.reference.bcprov-jdk15on-1.60.jar=release\\modules\\ext\\bcprov-jdk15on-1.60.jar
file.reference.boilerpipe-1.1.0.jar=release\\modules\\ext\\boilerpipe-1.1.0.jar
file.reference.c3p0-0.9.5.jar=release/modules/ext/c3p0-0.9.5.jar
file.reference.cdm-4.5.5.jar=release\\modules\\ext\\cdm-4.5.5.jar
file.reference.activemq-all-5.11.1.jar=release\\modules\\ext\\activemq-all-5.11.1.jar
file.reference.animal-sniffer-annotations-1.17.jar=release\\modules\\ext\\animal-sniffer-annotations-1.17.jar
file.reference.api-common-1.7.0.jar=release\\modules\\ext\\api-common-1.7.0.jar
file.reference.batik-awt-util-1.6.jar=release\\modules\\ext\\batik-awt-util-1.6.jar
file.reference.batik-dom-1.6.jar=release\\modules\\ext\\batik-dom-1.6.jar
file.reference.batik-svg-dom-1.6.jar=release\\modules\\ext\\batik-svg-dom-1.6.jar
file.reference.batik-svggen-1.6.jar=release\\modules\\ext\\batik-svggen-1.6.jar
file.reference.batik-util-1.6.jar=release\\modules\\ext\\batik-util-1.6.jar
file.reference.batik-xml-1.6.jar=release\\modules\\ext\\batik-xml-1.6.jar
file.reference.bcpkix-jdk15on-1.54.jar=release\\modules\\ext\\bcpkix-jdk15on-1.54.jar
file.reference.bcprov-ext-jdk15on-1.54.jar=release\\modules\\ext\\bcprov-ext-jdk15on-1.54.jar
file.reference.bcprov-jdk15on-1.52.jar=release\\modules\\ext\\bcprov-jdk15on-1.52.jar
file.reference.bcprov-jdk15on-1.54.jar=release\\modules\\ext\\bcprov-jdk15on-1.54.jar
file.reference.c3p0-0.9.5.jar=release\\modules\\ext\\c3p0-0.9.5.jar
file.reference.checker-compat-qual-2.5.3.jar=release\\modules\\ext\\checker-compat-qual-2.5.3.jar
file.reference.commons-beanutils-1.9.2.jar=release\\modules\\ext\\commons-beanutils-1.9.2.jar
file.reference.commons-codec-1.11.jar=release\\modules\\ext\\commons-codec-1.11.jar
file.reference.commons-collections4-4.2.jar=release\\modules\\ext\\commons-collections4-4.2.jar
file.reference.commons-csv-1.6.jar=release\\modules\\ext\\commons-csv-1.6.jar
file.reference.commons-dbcp2-2.1.1.jar=release/modules/ext/commons-dbcp2-2.1.1.jar
file.reference.commons-exec-1.3.jar=release\\modules\\ext\\commons-exec-1.3.jar
file.reference.commons-io-2.6.jar=release\\modules\\ext\\commons-io-2.6.jar
file.reference.commons-lang3-3.8.1.jar=release\\modules\\ext\\commons-lang3-3.8.1.jar
file.reference.commons-pool2-2.4.2.jar=release/modules/ext/commons-pool2-2.4.2.jar
file.reference.cxf-rt-rs-client-3.3.0.jar=release\\modules\\ext\\cxf-rt-rs-client-3.3.0.jar
file.reference.DatCon.jar=release/modules/ext/DatCon.jar
file.reference.dec-0.1.2.jar=release\\modules\\ext\\dec-0.1.2.jar
file.reference.decodetect-core-0.3.jar=release/modules/ext/decodetect-core-0.3.jar
file.reference.fontbox-2.0.13.jar=release\\modules\\ext\\fontbox-2.0.13.jar
file.reference.geoapi-3.0.1.jar=release\\modules\\ext\\geoapi-3.0.1.jar
file.reference.grib-4.5.5.jar=release\\modules\\ext\\grib-4.5.5.jar
file.reference.httpclient-4.5.6.jar=release\\modules\\ext\\httpclient-4.5.6.jar
file.reference.httpmime-4.5.6.jar=release\\modules\\ext\\httpmime-4.5.6.jar
file.reference.httpservices-4.5.5.jar=release\\modules\\ext\\httpservices-4.5.5.jar
file.reference.icepdf-core-6.2.2.jar=release/modules/ext/icepdf-core-6.2.2.jar
file.reference.icepdf-viewer-6.2.2.jar=release/modules/ext/icepdf-viewer-6.2.2.jar
file.reference.isoparser-1.1.22.jar=release\\modules\\ext\\isoparser-1.1.22.jar
file.reference.commons-collections-3.2.2.jar=release\\modules\\ext\\commons-collections-3.2.2.jar
file.reference.commons-dbcp2-2.1.1.jar=release\\modules\\ext\\commons-dbcp2-2.1.1.jar
file.reference.commons-digester-1.8.1.jar=release\\modules\\ext\\commons-digester-1.8.1.jar
file.reference.commons-lang-2.6.jar=release\\modules\\ext\\commons-lang-2.6.jar
file.reference.commons-lang3-3.5.jar=release\\modules\\ext\\commons-lang3-3.5.jar
file.reference.commons-logging-1.2.jar=release\\modules\\ext\\commons-logging-1.2.jar
file.reference.commons-pool2-2.4.2.jar=release\\modules\\ext\\commons-pool2-2.4.2.jar
file.reference.commons-validator-1.6.jar=release\\modules\\ext\\commons-validator-1.6.jar
file.reference.curator-client-2.8.0.jar=release\\modules\\ext\\curator-client-2.8.0.jar
file.reference.curator-framework-2.8.0.jar=release\\modules\\ext\\curator-framework-2.8.0.jar
file.reference.curator-recipes-2.8.0.jar=release\\modules\\ext\\curator-recipes-2.8.0.jar
file.reference.DatCon.jar=release\\modules\\ext\\DatCon.jar
file.reference.decodetect-core-0.3.jar=release\\modules\\ext\\decodetect-core-0.3.jar
file.reference.error_prone_annotations-2.3.2.jar=release\\modules\\ext\\error_prone_annotations-2.3.2.jar
file.reference.failureaccess-1.0.1.jar=release\\modules\\ext\\failureaccess-1.0.1.jar
file.reference.gax-1.44.0.jar=release\\modules\\ext\\gax-1.44.0.jar
file.reference.gax-grpc-1.44.0.jar=release\\modules\\ext\\gax-grpc-1.44.0.jar
file.reference.gax-httpjson-0.61.0.jar=release\\modules\\ext\\gax-httpjson-0.61.0.jar
file.reference.google-api-client-1.27.0.jar=release\\modules\\ext\\google-api-client-1.27.0.jar
file.reference.google-api-services-translate-v2-rev20170525-1.27.0.jar=release\\modules\\ext\\google-api-services-translate-v2-rev20170525-1.27.0.jar
file.reference.google-auth-library-credentials-0.15.0.jar=release\\modules\\ext\\google-auth-library-credentials-0.15.0.jar
file.reference.google-auth-library-oauth2-http-0.15.0.jar=release\\modules\\ext\\google-auth-library-oauth2-http-0.15.0.jar
file.reference.google-cloud-core-1.70.0.jar=release\\modules\\ext\\google-cloud-core-1.70.0.jar
file.reference.google-cloud-core-grpc-1.70.0.jar=release\\modules\\ext\\google-cloud-core-grpc-1.70.0.jar
file.reference.google-cloud-core-http-1.70.0.jar=release\\modules\\ext\\google-cloud-core-http-1.70.0.jar
file.reference.google-cloud-translate-1.70.0.jar=release\\modules\\ext\\google-cloud-translate-1.70.0.jar
file.reference.google-http-client-1.29.0.jar=release\\modules\\ext\\google-http-client-1.29.0.jar
file.reference.google-http-client-appengine-1.29.0.jar=release\\modules\\ext\\google-http-client-appengine-1.29.0.jar
file.reference.google-http-client-jackson2-1.29.0.jar=release\\modules\\ext\\google-http-client-jackson2-1.29.0.jar
file.reference.google-oauth-client-1.28.0.jar=release\\modules\\ext\\google-oauth-client-1.28.0.jar
file.reference.grpc-alts-1.19.0.jar=release\\modules\\ext\\grpc-alts-1.19.0.jar
file.reference.grpc-auth-1.19.0.jar=release\\modules\\ext\\grpc-auth-1.19.0.jar
file.reference.grpc-context-1.19.0.jar=release\\modules\\ext\\grpc-context-1.19.0.jar
file.reference.grpc-core-1.19.0.jar=release\\modules\\ext\\grpc-core-1.19.0.jar
file.reference.grpc-grpclb-1.19.0.jar=release\\modules\\ext\\grpc-grpclb-1.19.0.jar
file.reference.grpc-netty-shaded-1.19.0.jar=release\\modules\\ext\\grpc-netty-shaded-1.19.0.jar
file.reference.grpc-protobuf-1.19.0.jar=release\\modules\\ext\\grpc-protobuf-1.19.0.jar
file.reference.grpc-protobuf-lite-1.19.0.jar=release\\modules\\ext\\grpc-protobuf-lite-1.19.0.jar
file.reference.grpc-stub-1.19.0.jar=release\\modules\\ext\\grpc-stub-1.19.0.jar
file.reference.gson-2.7.jar=release\\modules\\ext\\gson-2.7.jar
file.reference.guava-27.1-android.jar=release\\modules\\ext\\guava-27.1-android.jar
file.reference.httpclient-4.5.5.jar=release\\modules\\ext\\httpclient-4.5.5.jar
file.reference.httpcore-4.4.9.jar=release\\modules\\ext\\httpcore-4.4.9.jar
file.reference.icepdf-core-6.2.2.jar=release\\modules\\ext\\icepdf-core-6.2.2.jar
file.reference.icepdf-viewer-6.2.2.jar=release\\modules\\ext\\icepdf-viewer-6.2.2.jar
file.reference.j2objc-annotations-1.1.jar=release\\modules\\ext\\j2objc-annotations-1.1.jar
file.reference.jackcess-2.2.0.jar=release\\modules\\ext\\jackcess-2.2.0.jar
file.reference.jackcess-encrypt-2.1.4.jar=release\\modules\\ext\\jackcess-encrypt-2.1.4.jar
file.reference.jackson-annotations-2.9.7.jar=release\\modules\\ext\\jackson-annotations-2.9.7.jar
file.reference.jackson-annotations-2.9.0.jar=release\\modules\\ext\\jackson-annotations-2.9.0.jar
file.reference.jackson-core-2.9.7.jar=release\\modules\\ext\\jackson-core-2.9.7.jar
file.reference.jackson-databind-2.9.7.jar=release\\modules\\ext\\jackson-databind-2.9.7.jar
file.reference.jai-imageio-core-1.4.0.jar=release\\modules\\ext\\jai-imageio-core-1.4.0.jar
file.reference.jai_core-1.1.3.jar=release/modules/ext/jai_core-1.1.3.jar
file.reference.jai_imageio-1.1.jar=release/modules/ext/jai_imageio-1.1.jar
file.reference.java-libpst-0.8.1.jar=release\\modules\\ext\\java-libpst-0.8.1.jar
file.reference.javax.activation-1.2.0.jar=release\\modules\\ext\\javax.activation-1.2.0.jar
file.reference.jai_core-1.1.3.jar=release\\modules\\ext\\jai_core-1.1.3.jar
file.reference.jai_imageio-1.1.jar=release\\modules\\ext\\jai_imageio-1.1.jar
file.reference.javax.annotation-api-1.3.2.jar=release\\modules\\ext\\javax.annotation-api-1.3.2.jar
file.reference.jbig2-imageio-3.0.2.jar=release\\modules\\ext\\jbig2-imageio-3.0.2.jar
file.reference.jcl-over-slf4j-1.7.25.jar=release\\modules\\ext\\jcl-over-slf4j-1.7.25.jar
file.reference.jdom-2.0.5-contrib.jar=release/modules/ext/jdom-2.0.5-contrib.jar
file.reference.jdom-2.0.5.jar=release/modules/ext/jdom-2.0.5.jar
file.reference.jdom2-2.0.6.jar=release\\modules\\ext\\jdom2-2.0.6.jar
file.reference.jempbox-1.8.16.jar=release\\modules\\ext\\jempbox-1.8.16.jar
file.reference.jericho-html-3.3.jar=release/modules/ext/jericho-html-3.3.jar
file.reference.jgraphx-4.1.0.jar=release/modules/ext/jgraphx-4.1.0.jar
file.reference.jhighlight-1.0.3.jar=release\\modules\\ext\\jhighlight-1.0.3.jar
file.reference.jmatio-1.5.jar=release\\modules\\ext\\jmatio-1.5.jar
file.reference.json-simple-1.1.1.jar=release\\modules\\ext\\json-simple-1.1.1.jar
file.reference.jsoup-1.11.3.jar=release\\modules\\ext\\jsoup-1.11.3.jar
file.reference.jul-to-slf4j-1.7.25.jar=release\\modules\\ext\\jul-to-slf4j-1.7.25.jar
file.reference.juniversalchardet-1.0.3.jar=release\\modules\\ext\\juniversalchardet-1.0.3.jar
file.reference.junrar-2.0.0.jar=release\\modules\\ext\\junrar-2.0.0.jar
file.reference.jutf7-1.0.0.jar=release/modules/ext/jutf7-1.0.0.jar
file.reference.jxmapviewer2-2.4.jar=release/modules/ext/jxmapviewer2-2.4.jar
file.reference.jython-standalone-2.7.0.jar=release/modules/ext/jython-standalone-2.7.0.jar
file.reference.libphonenumber-3.5.jar=release/modules/ext/libphonenumber-3.5.jar
file.reference.mchange-commons-java-0.2.9.jar=release/modules/ext/mchange-commons-java-0.2.9.jar
file.reference.javax.ws.rs-api-2.0.jar=release\\modules\\ext\\javax.ws.rs-api-2.0.jar
file.reference.jdom-2.0.5-contrib.jar=release\\modules\\ext\\jdom-2.0.5-contrib.jar
file.reference.jdom-2.0.5.jar=release\\modules\\ext\\jdom-2.0.5.jar
file.reference.jericho-html-3.3.jar=release\\modules\\ext\\jericho-html-3.3.jar
file.reference.jgraphx-4.1.0.jar=release\\modules\\ext\\jgraphx-4.1.0.jar
file.reference.jline-0.9.94.jar=release\\modules\\ext\\jline-0.9.94.jar
file.reference.jsoup-1.10.3.jar=release\\modules\\ext\\jsoup-1.10.3.jar
file.reference.jsr305-3.0.2.jar=release\\modules\\ext\\jsr305-3.0.2.jar
file.reference.junit-3.8.1.jar=release\\modules\\ext\\junit-3.8.1.jar
file.reference.jutf7-1.0.0.jar=release\\modules\\ext\\jutf7-1.0.0.jar
file.reference.jxmapviewer2-2.4.jar=release\\modules\\ext\\jxmapviewer2-2.4.jar
file.reference.jython-standalone-2.7.0.jar=release\\modules\\ext\\jython-standalone-2.7.0.jar
file.reference.libphonenumber-3.5.jar=release\\modules\\ext\\libphonenumber-3.5.jar
file.reference.listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar=release\\modules\\ext\\listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar
file.reference.log4j-1.2.16.jar=release\\modules\\ext\\log4j-1.2.16.jar
file.reference.mchange-commons-java-0.2.9.jar=release\\modules\\ext\\mchange-commons-java-0.2.9.jar
file.reference.metadata-extractor-2.11.0.jar=release\\modules\\ext\\metadata-extractor-2.11.0.jar
file.reference.netcdf4-4.5.5.jar=release\\modules\\ext\\netcdf4-4.5.5.jar
file.reference.openjson-1.0.10.jar=release\\modules\\ext\\openjson-1.0.10.jar
file.reference.netty-3.7.0.Final.jar=release\\modules\\ext\\netty-3.7.0.Final.jar
file.reference.okhttp-2.7.5.jar=release\\modules\\ext\\okhttp-2.7.5.jar
file.reference.okio-1.6.0.jar=release\\modules\\ext\\okio-1.6.0.jar
file.reference.opencensus-api-0.19.2.jar=release\\modules\\ext\\opencensus-api-0.19.2.jar
file.reference.opencensus-contrib-grpc-metrics-0.19.2.jar=release\\modules\\ext\\opencensus-contrib-grpc-metrics-0.19.2.jar
file.reference.opencensus-contrib-http-util-0.19.2.jar=release\\modules\\ext\\opencensus-contrib-http-util-0.19.2.jar
file.reference.opennlp-tools-1.9.1.jar=release\\modules\\ext\\opennlp-tools-1.9.1.jar
file.reference.parso-2.0.10.jar=release\\modules\\ext\\parso-2.0.10.jar
file.reference.pdfbox-2.0.13.jar=release\\modules\\ext\\pdfbox-2.0.13.jar
file.reference.pdfbox-tools-2.0.13.jar=release\\modules\\ext\\pdfbox-tools-2.0.13.jar
file.reference.postgresql-9.4.1211.jre7.jar=release/modules/ext/postgresql-9.4.1211.jre7.jar
file.reference.Rejistry-1.1-SNAPSHOT.jar=release/modules/ext/Rejistry-1.1-SNAPSHOT.jar
file.reference.rome-1.12.0.jar=release\\modules\\ext\\rome-1.12.0.jar
file.reference.sentiment-analysis-parser-0.1.jar=release\\modules\\ext\\sentiment-analysis-parser-0.1.jar
file.reference.sevenzipjbinding-AllPlatforms.jar=release/modules/ext/sevenzipjbinding-AllPlatforms.jar
file.reference.sevenzipjbinding.jar=release/modules/ext/sevenzipjbinding.jar
file.reference.sis-metadata-0.8.jar=release\\modules\\ext\\sis-metadata-0.8.jar
file.reference.sis-netcdf-0.8.jar=release\\modules\\ext\\sis-netcdf-0.8.jar
file.reference.sis-utility-0.8.jar=release\\modules\\ext\\sis-utility-0.8.jar
file.reference.sleuthkit-caseuco-4.10.0.jar=release/modules/ext/sleuthkit-caseuco-4.10.0.jar
file.reference.slf4j-api-1.7.25.jar=release\\modules\\ext\\slf4j-api-1.7.25.jar
file.reference.sqlite-jdbc-3.25.2.jar=release/modules/ext/sqlite-jdbc-3.25.2.jar
file.reference.StixLib.jar=release/modules/ext/StixLib.jar
file.reference.javax.ws.rs-api-2.0.1.jar=release/modules/ext/javax.ws.rs-api-2.0.1.jar
file.reference.cxf-core-3.0.16.jar=release/modules/ext/cxf-core-3.0.16.jar
file.reference.cxf-rt-frontend-jaxrs-3.0.16.jar=release/modules/ext/cxf-rt-frontend-jaxrs-3.0.16.jar
file.reference.cxf-rt-transports-http-3.0.16.jar=release/modules/ext/cxf-rt-transports-http-3.0.16.jar
file.reference.sleuthkit-4.10.0.jar=release/modules/ext/sleuthkit-4.10.0.jar
file.reference.curator-client-2.8.0.jar=release/modules/ext/curator-client-2.8.0.jar
file.reference.curator-framework-2.8.0.jar=release/modules/ext/curator-framework-2.8.0.jar
file.reference.curator-recipes-2.8.0.jar=release/modules/ext/curator-recipes-2.8.0.jar
file.reference.tagsoup-1.2.1.jar=release\\modules\\ext\\tagsoup-1.2.1.jar
file.reference.tika-core-1.20.jar=release\\modules\\ext\\tika-core-1.20.jar
file.reference.tika-parsers-1.20.jar=release\\modules\\ext\\tika-parsers-1.20.jar
file.reference.uimafit-core-2.4.0.jar=release\\modules\\ext\\uimafit-core-2.4.0.jar
file.reference.uimaj-core-3.0.1.jar=release\\modules\\ext\\uimaj-core-3.0.1.jar
file.reference.vorbis-java-core-0.8.jar=release\\modules\\ext\\vorbis-java-core-0.8.jar
file.reference.vorbis-java-tika-0.8.jar=release\\modules\\ext\\vorbis-java-tika-0.8.jar
file.reference.webp-imageio-sejda-0.1.0.jar=release/modules/ext/webp-imageio-sejda-0.1.0.jar
file.reference.xmlbeans-3.0.2.jar=release\\modules\\ext\\xmlbeans-3.0.2.jar
file.reference.xmpcore-5.1.3.jar=release/modules/ext/xmpcore-5.1.3.jar
file.reference.xz-1.8.jar=release\\modules\\ext\\xz-1.8.jar
file.reference.zookeeper-3.4.6.jar=release/modules/ext/zookeeper-3.4.6.jar
file.reference.SparseBitSet-1.1.jar=release/modules/ext/SparseBitSet-1.1.jar
file.reference.commons-validator-1.6.jar=release/modules/ext/commons-validator-1.6.jar
file.reference.api-common-1.7.0.jar=release/modules/ext/api-common-1.7.0.jar
file.reference.gax-1.44.0.jar=release/modules/ext/gax-1.44.0.jar
file.reference.gax-grpc-1.44.0.jar=release/modules/ext/gax-grpc-1.44.0.jar
file.reference.gax-httpjson-0.61.0.jar=release/modules/ext/gax-httpjson-0.61.0.jar
file.reference.google-api-client-1.27.0.jar=release/modules/ext/google-api-client-1.27.0.jar
file.reference.google-api-services-translate-v2-rev20170525-1.27.0.jar=release/modules/ext/google-api-services-translate-v2-rev20170525-1.27.0.jar
file.reference.google-auth-library-credentials-0.15.0.jar=release/modules/ext/google-auth-library-credentials-0.15.0.jar
file.reference.google-auth-library-oauth2-http-0.15.0.jar=release/modules/ext/google-auth-library-oauth2-http-0.15.0.jar
file.reference.google-cloud-core-1.70.0.jar=release/modules/ext/google-cloud-core-1.70.0.jar
file.reference.google-cloud-core-http-1.70.0.jar=release/modules/ext/google-cloud-core-http-1.70.0.jar
file.reference.google-cloud-translate-1.70.0.jar=release/modules/ext/google-cloud-translate-1.70.0.jar
file.reference.google-http-client-1.29.0.jar=release/modules/ext/google-http-client-1.29.0.jar
file.reference.google-http-client-appengine-1.29.0.jar=release/modules/ext/google-http-client-appengine-1.29.0.jar
file.reference.google-http-client-jackson2-1.29.0.jar=release/modules/ext/google-http-client-jackson2-1.29.0.jar
file.reference.grpc-context-1.19.0.jar=release/modules/ext/grpc-context-1.19.0.jar
file.reference.opencensus-api-0.19.2.jar=release/modules/ext/opencensus-api-0.19.2.jar
file.reference.opencensus-contrib-http-util-0.19.2.jar=release/modules/ext/opencensus-contrib-http-util-0.19.2.jar
file.reference.threetenbp-1.3.3.jar=release/modules/ext/threetenbp-1.3.3.jar
file.reference.okhttp-2.7.5-javadoc.jar=release/modules/ext/okhttp-2.7.5-javadoc.jar
file.reference.okhttp-2.7.5-sources.jar=release/modules/ext/okhttp-2.7.5-sources.jar
file.reference.okhttp-2.7.5.jar=release/modules/ext/okhttp-2.7.5.jar
file.reference.okio-1.6.0.jar=release/modules/ext/okio-1.6.0.jar
file.reference.datcon.jar=release/modules/ext/DatCon.jar
file.reference.postgresql-9.4.1211.jre7.jar=release\\modules\\ext\\postgresql-9.4.1211.jre7.jar
file.reference.proto-google-cloud-translate-v3beta1-0.53.0.jar=release\\modules\\ext\\proto-google-cloud-translate-v3beta1-0.53.0.jar
file.reference.proto-google-common-protos-1.15.0.jar=release\\modules\\ext\\proto-google-common-protos-1.15.0.jar
file.reference.proto-google-iam-v1-0.12.0.jar=release\\modules\\ext\\proto-google-iam-v1-0.12.0.jar
file.reference.protobuf-java-3.7.0.jar=release\\modules\\ext\\protobuf-java-3.7.0.jar
file.reference.protobuf-java-util-3.7.0.jar=release\\modules\\ext\\protobuf-java-util-3.7.0.jar
file.reference.Rejistry-1.1-SNAPSHOT.jar=release\\modules\\ext\\Rejistry-1.1-SNAPSHOT.jar
file.reference.sevenzipjbinding-AllPlatforms.jar=release\\modules\\ext\\sevenzipjbinding-AllPlatforms.jar
file.reference.sevenzipjbinding.jar=release\\modules\\ext\\sevenzipjbinding.jar
file.reference.sleuthkit-4.10.0.jar=release\\modules\\ext\\sleuthkit-4.10.0.jar
file.reference.sleuthkit-caseuco-4.10.0.jar=release\\modules\\ext\\sleuthkit-caseuco-4.10.0.jar
file.reference.slf4j-api-1.7.6.jar=release\\modules\\ext\\slf4j-api-1.7.6.jar
file.reference.slf4j-log4j12-1.7.6.jar=release\\modules\\ext\\slf4j-log4j12-1.7.6.jar
file.reference.SparseBitSet-1.1.jar=release\\modules\\ext\\SparseBitSet-1.1.jar
file.reference.sqlite-jdbc-3.25.2.jar=release\\modules\\ext\\sqlite-jdbc-3.25.2.jar
file.reference.StixLib.jar=release\\modules\\ext\\StixLib.jar
file.reference.threetenbp-1.3.3.jar=release\\modules\\ext\\threetenbp-1.3.3.jar
file.reference.webp-imageio-sejda-0.1.0.jar=release\\modules\\ext\\webp-imageio-sejda-0.1.0.jar
file.reference.xmpcore-5.1.3.jar=release\\modules\\ext\\xmpcore-5.1.3.jar
file.reference.zookeeper-3.4.6.jar=release\\modules\\ext\\zookeeper-3.4.6.jar
javac.source=1.8
javac.compilerargs=-Xlint -Xlint:-serial
license.file=../LICENSE-2.0.txt
@ -139,5 +120,5 @@ nbm.homepage=http://www.sleuthkit.org/
nbm.module.author=Brian Carrier
nbm.needs.restart=true
source.reference.curator-recipes-2.8.0.jar=release/modules/ext/curator-recipes-2.8.0-sources.jar
spec.version.base=10.20
spec.version.base=10.21

View File

@ -6,24 +6,6 @@
<code-name-base>org.sleuthkit.autopsy.core</code-name-base>
<suite-component/>
<module-dependencies>
<dependency>
<code-name-base>org.jdesktop.beansbinding</code-name-base>
<build-prerequisite/>
<compile-dependency/>
<run-dependency>
<release-version>1</release-version>
<specification-version>1.27.1.121</specification-version>
</run-dependency>
</dependency>
<dependency>
<code-name-base>org.jdesktop.layout</code-name-base>
<build-prerequisite/>
<compile-dependency/>
<run-dependency>
<release-version>1</release-version>
<specification-version>1.33.1</specification-version>
</run-dependency>
</dependency>
<dependency>
<code-name-base>org.netbeans.api.progress</code-name-base>
<build-prerequisite/>
@ -245,6 +227,14 @@
<specification-version>6.55.1</specification-version>
</run-dependency>
</dependency>
<dependency>
<code-name-base>org.sleuthkit.autopsy.Tika</code-name-base>
<build-prerequisite/>
<compile-dependency/>
<run-dependency>
<specification-version>1.0</specification-version>
</run-dependency>
</dependency>
<dependency>
<code-name-base>org.sleuthkit.autopsy.corelibs</code-name-base>
<build-prerequisite/>
@ -309,8 +299,6 @@
<package>net.sf.sevenzipjbinding.impl</package>
<package>net.sf.sevenzipjbinding.simple</package>
<package>net.sf.sevenzipjbinding.simple.impl</package>
<package>org.apache.tika</package>
<package>org.apache.tika.io</package>
<package>org.sleuthkit.autopsy.actions</package>
<package>org.sleuthkit.autopsy.appservices</package>
<package>org.sleuthkit.autopsy.casemodule</package>
@ -352,100 +340,88 @@
<package>org.sleuthkit.datamodel.blackboardutils.attributes</package>
</public-packages>
<class-path-extension>
<runtime-relative-path>ext/commons-lang3-3.8.1.jar</runtime-relative-path>
<binary-origin>release\modules\ext\commons-lang3-3.8.1.jar</binary-origin>
<runtime-relative-path>ext/batik-xml-1.6.jar</runtime-relative-path>
<binary-origin>release\modules\ext\batik-xml-1.6.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/batik-xml-1.6.jar</runtime-relative-path>
<binary-origin>release/modules/ext/batik-xml-1.6.jar</binary-origin>
<runtime-relative-path>ext/commons-digester-1.8.1.jar</runtime-relative-path>
<binary-origin>release\modules\ext\commons-digester-1.8.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jai_core-1.1.3.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jai_core-1.1.3.jar</binary-origin>
<binary-origin>release\modules\ext\jai_core-1.1.3.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/gax-grpc-1.44.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/gax-grpc-1.44.0.jar</binary-origin>
<binary-origin>release\modules\ext\gax-grpc-1.44.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/cdm-4.5.5.jar</runtime-relative-path>
<binary-origin>release\modules\ext\cdm-4.5.5.jar</binary-origin>
<runtime-relative-path>ext/failureaccess-1.0.1.jar</runtime-relative-path>
<binary-origin>release\modules\ext\failureaccess-1.0.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/sis-utility-0.8.jar</runtime-relative-path>
<binary-origin>release\modules\ext\sis-utility-0.8.jar</binary-origin>
<runtime-relative-path>ext/grpc-protobuf-1.19.0.jar</runtime-relative-path>
<binary-origin>release\modules\ext\grpc-protobuf-1.19.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/opencensus-api-0.19.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/opencensus-api-0.19.2.jar</binary-origin>
<binary-origin>release\modules\ext\opencensus-api-0.19.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/batik-svg-dom-1.6.jar</runtime-relative-path>
<binary-origin>release/modules/ext/batik-svg-dom-1.6.jar</binary-origin>
<binary-origin>release\modules\ext\batik-svg-dom-1.6.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/gax-httpjson-0.61.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/gax-httpjson-0.61.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/boilerpipe-1.1.0.jar</runtime-relative-path>
<binary-origin>release\modules\ext\boilerpipe-1.1.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jsoup-1.11.3.jar</runtime-relative-path>
<binary-origin>release\modules\ext\jsoup-1.11.3.jar</binary-origin>
<binary-origin>release\modules\ext\gax-httpjson-0.61.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/sevenzipjbinding.jar</runtime-relative-path>
<binary-origin>release/modules/ext/sevenzipjbinding.jar</binary-origin>
<binary-origin>release\modules\ext\sevenzipjbinding.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/mchange-commons-java-0.2.9.jar</runtime-relative-path>
<binary-origin>release/modules/ext/mchange-commons-java-0.2.9.jar</binary-origin>
<binary-origin>release\modules\ext\mchange-commons-java-0.2.9.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/api-common-1.7.0.jar</runtime-relative-path>
<binary-origin>release\modules\ext\api-common-1.7.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jackson-databind-2.9.7.jar</runtime-relative-path>
<binary-origin>release\modules\ext\jackson-databind-2.9.7.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jai-imageio-core-1.4.0.jar</runtime-relative-path>
<binary-origin>release\modules\ext\jai-imageio-core-1.4.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/api-common-1.7.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/api-common-1.7.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jcl-over-slf4j-1.7.25.jar</runtime-relative-path>
<binary-origin>release\modules\ext\jcl-over-slf4j-1.7.25.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/okhttp-2.7.5.jar</runtime-relative-path>
<binary-origin>release/modules/ext/okhttp-2.7.5.jar</binary-origin>
<binary-origin>release\modules\ext\okhttp-2.7.5.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/proto-google-cloud-translate-v3beta1-0.53.0.jar</runtime-relative-path>
<binary-origin>release\modules\ext\proto-google-cloud-translate-v3beta1-0.53.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/error_prone_annotations-2.3.2.jar</runtime-relative-path>
<binary-origin>release\modules\ext\error_prone_annotations-2.3.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/libphonenumber-3.5.jar</runtime-relative-path>
<binary-origin>release/modules/ext/libphonenumber-3.5.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/tika-core-1.20.jar</runtime-relative-path>
<binary-origin>release\modules\ext\tika-core-1.20.jar</binary-origin>
<binary-origin>release\modules\ext\libphonenumber-3.5.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/StixLib.jar</runtime-relative-path>
<binary-origin>release/modules/ext/StixLib.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/bcprov-jdk15on-1.60.jar</runtime-relative-path>
<binary-origin>release\modules\ext\bcprov-jdk15on-1.60.jar</binary-origin>
<binary-origin>release\modules\ext\StixLib.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/google-auth-library-credentials-0.15.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/google-auth-library-credentials-0.15.0.jar</binary-origin>
<binary-origin>release\modules\ext\google-auth-library-credentials-0.15.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/json-simple-1.1.1.jar</runtime-relative-path>
<binary-origin>release\modules\ext\json-simple-1.1.1.jar</binary-origin>
<runtime-relative-path>ext/grpc-auth-1.19.0.jar</runtime-relative-path>
<binary-origin>release\modules\ext\grpc-auth-1.19.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/j2objc-annotations-1.1.jar</runtime-relative-path>
<binary-origin>release\modules\ext\j2objc-annotations-1.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/metadata-extractor-2.11.0.jar</runtime-relative-path>
@ -455,405 +431,389 @@
<runtime-relative-path>ext/commons-codec-1.11.jar</runtime-relative-path>
<binary-origin>release\modules\ext\commons-codec-1.11.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jmatio-1.5.jar</runtime-relative-path>
<binary-origin>release\modules\ext\jmatio-1.5.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/tika-parsers-1.20.jar</runtime-relative-path>
<binary-origin>release\modules\ext\tika-parsers-1.20.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/asm-7.0.jar</runtime-relative-path>
<binary-origin>release\modules\ext\asm-7.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/commons-pool2-2.4.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-pool2-2.4.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/sleuthkit-4.10.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/sleuthkit-4.10.0.jar</binary-origin>
<binary-origin>release\modules\ext\commons-pool2-2.4.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jxmapviewer2-2.4.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jxmapviewer2-2.4.jar</binary-origin>
<binary-origin>release\modules\ext\jxmapviewer2-2.4.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jfreechart-1.0.19.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jfreechart-1.0.19.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jcommon-1.0.23.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jcommon-1.0.23.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jdom-2.0.5-contrib.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jdom-2.0.5-contrib.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/openjson-1.0.10.jar</runtime-relative-path>
<binary-origin>release\modules\ext\openjson-1.0.10.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/isoparser-1.1.22.jar</runtime-relative-path>
<binary-origin>release\modules\ext\isoparser-1.1.22.jar</binary-origin>
<binary-origin>release\modules\ext\jdom-2.0.5-contrib.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/xmpcore-5.1.3.jar</runtime-relative-path>
<binary-origin>release/modules/ext/xmpcore-5.1.3.jar</binary-origin>
<binary-origin>release\modules\ext\xmpcore-5.1.3.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/batik-util-1.6.jar</runtime-relative-path>
<binary-origin>release/modules/ext/batik-util-1.6.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/javax.activation-1.2.0.jar</runtime-relative-path>
<binary-origin>release\modules\ext\javax.activation-1.2.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/rome-1.12.0.jar</runtime-relative-path>
<binary-origin>release\modules\ext\rome-1.12.0.jar</binary-origin>
<binary-origin>release\modules\ext\batik-util-1.6.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/javax.annotation-api-1.3.2.jar</runtime-relative-path>
<binary-origin>release\modules\ext\javax.annotation-api-1.3.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/vorbis-java-core-0.8.jar</runtime-relative-path>
<binary-origin>release\modules\ext\vorbis-java-core-0.8.jar</binary-origin>
<runtime-relative-path>ext/jgraphx-4.1.0.jar</runtime-relative-path>
<binary-origin>release\modules\ext\jgraphx-4.1.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jgraphx-4.1.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jgraphx-4.1.0.jar</binary-origin>
<runtime-relative-path>ext/jline-0.9.94.jar</runtime-relative-path>
<binary-origin>release\modules\ext\jline-0.9.94.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/DatCon.jar</runtime-relative-path>
<binary-origin>release/modules/ext/DatCon.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/java-libpst-0.8.1.jar</runtime-relative-path>
<binary-origin>release\modules\ext\java-libpst-0.8.1.jar</binary-origin>
<binary-origin>release\modules\ext\DatCon.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/okio-1.6.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/okio-1.6.0.jar</binary-origin>
<binary-origin>release\modules\ext\okio-1.6.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/bcprov-jdk15on-1.54.jar</runtime-relative-path>
<binary-origin>release\modules\ext\bcprov-jdk15on-1.54.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/curator-framework-2.8.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/curator-framework-2.8.0.jar</binary-origin>
<binary-origin>release\modules\ext\curator-framework-2.8.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/commons-dbcp2-2.1.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-dbcp2-2.1.1.jar</binary-origin>
<binary-origin>release\modules\ext\commons-dbcp2-2.1.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/google-http-client-appengine-1.29.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/google-http-client-appengine-1.29.0.jar</binary-origin>
<binary-origin>release\modules\ext\google-http-client-appengine-1.29.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/uimafit-core-2.4.0.jar</runtime-relative-path>
<binary-origin>release\modules\ext\uimafit-core-2.4.0.jar</binary-origin>
<runtime-relative-path>ext/proto-google-iam-v1-0.12.0.jar</runtime-relative-path>
<binary-origin>release\modules\ext\proto-google-iam-v1-0.12.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jackcess-encrypt-2.1.4.jar</runtime-relative-path>
<binary-origin>release\modules\ext\jackcess-encrypt-2.1.4.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/junrar-2.0.0.jar</runtime-relative-path>
<binary-origin>release\modules\ext\junrar-2.0.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/google-http-client-1.29.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/google-http-client-1.29.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/bcpkix-jdk15on-1.60.jar</runtime-relative-path>
<binary-origin>release\modules\ext\bcpkix-jdk15on-1.60.jar</binary-origin>
<binary-origin>release\modules\ext\google-http-client-1.29.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/opennlp-tools-1.9.1.jar</runtime-relative-path>
<binary-origin>release\modules\ext\opennlp-tools-1.9.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/slf4j-api-1.7.25.jar</runtime-relative-path>
<binary-origin>release\modules\ext\slf4j-api-1.7.25.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/bcprov-ext-jdk15on-1.54.jar</runtime-relative-path>
<binary-origin>release/modules/ext/bcprov-ext-jdk15on-1.54.jar</binary-origin>
<binary-origin>release\modules\ext\bcprov-ext-jdk15on-1.54.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/google-cloud-core-1.70.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/google-cloud-core-1.70.0.jar</binary-origin>
<binary-origin>release\modules\ext\google-cloud-core-1.70.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/geoapi-3.0.1.jar</runtime-relative-path>
<binary-origin>release\modules\ext\geoapi-3.0.1.jar</binary-origin>
<runtime-relative-path>ext/protobuf-java-3.7.0.jar</runtime-relative-path>
<binary-origin>release\modules\ext\protobuf-java-3.7.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/httpmime-4.5.6.jar</runtime-relative-path>
<binary-origin>release\modules\ext\httpmime-4.5.6.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jdom2-2.0.6.jar</runtime-relative-path>
<binary-origin>release\modules\ext\jdom2-2.0.6.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/uimaj-core-3.0.1.jar</runtime-relative-path>
<binary-origin>release\modules\ext\uimaj-core-3.0.1.jar</binary-origin>
<runtime-relative-path>ext/bcpkix-jdk15on-1.54.jar</runtime-relative-path>
<binary-origin>release\modules\ext\bcpkix-jdk15on-1.54.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/sqlite-jdbc-3.25.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/sqlite-jdbc-3.25.2.jar</binary-origin>
<binary-origin>release\modules\ext\sqlite-jdbc-3.25.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/cxf-rt-rs-client-3.3.0.jar</runtime-relative-path>
<binary-origin>release\modules\ext\cxf-rt-rs-client-3.3.0.jar</binary-origin>
<runtime-relative-path>ext/grpc-protobuf-lite-1.19.0.jar</runtime-relative-path>
<binary-origin>release\modules\ext\grpc-protobuf-lite-1.19.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/pdfbox-tools-2.0.13.jar</runtime-relative-path>
<binary-origin>release\modules\ext\pdfbox-tools-2.0.13.jar</binary-origin>
<runtime-relative-path>ext/httpcore-4.4.9.jar</runtime-relative-path>
<binary-origin>release\modules\ext\httpcore-4.4.9.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/grib-4.5.5.jar</runtime-relative-path>
<binary-origin>release\modules\ext\grib-4.5.5.jar</binary-origin>
<runtime-relative-path>ext/guava-27.1-android.jar</runtime-relative-path>
<binary-origin>release\modules\ext\guava-27.1-android.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/gax-1.44.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/gax-1.44.0.jar</binary-origin>
<runtime-relative-path>ext/bcprov-jdk15on-1.52.jar</runtime-relative-path>
<binary-origin>release\modules\ext\bcprov-jdk15on-1.52.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jempbox-1.8.16.jar</runtime-relative-path>
<binary-origin>release\modules\ext\jempbox-1.8.16.jar</binary-origin>
<runtime-relative-path>ext/checker-compat-qual-2.5.3.jar</runtime-relative-path>
<binary-origin>release\modules\ext\checker-compat-qual-2.5.3.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jackcess-2.2.0.jar</runtime-relative-path>
<binary-origin>release\modules\ext\jackcess-2.2.0.jar</binary-origin>
<runtime-relative-path>ext/sleuthkit-4.10.0.jar</runtime-relative-path>
<binary-origin>release\modules\ext\sleuthkit-4.10.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/grpc-context-1.19.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/grpc-context-1.19.0.jar</binary-origin>
<runtime-relative-path>ext/animal-sniffer-annotations-1.17.jar</runtime-relative-path>
<binary-origin>release\modules\ext\animal-sniffer-annotations-1.17.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jericho-html-3.3.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jericho-html-3.3.jar</binary-origin>
<runtime-relative-path>ext/sleuthkit-caseuco-4.10.0.jar</runtime-relative-path>
<binary-origin>release\modules\ext\sleuthkit-caseuco-4.10.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/httpservices-4.5.5.jar</runtime-relative-path>
<binary-origin>release\modules\ext\httpservices-4.5.5.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/xz-1.8.jar</runtime-relative-path>
<binary-origin>release\modules\ext\xz-1.8.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/commons-validator-1.6.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-validator-1.6.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/decodetect-core-0.3.jar</runtime-relative-path>
<binary-origin>release/modules/ext/decodetect-core-0.3.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jbig2-imageio-3.0.2.jar</runtime-relative-path>
<binary-origin>release\modules\ext\jbig2-imageio-3.0.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/apache-mime4j-dom-0.8.2.jar</runtime-relative-path>
<binary-origin>release\modules\ext\apache-mime4j-dom-0.8.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/pdfbox-2.0.13.jar</runtime-relative-path>
<binary-origin>release\modules\ext\pdfbox-2.0.13.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/xmlbeans-3.0.2.jar</runtime-relative-path>
<binary-origin>release\modules\ext\xmlbeans-3.0.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/curator-recipes-2.8.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/curator-recipes-2.8.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/tagsoup-1.2.1.jar</runtime-relative-path>
<binary-origin>release\modules\ext\tagsoup-1.2.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jackson-core-2.9.7.jar</runtime-relative-path>
<binary-origin>release\modules\ext\jackson-core-2.9.7.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/sis-metadata-0.8.jar</runtime-relative-path>
<binary-origin>release\modules\ext\sis-metadata-0.8.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/parso-2.0.10.jar</runtime-relative-path>
<binary-origin>release\modules\ext\parso-2.0.10.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/apache-mime4j-core-0.8.2.jar</runtime-relative-path>
<binary-origin>release\modules\ext\apache-mime4j-core-0.8.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/commons-io-2.6.jar</runtime-relative-path>
<binary-origin>release\modules\ext\commons-io-2.6.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/SparseBitSet-1.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/SparseBitSet-1.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/batik-svggen-1.6.jar</runtime-relative-path>
<binary-origin>release/modules/ext/batik-svggen-1.6.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/c3p0-0.9.5.jar</runtime-relative-path>
<binary-origin>release/modules/ext/c3p0-0.9.5.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/zookeeper-3.4.6.jar</runtime-relative-path>
<binary-origin>release/modules/ext/zookeeper-3.4.6.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/commons-csv-1.6.jar</runtime-relative-path>
<binary-origin>release\modules\ext\commons-csv-1.6.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jdom-2.0.5.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jdom-2.0.5.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jackson-annotations-2.9.7.jar</runtime-relative-path>
<binary-origin>release\modules\ext\jackson-annotations-2.9.7.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/google-api-client-1.27.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/google-api-client-1.27.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/netcdf4-4.5.5.jar</runtime-relative-path>
<binary-origin>release\modules\ext\netcdf4-4.5.5.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/sis-netcdf-0.8.jar</runtime-relative-path>
<binary-origin>release\modules\ext\sis-netcdf-0.8.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/sentiment-analysis-parser-0.1.jar</runtime-relative-path>
<binary-origin>release\modules\ext\sentiment-analysis-parser-0.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/commons-collections4-4.2.jar</runtime-relative-path>
<binary-origin>release\modules\ext\commons-collections4-4.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/opencensus-contrib-http-util-0.19.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/opencensus-contrib-http-util-0.19.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/google-auth-library-oauth2-http-0.15.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/google-auth-library-oauth2-http-0.15.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/juniversalchardet-1.0.3.jar</runtime-relative-path>
<binary-origin>release\modules\ext\juniversalchardet-1.0.3.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jython-standalone-2.7.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jython-standalone-2.7.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jhighlight-1.0.3.jar</runtime-relative-path>
<binary-origin>release\modules\ext\jhighlight-1.0.3.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jul-to-slf4j-1.7.25.jar</runtime-relative-path>
<binary-origin>release\modules\ext\jul-to-slf4j-1.7.25.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/postgresql-9.4.1211.jre7.jar</runtime-relative-path>
<binary-origin>release/modules/ext/postgresql-9.4.1211.jre7.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jai_imageio-1.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jai_imageio-1.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/httpclient-4.5.6.jar</runtime-relative-path>
<binary-origin>release\modules\ext\httpclient-4.5.6.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/curator-client-2.8.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/curator-client-2.8.0.jar</binary-origin>
<runtime-relative-path>ext/sleuthkit-4.10.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/sleuthkit-4.10.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/sleuthkit-caseuco-4.10.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/sleuthkit-caseuco-4.10.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/fontbox-2.0.13.jar</runtime-relative-path>
<binary-origin>release\modules\ext\fontbox-2.0.13.jar</binary-origin>
<runtime-relative-path>ext/gax-1.44.0.jar</runtime-relative-path>
<binary-origin>release\modules\ext\gax-1.44.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jsoup-1.10.3.jar</runtime-relative-path>
<binary-origin>release\modules\ext\jsoup-1.10.3.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/grpc-context-1.19.0.jar</runtime-relative-path>
<binary-origin>release\modules\ext\grpc-context-1.19.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jackcess-2.2.0.jar</runtime-relative-path>
<binary-origin>release\modules\ext\jackcess-2.2.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/slf4j-log4j12-1.7.6.jar</runtime-relative-path>
<binary-origin>release\modules\ext\slf4j-log4j12-1.7.6.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jericho-html-3.3.jar</runtime-relative-path>
<binary-origin>release\modules\ext\jericho-html-3.3.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/google-cloud-core-grpc-1.70.0.jar</runtime-relative-path>
<binary-origin>release\modules\ext\google-cloud-core-grpc-1.70.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/commons-validator-1.6.jar</runtime-relative-path>
<binary-origin>release\modules\ext\commons-validator-1.6.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/slf4j-api-1.7.6.jar</runtime-relative-path>
<binary-origin>release\modules\ext\slf4j-api-1.7.6.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/decodetect-core-0.3.jar</runtime-relative-path>
<binary-origin>release\modules\ext\decodetect-core-0.3.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/httpclient-4.5.5.jar</runtime-relative-path>
<binary-origin>release\modules\ext\httpclient-4.5.5.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/curator-recipes-2.8.0.jar</runtime-relative-path>
<binary-origin>release\modules\ext\curator-recipes-2.8.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jackson-annotations-2.9.0.jar</runtime-relative-path>
<binary-origin>release\modules\ext\jackson-annotations-2.9.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jackson-core-2.9.7.jar</runtime-relative-path>
<binary-origin>release\modules\ext\jackson-core-2.9.7.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/commons-lang3-3.5.jar</runtime-relative-path>
<binary-origin>release\modules\ext\commons-lang3-3.5.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/log4j-1.2.16.jar</runtime-relative-path>
<binary-origin>release\modules\ext\log4j-1.2.16.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/commons-logging-1.2.jar</runtime-relative-path>
<binary-origin>release\modules\ext\commons-logging-1.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar</runtime-relative-path>
<binary-origin>release\modules\ext\listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/protobuf-java-util-3.7.0.jar</runtime-relative-path>
<binary-origin>release\modules\ext\protobuf-java-util-3.7.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/commons-collections-3.2.2.jar</runtime-relative-path>
<binary-origin>release\modules\ext\commons-collections-3.2.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/SparseBitSet-1.1.jar</runtime-relative-path>
<binary-origin>release\modules\ext\SparseBitSet-1.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/grpc-grpclb-1.19.0.jar</runtime-relative-path>
<binary-origin>release\modules\ext\grpc-grpclb-1.19.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/batik-svggen-1.6.jar</runtime-relative-path>
<binary-origin>release\modules\ext\batik-svggen-1.6.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/c3p0-0.9.5.jar</runtime-relative-path>
<binary-origin>release\modules\ext\c3p0-0.9.5.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/zookeeper-3.4.6.jar</runtime-relative-path>
<binary-origin>release\modules\ext\zookeeper-3.4.6.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/grpc-alts-1.19.0.jar</runtime-relative-path>
<binary-origin>release\modules\ext\grpc-alts-1.19.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jdom-2.0.5.jar</runtime-relative-path>
<binary-origin>release\modules\ext\jdom-2.0.5.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/gson-2.7.jar</runtime-relative-path>
<binary-origin>release\modules\ext\gson-2.7.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/google-api-client-1.27.0.jar</runtime-relative-path>
<binary-origin>release\modules\ext\google-api-client-1.27.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/opencensus-contrib-http-util-0.19.2.jar</runtime-relative-path>
<binary-origin>release\modules\ext\opencensus-contrib-http-util-0.19.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/google-auth-library-oauth2-http-0.15.0.jar</runtime-relative-path>
<binary-origin>release\modules\ext\google-auth-library-oauth2-http-0.15.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jython-standalone-2.7.0.jar</runtime-relative-path>
<binary-origin>release\modules\ext\jython-standalone-2.7.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/commons-lang-2.6.jar</runtime-relative-path>
<binary-origin>release\modules\ext\commons-lang-2.6.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jsr305-3.0.2.jar</runtime-relative-path>
<binary-origin>release\modules\ext\jsr305-3.0.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/proto-google-common-protos-1.15.0.jar</runtime-relative-path>
<binary-origin>release\modules\ext\proto-google-common-protos-1.15.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/netty-3.7.0.Final.jar</runtime-relative-path>
<binary-origin>release\modules\ext\netty-3.7.0.Final.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/opencensus-contrib-grpc-metrics-0.19.2.jar</runtime-relative-path>
<binary-origin>release\modules\ext\opencensus-contrib-grpc-metrics-0.19.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jai_imageio-1.1.jar</runtime-relative-path>
<binary-origin>release\modules\ext\jai_imageio-1.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/postgresql-9.4.1211.jre7.jar</runtime-relative-path>
<binary-origin>release\modules\ext\postgresql-9.4.1211.jre7.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/junit-3.8.1.jar</runtime-relative-path>
<binary-origin>release\modules\ext\junit-3.8.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/curator-client-2.8.0.jar</runtime-relative-path>
<binary-origin>release\modules\ext\curator-client-2.8.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/grpc-core-1.19.0.jar</runtime-relative-path>
<binary-origin>release\modules\ext\grpc-core-1.19.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/javax.ws.rs-api-2.0.jar</runtime-relative-path>
<binary-origin>release\modules\ext\javax.ws.rs-api-2.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/icepdf-core-6.2.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/icepdf-core-6.2.2.jar</binary-origin>
<binary-origin>release\modules\ext\icepdf-core-6.2.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/activemq-all-5.11.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/activemq-all-5.11.1.jar</binary-origin>
<binary-origin>release\modules\ext\activemq-all-5.11.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/google-cloud-core-http-1.70.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/google-cloud-core-http-1.70.0.jar</binary-origin>
<binary-origin>release\modules\ext\google-cloud-core-http-1.70.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/Rejistry-1.1-SNAPSHOT.jar</runtime-relative-path>
<binary-origin>release/modules/ext/Rejistry-1.1-SNAPSHOT.jar</binary-origin>
<binary-origin>release\modules\ext\Rejistry-1.1-SNAPSHOT.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/dec-0.1.2.jar</runtime-relative-path>
<binary-origin>release\modules\ext\dec-0.1.2.jar</binary-origin>
<runtime-relative-path>ext/commons-beanutils-1.9.2.jar</runtime-relative-path>
<binary-origin>release\modules\ext\commons-beanutils-1.9.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/batik-dom-1.6.jar</runtime-relative-path>
<binary-origin>release/modules/ext/batik-dom-1.6.jar</binary-origin>
<binary-origin>release\modules\ext\batik-dom-1.6.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/google-http-client-jackson2-1.29.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/google-http-client-jackson2-1.29.0.jar</binary-origin>
<binary-origin>release\modules\ext\google-http-client-jackson2-1.29.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/threetenbp-1.3.3.jar</runtime-relative-path>
<binary-origin>release/modules/ext/threetenbp-1.3.3.jar</binary-origin>
<binary-origin>release\modules\ext\threetenbp-1.3.3.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/google-cloud-translate-1.70.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/google-cloud-translate-1.70.0.jar</binary-origin>
<binary-origin>release\modules\ext\google-cloud-translate-1.70.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/grpc-stub-1.19.0.jar</runtime-relative-path>
<binary-origin>release\modules\ext\grpc-stub-1.19.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/google-oauth-client-1.28.0.jar</runtime-relative-path>
<binary-origin>release\modules\ext\google-oauth-client-1.28.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/sevenzipjbinding-AllPlatforms.jar</runtime-relative-path>
<binary-origin>release/modules/ext/sevenzipjbinding-AllPlatforms.jar</binary-origin>
<binary-origin>release\modules\ext\sevenzipjbinding-AllPlatforms.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jutf7-1.0.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jutf7-1.0.0.jar</binary-origin>
<binary-origin>release\modules\ext\jutf7-1.0.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/batik-awt-util-1.6.jar</runtime-relative-path>
<binary-origin>release/modules/ext/batik-awt-util-1.6.jar</binary-origin>
<binary-origin>release\modules\ext\batik-awt-util-1.6.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/google-api-services-translate-v2-rev20170525-1.27.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/google-api-services-translate-v2-rev20170525-1.27.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/webp-imageio-sejda-0.1.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/webp-imageio-sejda-0.1.0.jar</binary-origin>
<binary-origin>release\modules\ext\google-api-services-translate-v2-rev20170525-1.27.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/icepdf-viewer-6.2.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/icepdf-viewer-6.2.2.jar</binary-origin>
<binary-origin>release\modules\ext\icepdf-viewer-6.2.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/bcmail-jdk15on-1.60.jar</runtime-relative-path>
<binary-origin>release\modules\ext\bcmail-jdk15on-1.60.jar</binary-origin>
<runtime-relative-path>ext/webp-imageio-sejda-0.1.0.jar</runtime-relative-path>
<binary-origin>release\modules\ext\webp-imageio-sejda-0.1.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/vorbis-java-tika-0.8.jar</runtime-relative-path>
<binary-origin>release\modules\ext\vorbis-java-tika-0.8.jar</binary-origin>
<runtime-relative-path>ext/grpc-netty-shaded-1.19.0.jar</runtime-relative-path>
<binary-origin>release\modules\ext\grpc-netty-shaded-1.19.0.jar</binary-origin>
</class-path-extension>
</data>
</configuration>

View File

@ -1,56 +1,97 @@
#Tue Aug 18 18:09:20 UTC 2020
AddImageAction.ingestConfig.ongoingIngest.msg=<html>\u5225\u306e\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3067\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u304c\u9032\u884c\u4e2d\u3067\u3059\u3002\u65b0\u898f\u30bd\u30fc\u30b9\u3092\u4eca\u8ffd\u52a0\u3059\u308b\u3068\u3001\u73fe\u5728\u306e\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u306e\u51e6\u7406\u304c\u9045\u304f\u306a\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002<br />\u7d9a\u884c\u3057\u3066\u65b0\u898f\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3092\u4eca\u3059\u3050\u8ffd\u52a0\u3057\u307e\u3059\u304b?</html>
AddImageAction.ingestConfig.ongoingIngest.title=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u304c\u9032\u884c\u4e2d\u3067\u3059
AddImageAction.wizard.title=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3092\u8ffd\u52a0
AddImageErrorsDialog.closeButton.text=\u9589\u3058\u308b
AddImageErrorsDialog.closeButton.toolTipText=\u3053\u306e\u30a6\u30a3\u30f3\u30c9\u30a6\u3092\u9589\u3058\u308b
AddImageErrorsDialog.copyButton.text=\u30b3\u30d4\u30fc
AddImageErrorsDialog.copyButton.toolTipText=\u30a8\u30e9\u30fc\u3092\u30af\u30ea\u30c3\u30d7\u30dc\u30fc\u30c9\u306b\u30b3\u30d4\u30fc
AddImageErrorsDialog.title=\u30a4\u30e1\u30fc\u30b8\u30ed\u30b0\u3092\u8ffd\u52a0
AddImageTask.interrupt.exception.msg=\u30a4\u30e1\u30fc\u30b8\u8ffd\u52a0\u30d7\u30ed\u30bb\u30b9\u306e\u505c\u6b62\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
AddImageTask.run.progress.adding=\u6b21\u3092\u8ffd\u52a0\u4e2d\u3067\u3059\: {0}
AddImageWizardAddingProgressPanel.isValid.focusNext=\u6b21\u3078 >
AddImageWizardAddingProgressPanel.stateStarted.progressBarText=*\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u304c\u5927\u304d\u3044\u5834\u5408\u3001\u3053\u306e\u30d7\u30ed\u30bb\u30b9\u306f\u6642\u9593\u304c\u304b\u304b\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002
AddImageWizardAddingProgressVisual.addingDsComplete.text=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u306e\u8ffd\u52a0\u4e2d - \u5b8c\u4e86
AddImageWizardAddingProgressVisual.getName.text=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3092\u8ffd\u52a0
AddImageWizardAddingProgressVisual.progressLabel.text=<\u9032\u6357\u72b6\u6cc1>
AddImageWizardAddingProgressVisual.progressTextArea.border.title=\u30b9\u30c6\u30fc\u30bf\u30b9
AddImageWizardAddingProgressVisual.showErrors.critText=*\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u306e\u8ffd\u52a0\u306b\u5931\u6557\u3057\u307e\u3057\u305f(\u91cd\u5927\u306a\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f)\u3002\u6b21\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u30ed\u30b0\u3092\u8868\u793a\u3057\u3066\u304f\u3060\u3055\u3044\u3002
AddImageWizardAddingProgressVisual.showErrors.nonCritText=*\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u304c\u8ffd\u52a0\u3055\u308c\u307e\u3057\u305f(\u91cd\u5927\u306a\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u305b\u3093\u3067\u3057\u305f)\u3002\u6b21\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u30ed\u30b0\u3092\u8868\u793a\u3057\u3066\u304f\u3060\u3055\u3044\u3002
AddImageWizardAddingProgressVisual.statusLabel.text=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3092\u30ed\u30fc\u30ab\u30eb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u8ffd\u52a0\u3057\u307e\u3057\u305f\u3002\u30d5\u30a1\u30a4\u30eb\u3092\u5206\u6790\u4e2d\u3067\u3059\u3002
AddImageWizardAddingProgressVisual.subTitle1Label.text=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u306e\u51e6\u7406\u3068\u30ed\u30fc\u30ab\u30eb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3078\u306e\u8ffd\u52a0\u3092\u884c\u3063\u3066\u3044\u307e\u3059\u3002\u7d42\u4e86\u3059\u308b\u3068\u30d5\u30a1\u30a4\u30eb\u5206\u6790\u304c\u958b\u59cb\u3057\u307e\u3059\u3002
AddImageWizardAddingProgressVisual.viewLogButton.text=\u30ed\u30b0\u3092\u8868\u793a
AddImageWizardChooseDataSourcePanel.moveFocusNext=\u6b21\u3078 >
AddImageWizardChooseDataSourceVisual.getName.text=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3092\u9078\u629e
AddImageWizardIngestConfigPanel.CANCEL_BUTTON.text=\u53d6\u308a\u6d88\u3057
AddImageWizardIngestConfigPanel.dsProcDone.errs.text=*\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u306e\u8ffd\u52a0\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
AddImageWizardIngestConfigPanel.dsProcDone.noErrs.text=*\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3092\u8ffd\u52a0\u3057\u307e\u3057\u305f\u3002
AddImageWizardIngestConfigPanel.name.text=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u69cb\u6210
AddImageWizardIngestConfigVisual.getName.text=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u69cb\u6210
AddImageWizardIterator.stepXofN=\u624b\u9806 {0} / {1}
AddImageWizardSelectDspVisual.multiUserWarning.text=\u3053\u306e\u30bf\u30a4\u30d7\u306e\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u30d7\u30ed\u30bb\u30c3\u30b5\u30fc\u306f\u30de\u30eb\u30c1\u30e6\u30fc\u30b6\u30fc\u30e2\u30fc\u30c9\u3067\u5229\u7528\u3067\u304d\u307e\u305b\u3093\u3002
# {0} - \u4f8b\u5916\u30e1\u30c3\u30bb\u30fc\u30b8
Case.closeException.couldNotCloseCase=\u6b21\u306e\u30b1\u30fc\u30b9\u3092\u9589\u3058\u3066\u3044\u308b\u9593\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: {0}
AddLocalFilesTask.localFileAdd.progress.text=\u6b21\u3092\u8ffd\u52a0\u4e2d\u3067\u3059\: {0}/{1}
CTL_AddImage=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3092\u8ffd\u52a0
CTL_AddImageButton=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3092\u8ffd\u52a0
CTL_CaseCloseAct=\u30b1\u30fc\u30b9\u3092\u9589\u3058\u308b
CTL_CaseDeleteAction=\u30b1\u30fc\u30b9\u3092\u524a\u9664
CTL_CaseDetailsAction=\u30b1\u30fc\u30b9\u8a73\u7d30
CTL_CaseNewAction=\u65b0\u898f\u30b1\u30fc\u30b9
CTL_CaseOpenAction=\u30b1\u30fc\u30b9\u3092\u958b\u304f
CTL_UnpackagePortableCaseAction=\u30dd\u30fc\u30bf\u30d6\u30eb\u30b1\u30fc\u30b9\u3092\u958b\u5c01
Case.CollaborationSetup.FailNotify.ErrMsg=\u3053\u306e\u30b1\u30fc\u30b9\u3067\u9023\u643a\u3057\u3066\u3044\u308b\u53ef\u80fd\u6027\u306e\u3042\u308b\u305d\u306e\u4ed6\u306e\u30ce\u30fc\u30c9\u306b\u63a5\u7d9a\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
Case.CollaborationSetup.FailNotify.Title=\u63a5\u7d9a\u5931\u6557
Case.GetCaseTypeGivenPath.Failure=\u30b1\u30fc\u30b9\u30bf\u30a4\u30d7\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093
Case.addImg.exception.msg=\u30b1\u30fc\u30b9\u306b\u30a4\u30e1\u30fc\u30b8\u3092\u8ffd\u52a0\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f
Case.checkImgExist.confDlg.doesntExist.msg=\u3053\u306e\u30b1\u30fc\u30b9\u3068\u95a2\u9023\u4ed8\u3051\u3089\u308c\u3066\u3044\u308b\n\u30a4\u30e1\u30fc\u30b8\u306e1\u3064\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002\u4eca\u3059\u3050\u691c\u7d22\u3057\u307e\u3059\u304b?\n\u4ee5\u524d\u3001\u30a4\u30e1\u30fc\u30b8\u306f\u6b21\u306b\u3042\u308a\u307e\u3057\u305f\:\n{0}\n\u4eca\u5f8c\u3082\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u3092\u53c2\u7167\u3057\u3066\u30ec\u30dd\u30fc\u30c8\u3092\u751f\u6210\u3067\u304d\u307e\u3059\n\u305f\u3060\u3057\u3001[\u3044\u3044\u3048] \u3092\u9078\u629e\u3059\u308b\u3068\u3001\u30d5\u30a1\u30a4\u30eb\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u8868\u793a\u3084\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30d7\u30ed\u30bb\u30b9\u306e\u5b9f\u884c\u304c\u884c\u3048\u306a\u304f\u306a\u308a\u307e\u3059\u3002
Case.checkImgExist.confDlg.doesntExist.title=\u30a4\u30e1\u30fc\u30b8\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093
Case.closeException.couldNotCloseCase=\u6b21\u306e\u30b1\u30fc\u30b9\u3092\u9589\u3058\u3066\u3044\u308b\u9593\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\: {0}
Case.createCaseDir.exception.cantCreate=\u30b1\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u3092\u4f5c\u6210\u3067\u304d\u306a\u3044\u304b\u3001\u3059\u3067\u306b\u5b58\u5728\u3057\u3066\u3044\u307e\u3059\: {0}
Case.createCaseDir.exception.cantCreateCaseDir=\u6b21\u306e\u30b1\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\: {0}
Case.createCaseDir.exception.cantCreateModDir=\u6b21\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u51fa\u529b\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\: {0}
Case.createCaseDir.exception.cantCreateReportsDir=\u6b21\u306e\u30ec\u30dd\u30fc\u30c8\u51fa\u529b\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\: {0}
Case.createCaseDir.exception.existCantRW=\u30b1\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3002\u3059\u3067\u306b\u5b58\u5728\u3057\u3001\u6b21\u306e\u8aad\u307f\u8fbc\u307f/\u66f8\u304d\u8fbc\u307f\u304c\u3067\u304d\u307e\u305b\u3093\: {0}
Case.createCaseDir.exception.existNotDir=\u30b1\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3002\u3059\u3067\u306b\u5b58\u5728\u3057\u3001\u6b21\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u3067\u306f\u3042\u308a\u307e\u305b\u3093\: {0}
Case.creationException.couldNotAcquireDirLock=\u30b1\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u306e\u30ed\u30c3\u30af\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
Case.creationException.couldNotAcquireResourcesLock=\u30b1\u30fc\u30b9\u30ea\u30bd\u30fc\u30b9\u306e\u30ed\u30c3\u30af\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
Case.deleteCaseConfirmationDialog.message=\u73fe\u5728\u306e\u30b1\u30fc\u30b9\u3092\u9589\u3058\u3066\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
Case.deleteCaseConfirmationDialog.title=\u73fe\u5728\u306e\u30b1\u30fc\u30b9\u3092\u524a\u9664\u3057\u307e\u3059\u304b?
# {0} - \u4f8b\u5916\u30e1\u30c3\u30bb\u30fc\u30b8
Case.deleteCaseFailureMessageBox.message=\u6b21\u306e\u30b1\u30fc\u30b9\u306e\u524a\u9664\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: {0}
Case.deleteCaseFailureMessageBox.message=\u6b21\u306e\u30b1\u30fc\u30b9\u306e\u524a\u9664\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\: {0}
Case.deleteCaseFailureMessageBox.title=\u30b1\u30fc\u30b9\u3092\u524a\u9664\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
Case.deleteReports.deleteFromDiskException.log.msg=\u30c7\u30a3\u30b9\u30af\u304b\u3089\u30ec\u30dd\u30fc\u30c8\u3092\u524a\u9664\u3067\u304d\u307e\u305b\u3093\u3002
Case.deleteReports.deleteFromDiskException.msg=\u30c7\u30a3\u30b9\u30af\u304b\u3089\u30ec\u30dd\u30fc\u30c8 {0} \u3092\u524a\u9664\u3067\u304d\u307e\u305b\u3093\u3002\n{1} \u304b\u3089\u624b\u52d5\u3067\u524a\u9664\u3067\u304d\u307e\u3059
Case.exception.errGetRootObj=\u30eb\u30fc\u30c8\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
Case.exceptionMessage.cancelledByUser=\u30e6\u30fc\u30b6\u30fc\u306b\u3088\u3063\u3066\u53d6\u308a\u6d88\u3055\u308c\u307e\u3057\u305f\u3002
Case.exceptionMessage.cannotDeleteCurrentCase=\u73fe\u5728\u306e\u30b1\u30fc\u30b9\u3092\u524a\u9664\u3067\u304d\u307e\u305b\u3093\u3002\u6700\u521d\u306b\u9589\u3058\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
Case.exceptionMessage.cannotGetLockToDeleteCase=\u5225\u306e\u30e6\u30fc\u30b6\u30fc\u307e\u305f\u306f\u30db\u30b9\u30c8\u304c\u958b\u3044\u3066\u3044\u308b\u305f\u3081\u73fe\u5728\u306e\u30b1\u30fc\u30b9\u3092\u524a\u9664\u3067\u304d\u307e\u305b\u3093\u3002
Case.exceptionMessage.cannotLocateMainWindow=\u30e1\u30a4\u30f3\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30a6\u30a3\u30f3\u30c9\u30a6\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093
Case.exceptionMessage.cannotOpenMultiUserCaseNoSettings=\u30de\u30eb\u30c1\u30e6\u30fc\u30b6\u30fc\u8a2d\u5b9a\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093([\u30c4\u30fc\u30eb]\u3001[\u30aa\u30d7\u30b7\u30e7\u30f3]\u3001[\u30de\u30eb\u30c1\u30e6\u30fc\u30b6\u30fc] \u30bf\u30d6\u3092\u53c2\u7167)\u3002\u30de\u30eb\u30c1\u30e6\u30fc\u30b6\u30fc\u30b1\u30fc\u30b9\u3092\u958b\u3051\u307e\u305b\u3093\u3002
# {0} - \u4f8b\u5916\u30e1\u30c3\u30bb\u30fc\u30b8
Case.exceptionMessage.couldNotCreatCollaborationMonitor=\u9023\u643a\u30e2\u30cb\u30bf\u30fc\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f:\n{0}\u3002
# {0} - \u4f8b\u5916\u30e1\u30c3\u30bb\u30fc\u30b8
Case.exceptionMessage.couldNotCreateCaseDatabase=\u30b1\u30fc\u30b9\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f:\n{0}\u3002
# {0} - \u4f8b\u5916\u30e1\u30c3\u30bb\u30fc\u30b8
Case.exceptionMessage.couldNotCreateCaseNodeData=\u5ea7\u6a19\u30b5\u30fc\u30d3\u30b9\u30ce\u30fc\u30c9\u30c7\u30fc\u30bf\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f:\n{0}\u3002
# {0} - \u4f8b\u5916\u30e1\u30c3\u30bb\u30fc\u30b8
Case.exceptionMessage.couldNotGetDbServerConnectionInfo=\u30b1\u30fc\u30b9\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30b5\u30fc\u30d0\u30fc\u306e\u63a5\u7d9a\u60c5\u5831\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f:\n{0}\u3002
# {0} - \u4f8b\u5916\u30e1\u30c3\u30bb\u30fc\u30b8
Case.exceptionMessage.couldNotOpenCaseDatabase=\u30b1\u30fc\u30b9\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u958b\u3051\u307e\u305b\u3093\u3067\u3057\u305f:\n{0}\u3002
# {0} - \u4f8b\u5916\u30e1\u30c3\u30bb\u30fc\u30b8
Case.exceptionMessage.couldNotOpenRemoteEventChannel=\u30ea\u30e2\u30fc\u30c8\u30a4\u30d9\u30f3\u30c8\u30c1\u30e3\u30cd\u30eb\u3092\u958b\u3051\u307e\u305b\u3093\u3067\u3057\u305f:\n{0}\u3002
# {0} - \u4f8b\u5916\u30e1\u30c3\u30bb\u30fc\u30b8
Case.exceptionMessage.couldNotSaveCaseMetadata=\u30b1\u30fc\u30b9\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u4fdd\u5b58\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f:\n{0}\u3002
# {0} - \u4f8b\u5916\u30e1\u30c3\u30bb\u30fc\u30b8
Case.exceptionMessage.couldNotSaveDbNameToMetadataFile=\u30b1\u30fc\u30b9\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u540d\u3092\u30b1\u30fc\u30b9\u30e1\u30bf\u30c7\u30fc\u30bf\u30d5\u30a1\u30a4\u30eb\u306b\u4fdd\u5b58\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f:\n{0}\u3002
# {0} - \u4f8b\u5916\u30e1\u30c3\u30bb\u30fc\u30b8
Case.exceptionMessage.couldNotUpdateCaseNodeData=\u5ea7\u6a19\u30b5\u30fc\u30d3\u30b9\u30ce\u30fc\u30c9\u30c7\u30fc\u30bf\u3092\u66f4\u65b0\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f:\n{0}\u3002
# {0} - \u30b1\u30fc\u30b9\u8868\u793a\u540d
Case.exceptionMessage.couldNotCreatCollaborationMonitor=\u9023\u643a\u30e2\u30cb\u30bf\u30fc\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\:\n{0}\u3002
Case.exceptionMessage.couldNotCreateCaseDatabase=\u30b1\u30fc\u30b9\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\:\n{0}\u3002
Case.exceptionMessage.couldNotCreateCaseNodeData=\u5ea7\u6a19\u30b5\u30fc\u30d3\u30b9\u30ce\u30fc\u30c9\u30c7\u30fc\u30bf\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\:\n{0}\u3002
Case.exceptionMessage.couldNotGetDbServerConnectionInfo=\u30b1\u30fc\u30b9\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30b5\u30fc\u30d0\u30fc\u306e\u63a5\u7d9a\u60c5\u5831\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\:\n{0}\u3002
Case.exceptionMessage.couldNotOpenCaseDatabase=\u30b1\u30fc\u30b9\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u958b\u3051\u307e\u305b\u3093\u3067\u3057\u305f\:\n{0}\u3002
Case.exceptionMessage.couldNotOpenRemoteEventChannel=\u30ea\u30e2\u30fc\u30c8\u30a4\u30d9\u30f3\u30c8\u30c1\u30e3\u30cd\u30eb\u3092\u958b\u3051\u307e\u305b\u3093\u3067\u3057\u305f\:\n{0}\u3002
Case.exceptionMessage.couldNotSaveCaseMetadata=\u30b1\u30fc\u30b9\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u4fdd\u5b58\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\:\n{0}\u3002
Case.exceptionMessage.couldNotSaveDbNameToMetadataFile=\u30b1\u30fc\u30b9\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u540d\u3092\u30b1\u30fc\u30b9\u30e1\u30bf\u30c7\u30fc\u30bf\u30d5\u30a1\u30a4\u30eb\u306b\u4fdd\u5b58\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\:\n{0}\u3002
Case.exceptionMessage.couldNotUpdateCaseNodeData=\u5ea7\u6a19\u30b5\u30fc\u30d3\u30b9\u30ce\u30fc\u30c9\u30c7\u30fc\u30bf\u3092\u66f4\u65b0\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\:\n{0}\u3002
Case.exceptionMessage.deletionInterrupted=\u30b1\u30fc\u30b9 {0} \u306e\u524a\u9664\u304c\u53d6\u308a\u6d88\u3055\u308c\u307e\u3057\u305f\u3002
Case.exceptionMessage.emptyCaseDir=\u30b1\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u30d1\u30b9\u3092\u6307\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
Case.exceptionMessage.emptyCaseName=\u30b1\u30fc\u30b9\u540d\u3092\u6307\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
Case.exceptionMessage.errorsDeletingCase=\u30b1\u30fc\u30b9\u306e\u524a\u9664\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u8a73\u7d30\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30ed\u30b0\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002
# {0} - \u4f8b\u5916\u30e1\u30c3\u30bb\u30fc\u30b8
Case.exceptionMessage.execExceptionWrapperMessage={0}
# {0} - \u4f8b\u5916\u30e1\u30c3\u30bb\u30fc\u30b8
Case.exceptionMessage.failedToConnectToCoordSvc=\u5ea7\u6a19\u30b5\u30fc\u30d3\u30b9\u306b\u63a5\u7d9a\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f:\n{0}.
# {0} - \u4f8b\u5916\u30e1\u30c3\u30bb\u30fc\u30b8
Case.exceptionMessage.failedToFetchCoordSvcNodeData=\u5ea7\u6a19\u30b5\u30fc\u30d3\u30b9\u30ce\u30fc\u30c9\u30c7\u30fc\u30bf\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f:\n{0}\u3002
# {0} - \u4f8b\u5916\u30e1\u30c3\u30bb\u30fc\u30b8
Case.exceptionMessage.failedToLockCaseForDeletion=\u524a\u9664\u5bfe\u8c61\u306e\u30b1\u30fc\u30b9\u3092\u6392\u4ed6\u30ed\u30c3\u30af\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f:\n{0}\u3002
# {0} - \u4f8b\u5916\u30e1\u30c3\u30bb\u30fc\u30b8
Case.exceptionMessage.failedToReadMetadata=\u30b1\u30fc\u30b9\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\u3067\u3057\u305f:\n{0}\u3002
Case.exceptionMessage.failedToConnectToCoordSvc=\u5ea7\u6a19\u30b5\u30fc\u30d3\u30b9\u306b\u63a5\u7d9a\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\:\n{0}.
Case.exceptionMessage.failedToFetchCoordSvcNodeData=\u5ea7\u6a19\u30b5\u30fc\u30d3\u30b9\u30ce\u30fc\u30c9\u30c7\u30fc\u30bf\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\:\n{0}\u3002
Case.exceptionMessage.failedToLockCaseForDeletion=\u524a\u9664\u5bfe\u8c61\u306e\u30b1\u30fc\u30b9\u3092\u6392\u4ed6\u30ed\u30c3\u30af\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\:\n{0}\u3002
Case.exceptionMessage.failedToReadMetadata=\u30b1\u30fc\u30b9\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\u3067\u3057\u305f\:\n{0}\u3002
Case.exceptionMessage.metadataUpdateError=\u30b1\u30fc\u30b9\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u66f4\u65b0\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
# {0} - \u4f8b\u5916\u30e1\u30c3\u30bb\u30fc\u30b8
Case.exceptionMessage.unsupportedSchemaVersionMessage=\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u306a\u3044\u30b1\u30fc\u30b9\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30b9\u30ad\u30fc\u30de\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u3059:\n{0}\u3002
Case.exceptionMessage.unsupportedSchemaVersionMessage=\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u306a\u3044\u30b1\u30fc\u30b9\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30b9\u30ad\u30fc\u30de\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u3059\:\n{0}\u3002
Case.getCurCase.exception.noneOpen=\u73fe\u5728\u306e\u30b1\u30fc\u30b9\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3002\u30b1\u30fc\u30b9\u304c\u958b\u304b\u308c\u3066\u3044\u307e\u305b\u3093\!
Case.metaDataFileCorrupt.exception.msg=\u30b1\u30fc\u30b9\u30e1\u30bf\u30c7\u30fc\u30bf\u30d5\u30a1\u30a4\u30eb(.aut)\u304c\u7834\u640d\u3057\u3066\u3044\u307e\u3059\u3002
Case.open.exception.multiUserCaseNotEnabled=\u30de\u30eb\u30c1\u30e6\u30fc\u30b6\u30fc\u30b1\u30fc\u30b9\u304c\u6709\u52b9\u3067\u306a\u3044\u5834\u5408\u306f\u30de\u30eb\u30c1\u30e6\u30fc\u30b6\u30fc\u30b1\u30fc\u30b9\u3092\u958b\u3051\u307e\u305b\u3093\u3002[\u30c4\u30fc\u30eb]\u3001[\u30aa\u30d7\u30b7\u30e7\u30f3]\u3001[\u30de\u30eb\u30c1\u30e6\u30fc\u30b6\u30fc] \u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002
Case.open.msgDlg.updated.msg=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30b9\u30ad\u30fc\u30de\u3092\u66f4\u65b0\u3057\u307e\u3057\u305f\u3002\n\u6b21\u306e\u30d1\u30b9\u3092\u6301\u3064\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30b3\u30d4\u30fc\u3092\u4f5c\u6210\u3057\u307e\u3057\u305f\:\n {0}
Case.open.msgDlg.updated.title=\u30b1\u30fc\u30b9\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30b9\u30ad\u30fc\u30de\u306e\u66f4\u65b0
Case.openFileSystems.openingImage=\u753b\u50cf\u306e\u3059\u3079\u3066\u306e\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u3092\u958b\u304f\uff1a{0}\u2026
Case.openFileSystems.retrievingImages=\u30b1\u30fc\u30b9\u306e\u753b\u50cf\u3092\u53d6\u5f97\u4e2d\uff1a{0}\u2026
Case.progressIndicatorCancelButton.label=\u53d6\u308a\u6d88\u3057
Case.progressIndicatorTitle.closingCase=\u30b1\u30fc\u30b9\u3092\u9589\u3058\u3066\u3044\u307e\u3059
Case.progressIndicatorTitle.creatingCase=\u30b1\u30fc\u30b9\u3092\u4f5c\u6210\u4e2d\u3067\u3059
@ -82,43 +123,62 @@ Case.progressMessage.settingUpNetworkCommunications=\u30cd\u30c3\u30c8\u30ef\u30
Case.progressMessage.shuttingDownNetworkCommunications=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u901a\u4fe1\u3092\u30b7\u30e3\u30c3\u30c8\u30c0\u30a6\u30f3\u4e2d\u3067\u3059...
Case.progressMessage.switchingLogDirectory=\u30ed\u30b0\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u3092\u5207\u308a\u63db\u3048\u4e2d\u3067\u3059...
Case.progressMessage.updatingCaseNodeData=\u5ea7\u6a19\u30b5\u30fc\u30d3\u30b9\u30ce\u30fc\u30c9\u30c7\u30fc\u30bf\u306e\u66f4\u65b0\u4e2d\u3067\u3059...
# {0} - serviceName
Case.serviceCloseResourcesProgressIndicator.title={0} \u30b1\u30fc\u30b9\u30ea\u30bd\u30fc\u30b9\u3092\u9589\u3058\u3066\u3044\u307e\u3059
# {0} - \u30b5\u30fc\u30d3\u30b9\u540d
Case.serviceOpenCaseResourcesProgressIndicator.cancellingMessage={0} \u306b\u3088\u3063\u3066\u30b1\u30fc\u30b9\u30ea\u30bd\u30fc\u30b9\u3092\u958b\u304f\u64cd\u4f5c\u304c\u53d6\u308a\u6d88\u3055\u308c\u307e\u3057\u305f...
# {0} - \u30b5\u30fc\u30d3\u30b9\u540d
Case.serviceOpenCaseResourcesProgressIndicator.title={0} \u30b1\u30fc\u30b9\u30ea\u30bd\u30fc\u30b9\u3092\u958b\u3044\u3066\u3044\u307e\u3059
# {0} - \u30b5\u30fc\u30d3\u30b9\u540d
Case.servicesException.notificationTitle={0} \u30a8\u30e9\u30fc
# {0} - \u30b5\u30fc\u30d3\u30b9\u540d
# {1} - \u4f8b\u5916\u30e1\u30c3\u30bb\u30fc\u30b8
Case.servicesException.serviceResourcesCloseError={0} \u30b5\u30fc\u30d3\u30b9\u306e\u6b21\u306e\u30b1\u30fc\u30b9\u30ea\u30bd\u30fc\u30b9\u3092\u9589\u3058\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f: {1}
Case_caseType_multiUser=\u30de\u30eb\u30c1\u30e6\u30fc\u30b6\u30fc\u30b1\u30fc\u30b9
Case_caseType_singleUser=\u30b7\u30f3\u30b0\u30eb\u30e6\u30fc\u30b6\u30fc\u30b1\u30fc\u30b9
Case.servicesException.serviceResourcesCloseError={0} \u30b5\u30fc\u30d3\u30b9\u306e\u6b21\u306e\u30b1\u30fc\u30b9\u30ea\u30bd\u30fc\u30b9\u3092\u9589\u3058\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\: {1}
Case.updateCaseName.exception.msg=\u30b1\u30fc\u30b9\u540d\u306e\u66f4\u65b0\u3092\u8a66\u884c\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
Case.updateCaseNum.exception.msg=\u30b1\u30fc\u30b9\u756a\u53f7\u306e\u66f4\u65b0\u3092\u8a66\u884c\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
Case.updateExaminer.exception.msg=\u8abf\u67fb\u54e1\u306e\u66f4\u65b0\u3092\u8a66\u884c\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
CaseCreateAction.msgDlg.cantCreateCase.msg=\u30b1\u30fc\u30b9\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093
CaseDeleteAction.closeConfMsg.text=\u3053\u306e\u30b1\u30fc\u30b9\u3092\u9589\u3058\u3066\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? \n\u30b1\u30fc\u30b9\u540d\: {0}\n\u30b1\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\: {1}
CaseDeleteAction.closeConfMsg.title=\u8b66\u544a\: \u73fe\u5728\u306e\u30b1\u30fc\u30b9\u3092\u9589\u3058\u3066\u3044\u307e\u3059
CaseDeleteAction.msgDlg.caseDelete.msg=\u30b1\u30fc\u30b9 {0} \u3092\u524a\u9664\u3057\u307e\u3057\u305f\u3002
CaseDeleteAction.msgDlg.fileInUse.msg=\u5225\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u304c\u3053\u306e\u30d5\u30a9\u30eb\u30c0\u30fc\u307e\u305f\u306f\u3053\u306e\u30d5\u30a9\u30eb\u30c0\u30fc\u5185\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u3044\u3066\u3044\u308b\u305f\u3081\u3001\u524a\u9664\u64cd\u4f5c\u3092\u5b8c\u5168\u306b\u5b8c\u4e86\u3067\u304d\u307e\u305b\u3093\u3002\n\n\u30d5\u30a9\u30eb\u30c0\u30fc\u3068\u30d5\u30a1\u30a4\u30eb\u3092\u9589\u3058\u3066\u3082\u3046\u4e00\u5ea6\u304a\u8a66\u3057\u306b\u306a\u308b\u304b\u3001\u624b\u52d5\u3067\u30b1\u30fc\u30b9\u3092\u524a\u9664\u3067\u304d\u307e\u3059\u3002
CaseDeleteAction.msgDlg.fileInUse.title=\u30a8\u30e9\u30fc\: \u30d5\u30a9\u30eb\u30c0\u30fc\u306f\u4f7f\u7528\u4e2d\u3067\u3059
CaseDetailsAction.window.title=\u30b1\u30fc\u30b9\u8a73\u7d30
CaseDetailsPanel.caseDirLabel.text=\u30b1\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\:
CaseDetailsPanel.caseNameLabel.text=\u30b1\u30fc\u30b9\u540d\:
CaseDetailsPanel.caseNumberLabel.text=\u30b1\u30fc\u30b9\u756a\u53f7\:
CaseDetailsPanel.casePanel.border.title=\u30b1\u30fc\u30b9
CaseDetailsPanel.examinerLabel.text=\u540d\u524d:
CaseDetailsPanel.crDateLabel.text=\u4f5c\u6210\u65e5\:
CaseDetailsPanel.examinerLabel.text=\u540d\u524d\:
CaseDetailsPanel.examinerPanel.border.title=\u8abf\u67fb\u54e1
CaseDetailsPanel.lbCaseUUIDLabel.text=\u30b1\u30fc\u30b9UUID:
CaseDetailsPanel.lbExaminerEmailLabel.text=\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9:
CaseDetailsPanel.lbExaminerPhoneLabel.text=\u96fb\u8a71\u756a\u53f7:
CaseDetailsPanel.lbNotesLabel.text=\u5099\u8003:
CaseDetailsPanel.lbOrganizationNameLabel.text=\u540d\u524d:
CaseDetailsPanel.lbPointOfContactEmailLabel.text=\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9:
CaseDetailsPanel.lbPointOfContactNameLabel.text=\u9023\u7d61\u5148:
CaseDetailsPanel.lbPointOfContactPhoneLabel.text=\u96fb\u8a71\u756a\u53f7:
CaseDetailsPanel.lbCaseUUIDLabel.text=\u30b1\u30fc\u30b9UUID\:
CaseDetailsPanel.lbDbName.text=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u540d\:
CaseDetailsPanel.lbDbType.text=\u30b1\u30fc\u30b9\u30bf\u30a4\u30d7\:
CaseDetailsPanel.lbExaminerEmailLabel.text=\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\:
CaseDetailsPanel.lbExaminerPhoneLabel.text=\u96fb\u8a71\u756a\u53f7\:
CaseDetailsPanel.lbNotesLabel.text=\u5099\u8003\:
CaseDetailsPanel.lbOrganizationNameLabel.text=\u540d\u524d\:
CaseDetailsPanel.lbPointOfContactEmailLabel.text=\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\:
CaseDetailsPanel.lbPointOfContactNameLabel.text=\u9023\u7d61\u5148\:
CaseDetailsPanel.lbPointOfContactPhoneLabel.text=\u96fb\u8a71\u756a\u53f7\:
CaseDetailsPanel.pnOrganization.border.title=\u7d44\u7e54
CaseInformationPanel.caseDetails.header=\u8a73\u7d30
CaseInformationPanel.closeButton.text=\u9589\u3058\u308b
CaseInformationPanel.editDetailsButton.text=\u8a73\u7d30\u3092\u7de8\u96c6
CaseInformationPanel.editDetailsDialog.title=\u30b1\u30fc\u30b9\u8a73\u7d30\u3092\u7de8\u96c6
CaseOpenAction.autFilter.title={0} \u30b1\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb ( {1})
CaseOpenAction.msgDlg.cantOpenCase.title=\u30b1\u30fc\u30b9\u3092\u958b\u3044\u3066\u3044\u308b\u9593\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f
CTL_AddImage=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3092\u8ffd\u52a0
CTL_AddImageButton=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3092\u8ffd\u52a0
CTL_CaseCloseAct=\u30b1\u30fc\u30b9\u3092\u9589\u3058\u308b
CTL_CaseNewAction=\u65b0\u898f\u30b1\u30fc\u30b9
CTL_CaseDetailsAction=\u30b1\u30fc\u30b9\u8a73\u7d30
CTL_CaseDeleteAction=\u30b1\u30fc\u30b9\u3092\u524a\u9664
CTL_CaseOpenAction=\u30b1\u30fc\u30b9\u3092\u958b\u304f
CTL_UnpackagePortableCaseAction=\u30dd\u30fc\u30bf\u30d6\u30eb\u30b1\u30fc\u30b9\u3092\u958b\u5c01
CasePropertiesForm.imagesTable.columnModel.title0=\u30d1\u30b9
CasePropertiesForm.imagesTable.columnModel.title1=\u524a\u9664
Case_caseType_multiUser=\u30de\u30eb\u30c1\u30e6\u30fc\u30b6\u30fc\u30b1\u30fc\u30b9
Case_caseType_singleUser=\u30b7\u30f3\u30b0\u30eb\u30e6\u30fc\u30b6\u30fc\u30b1\u30fc\u30b9
CloseCaseWhileIngesting.Warning=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u306e\u5b9f\u884c\u4e2d\u3067\u3059\u3002\u30b1\u30fc\u30b9\u3092\u9589\u3058\u3066\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
CloseCaseWhileIngesting.Warning.title=\u8b66\u544a\: \u3053\u308c\u306b\u3088\u308a\u73fe\u5728\u306e\u30b1\u30fc\u30b9\u304c\u9589\u3058\u307e\u3059\u3002
CollaborationMonitor.addingDataSourceStatus.msg={0} \u304c\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3092\u8ffd\u52a0\u4e2d\u3067\u3059
CollaborationMonitor.analyzingDataSourceStatus.msg={0} \u5206\u6790\u4e2d {1}
CueBannerPanel.autopsyLogo.text=
CueBannerPanel.closeButton.text=\u9589\u3058\u308b
CueBannerPanel.newCaseButton.text=
CueBannerPanel.newCaseLabel.text=\u65b0\u898f\u30b1\u30fc\u30b9
CueBannerPanel.openCaseButton.text=
CueBannerPanel.openCaseLabel.text=\u30b1\u30fc\u30b9\u3092\u958b\u304f
CueBannerPanel.openRecentCaseButton.text=
CueBannerPanel.openRecentCaseLabel.text=\u6700\u8fd1\u306e\u30b1\u30fc\u30b9\u3092\u958b\u304f
CueBannerPanel.title.text=\u6700\u8fd1\u306e\u30b1\u30fc\u30b9\u3092\u958b\u304f
EditOptionalCasePropertiesPanel.cancelButton.text=\u53d6\u308a\u6d88\u3057
EditOptionalCasePropertiesPanel.saveButton.text=\u4fdd\u5b58
GeneralFilter.encaseImageDesc.text=\u30a4\u30e1\u30fc\u30b8(*.e01)\u3092\u5305\u542b
@ -126,10 +186,29 @@ GeneralFilter.executableDesc.text=\u5b9f\u884c\u53ef\u80fd\u30d5\u30a1\u30a4\u30
GeneralFilter.graphicImageDesc.text=\u30a4\u30e1\u30fc\u30b8(*.png, *.jpg, *.jpeg, *.gif, *.bmp)
GeneralFilter.rawImageDesc.text=\u30ed\u30fc\u30a4\u30e1\u30fc\u30b8(*.img, *.dd, *.001, *.aa, *.raw, *.bin)
GeneralFilter.virtualMachineImageDesc.text=\u4eee\u60f3\u30de\u30b7\u30f3(*.vmdk, *.vhd)
ImageDSProcessor.allDesc.text=\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u3059\u3079\u3066\u306e\u30bf\u30a4\u30d7
ImageDSProcessor.dsType.text=\u30c7\u30a3\u30b9\u30af\u30a4\u30e1\u30fc\u30b8\u307e\u305f\u306fVM\u30d5\u30a1\u30a4\u30eb
ImageFilePanel.000.confirmationMessage=\u9078\u629e\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u306e\u62e1\u5f35\u5b50\u306f .001 \u3067\u3059\u304c\u3001\u30ed\u30fc\u30a4\u30e1\u30fc\u30b8\u306e\u30b7\u30fc\u30b1\u30f3\u30b9\u306b .000\u30d5\u30a1\u30a4\u30eb\u304c\u5b58\u5728\u3057\u307e\u3059\u3002\n\u9078\u629e\u3057\u305f .001\u30d5\u30a1\u30a4\u30eb\u306e\u4ee3\u308f\u308a\u306b\u3001.000\u30d5\u30a1\u30a4\u30eb\u3092\u8d77\u70b9\u3068\u3057\u3066\u4f7f\u7528\u3059\u3079\u304d\u3067\u3059\u304b?\n
ImageFilePanel.browseButton.text=\u53c2\u7167
ImageFilePanel.descLabel.text=(\u4e00\u90e8\u306e\u30c7\u30fc\u30bf\u304c\u691c\u7d22\u3055\u308c\u306a\u304f\u3066\u3082\u3001\u7d50\u679c\u3092\u3088\u308a\u901f\u304f\u53d6\u5f97\u3057\u307e\u3059)
ImageFilePanel.errorLabel.text=\u30a8\u30e9\u30fc\u30e9\u30d9\u30eb
ImageFilePanel.hashValuesLabel.text=\u30cf\u30c3\u30b7\u30e5\u5024(\u4efb\u610f)\:
ImageFilePanel.hashValuesNoteLabel.text=\u6ce8\: \u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u8ffd\u52a0\u6642\u306b\u3053\u308c\u3089\u306e\u5024\u306f\u691c\u8a3c\u3055\u308c\u307e\u305b\u3093\u3002
ImageFilePanel.md5HashLabel.text=MD5\:
ImageFilePanel.md5HashTextField.text=
ImageFilePanel.moduleErr=\u30e2\u30b8\u30e5\u30fc\u30eb\u30a8\u30e9\u30fc
ImageFilePanel.moduleErr.msg=ImageFilePanel\u66f4\u65b0\u306e\u30ea\u30c3\u30b9\u30f3\u4e2d\u306b\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u30a8\u30e9\u30fc\u3092\u767a\u751f\u3055\u305b\u307e\u3057\u305f\u3002\u30ed\u30b0\u3092\u78ba\u8a8d\u3057\u3066\u3069\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u5224\u65ad\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u4e00\u90e8\u306e\u30c7\u30fc\u30bf\u304c\u4e0d\u5b8c\u5168\u3067\u3042\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\n
ImageFilePanel.validatePanel.dataSourceOnCDriveError=\u8b66\u544a: \u30de\u30eb\u30c1\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u306e\u30d1\u30b9\u306f"C:" \u30c9\u30e9\u30a4\u30d6\u306b\u3042\u308a\u307e\u3059\u3002
ImageFilePanel.noFatOrphansCheckbox.text=\u5b64\u7acb\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u3092\u7121\u8996
ImageFilePanel.noFatOrphansCheckbox.toolTipText=
ImageFilePanel.pathLabel.text=\u30d1\u30b9\:
ImageFilePanel.pathTextField.text=
ImageFilePanel.sectorSizeLabel.text=\u30bb\u30af\u30bf\u30fc\u30b5\u30a4\u30ba\:
ImageFilePanel.sha1HashLabel.text=SHA-1\:
ImageFilePanel.sha1HashTextField.text=
ImageFilePanel.sha256HashLabel.text=SHA-256\:
ImageFilePanel.sha256HashTextField.text=
ImageFilePanel.timeZoneLabel.text=\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\:
ImageFilePanel.validatePanel.dataSourceOnCDriveError=\u8b66\u544a\: \u30de\u30eb\u30c1\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u306e\u30d1\u30b9\u306f"C\:" \u30c9\u30e9\u30a4\u30d6\u306b\u3042\u308a\u307e\u3059\u3002
ImageFilePanel.validatePanel.invalidMD5=\u7121\u52b9\u306aMD5\u30cf\u30c3\u30b7\u30e5
ImageFilePanel.validatePanel.invalidSHA1=\u7121\u52b9\u306aSHA1\u30cf\u30c3\u30b7\u30e5
ImageFilePanel.validatePanel.invalidSHA256=\u7121\u52b9\u306aSHA256\u30cf\u30c3\u30b7\u30e5
@ -138,320 +217,207 @@ IngestJobInfoPanel.IngestJobTableModel.IngestStatus.header=\u30a4\u30f3\u30b8\u3
IngestJobInfoPanel.IngestJobTableModel.StartTime.header=\u958b\u59cb\u6642\u523b
IngestJobInfoPanel.IngestModuleTableModel.ModuleName.header=\u30e2\u30b8\u30e5\u30fc\u30eb\u540d
IngestJobInfoPanel.IngestModuleTableModel.ModuleVersion.header=\u30e2\u30b8\u30e5\u30fc\u30eb\u30d0\u30fc\u30b8\u30e7\u30f3
IngestJobInfoPanel.jLabel1.text=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb
IngestJobInfoPanel.jLabel2.text=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30b8\u30e7\u30d6
IngestJobInfoPanel.loadIngestJob.error.text=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30b8\u30e7\u30d6\u3092\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\u3067\u3057\u305f\u3002
IngestJobInfoPanel.loadIngestJob.error.title=\u8aad\u307f\u8fbc\u307f\u5931\u6557
IntervalErrorReport.ErrorText=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u30a8\u30e9\u30fc
IntervalErrorReport.NewIssues=\u65b0\u898f\u554f\u984c
IntervalErrorReport.TotalIssues=\u554f\u984c\u306e\u5408\u8a08
LocalDiskDSProcessor.dsType.text=\u30ed\u30fc\u30ab\u30eb\u30c7\u30a3\u30b9\u30af
LocalDiskPanel.browseButton.text=\u53c2\u7167
LocalDiskPanel.changeDatabasePathCheckbox.text=\u5b8c\u4e86\u6642\u306bVHD\u30d5\u30a1\u30a4\u30eb\u3092\u4f7f\u7528\u3059\u308b\u305f\u3081\u306b\u30b1\u30fc\u30b9\u3092\u66f4\u65b0
LocalDiskPanel.copyImageCheckbox.text=\u30c9\u30e9\u30a4\u30d6\u306e\u5206\u6790\u4e2d\u306bVHD\u30a4\u30e1\u30fc\u30b8\u3092\u4f5c\u6210
LocalDiskPanel.descLabel.text=(\u4e00\u90e8\u306e\u30c7\u30fc\u30bf\u304c\u691c\u7d22\u3055\u308c\u306a\u304f\u3066\u3082\u3001\u7d50\u679c\u3092\u3088\u308a\u901f\u304f\u53d6\u5f97\u3057\u307e\u3059)
LocalDiskPanel.errorMessage.noOpenCaseBody=LocalDiskPanel\u30ea\u30b9\u30ca\u30fc\u304c\u958b\u3044\u3066\u3044\u308b\u30b1\u30fc\u30b9\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
LocalDiskPanel.errorMessage.noOpenCaseTitle=\u958b\u3044\u3066\u3044\u308b\u30b1\u30fc\u30b9\u306f\u3042\u308a\u307e\u305b\u3093
LocalDiskPanel.imageWriterError.directoryNotExist=\u30a8\u30e9\u30fc - \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u306f\u5b58\u5728\u3057\u307e\u305b\u3093\u3002
LocalDiskPanel.imageWriterError.emptyPath=\u30a8\u30e9\u30fc - VHD\u306e\u30d1\u30b9\u3092\u5165\u529b
LocalDiskPanel.imageWriterError.fileExists=Error - VHD\u30d1\u30b9\u304c\u3059\u3067\u306b\u5b58\u5728\u3057\u307e\u3059
LocalDiskPanel.imageWriterError.isDirectory=Error - VHD\u30d1\u30b9\u306f\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u3067\u3059
LocalDiskPanel.imageWriterErrorLabel.text=\u30a8\u30e9\u30fc\u30e9\u30d9\u30eb
LocalDiskPanel.jLabel1.text=\u5b8c\u5168\u306a\u30b3\u30d4\u30fc\u3092\u4f5c\u6210\u3059\u308b\u306b\u306f\u3001\u5c11\u306a\u304f\u3068\u30821\u3064\u306e\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u5b9f\u884c\u3057\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093
LocalDiskPanel.localDiskLabel.text=\u30ed\u30fc\u30ab\u30eb\u30c7\u30a3\u30b9\u30af\:
LocalDiskPanel.localDiskMessage.unspecified=\u672a\u6307\u5b9a
LocalDiskPanel.moduleErrorMessage.body=LocalDiskPanel\u66f4\u65b0\u306e\u30ea\u30c3\u30b9\u30f3\u4e2d\u306b\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u30a8\u30e9\u30fc\u3092\u767a\u751f\u3055\u305b\u307e\u3057\u305f\u3002\u30ed\u30b0\u3092\u78ba\u8a8d\u3057\u3066\u3069\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u5224\u65ad\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u4e00\u90e8\u306e\u30c7\u30fc\u30bf\u304c\u4e0d\u5b8c\u5168\u3067\u3042\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002
LocalDiskPanel.moduleErrorMessage.title=\u30e2\u30b8\u30e5\u30fc\u30eb\u30a8\u30e9\u30fc
LocalDiskPanel.noFatOrphansCheckbox.text=\u5b64\u7acb\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u3092\u7121\u8996
LocalDiskPanel.noFatOrphansCheckbox.toolTipText=
LocalDiskPanel.pathTextField.text=
LocalDiskPanel.sectorSizeLabel.text=\u30bb\u30af\u30bf\u30fc\u30b5\u30a4\u30ba\:
LocalDiskPanel.selectDiskButton.text=\u30c7\u30a3\u30b9\u30af\u3092\u9078\u629e
LocalDiskPanel.timeZoneLabel.text=\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\:
LocalDiskSelectionDialog.cancelButton.text=\u53d6\u308a\u6d88\u3057
LocalDiskSelectionDialog.columnName.diskName=\u30c7\u30a3\u30b9\u30af\u540d
LocalDiskSelectionDialog.columnName.diskSize=\u30c7\u30a3\u30b9\u30af\u30b5\u30a4\u30ba
LocalDiskSelectionDialog.errorLabel.text=\u30a8\u30e9\u30fc\u30e9\u30d9\u30eb
LocalDiskSelectionDialog.errorMessage.disksNotDetected=\u30c7\u30a3\u30b9\u30af\u304c\u691c\u51fa\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u4e00\u90e8\u306e\u30b7\u30b9\u30c6\u30e0\u3067\u306f\u7ba1\u7406\u8005\u6a29\u9650(\u307e\u305f\u306f\u300c\u7ba1\u7406\u8005\u3068\u3057\u3066\u5b9f\u884c\u300d)\u304c\u5fc5\u8981\u3067\u3059\u3002
LocalDiskSelectionDialog.errorMessage.drivesNotDetected=\u30ed\u30fc\u30ab\u30eb\u30c9\u30e9\u30a4\u30d6\u304c\u691c\u51fa\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u3053\u306eOS\u3067\u306f\u81ea\u52d5\u691c\u51fa\u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u306a\u3044\u304b\u3001\u7ba1\u7406\u8005\u6a29\u9650\u304c\u5fc5\u8981\u3067\u3059
LocalDiskSelectionDialog.errorMessage.someDisksNotDetected=\u4e00\u90e8\u306e\u30c7\u30a3\u30b9\u30af\u304c\u691c\u51fa\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u4e00\u90e8\u306e\u30b7\u30b9\u30c6\u30e0\u3067\u306f\u7ba1\u7406\u8005\u6a29\u9650(\u307e\u305f\u306f\u300c\u7ba1\u7406\u8005\u3068\u3057\u3066\u5b9f\u884c\u300d)\u304c\u5fc5\u8981\u3067\u3059\u3002
LocalDiskSelectionDialog.moduleErrorMessage.body=LocalDiskPanel\u66f4\u65b0\u306e\u30ea\u30c3\u30b9\u30f3\u4e2d\u306b\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u30a8\u30e9\u30fc\u3092\u767a\u751f\u3055\u305b\u307e\u3057\u305f\u3002\u30ed\u30b0\u3092\u78ba\u8a8d\u3057\u3066\u3069\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u5224\u65ad\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u4e00\u90e8\u306e\u30c7\u30fc\u30bf\u304c\u4e0d\u5b8c\u5168\u3067\u3042\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002
LocalDiskSelectionDialog.moduleErrorMessage.title=\u30e2\u30b8\u30e5\u30fc\u30eb\u30a8\u30e9\u30fc
LocalDiskSelectionDialog.okButton.text=OK
LocalDiskSelectionDialog.refreshLocalDisksButton.text=\u30ed\u30fc\u30ab\u30eb\u30c7\u30a3\u30b9\u30af\u3092\u66f4\u65b0
LocalDiskSelectionDialog.selectLocalDiskLabel.text=\u30ed\u30fc\u30ab\u30eb\u30c7\u30a3\u30b9\u30af\u3092\u9078\u629e\:
LocalDiskSelectionDialog.tableMessage.loading=\u30ed\u30fc\u30ab\u30eb\u30c7\u30a3\u30b9\u30af\u3092\u8aad\u307f\u8fbc\u307f\u4e2d\u3067\u3059...
LocalDiskSelectionDialog.tableMessage.noDrives=\u30a2\u30af\u30bb\u30b9\u53ef\u80fd\u306a\u30c9\u30e9\u30a4\u30d6\u306f\u3042\u308a\u307e\u305b\u3093
LocalDiskSelectionDialog.title=\u30ed\u30fc\u30ab\u30eb\u30c7\u30a3\u30b9\u30af\u3092\u9078\u629e
LocalFilesDSProcessor.dsType=\u8ad6\u7406\u30d5\u30a1\u30a4\u30eb
LocalFilesDSProcessor.logicalEvidenceFilter.desc=\u8ad6\u7406\u8a3c\u62e0\u30d5\u30a1\u30a4\u30eb(L01)
LocalFilesPanel.pathValidation.dataSourceOnCDriveError=\u8b66\u544a: \u30de\u30eb\u30c1\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u306e\u30d1\u30b9\u306f"C:" \u30c9\u30e9\u30a4\u30d6\u306b\u3042\u308a\u307e\u3059\u3002
LocalFilesPanel.pathValidation.getOpenCase=\u8b66\u544a: \u958b\u3044\u3066\u3044\u308b\u30b1\u30fc\u30b9\u306e\u53d6\u5f97\u4e2d\u306b\u4f8b\u5916\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
LocalFilesDSProcessor.toString.text=\u8ad6\u7406\u30d5\u30a1\u30a4\u30eb
LocalFilesPanel.changeNameButton.text=\u5909\u66f4
LocalFilesPanel.clearButton.text=\u6d88\u53bb
LocalFilesPanel.clearButton.toolTipText=\u73fe\u5728\u9078\u629e\u3055\u308c\u3066\u3044\u308b\u30ed\u30fc\u30ab\u30eb\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9\u3092\u6d88\u53bb
LocalFilesPanel.contentType.text=\u30ed\u30fc\u30ab\u30eb
LocalFilesPanel.displayNameLabel.text=\u8ad6\u7406\u30d5\u30a1\u30a4\u30eb\u30bb\u30c3\u30c8\u8868\u793a\u540d\: \u30c7\u30d5\u30a9\u30eb\u30c8
LocalFilesPanel.errorLabel.text=\u30a8\u30e9\u30fc\u30e9\u30d9\u30eb
LocalFilesPanel.localFileChooser.approveButtonText=\u9078\u629e
LocalFilesPanel.localFileChooser.approveButtonToolTipText=
LocalFilesPanel.localFileChooser.dialogTitle=\u30ed\u30fc\u30ab\u30eb\u30d5\u30a1\u30a4\u30eb\u307e\u305f\u306f\u30d5\u30a9\u30eb\u30c0\u30fc\u3092\u9078\u629e
LocalFilesPanel.moduleErr=\u30e2\u30b8\u30e5\u30fc\u30eb\u30a8\u30e9\u30fc
LocalFilesPanel.moduleErr.msg=LocalFilesPanel\u66f4\u65b0\u306e\u30ea\u30c3\u30b9\u30f3\u4e2d\u306b\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u30a8\u30e9\u30fc\u3092\u767a\u751f\u3055\u305b\u307e\u3057\u305f\u3002\u30ed\u30b0\u3092\u78ba\u8a8d\u3057\u3066\u3069\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u5224\u65ad\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u4e00\u90e8\u306e\u30c7\u30fc\u30bf\u304c\u4e0d\u5b8c\u5168\u3067\u3042\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002
LocalFilesPanel.pathValidation.dataSourceOnCDriveError=\u8b66\u544a\: \u30de\u30eb\u30c1\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u306e\u30d1\u30b9\u306f"C\:" \u30c9\u30e9\u30a4\u30d6\u306b\u3042\u308a\u307e\u3059\u3002
LocalFilesPanel.pathValidation.getOpenCase=\u8b66\u544a\: \u958b\u3044\u3066\u3044\u308b\u30b1\u30fc\u30b9\u306e\u53d6\u5f97\u4e2d\u306b\u4f8b\u5916\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
LocalFilesPanel.selectButton.actionCommand=\u8ffd\u52a0
LocalFilesPanel.selectButton.text=\u8ffd\u52a0
LocalFilesPanel.selectButton.toolTipText=\u30ed\u30fc\u30ab\u30eb\u30d5\u30a1\u30a4\u30eb\u304a\u3088\u3073\u30d5\u30a9\u30eb\u30c0\u30fc\u3092\u8ad6\u7406\u30d5\u30a1\u30a4\u30eb\u3068\u3057\u3066\u8ffd\u52a0
LocalFilesPanel.selectedPaths.toolTipText=
LogicalEvidenceFilePanel.errorLabel.text=\u30a8\u30e9\u30fc\u30e9\u30d9\u30eb
LogicalEvidenceFilePanel.logicalEvidenceFileChooser.approveButtonText=\u9078\u629e
LogicalEvidenceFilePanel.logicalEvidenceFileChooser.approveButtonToolTipText=
LogicalEvidenceFilePanel.logicalEvidenceFileChooser.dialogTitle=\u30ed\u30fc\u30ab\u30eb\u30d5\u30a1\u30a4\u30eb\u307e\u305f\u306f\u30d5\u30a9\u30eb\u30c0\u30fc\u3092\u9078\u629e
LogicalEvidenceFilePanel.logicalEvidencePathField.text=
LogicalEvidenceFilePanel.moduleErr.msg=LogicalEvidenceFilePanel\u66f4\u65b0\u306e\u30ea\u30c3\u30b9\u30f3\u4e2d\u306b\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u30a8\u30e9\u30fc\u3092\u767a\u751f\u3055\u305b\u307e\u3057\u305f\u3002\u30ed\u30b0\u3092\u78ba\u8a8d\u3057\u3066\u3069\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u5224\u65ad\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u4e00\u90e8\u306e\u30c7\u30fc\u30bf\u304c\u4e0d\u5b8c\u5168\u3067\u3042\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002
LogicalEvidenceFilePanel.moduleErr.name=\u30e2\u30b8\u30e5\u30fc\u30eb\u30a8\u30e9\u30fc
LogicalEvidenceFilePanel.pathValidation.dataSourceOnCDriveError=\u8b66\u544a: \u30de\u30eb\u30c1\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u306e\u30d1\u30b9\u306f"C:" \u30c9\u30e9\u30a4\u30d6\u306b\u3042\u308a\u307e\u3059\u3002
LogicalEvidenceFilePanel.pathValidation.getOpenCase.Error=\u8b66\u544a: \u958b\u3044\u3066\u3044\u308b\u30b1\u30fc\u30b9\u306e\u53d6\u5f97\u4e2d\u306b\u4f8b\u5916\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
LogicalEvidenceFilePanel.pathValidation.dataSourceOnCDriveError=\u8b66\u544a\: \u30de\u30eb\u30c1\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u306e\u30d1\u30b9\u306f"C\:" \u30c9\u30e9\u30a4\u30d6\u306b\u3042\u308a\u307e\u3059\u3002
LogicalEvidenceFilePanel.pathValidation.getOpenCase.Error=\u8b66\u544a\: \u958b\u3044\u3066\u3044\u308b\u30b1\u30fc\u30b9\u306e\u53d6\u5f97\u4e2d\u306b\u4f8b\u5916\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
LogicalEvidenceFilePanel.selectButton.actionCommand=\u8ffd\u52a0
LogicalEvidenceFilePanel.selectButton.text=\u9078\u629e
LogicalEvidenceFilePanel.selectButton.toolTipText=\u30ed\u30fc\u30ab\u30eb\u30d5\u30a1\u30a4\u30eb\u304a\u3088\u3073\u30d5\u30a9\u30eb\u30c0\u30fc\u3092\u8ad6\u7406\u30d5\u30a1\u30a4\u30eb\u3068\u3057\u3066\u8ffd\u52a0
LogicalEvidenceFilePanel.validatePanel.nonL01Error.text=\u3053\u3053\u3067\u306f .l01\u30d5\u30a1\u30a4\u30eb\u62e1\u5f35\u5b50\u3092\u6301\u3064\u30d5\u30a1\u30a4\u30eb\u306e\u307f\u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u3059\u3002
LogicalFilesDspPanel.subTypeComboBox.l01FileOption.text=\u8ad6\u7406\u8a3c\u62e0\u30d5\u30a1\u30a4\u30eb(L01)
LogicalFilesDspPanel.subTypeComboBox.localFilesOption.text=\u30ed\u30fc\u30ab\u30eb\u30d5\u30a1\u30a4\u30eb\u304a\u3088\u3073\u30d5\u30a9\u30eb\u30c0\u30fc
Menu/Case/OpenRecentCase=\u6700\u8fd1\u306e\u30b1\u30fc\u30b9\u3092\u958b\u304f
CTL_CaseDeleteAction=\u30b1\u30fc\u30b9\u3092\u524a\u9664
OpenIDE-Module-Name=\u30b1\u30fc\u30b9
NewCaseVisualPanel1.caseNameLabel.text_1=\u30b1\u30fc\u30b9\u540d:
NewCaseVisualPanel1.caseDirLabel.text=\u30d9\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc:
NewCaseVisualPanel1.caseDirBrowseButton.text=\u53c2\u7167
NewCaseVisualPanel1.caseNameTextField.text_1=
NewCaseVisualPanel1.jLabel2.text_1=\u30b1\u30fc\u30b9\u30c7\u30fc\u30bf\u306f\u6b21\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u306b\u683c\u7d0d\u3055\u308c\u307e\u3059:
NewCaseVisualPanel1.caseParentDirTextField.text=
NewCaseVisualPanel1.caseDirTextField.text_1=
CueBannerPanel.autopsyLogo.text=
CueBannerPanel.closeButton.text=\u9589\u3058\u308b
# {0} - caseErrorMessage
OpenMultiUserCaseAction.caseOpeningErrorErrorMsg=\u30b1\u30fc\u30b9\u3092\u958b\u3051\u307e\u305b\u3093\u3067\u3057\u305f: {0}
OpenMultiUserCaseAction.menuItemText=\u30b1\u30fc\u30b9\u3092\u958b\u304f
OpenMultiUserCaseDialog.title=\u30de\u30eb\u30c1\u30e6\u30fc\u30b6\u30fc\u30b1\u30fc\u30b9\u3092\u958b\u304f
OpenRecentCasePanel.cancelButton.text=\u53d6\u308a\u6d88\u3057
OpenRecentCasePanel.jLabel1.text=\u6700\u8fd1\u306e\u30b1\u30fc\u30b9
AddImageErrorsDialog.title=\u30a4\u30e1\u30fc\u30b8\u30ed\u30b0\u3092\u8ffd\u52a0
AddImageErrorsDialog.copyButton.toolTipText=\u30a8\u30e9\u30fc\u3092\u30af\u30ea\u30c3\u30d7\u30dc\u30fc\u30c9\u306b\u30b3\u30d4\u30fc
AddImageErrorsDialog.copyButton.text=\u30b3\u30d4\u30fc
AddImageErrorsDialog.closeButton.toolTipText=\u3053\u306e\u30a6\u30a3\u30f3\u30c9\u30a6\u3092\u9589\u3058\u308b
AddImageErrorsDialog.closeButton.text=\u9589\u3058\u308b
OpenRecentCasePanel.openButton.text=\u958b\u304f
ImageFilePanel.pathLabel.text=\u30d1\u30b9:
ImageFilePanel.browseButton.text=\u53c2\u7167
ImageFilePanel.pathTextField.text=
MissingImageDialog.selectButton.text=\u30a4\u30e1\u30fc\u30b8\u3092\u9078\u629e
MissingImageDialog.titleLabel.text=\u898b\u3064\u304b\u3089\u306a\u3044\u30a4\u30e1\u30fc\u30b8\u3092\u691c\u7d22
MissingImageDialog.cancelButton.text=\u53d6\u308a\u6d88\u3057
AddImageWizardAddingProgressVisual.statusLabel.text=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3092\u30ed\u30fc\u30ab\u30eb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u8ffd\u52a0\u3057\u307e\u3057\u305f\u3002\u30d5\u30a1\u30a4\u30eb\u3092\u5206\u6790\u4e2d\u3067\u3059\u3002
AddImageWizardAddingProgressVisual.progressLabel.text=<\u9032\u6357\u72b6\u6cc1>
AddImageWizardAddingProgressVisual.viewLogButton.text=\u30ed\u30b0\u3092\u8868\u793a
AddImageWizardAddingProgressVisual.subTitle1Label.text=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u306e\u51e6\u7406\u3068\u30ed\u30fc\u30ab\u30eb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3078\u306e\u8ffd\u52a0\u3092\u884c\u3063\u3066\u3044\u307e\u3059\u3002\u7d42\u4e86\u3059\u308b\u3068\u30d5\u30a1\u30a4\u30eb\u5206\u6790\u304c\u958b\u59cb\u3057\u307e\u3059\u3002
ImageFilePanel.timeZoneLabel.text=\u30bf\u30a4\u30e0\u30be\u30fc\u30f3:
ImageFilePanel.noFatOrphansCheckbox.text=\u5b64\u7acb\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u3092\u7121\u8996
ImageFilePanel.noFatOrphansCheckbox.toolTipText=
ImageFilePanel.descLabel.text=(\u4e00\u90e8\u306e\u30c7\u30fc\u30bf\u304c\u691c\u7d22\u3055\u308c\u306a\u304f\u3066\u3082\u3001\u7d50\u679c\u3092\u3088\u308a\u901f\u304f\u53d6\u5f97\u3057\u307e\u3059)
LocalDiskPanel.timeZoneLabel.text=\u30bf\u30a4\u30e0\u30be\u30fc\u30f3:
LocalDiskPanel.noFatOrphansCheckbox.toolTipText=
LocalDiskPanel.noFatOrphansCheckbox.text=\u5b64\u7acb\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u3092\u7121\u8996
LocalDiskPanel.descLabel.text=(\u4e00\u90e8\u306e\u30c7\u30fc\u30bf\u304c\u691c\u7d22\u3055\u308c\u306a\u304f\u3066\u3082\u3001\u7d50\u679c\u3092\u3088\u308a\u901f\u304f\u53d6\u5f97\u3057\u307e\u3059)
MissingImageDialog.ErrorSettingImage=\u30a4\u30e1\u30fc\u30b8\u30d1\u30b9\u306e\u8a2d\u5b9a\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u3082\u3046\u4e00\u5ea6\u304a\u8a66\u3057\u304f\u3060\u3055\u3044\u3002
MissingImageDialog.browseButton.text=\u53c2\u7167
MissingImageDialog.pathNameTextField.text=
AddImageWizardAddingProgressVisual.progressTextArea.border.title=\u30b9\u30c6\u30fc\u30bf\u30b9
AddImageAction.wizard.title=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3092\u8ffd\u52a0
AddImageAction.ingestConfig.ongoingIngest.msg=<html>\u5225\u306e\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3067\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u304c\u9032\u884c\u4e2d\u3067\u3059\u3002\u65b0\u898f\u30bd\u30fc\u30b9\u3092\u4eca\u8ffd\u52a0\u3059\u308b\u3068\u3001\u73fe\u5728\u306e\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u306e\u51e6\u7406\u304c\u9045\u304f\u306a\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002<br />\u7d9a\u884c\u3057\u3066\u65b0\u898f\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3092\u4eca\u3059\u3050\u8ffd\u52a0\u3057\u307e\u3059\u304b?</html>
AddImageAction.ingestConfig.ongoingIngest.title=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u304c\u9032\u884c\u4e2d\u3067\u3059
AddImageTask.run.progress.adding=\u6b21\u3092\u8ffd\u52a0\u4e2d\u3067\u3059: {0}
AddImageTask.interrupt.exception.msg=\u30a4\u30e1\u30fc\u30b8\u8ffd\u52a0\u30d7\u30ed\u30bb\u30b9\u306e\u505c\u6b62\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
AddImageWizardAddingProgressPanel.isValid.focusNext=\u6b21\u3078 >
AddImageWizardAddingProgressPanel.stateStarted.progressBarText=*\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u304c\u5927\u304d\u3044\u5834\u5408\u3001\u3053\u306e\u30d7\u30ed\u30bb\u30b9\u306f\u6642\u9593\u304c\u304b\u304b\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002
AddImageWizardAddingProgressVisual.addingDsComplete.text=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u306e\u8ffd\u52a0\u4e2d - \u5b8c\u4e86
AddImageWizardAddingProgressVisual.getName.text=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3092\u8ffd\u52a0
AddImageWizardAddingProgressVisual.showErrors.critText=*\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u306e\u8ffd\u52a0\u306b\u5931\u6557\u3057\u307e\u3057\u305f(\u91cd\u5927\u306a\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f)\u3002\u6b21\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u30ed\u30b0\u3092\u8868\u793a\u3057\u3066\u304f\u3060\u3055\u3044\u3002
AddImageWizardAddingProgressVisual.showErrors.nonCritText=*\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u304c\u8ffd\u52a0\u3055\u308c\u307e\u3057\u305f(\u91cd\u5927\u306a\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u305b\u3093\u3067\u3057\u305f)\u3002\u6b21\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u30ed\u30b0\u3092\u8868\u793a\u3057\u3066\u304f\u3060\u3055\u3044\u3002
AddImageWizardChooseDataSourcePanel.moveFocusNext=\u6b21\u3078 >
AddImageWizardChooseDataSourceVisual.getName.text=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3092\u9078\u629e
AddImageWizardIngestConfigPanel.dsProcDone.noErrs.text=*\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3092\u8ffd\u52a0\u3057\u307e\u3057\u305f\u3002
AddImageWizardIngestConfigPanel.dsProcDone.errs.text=*\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u306e\u8ffd\u52a0\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
AddImageWizardIngestConfigVisual.getName.text=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u69cb\u6210
AddImageWizardIterator.stepXofN=\u624b\u9806 {0} / {1}
AddLocalFilesTask.localFileAdd.progress.text=\u6b21\u3092\u8ffd\u52a0\u4e2d\u3067\u3059: {0}/{1}
Case.getCurCase.exception.noneOpen=\u73fe\u5728\u306e\u30b1\u30fc\u30b9\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3002\u30b1\u30fc\u30b9\u304c\u958b\u304b\u308c\u3066\u3044\u307e\u305b\u3093\!
Case.open.msgDlg.updated.msg=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30b9\u30ad\u30fc\u30de\u3092\u66f4\u65b0\u3057\u307e\u3057\u305f\u3002\n\u6b21\u306e\u30d1\u30b9\u3092\u6301\u3064\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30b3\u30d4\u30fc\u3092\u4f5c\u6210\u3057\u307e\u3057\u305f:\n {0}
Case.open.msgDlg.updated.title=\u30b1\u30fc\u30b9\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30b9\u30ad\u30fc\u30de\u306e\u66f4\u65b0
Case.checkImgExist.confDlg.doesntExist.msg=\u3053\u306e\u30b1\u30fc\u30b9\u3068\u95a2\u9023\u4ed8\u3051\u3089\u308c\u3066\u3044\u308b\n\
\u30a4\u30e1\u30fc\u30b8\u306e1\u3064\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002\u4eca\u3059\u3050\u691c\u7d22\u3057\u307e\u3059\u304b?\n\
\u4ee5\u524d\u3001\u30a4\u30e1\u30fc\u30b8\u306f\u6b21\u306b\u3042\u308a\u307e\u3057\u305f:\n\
{0}\n\
\u4eca\u5f8c\u3082\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u3092\u53c2\u7167\u3057\u3066\u30ec\u30dd\u30fc\u30c8\u3092\u751f\u6210\u3067\u304d\u307e\u3059\n\
\u305f\u3060\u3057\u3001[\u3044\u3044\u3048] \u3092\u9078\u629e\u3059\u308b\u3068\u3001\u30d5\u30a1\u30a4\u30eb\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u8868\u793a\u3084\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30d7\u30ed\u30bb\u30b9\u306e\u5b9f\u884c\u304c\u884c\u3048\u306a\u304f\u306a\u308a\u307e\u3059\u3002
Case.checkImgExist.confDlg.doesntExist.title=\u30a4\u30e1\u30fc\u30b8\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093
Case.addImg.exception.msg=\u30b1\u30fc\u30b9\u306b\u30a4\u30e1\u30fc\u30b8\u3092\u8ffd\u52a0\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f
Case.updateCaseName.exception.msg=\u30b1\u30fc\u30b9\u540d\u306e\u66f4\u65b0\u3092\u8a66\u884c\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
Case.updateExaminer.exception.msg=\u8abf\u67fb\u54e1\u306e\u66f4\u65b0\u3092\u8a66\u884c\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
Case.updateCaseNum.exception.msg=\u30b1\u30fc\u30b9\u756a\u53f7\u306e\u66f4\u65b0\u3092\u8a66\u884c\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
Case.exception.errGetRootObj=\u30eb\u30fc\u30c8\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
Case.createCaseDir.exception.existNotDir=\u30b1\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3002\u3059\u3067\u306b\u5b58\u5728\u3057\u3001\u6b21\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u3067\u306f\u3042\u308a\u307e\u305b\u3093: {0}
Case.createCaseDir.exception.existCantRW=\u30b1\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3002\u3059\u3067\u306b\u5b58\u5728\u3057\u3001\u6b21\u306e\u8aad\u307f\u8fbc\u307f/\u66f8\u304d\u8fbc\u307f\u304c\u3067\u304d\u307e\u305b\u3093: {0}
Case.createCaseDir.exception.cantCreate=\u30b1\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u3092\u4f5c\u6210\u3067\u304d\u306a\u3044\u304b\u3001\u3059\u3067\u306b\u5b58\u5728\u3057\u3066\u3044\u307e\u3059: {0}
Case.createCaseDir.exception.cantCreateCaseDir=\u6b21\u306e\u30b1\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f: {0}
Case.createCaseDir.exception.cantCreateModDir=\u6b21\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u51fa\u529b\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f: {0}
Case.createCaseDir.exception.cantCreateReportsDir=\u6b21\u306e\u30ec\u30dd\u30fc\u30c8\u51fa\u529b\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f: {0}
Case.CollaborationSetup.FailNotify.ErrMsg=\u3053\u306e\u30b1\u30fc\u30b9\u3067\u9023\u643a\u3057\u3066\u3044\u308b\u53ef\u80fd\u6027\u306e\u3042\u308b\u305d\u306e\u4ed6\u306e\u30ce\u30fc\u30c9\u306b\u63a5\u7d9a\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
Case.CollaborationSetup.FailNotify.Title=\u63a5\u7d9a\u5931\u6557
Case.GetCaseTypeGivenPath.Failure=\u30b1\u30fc\u30b9\u30bf\u30a4\u30d7\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093
Case.metaDataFileCorrupt.exception.msg=\u30b1\u30fc\u30b9\u30e1\u30bf\u30c7\u30fc\u30bf\u30d5\u30a1\u30a4\u30eb(.aut)\u304c\u7834\u640d\u3057\u3066\u3044\u307e\u3059\u3002
Case.deleteReports.deleteFromDiskException.log.msg=\u30c7\u30a3\u30b9\u30af\u304b\u3089\u30ec\u30dd\u30fc\u30c8\u3092\u524a\u9664\u3067\u304d\u307e\u305b\u3093\u3002
Case.deleteReports.deleteFromDiskException.msg=\u30c7\u30a3\u30b9\u30af\u304b\u3089\u30ec\u30dd\u30fc\u30c8 {0} \u3092\u524a\u9664\u3067\u304d\u307e\u305b\u3093\u3002\n{1} \u304b\u3089\u624b\u52d5\u3067\u524a\u9664\u3067\u304d\u307e\u3059
CaseDeleteAction.closeConfMsg.text=\u3053\u306e\u30b1\u30fc\u30b9\u3092\u9589\u3058\u3066\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? \n\
\u30b1\u30fc\u30b9\u540d: {0}\n\
\u30b1\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc: {1}
CaseDeleteAction.closeConfMsg.title=\u8b66\u544a: \u73fe\u5728\u306e\u30b1\u30fc\u30b9\u3092\u9589\u3058\u3066\u3044\u307e\u3059
CaseDeleteAction.msgDlg.fileInUse.msg=\u5225\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u304c\u3053\u306e\u30d5\u30a9\u30eb\u30c0\u30fc\u307e\u305f\u306f\u3053\u306e\u30d5\u30a9\u30eb\u30c0\u30fc\u5185\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u3044\u3066\u3044\u308b\u305f\u3081\u3001\u524a\u9664\u64cd\u4f5c\u3092\u5b8c\u5168\u306b\u5b8c\u4e86\u3067\u304d\u307e\u305b\u3093\u3002\n\n\
\u30d5\u30a9\u30eb\u30c0\u30fc\u3068\u30d5\u30a1\u30a4\u30eb\u3092\u9589\u3058\u3066\u3082\u3046\u4e00\u5ea6\u304a\u8a66\u3057\u306b\u306a\u308b\u304b\u3001\u624b\u52d5\u3067\u30b1\u30fc\u30b9\u3092\u524a\u9664\u3067\u304d\u307e\u3059\u3002
CaseDeleteAction.msgDlg.fileInUse.title=\u30a8\u30e9\u30fc: \u30d5\u30a9\u30eb\u30c0\u30fc\u306f\u4f7f\u7528\u4e2d\u3067\u3059
CaseDeleteAction.msgDlg.caseDelete.msg=\u30b1\u30fc\u30b9 {0} \u3092\u524a\u9664\u3057\u307e\u3057\u305f\u3002
CaseOpenAction.autFilter.title={0} \u30b1\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb ( {1})
CaseCreateAction.msgDlg.cantCreateCase.msg=\u30b1\u30fc\u30b9\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093
IntervalErrorReport.NewIssues=\u65b0\u898f\u554f\u984c
IntervalErrorReport.TotalIssues=\u554f\u984c\u306e\u5408\u8a08
IntervalErrorReport.ErrorText=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u30a8\u30e9\u30fc
CaseDetailsAction.window.title=\u30b1\u30fc\u30b9\u8a73\u7d30
CueBannerPanel.title.text=\u6700\u8fd1\u306e\u30b1\u30fc\u30b9\u3092\u958b\u304f
ImageDSProcessor.dsType.text=\u30c7\u30a3\u30b9\u30af\u30a4\u30e1\u30fc\u30b8\u307e\u305f\u306fVM\u30d5\u30a1\u30a4\u30eb
ImageDSProcessor.allDesc.text=\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u3059\u3079\u3066\u306e\u30bf\u30a4\u30d7
LocalDiskDSProcessor.dsType.text=\u30ed\u30fc\u30ab\u30eb\u30c7\u30a3\u30b9\u30af
LocalFilesDSProcessor.dsType=\u8ad6\u7406\u30d5\u30a1\u30a4\u30eb
LocalFilesDSProcessor.toString.text=\u8ad6\u7406\u30d5\u30a1\u30a4\u30eb
LocalFilesPanel.contentType.text=\u30ed\u30fc\u30ab\u30eb
LocalFilesPanel.moduleErr=\u30e2\u30b8\u30e5\u30fc\u30eb\u30a8\u30e9\u30fc
LocalFilesPanel.moduleErr.msg=LocalFilesPanel\u66f4\u65b0\u306e\u30ea\u30c3\u30b9\u30f3\u4e2d\u306b\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u30a8\u30e9\u30fc\u3092\u767a\u751f\u3055\u305b\u307e\u3057\u305f\u3002\u30ed\u30b0\u3092\u78ba\u8a8d\u3057\u3066\u3069\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u5224\u65ad\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u4e00\u90e8\u306e\u30c7\u30fc\u30bf\u304c\u4e0d\u5b8c\u5168\u3067\u3042\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002
MissingImageDialog.display.title=\u898b\u3064\u304b\u3089\u306a\u3044\u30a4\u30e1\u30fc\u30b8\u3092\u691c\u7d22
MissingImageDialog.cancelButton.text=\u53d6\u308a\u6d88\u3057
MissingImageDialog.confDlg.noFileSel.msg=\u30a4\u30e1\u30fc\u30b8\u30d5\u30a1\u30a4\u30eb\u304c\u9078\u629e\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u30a4\u30e1\u30fc\u30b8\u304c\u898b\u3064\u304b\u3089\u306a\u3044\u307e\u307e\n\u7d42\u4e86\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3057\u3087\u3046\u304b?
MissingImageDialog.confDlg.noFileSel.title=\u30a4\u30e1\u30fc\u30b8\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093
MissingImageDialog.ErrorSettingImage=\u30a4\u30e1\u30fc\u30b8\u30d1\u30b9\u306e\u8a2d\u5b9a\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u3082\u3046\u4e00\u5ea6\u304a\u8a66\u3057\u304f\u3060\u3055\u3044\u3002
NewCaseVisualPanel1.getName.text=\u30b1\u30fc\u30b9\u60c5\u5831
NewCaseVisualPanel1.caseDirBrowse.selectButton.text=\u9078\u629e
MissingImageDialog.display.title=\u898b\u3064\u304b\u3089\u306a\u3044\u30a4\u30e1\u30fc\u30b8\u3092\u691c\u7d22
MissingImageDialog.lbWarning.text=
MissingImageDialog.lbWarning.toolTipText=
MissingImageDialog.pathNameTextField.text=
MissingImageDialog.selectButton.text=\u30a4\u30e1\u30fc\u30b8\u3092\u9078\u629e
MissingImageDialog.titleLabel.text=\u898b\u3064\u304b\u3089\u306a\u3044\u30a4\u30e1\u30fc\u30b8\u3092\u691c\u7d22
NewCaseVisualPanel1.CaseFolderOnCDriveError.text=\u8b66\u544a\: \u30de\u30eb\u30c1\u30e6\u30fc\u30b6\u30fc\u30b1\u30fc\u30b9\u30d5\u30a9\u30eb\u30c0\u30fc\u306e\u30d1\u30b9\u306f "C\:" \u30c9\u30e9\u30a4\u30d6\u306b\u3042\u308a\u307e\u3059
NewCaseVisualPanel1.CaseFolderOnInternalDriveLinuxError.text=\u8b66\u544a\: \u30b1\u30fc\u30b9\u30d5\u30a9\u30eb\u30c0\u30fc\u306e\u30d1\u30b9\u306f\u30bf\u30fc\u30b2\u30c3\u30c8\u30b7\u30b9\u30c6\u30e0\u4e0a\u306b\u3042\u308a\u307e\u3059\u3002\u30de\u30a6\u30f3\u30c8\u3055\u308c\u305f\u30c9\u30e9\u30a4\u30d6\u5185\u306b\u30b1\u30fc\u30b9\u30d5\u30a9\u30eb\u30c0\u30fc\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002
NewCaseVisualPanel1.CaseFolderOnInternalDriveWindowsError.text=\u8b66\u544a\: \u30b1\u30fc\u30b9\u30d5\u30a9\u30eb\u30c0\u30fc\u306e\u30d1\u30b9\u306f "C\:" \u30c9\u30e9\u30a4\u30d6\u306b\u3042\u308a\u307e\u3059\u3002\u30b1\u30fc\u30b9\u30d5\u30a9\u30eb\u30c0\u30fc\u306f\u30bf\u30fc\u30b2\u30c3\u30c8\u30b7\u30b9\u30c6\u30e0\u4e0a\u306b\u4f5c\u6210\u3055\u308c\u307e\u3059
NewCaseVisualPanel1.badCredentials.text=\u4e0d\u6b63\u306a\u30de\u30eb\u30c1\u30e6\u30fc\u30b6\u30fc\u8a2d\u5b9a(\u30c4\u30fc\u30eb]\u3001[\u30aa\u30d7\u30b7\u30e7\u30f3]\u3001[\u30de\u30eb\u30c1\u30e6\u30fc\u30b6\u30fc] \u3092\u53c2\u7167)\u304b\u3001\u30b5\u30fc\u30d3\u30b9\u304c\u30c0\u30a6\u30f3\u3057\u3066\u3044\u307e\u3059\u3002
NewCaseVisualPanel1.caseDataStoredLabel.text_1=\u30b1\u30fc\u30b9\u30c7\u30fc\u30bf\u306f\u6b21\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u306b\u4fdd\u5b58\u3055\u308c\u307e\u3059\uff1a
NewCaseVisualPanel1.caseDirBrowse.selectButton.text=\u9078\u629e
NewCaseVisualPanel1.caseDirBrowseButton.text=\u53c2\u7167
NewCaseVisualPanel1.caseDirLabel.text=\u30d9\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\:
NewCaseVisualPanel1.caseDirTextField.text_1=
NewCaseVisualPanel1.caseNameLabel.text_1=\u30b1\u30fc\u30b9\u540d\:
NewCaseVisualPanel1.caseNameTextField.text_1=
NewCaseVisualPanel1.caseParentDirTextField.text=
NewCaseVisualPanel1.caseParentDirWarningLabel.text=
NewCaseVisualPanel1.caseTypeLabel.text=\u30b1\u30fc\u30b9\u30bf\u30a4\u30d7\:
NewCaseVisualPanel1.getName.text=\u30b1\u30fc\u30b9\u60c5\u5831
NewCaseVisualPanel1.multiUserCaseRadioButton.text=\u30de\u30eb\u30c1\u30e6\u30fc\u30b6\u30fc\t\t
NewCaseVisualPanel1.singleUserCaseRadioButton.text=\u30b7\u30f3\u30b0\u30eb\u30e6\u30fc\u30b6\u30fc
NewCaseVisualPanel2.getName.text=\u4efb\u610f\u60c5\u5831
NewCaseWizardAction.newCase.windowTitle.text=\u65b0\u898f\u30b1\u30fc\u30b9\u60c5\u5831
NewCaseWizardAction.getName.text=\u65b0\u898f\u30b1\u30fc\u30b9\u30a6\u30a3\u30b6\u30fc\u30c9
NewCaseWizardAction.databaseProblem1.text=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3092\u958b\u3051\u307e\u305b\u3093\u3002\u30b1\u30fc\u30b9\u306e\u4f5c\u6210\u3092\u53d6\u308a\u6d88\u3057\u4e2d\u3067\u3059\u3002
NewCaseWizardAction.databaseProblem2.text=\u30a8\u30e9\u30fc
NewCaseWizardPanel1.validate.errMsg.invalidSymbols=\u30b1\u30fc\u30b9\u540d\u306b\u6b21\u306e\u8a18\u53f7\u3092\u542b\u3081\u3089\u308c\u307e\u305b\u3093: \\ / : * ? " &lt; > |
NewCaseWizardPanel1.validate.errMsg.dirExists=\u30b1\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc ''{0}'' \u306f\u3059\u3067\u306b\u5b58\u5728\u3057\u3066\u3044\u307e\u3059\u3002
NewCaseWizardPanel1.validate.confMsg.createDir.msg=\u30d9\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc "{0}" \u306f\u5b58\u5728\u3057\u307e\u305b\u3093\u3002\n\n\
\u305d\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u3092\u4f5c\u6210\u3057\u307e\u3059\u304b?
NewCaseWizardAction.getName.text=\u65b0\u898f\u30b1\u30fc\u30b9\u30a6\u30a3\u30b6\u30fc\u30c9
NewCaseWizardAction.newCase.windowTitle.text=\u65b0\u898f\u30b1\u30fc\u30b9\u60c5\u5831
NewCaseWizardPanel1.createDir.errMsg.cantCreateDir.msg=\u30a8\u30e9\u30fc\: \u30b1\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\n\u6709\u52b9\u306a\u30b1\u30fc\u30b9\u540d\u3068\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
NewCaseWizardPanel1.validate.confMsg.createDir.msg=\u30d9\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc "{0}" \u306f\u5b58\u5728\u3057\u307e\u305b\u3093\u3002\n\n\u305d\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u3092\u4f5c\u6210\u3057\u307e\u3059\u304b?
NewCaseWizardPanel1.validate.confMsg.createDir.title=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u3092\u4f5c\u6210
NewCaseWizardPanel1.validate.errMsg.cantCreateParDir.msg=\u30a8\u30e9\u30fc: \u30b1\u30fc\u30b9\u89aa\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc {0} \u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
NewCaseWizardPanel1.validate.errMsg.cantCreateDir=\u30a8\u30e9\u30fc\: \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
NewCaseWizardPanel1.validate.errMsg.cantCreateParDir.msg=\u30a8\u30e9\u30fc\: \u30b1\u30fc\u30b9\u89aa\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc {0} \u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
NewCaseWizardPanel1.validate.errMsg.dirExists=\u30b1\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc ''{0}'' \u306f\u3059\u3067\u306b\u5b58\u5728\u3057\u3066\u3044\u307e\u3059\u3002
NewCaseWizardPanel1.validate.errMsg.invalidBaseDir.msg=\u30a8\u30e9\u30fc\: \u5165\u529b\u3057\u305f\u30d9\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u306f\u7121\u52b9\u3067\u3059\u3002\n\u6709\u52b9\u306a\u30d9\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
NewCaseWizardPanel1.validate.errMsg.invalidSymbols=\u30b1\u30fc\u30b9\u540d\u306b\u6b21\u306e\u8a18\u53f7\u3092\u542b\u3081\u3089\u308c\u307e\u305b\u3093\: \\ / \: * ? " &lt; > |
NewCaseWizardPanel1.validate.errMsg.prevCreateBaseDir.msg=\u30d9\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc {0} \u306e\u4f5c\u6210\u304c\u963b\u6b62\u3055\u308c\u307e\u3057\u305f
NewCaseWizardPanel1.validate.errMsg.cantCreateDir=\u30a8\u30e9\u30fc: \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
NewCaseWizardPanel1.validate.errMsg.invalidBaseDir.msg=\u30a8\u30e9\u30fc: \u5165\u529b\u3057\u305f\u30d9\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u306f\u7121\u52b9\u3067\u3059\u3002\n\u6709\u52b9\u306a\u30d9\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
NewCaseWizardPanel1.createDir.errMsg.cantCreateDir.msg=\u30a8\u30e9\u30fc: \u30b1\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\n\u6709\u52b9\u306a\u30b1\u30fc\u30b9\u540d\u3068\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
NewCaseWizardPanel2.validate.errCreateCase.msg=\u30b1\u30fc\u30b9\u306e\u4f5c\u6210\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f
OpenIDE-Module-Name=\u30b1\u30fc\u30b9
OpenMultiUserCaseAction.caseOpeningErrorErrorMsg=\u30b1\u30fc\u30b9\u3092\u958b\u3051\u307e\u305b\u3093\u3067\u3057\u305f\: {0}
OpenMultiUserCaseAction.menuItemText=\u30b1\u30fc\u30b9\u3092\u958b\u304f
OpenMultiUserCaseDialog.title=\u30de\u30eb\u30c1\u30e6\u30fc\u30b6\u30fc\u30b1\u30fc\u30b9\u3092\u958b\u304f
OpenMultiUserCasePanel.cancelButton.text=\u53d6\u308a\u6d88\u3057
OpenMultiUserCasePanel.openSelectedCaseButton.text=\u9078\u629e\u3057\u305f\u30b1\u30fc\u30b9\u3092\u958b\u304f
OpenMultiUserCasePanel.openSingleUserCaseButton.tex=\u30b7\u30f3\u30b0\u30eb\u30e6\u30fc\u30b6\u30fc\u30b1\u30fc\u30b9\u3092\u958b\u304f...
OpenMultiUserCasePanel.searchLabel.text=\u4efb\u610f\u306e\u30b1\u30fc\u30b9\u3092\u9078\u629e\u3057\u3001\u5165\u529b\u3092\u958b\u59cb\u3057\u3066\u30b1\u30fc\u30b9\u540d\u3067\u691c\u7d22
OpenRecentCasePanel.cancelButton.text=\u53d6\u308a\u6d88\u3057
OpenRecentCasePanel.colName.caseName=\u30b1\u30fc\u30b9\u540d
OpenRecentCasePanel.colName.path=\u30d1\u30b9
OpenRecentCasePanel.jLabel1.text=\u6700\u8fd1\u306e\u30b1\u30fc\u30b9
OpenRecentCasePanel.openButton.text=\u958b\u304f
OptionalCasePropertiesPanel.bnNewOrganization.text=\u7d44\u7e54\u3092\u7ba1\u7406
OptionalCasePropertiesPanel.caseDisplayNameLabel.text=\u540d\u524d:
OptionalCasePropertiesPanel.caseNumberLabel.text=\u756a\u53f7:
OptionalCasePropertiesPanel.caseDisplayNameLabel.text=\u540d\u524d\:
OptionalCasePropertiesPanel.caseNumberLabel.text=\u756a\u53f7\:
OptionalCasePropertiesPanel.casePanel.border.title=\u30b1\u30fc\u30b9
OptionalCasePropertiesPanel.errorDialog.emptyCaseNameMessage=\u30b1\u30fc\u30b9\u540d\u304c\u5165\u529b\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002
OptionalCasePropertiesPanel.errorDialog.invalidCaseNameMessage=\u30b1\u30fc\u30b9\u540d\u306b\u6b21\u306e\u8a18\u53f7\u3092\u542b\u3081\u3089\u308c\u307e\u305b\u3093: \\, /, :, *, ?, ", <, >, |
OptionalCasePropertiesPanel.errorDialog.invalidCaseNameMessage=\u30b1\u30fc\u30b9\u540d\u306b\u6b21\u306e\u8a18\u53f7\u3092\u542b\u3081\u3089\u308c\u307e\u305b\u3093\: \\, /, \:, *, ?, ", <, >, |
OptionalCasePropertiesPanel.errorDialog.noOpenCase.errMsg=\u958b\u3044\u3066\u3044\u308b\u30b1\u30fc\u30b9\u306e\u53d6\u5f97\u4e2d\u306b\u4f8b\u5916\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
OptionalCasePropertiesPanel.examinerLabel.text=\u540d\u524d:
OptionalCasePropertiesPanel.examinerLabel.text=\u540d\u524d\:
OptionalCasePropertiesPanel.examinerPanel.border.title=\u8abf\u67fb\u54e1
OptionalCasePropertiesPanel.lbExaminerEmailLabel.text=\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9:
OptionalCasePropertiesPanel.lbExaminerPhoneLabel.text=\u96fb\u8a71\u756a\u53f7:
OptionalCasePropertiesPanel.lbNotesLabel.text=\u5099\u8003:
OptionalCasePropertiesPanel.lbOrganizationNameLabel.text=\u6b21\u306b\u95a2\u3059\u308b\u7d44\u7e54\u5206\u6790\u3092\u5b9f\u884c\u4e2d\u3067\u3059:
OptionalCasePropertiesPanel.lbPointOfContactEmailLabel.text=\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9:
OptionalCasePropertiesPanel.lbPointOfContactNameLabel.text=\u9023\u7d61\u5148:
OptionalCasePropertiesPanel.lbPointOfContactPhoneLabel.text=\u96fb\u8a71\u756a\u53f7:
OptionalCasePropertiesPanel.lbExaminerEmailLabel.text=\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\:
OptionalCasePropertiesPanel.lbExaminerPhoneLabel.text=\u96fb\u8a71\u756a\u53f7\:
OptionalCasePropertiesPanel.lbNotesLabel.text=\u5099\u8003\:
OptionalCasePropertiesPanel.lbOrganizationNameLabel.text=\u6b21\u306b\u95a2\u3059\u308b\u7d44\u7e54\u5206\u6790\u3092\u5b9f\u884c\u4e2d\u3067\u3059\:
OptionalCasePropertiesPanel.lbPointOfContactEmailLabel.text=\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\:
OptionalCasePropertiesPanel.lbPointOfContactNameLabel.text=\u9023\u7d61\u5148\:
OptionalCasePropertiesPanel.lbPointOfContactPhoneLabel.text=\u96fb\u8a71\u756a\u53f7\:
OptionalCasePropertiesPanel.orgainizationPanel.border.title=\u7d44\u7e54
RecentCases.exception.caseIdxOutOfRange.msg=\u6700\u8fd1\u306e\u30b1\u30fc\u30b9\u7d22\u5f15 {0} \u306f\u7bc4\u56f2\u5916\u3067\u3059\u3002
RecentCases.getName.text=\u6700\u8fd1\u306e\u30b1\u30fc\u30b9\u3092\u6d88\u53bb
# {0} - \u30b1\u30fc\u30b9\u540d
RecentItems.openRecentCase.msgDlg.text=\u30b1\u30fc\u30b9 {0} \u306f\u3059\u3067\u306b\u5b58\u5728\u3057\u307e\u305b\u3093\u3002
ReviewModeCasePanel.CaseHeaderText=\u30b1\u30fc\u30b9
ReviewModeCasePanel.CreatedTimeHeaderText=\u4f5c\u6210\u6e08\u307f\u6642\u523b
ReviewModeCasePanel.LastAccessedTimeHeaderText=\u6700\u7d42\u30a2\u30af\u30bb\u30b9\u6642\u523b
ReviewModeCasePanel.MetadataFileHeaderText=\u30e1\u30bf\u30c7\u30fc\u30bf\u30d5\u30a1\u30a4\u30eb
ReviewModeCasePanel.OutputFolderHeaderText=\u51fa\u529b\u30d5\u30a9\u30eb\u30c0\u30fc
ReviewModeCasePanel.StatusIconHeaderText=\u30b9\u30c6\u30fc\u30bf\u30b9
ReviewModeCasePanel.cannotOpenCase=\u30b1\u30fc\u30b9\u3092\u958b\u3051\u307e\u305b\u3093
ReviewModeCasePanel.caseIsLocked=\u30b7\u30f3\u30b0\u30eb\u30e6\u30fc\u30b6\u30fc\u304c\u30ed\u30c3\u30af\u3055\u308c\u3066\u3044\u307e\u3059\u3002
ReviewModeCasePanel.casePathNotFound=\u30b1\u30fc\u30b9\u30d1\u30b9\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093
SelectDataSourceProcessorPanel.name.text=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u306e\u30bf\u30a4\u30d7\u3092\u9078\u629e\u3057\u3066\u8ffd\u52a0
SingleUserCaseConverter.AlreadyMultiUser=\u30b1\u30fc\u30b9\u306f\u3059\u3067\u306b\u30de\u30eb\u30c1\u30e6\u30fc\u30b6\u30fc\u3067\u3059\!
SingleUserCaseConverter.BadDatabaseFileName=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u306f\u5b58\u5728\u3057\u307e\u305b\u3093\!
SingleUserCaseConverter.CanNotOpenDatabase=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u958b\u3051\u307e\u305b\u3093
SingleUserCaseConverter.NonUniqueDatabaseName=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u540d\u304c\u4e00\u610f\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002
SingleUserCaseConverter.UnableToCopySourceImages=\u30bd\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u3092\u30b3\u30d4\u30fc\u3067\u304d\u307e\u305b\u3093
StartupWindow.title.text=\u3088\u3046\u3053\u305d
UnpackagePortableCaseDialog.title.text=\u30dd\u30fc\u30bf\u30d6\u30eb\u30b1\u30fc\u30b9\u3092\u958b\u5c01
UnpackagePortableCaseDialog.UnpackagePortableCaseDialog.extensions=\u30dd\u30fc\u30bf\u30d6\u30eb\u30b1\u30fc\u30b9\u30d1\u30c3\u30b1\u30fc\u30b8(.zip, .zip.001)
UnpackagePortableCaseDialog.caseErrorLabel.text=jLabel1
UnpackagePortableCaseDialog.caseLabel.text=\u30dd\u30fc\u30bf\u30d6\u30eb\u30b1\u30fc\u30b9\:
UnpackagePortableCaseDialog.caseSelectButton.text=\u53c2\u7167
UnpackagePortableCaseDialog.caseTextField.text=
UnpackagePortableCaseDialog.desc1Label.text=\u30dd\u30fc\u30bf\u30d6\u30eb\u30b1\u30fc\u30b9\u3092\u958b\u5c01\u3057\u3066Autopsy\u3067\u958b\u3051\u308b\u3088\u3046\u306b\u3057\u307e\u3059\u3002\u7d4c\u7531\u3067\u30dd\u30fc\u30bf\u30d6\u30eb\u30b1\u30fc\u30b9\u3092\u4f5c\u6210\u3057\u307e\u3059
UnpackagePortableCaseDialog.desc2Label.text=\u30dd\u30fc\u30bf\u30d6\u30eb\u30b1\u30fc\u30b9\u30ec\u30dd\u30fc\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u3002
UnpackagePortableCaseDialog.exitButton.text=\u7d42\u4e86
UnpackagePortableCaseDialog.extractLabel.text=\u30d5\u30a9\u30eb\u30c0\u30fc\u306e\u62bd\u51fa\u5148\:
UnpackagePortableCaseDialog.outputErrorLabel.text=jLabel1
UnpackagePortableCaseDialog.outputSelectButton.text=\u53c2\u7167
UnpackagePortableCaseDialog.outputTextField.text=
UnpackagePortableCaseDialog.title.text=\u30dd\u30fc\u30bf\u30d6\u30eb\u30b1\u30fc\u30b9\u3092\u958b\u5c01
UnpackagePortableCaseDialog.unpackageButton.text=\u958b\u5c01
UnpackagePortableCaseDialog.validatePaths.badExtension=\u30d5\u30a1\u30a4\u30eb\u62e1\u5f35\u5b50\u306f .zip \u307e\u305f\u306f .zip.001 \u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093
# {0} - \u30b1\u30fc\u30b9\u30d5\u30a9\u30eb\u30c0\u30fc
UnpackagePortableCaseDialog.validatePaths.caseFolderExists=\u30d5\u30a9\u30eb\u30c0\u30fc {0} \u306f\u3059\u3067\u306b\u5b58\u5728\u3057\u307e\u3059
UnpackagePortableCaseDialog.validatePaths.caseIsNotFile=\u9078\u629e\u3057\u305f\u30d1\u30b9\u306f\u30d5\u30a1\u30a4\u30eb\u3067\u306f\u3042\u308a\u307e\u305b\u3093
UnpackagePortableCaseDialog.validatePaths.caseNotFound=\u30d5\u30a1\u30a4\u30eb\u306f\u5b58\u5728\u3057\u307e\u305b\u3093
UnpackagePortableCaseDialog.validatePaths.folderNotFound=\u30d5\u30a9\u30eb\u30c0\u30fc\u306f\u5b58\u5728\u3057\u307e\u305b\u3093
UnpackagePortableCaseDialog.validatePaths.notAFolder=\u51fa\u529b\u5834\u6240\u306f\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u3067\u306f\u3042\u308a\u307e\u305b\u3093
UnpackagePortableCaseProgressDialog.cancelButton.text=\u53d6\u308a\u6d88\u3057
UnpackagePortableCaseProgressDialog.okButton.text=OK
UnpackagePortableCaseProgressDialog.propertyChange.success=\u30b1\u30fc\u30b9\u3092\u6b63\u5e38\u306b\u958b\u5c01\u3057\u307e\u3057\u305f
UnpackagePortableCaseProgressDialog.resultLabel.text=resultLabel
UnpackagePortableCaseProgressDialog.title.text=\u30dd\u30fc\u30bf\u30d6\u30eb\u30b1\u30fc\u30b9\u306e\u958b\u5c01\u72b6\u6cc1
UnpackageWorker.doInBackground.canceled=\u30e6\u30fc\u30b6\u30fc\u306b\u3088\u3063\u3066\u958b\u5c01\u304c\u53d6\u308a\u6d88\u3055\u308c\u307e\u3057\u305f
UnpackageWorker.doInBackground.errorCompressingCase=\u30b1\u30fc\u30b9\u306e\u958b\u5c01\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f
UnpackageWorker.doInBackground.errorFinding7zip=7-Zip\u5b9f\u884c\u53ef\u80fd\u30d5\u30a1\u30a4\u30eb\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f
UnpackageWorker.doInBackground.previouslySeenCase=\u30b1\u30fc\u30b9\u306f\u65e2\u306b\u958b\u304b\u308c\u3066\u3044\u307e\u3059\u3002 \u3082\u3046\u4e00\u5ea6\u958b\u304d\u307e\u3059\u304b\uff1f
UpdateRecentCases.menuItem.clearRecentCases.text=\u6700\u8fd1\u306e\u30b1\u30fc\u30b9\u3092\u6d88\u53bb
UpdateRecentCases.menuItem.empty=-\u7a7a(\u672a\u5165\u529b)-
AddImageWizardIngestConfigPanel.CANCEL_BUTTON.text=\u53d6\u308a\u6d88\u3057
NewCaseVisualPanel1.CaseFolderOnCDriveError.text=\u8b66\u544a: \u30de\u30eb\u30c1\u30e6\u30fc\u30b6\u30fc\u30b1\u30fc\u30b9\u30d5\u30a9\u30eb\u30c0\u30fc\u306e\u30d1\u30b9\u306f \"C:\" \u30c9\u30e9\u30a4\u30d6\u306b\u3042\u308a\u307e\u3059
NewCaseVisualPanel1.CaseFolderOnInternalDriveWindowsError.text=\u8b66\u544a: \u30b1\u30fc\u30b9\u30d5\u30a9\u30eb\u30c0\u30fc\u306e\u30d1\u30b9\u306f \"C:\" \u30c9\u30e9\u30a4\u30d6\u306b\u3042\u308a\u307e\u3059\u3002\u30b1\u30fc\u30b9\u30d5\u30a9\u30eb\u30c0\u30fc\u306f\u30bf\u30fc\u30b2\u30c3\u30c8\u30b7\u30b9\u30c6\u30e0\u4e0a\u306b\u4f5c\u6210\u3055\u308c\u307e\u3059
NewCaseVisualPanel1.CaseFolderOnInternalDriveLinuxError.text=\u8b66\u544a: \u30b1\u30fc\u30b9\u30d5\u30a9\u30eb\u30c0\u30fc\u306e\u30d1\u30b9\u306f\u30bf\u30fc\u30b2\u30c3\u30c8\u30b7\u30b9\u30c6\u30e0\u4e0a\u306b\u3042\u308a\u307e\u3059\u3002\u30de\u30a6\u30f3\u30c8\u3055\u308c\u305f\u30c9\u30e9\u30a4\u30d6\u5185\u306b\u30b1\u30fc\u30b9\u30d5\u30a9\u30eb\u30c0\u30fc\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002
CollaborationMonitor.addingDataSourceStatus.msg={0} \u304c\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3092\u8ffd\u52a0\u4e2d\u3067\u3059
CollaborationMonitor.analyzingDataSourceStatus.msg={0} \u5206\u6790\u4e2d {1}
MissingImageDialog.lbWarning.text=
MissingImageDialog.lbWarning.toolTipText=
NewCaseVisualPanel1.caseParentDirWarningLabel.text=
NewCaseVisualPanel1.multiUserCaseRadioButton.text=\u30de\u30eb\u30c1\u30e6\u30fc\u30b6\u30fc
NewCaseVisualPanel1.singleUserCaseRadioButton.text=\u30b7\u30f3\u30b0\u30eb\u30e6\u30fc\u30b6\u30fc
NewCaseVisualPanel1.caseTypeLabel.text=\u30b1\u30fc\u30b9\u30bf\u30a4\u30d7:
SingleUserCaseConverter.BadDatabaseFileName=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u306f\u5b58\u5728\u3057\u307e\u305b\u3093!
SingleUserCaseConverter.AlreadyMultiUser=\u30b1\u30fc\u30b9\u306f\u3059\u3067\u306b\u30de\u30eb\u30c1\u30e6\u30fc\u30b6\u30fc\u3067\u3059!
SingleUserCaseConverter.NonUniqueDatabaseName=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u540d\u304c\u4e00\u610f\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002
SingleUserCaseConverter.UnableToCopySourceImages=\u30bd\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u3092\u30b3\u30d4\u30fc\u3067\u304d\u307e\u305b\u3093
SingleUserCaseConverter.CanNotOpenDatabase=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u958b\u3051\u307e\u305b\u3093
CloseCaseWhileIngesting.Warning=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u306e\u5b9f\u884c\u4e2d\u3067\u3059\u3002\u30b1\u30fc\u30b9\u3092\u9589\u3058\u3066\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
CloseCaseWhileIngesting.Warning.title=\u8b66\u544a: \u3053\u308c\u306b\u3088\u308a\u73fe\u5728\u306e\u30b1\u30fc\u30b9\u304c\u9589\u3058\u307e\u3059\u3002
CasePropertiesForm.imagesTable.columnModel.title1=\u524a\u9664
CasePropertiesForm.imagesTable.columnModel.title0=\u30d1\u30b9
IngestJobInfoPanel.jLabel1.text=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb
IngestJobInfoPanel.jLabel2.text=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30b8\u30e7\u30d6
CaseInformationPanel.closeButton.text=\u9589\u3058\u308b
LocalDiskPanel.copyImageCheckbox.text=\u30c9\u30e9\u30a4\u30d6\u306e\u5206\u6790\u4e2d\u306bVHD\u30a4\u30e1\u30fc\u30b8\u3092\u4f5c\u6210
LocalDiskPanel.jLabel1.text=\u5b8c\u5168\u306a\u30b3\u30d4\u30fc\u3092\u4f5c\u6210\u3059\u308b\u306b\u306f\u3001\u5c11\u306a\u304f\u3068\u30821\u3064\u306e\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u5b9f\u884c\u3057\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093
LocalDiskPanel.pathTextField.text=
LocalDiskPanel.browseButton.text=\u53c2\u7167
LocalDiskPanel.changeDatabasePathCheckbox.text=\u5b8c\u4e86\u6642\u306bVHD\u30d5\u30a1\u30a4\u30eb\u3092\u4f7f\u7528\u3059\u308b\u305f\u3081\u306b\u30b1\u30fc\u30b9\u3092\u66f4\u65b0
CueBannerPanel.openRecentCaseButton.text=
CueBannerPanel.openRecentCaseLabel.text=\u6700\u8fd1\u306e\u30b1\u30fc\u30b9\u3092\u958b\u304f
ReviewModeCasePanel.cannotOpenCase=\u30b1\u30fc\u30b9\u3092\u958b\u3051\u307e\u305b\u3093
ReviewModeCasePanel.casePathNotFound=\u30b1\u30fc\u30b9\u30d1\u30b9\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093
ReviewModeCasePanel.caseIsLocked=\u30b7\u30f3\u30b0\u30eb\u30e6\u30fc\u30b6\u30fc\u304c\u30ed\u30c3\u30af\u3055\u308c\u3066\u3044\u307e\u3059\u3002
ReviewModeCasePanel.CaseHeaderText=\u30b1\u30fc\u30b9
ReviewModeCasePanel.CreatedTimeHeaderText=\u4f5c\u6210\u6e08\u307f\u6642\u523b
ReviewModeCasePanel.StatusIconHeaderText=\u30b9\u30c6\u30fc\u30bf\u30b9
ReviewModeCasePanel.OutputFolderHeaderText=\u51fa\u529b\u30d5\u30a9\u30eb\u30c0\u30fc
ReviewModeCasePanel.LastAccessedTimeHeaderText=\u6700\u7d42\u30a2\u30af\u30bb\u30b9\u6642\u523b
ReviewModeCasePanel.MetadataFileHeaderText=\u30e1\u30bf\u30c7\u30fc\u30bf\u30d5\u30a1\u30a4\u30eb
CueBannerPanel.newCaseLabel.text=\u65b0\u898f\u30b1\u30fc\u30b9
CueBannerPanel.openCaseButton.text=
CueBannerPanel.openCaseLabel.text=\u30b1\u30fc\u30b9\u3092\u958b\u304f
CueBannerPanel.newCaseButton.text=
ImageFilePanel.sectorSizeLabel.text=\u30bb\u30af\u30bf\u30fc\u30b5\u30a4\u30ba:
LocalDiskPanel.sectorSizeLabel.text=\u30bb\u30af\u30bf\u30fc\u30b5\u30a4\u30ba:
LocalFilesPanel.displayNameLabel.text=\u8ad6\u7406\u30d5\u30a1\u30a4\u30eb\u30bb\u30c3\u30c8\u8868\u793a\u540d: \u30c7\u30d5\u30a9\u30eb\u30c8
LocalFilesPanel.errorLabel.text=\u30a8\u30e9\u30fc\u30e9\u30d9\u30eb
LocalFilesPanel.selectedPaths.toolTipText=
LocalFilesPanel.clearButton.toolTipText=\u73fe\u5728\u9078\u629e\u3055\u308c\u3066\u3044\u308b\u30ed\u30fc\u30ab\u30eb\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9\u3092\u6d88\u53bb
LocalFilesPanel.clearButton.text=\u6d88\u53bb
LocalFilesPanel.selectButton.actionCommand=\u8ffd\u52a0
LocalFilesPanel.selectButton.toolTipText=\u30ed\u30fc\u30ab\u30eb\u30d5\u30a1\u30a4\u30eb\u304a\u3088\u3073\u30d5\u30a9\u30eb\u30c0\u30fc\u3092\u8ad6\u7406\u30d5\u30a1\u30a4\u30eb\u3068\u3057\u3066\u8ffd\u52a0
LocalFilesPanel.selectButton.text=\u8ffd\u52a0
LocalFilesPanel.localFileChooser.dialogTitle=\u30ed\u30fc\u30ab\u30eb\u30d5\u30a1\u30a4\u30eb\u307e\u305f\u306f\u30d5\u30a9\u30eb\u30c0\u30fc\u3092\u9078\u629e
LocalFilesPanel.localFileChooser.approveButtonToolTipText=
LocalFilesPanel.localFileChooser.approveButtonText=\u9078\u629e
LogicalEvidenceFilePanel.selectButton.actionCommand=\u8ffd\u52a0
LogicalEvidenceFilePanel.selectButton.toolTipText=\u30ed\u30fc\u30ab\u30eb\u30d5\u30a1\u30a4\u30eb\u304a\u3088\u3073\u30d5\u30a9\u30eb\u30c0\u30fc\u3092\u8ad6\u7406\u30d5\u30a1\u30a4\u30eb\u3068\u3057\u3066\u8ffd\u52a0
LogicalEvidenceFilePanel.selectButton.text=\u9078\u629e
LogicalEvidenceFilePanel.errorLabel.text=\u30a8\u30e9\u30fc\u30e9\u30d9\u30eb
LogicalEvidenceFilePanel.logicalEvidenceFileChooser.dialogTitle=\u30ed\u30fc\u30ab\u30eb\u30d5\u30a1\u30a4\u30eb\u307e\u305f\u306f\u30d5\u30a9\u30eb\u30c0\u30fc\u3092\u9078\u629e
LogicalEvidenceFilePanel.logicalEvidenceFileChooser.approveButtonToolTipText=
LogicalEvidenceFilePanel.logicalEvidenceFileChooser.approveButtonText=\u9078\u629e
LogicalEvidenceFilePanel.logicalEvidencePathField.text=
LocalFilesPanel.changeNameButton.text=\u5909\u66f4
LocalDiskPanel.selectDiskButton.text=\u30c7\u30a3\u30b9\u30af\u3092\u9078\u629e
LocalDiskSelectionDialog.refreshLocalDisksButton.text=\u30ed\u30fc\u30ab\u30eb\u30c7\u30a3\u30b9\u30af\u3092\u66f4\u65b0
LocalDiskSelectionDialog.errorLabel.text=\u30a8\u30e9\u30fc\u30e9\u30d9\u30eb
LocalDiskSelectionDialog.selectLocalDiskLabel.text=\u30ed\u30fc\u30ab\u30eb\u30c7\u30a3\u30b9\u30af\u3092\u9078\u629e:
LocalDiskSelectionDialog.cancelButton.text=\u53d6\u308a\u6d88\u3057
LocalDiskSelectionDialog.okButton.text=OK
LocalDiskPanel.localDiskLabel.text=\u30ed\u30fc\u30ab\u30eb\u30c7\u30a3\u30b9\u30af:
LocalDiskPanel.imageWriterErrorLabel.text=\u30a8\u30e9\u30fc\u30e9\u30d9\u30eb
LocalDiskSelectionDialog.title=\u30ed\u30fc\u30ab\u30eb\u30c7\u30a3\u30b9\u30af\u3092\u9078\u629e
ImageFilePanel.md5HashLabel.text=MD5:
ImageFilePanel.sha1HashLabel.text=SHA-1:
ImageFilePanel.sha256HashLabel.text=SHA-256:
ImageFilePanel.sha256HashTextField.text=
ImageFilePanel.sha1HashTextField.text=
ImageFilePanel.md5HashTextField.text=
ImageFilePanel.errorLabel.text=\u30a8\u30e9\u30fc\u30e9\u30d9\u30eb
ImageFilePanel.hashValuesNoteLabel.text=\u6ce8: \u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u8ffd\u52a0\u6642\u306b\u3053\u308c\u3089\u306e\u5024\u306f\u691c\u8a3c\u3055\u308c\u307e\u305b\u3093\u3002
ImageFilePanel.hashValuesLabel.text=\u30cf\u30c3\u30b7\u30e5\u5024(\u4efb\u610f):
CaseDetailsPanel.crDateLabel.text=\u4f5c\u6210\u65e5:
CaseDetailsPanel.caseDirLabel.text=\u30b1\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc:
CaseDetailsPanel.caseNumberLabel.text=\u30b1\u30fc\u30b9\u756a\u53f7:
CaseDetailsPanel.lbDbName.text=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u540d:
CaseDetailsPanel.lbDbType.text=\u30b1\u30fc\u30b9\u30bf\u30a4\u30d7:
CaseDetailsPanel.caseNameLabel.text=\u30b1\u30fc\u30b9\u540d:
OpenMultiUserCasePanel.searchLabel.text=\u4efb\u610f\u306e\u30b1\u30fc\u30b9\u3092\u9078\u629e\u3057\u3001\u5165\u529b\u3092\u958b\u59cb\u3057\u3066\u30b1\u30fc\u30b9\u540d\u3067\u691c\u7d22
OpenMultiUserCasePanel.cancelButton.text=\u53d6\u308a\u6d88\u3057
OpenMultiUserCasePanel.openSingleUserCaseButton.tex=\u30b7\u30f3\u30b0\u30eb\u30e6\u30fc\u30b6\u30fc\u30b1\u30fc\u30b9\u3092\u958b\u304f...
OpenMultiUserCasePanel.openSelectedCaseButton.text=\u9078\u629e\u3057\u305f\u30b1\u30fc\u30b9\u3092\u958b\u304f
OpenMultiUserCasePanel.searchLabel.text=\u4efb\u610f\u306e\u30b1\u30fc\u30b9\u3092\u9078\u629e\u3057\u3001\u5165\u529b\u3092\u958b\u59cb\u3057\u3066\u30b1\u30fc\u30b9\u540d\u3067\u691c\u7d22
UnpackagePortableCaseDialog.desc2Label.text=\u30dd\u30fc\u30bf\u30d6\u30eb\u30b1\u30fc\u30b9\u30ec\u30dd\u30fc\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u3002
UnpackagePortableCaseDialog.desc1Label.text=\u30dd\u30fc\u30bf\u30d6\u30eb\u30b1\u30fc\u30b9\u3092\u958b\u5c01\u3057\u3066Autopsy\u3067\u958b\u3051\u308b\u3088\u3046\u306b\u3057\u307e\u3059\u3002\u7d4c\u7531\u3067\u30dd\u30fc\u30bf\u30d6\u30eb\u30b1\u30fc\u30b9\u3092\u4f5c\u6210\u3057\u307e\u3059
UnpackagePortableCaseDialog.exitButton.text=\u7d42\u4e86
UnpackagePortableCaseDialog.unpackageButton.text=\u958b\u5c01
UnpackagePortableCaseDialog.caseSelectButton.text=\u53c2\u7167
UnpackagePortableCaseDialog.outputSelectButton.text=\u53c2\u7167
UnpackagePortableCaseDialog.caseTextField.text=
UnpackagePortableCaseDialog.outputTextField.text=
UnpackagePortableCaseDialog.caseErrorLabel.text=jLabel1
UnpackagePortableCaseDialog.outputErrorLabel.text=jLabel1
UnpackagePortableCaseProgressDialog.cancelButton.text=\u53d6\u308a\u6d88\u3057
UnpackagePortableCaseProgressDialog.okButton.text=OK
UnpackagePortableCaseProgressDialog.resultLabel.text=resultLabel
UnpackagePortableCaseDialog.extractLabel.text=\u30d5\u30a9\u30eb\u30c0\u30fc\u306e\u62bd\u51fa\u5148:
UnpackagePortableCaseDialog.caseLabel.text=\u30dd\u30fc\u30bf\u30d6\u30eb\u30b1\u30fc\u30b9:

View File

@ -70,7 +70,7 @@ import org.sleuthkit.autopsy.actions.OpenOutputFolderAction;
import org.sleuthkit.autopsy.appservices.AutopsyService;
import org.sleuthkit.autopsy.appservices.AutopsyService.CaseContext;
import org.sleuthkit.autopsy.casemodule.CaseMetadata.CaseMetadataException;
import org.sleuthkit.autopsy.casemodule.datasourcesummary.DataSourceSummaryAction;
import org.sleuthkit.autopsy.datasourcesummary.ui.DataSourceSummaryAction;
import org.sleuthkit.autopsy.casemodule.events.AddingDataSourceEvent;
import org.sleuthkit.autopsy.casemodule.events.AddingDataSourceFailedEvent;
import org.sleuthkit.autopsy.casemodule.events.BlackBoardArtifactTagAddedEvent;
@ -141,6 +141,7 @@ import org.sleuthkit.datamodel.TskUnsupportedSchemaVersionException;
*/
public class Case {
private static final String CASE_TEMP_DIR = Case.class.getSimpleName();
private static final int CASE_LOCK_TIMEOUT_MINS = 1;
private static final int CASE_RESOURCES_LOCK_TIMEOUT_HOURS = 1;
private static final String SINGLE_USER_CASE_DB_NAME = "autopsy.db";
@ -150,7 +151,6 @@ public class Case {
private static final String LOG_FOLDER = "Log"; //NON-NLS
private static final String REPORTS_FOLDER = "Reports"; //NON-NLS
private static final String CONFIG_FOLDER = "Config"; // NON-NLS
private static final String TEMP_FOLDER = "Temp"; //NON-NLS
private static final String MODULE_FOLDER = "ModuleOutput"; //NON-NLS
private static final String CASE_ACTION_THREAD_NAME = "%s-case-action";
private static final String CASE_RESOURCES_THREAD_NAME = "%s-manage-case-resources";
@ -988,11 +988,6 @@ public class Case {
throw new CaseActionException(NbBundle.getMessage(Case.class, "Case.createCaseDir.exception.cantCreateCaseDir", logsDir));
}
Path tempDir = Paths.get(caseDirPath, hostPathComponent, TEMP_FOLDER);
if (!tempDir.toFile().mkdirs()) {
throw new CaseActionException(NbBundle.getMessage(Case.class, "Case.createCaseDir.exception.cantCreateCaseDir", tempDir));
}
Path cacheDir = Paths.get(caseDirPath, hostPathComponent, CACHE_FOLDER);
if (!cacheDir.toFile().mkdirs()) {
throw new CaseActionException(NbBundle.getMessage(Case.class, "Case.createCaseDir.exception.cantCreateCaseDir", cacheDir));
@ -1196,25 +1191,6 @@ public class Case {
}
}
/**
* Empties the temp subdirectory for the current case.
*/
private static void clearTempSubDir(String tempSubDirPath) {
File tempFolder = new File(tempSubDirPath);
if (tempFolder.isDirectory()) {
File[] files = tempFolder.listFiles();
if (files.length > 0) {
for (File file : files) {
if (file.isDirectory()) {
FileUtil.deleteDir(file);
} else {
file.delete();
}
}
}
}
}
/**
* Gets the case database.
*
@ -1352,7 +1328,16 @@ public class Case {
* @return The temp subdirectory path.
*/
public String getTempDirectory() {
return getOrCreateSubdirectory(TEMP_FOLDER);
// get temp folder scoped to the combination of case name and timestamp
// provided by getName()
Path path = Paths.get(UserPreferences.getAppTempDirectory(), CASE_TEMP_DIR, getName());
File f = path.toFile();
// verify that the folder exists
if (!f.exists()) {
f.mkdirs();
}
return path.toAbsolutePath().toString();
}
/**
@ -2396,7 +2381,7 @@ public class Case {
* Clear the temp subdirectory of the case directory.
*/
progressIndicator.progress(Bundle.Case_progressMessage_clearingTempDirectory());
Case.clearTempSubDir(this.getTempDirectory());
FileUtil.deleteDir(new File(this.getTempDirectory()));
}
/**
@ -2764,6 +2749,11 @@ public class Case {
caseDb.close();
}
/**
* Delete files from temp directory if any exist.
*/
deleteTempfilesFromCaseDirectory(progressIndicator);
/*
* Switch the log directory.
*/

View File

@ -19,6 +19,7 @@
package org.sleuthkit.autopsy.casemodule;
import java.util.List;
import org.sleuthkit.autopsy.ingest.IngestJob;
import org.sleuthkit.autopsy.ingest.IngestStream;
import org.sleuthkit.autopsy.ingest.IngestStreamClosedException;
@ -36,6 +37,11 @@ class DefaultIngestStream implements IngestStream {
// Do nothing
}
@Override
public IngestJob getIngestJob() {
throw new UnsupportedOperationException("DefaultIngestStream has no associated IngestJob");
}
@Override
public synchronized boolean isClosed() {
return isClosed;

View File

@ -465,6 +465,42 @@ public class ImageDSProcessor implements DataSourceProcessor, AutoIngestDataSour
doAddImageProcess(deviceId, dataSourcePath.toString(), sectorSize, timeZone, ignoreFatOrphanFiles, null, null, null, progressMonitor, callBack);
}
@Override
public IngestStream processWithIngestStream(String deviceId, Path dataSourcePath, IngestJobSettings settings, DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callBack) {
this.deviceId = deviceId;
this.imagePath = dataSourcePath.toString();
this.sectorSize = 0;
this.timeZone = Calendar.getInstance().getTimeZone().getID();
this.ignoreFatOrphanFiles = false;
setDataSourceOptionsCalled = true;
// Set up the data source before creating the ingest stream
try {
image = SleuthkitJNI.addImageToDatabase(Case.getCurrentCase().getSleuthkitCase(),
new String[]{imagePath}, sectorSize, timeZone, md5, sha1, sha256, deviceId);
} catch (TskCoreException ex) {
logger.log(Level.SEVERE, "Error adding data source with path " + imagePath + " to database", ex);
final List<String> errors = new ArrayList<>();
errors.add(ex.getMessage());
callBack.done(DataSourceProcessorCallback.DataSourceProcessorResult.CRITICAL_ERRORS, errors, new ArrayList<>());
return null;
}
// Now initialize the ingest stream
try {
ingestStream = IngestManager.getInstance().openIngestStream(image, settings);
} catch (TskCoreException ex) {
logger.log(Level.SEVERE, "Error starting ingest modules", ex);
final List<String> errors = new ArrayList<>();
errors.add(ex.getMessage());
callBack.done(DataSourceProcessorCallback.DataSourceProcessorResult.CRITICAL_ERRORS, errors, new ArrayList<>());
return null;
}
doAddImageProcess(deviceId, dataSourcePath.toString(), sectorSize, timeZone, ignoreFatOrphanFiles, null, null, null, progressMonitor, callBack);
return ingestStream;
}
/**
* Sets the configuration of the data source processor without using the
* selection and configuration panel.

View File

@ -0,0 +1,66 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2020 Basis Technology Corp.
* Contact: carrier <at> sleuthkit <dot> org
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.sleuthkit.autopsy.casemodule;
import java.io.File;
import java.util.logging.Level;
import org.apache.commons.lang.StringUtils;
import org.openide.modules.ModuleInstall;
import org.sleuthkit.autopsy.core.UserPreferences;
import org.sleuthkit.autopsy.coreutils.FileUtil;
import org.sleuthkit.autopsy.coreutils.Logger;
/**
* Installer for casemodule that cleans out user specified temp directory.
*/
public final class Installer extends ModuleInstall {
private static final Logger logger = Logger.getLogger(Installer.class.getName());
private static final long serialVersionUID = 1L;
private static Installer instance;
public synchronized static Installer getDefault() {
if (instance == null) {
instance = new Installer();
}
return instance;
}
private Installer() {
}
@Override
public void restored() {
String tempDirStr = null;
try {
tempDirStr = UserPreferences.getAppTempDirectory();
if (StringUtils.isNotBlank(tempDirStr)) {
File tempDir = new File(tempDirStr);
if (tempDir.exists()) {
FileUtil.deleteDir(tempDir);
}
}
} catch (Exception ex) {
// This is a firewall exception should any issues occur
// during temp directory deletion
logger.log(Level.WARNING, "There was an error while cleaning up temp directory: " + (tempDirStr == null ? "<null>" : tempDirStr), ex);
}
}
}

View File

@ -1,60 +0,0 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2014 Basis Technology Corp.
* Contact: carrier <at> sleuthkit <dot> org
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.sleuthkit.autopsy.casemodule;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.netbeans.api.sendopts.CommandException;
import org.netbeans.spi.sendopts.Env;
import org.netbeans.spi.sendopts.Option;
import org.netbeans.spi.sendopts.OptionProcessor;
import org.openide.util.lookup.ServiceProvider;
/**
* Allows Autopsy to get path to .aut file passed in via associating the file
* type in Windows.
*/
@ServiceProvider(service = OptionProcessor.class)
public class OpenFromArguments extends OptionProcessor {
/*
* Stores the .aut file if it was passed in as argument
*/
private String autPath = "";
private final Option option1 = Option.defaultArguments();
@Override
protected Set<Option> getOptions() {
final Set<Option> options = new HashSet<>();
options.add(option1);
return options;
}
@Override
protected void process(Env env, Map<Option, String[]> maps) throws CommandException {
if (maps.containsKey(option1)) {
autPath = maps.get(option1)[0];
}
}
public String getDefaultArg() {
return autPath;
}
}

View File

@ -24,6 +24,7 @@ import java.util.logging.Level;
import org.netbeans.spi.sendopts.OptionProcessor;
import org.openide.util.Lookup;
import org.sleuthkit.autopsy.commandlineingest.CommandLineIngestManager;
import org.sleuthkit.autopsy.commandlineingest.CommandLineOpenCaseManager;
import org.sleuthkit.autopsy.commandlineingest.CommandLineOptionProcessor;
import org.sleuthkit.autopsy.commandlineingest.CommandLineStartupWindow;
import org.sleuthkit.autopsy.coreutils.Logger;
@ -60,6 +61,12 @@ public class StartupWindowProvider implements StartupWindowInterface {
if (startupWindowToUse == null) {
// first check whether we are running from command line
if (isRunningFromCommandLine()) {
String defaultArg = getDefaultArgument();
if(defaultArg != null) {
new CommandLineOpenCaseManager(defaultArg).start();
return;
} else {
// Autopsy is running from command line
logger.log(Level.INFO, "Running from command line"); //NON-NLS
startupWindowToUse = new CommandLineStartupWindow();
@ -67,6 +74,7 @@ public class StartupWindowProvider implements StartupWindowInterface {
new CommandLineIngestManager().start();
return;
}
}
//discover the registered windows
Collection<? extends StartupWindowInterface> startupWindows
@ -117,20 +125,26 @@ public class StartupWindowProvider implements StartupWindowInterface {
*/
private boolean isRunningFromCommandLine() {
// first look up all OptionProcessors and see if running from command line option is set
Collection<? extends OptionProcessor> optionProcessors = Lookup.getDefault().lookupAll(OptionProcessor.class);
Iterator<? extends OptionProcessor> optionsIterator = optionProcessors.iterator();
while (optionsIterator.hasNext()) {
// find CommandLineOptionProcessor
OptionProcessor processor = optionsIterator.next();
if ((processor instanceof CommandLineOptionProcessor)) {
// check if we are running from command line
return ((CommandLineOptionProcessor) processor).isRunFromCommandLine();
}
CommandLineOptionProcessor processor = Lookup.getDefault().lookup(CommandLineOptionProcessor.class);
if(processor != null) {
return processor.isRunFromCommandLine();
}
return false;
}
/**
* Get the default argument from the CommandLineOptionProcessor.
*
* @return If set, the default argument otherwise null.
*/
private String getDefaultArgument() {
CommandLineOptionProcessor processor = Lookup.getDefault().lookup(CommandLineOptionProcessor.class);
if(processor != null) {
return processor.getDefaultArgument();
}
return null;
}
@Override
public void open() {
if (startupWindowToUse != null) {

View File

@ -1,819 +0,0 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2019 - 2020 Basis Technology Corp.
* Contact: carrier <at> sleuthkit <dot> org
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.sleuthkit.autopsy.casemodule.datasourcesummary;
import java.io.File;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.datamodel.SleuthkitCase;
import org.sleuthkit.datamodel.TskCoreException;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;
import org.apache.commons.lang.StringUtils;
import org.sleuthkit.autopsy.casemodule.Case;
import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException;
import org.sleuthkit.datamodel.BlackboardArtifact;
import org.sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE;
import org.sleuthkit.datamodel.TskData;
import org.sleuthkit.datamodel.BlackboardAttribute;
import org.sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE;
import org.sleuthkit.datamodel.DataSource;
/**
* Utilities for getting information about a data source or all data sources
* from the case database.
*/
final class DataSourceInfoUtilities {
private static final Logger logger = Logger.getLogger(DataSourceInfoUtilities.class.getName());
/**
* Gets a count of files for a particular datasource where it is not a
* virtual directory and has a name.
*
* @param currentDataSource The datasource.
* @param additionalWhere Additional sql where clauses.
* @param onError The message to log on error.
*
* @return The count of files or null on error.
*/
private static Long getCountOfFiles(DataSource currentDataSource, String additionalWhere, String onError) {
if (currentDataSource != null) {
try {
SleuthkitCase skCase = Case.getCurrentCaseThrows().getSleuthkitCase();
return skCase.countFilesWhere(
"dir_type<>" + TskData.TSK_FS_NAME_TYPE_ENUM.VIRT_DIR.getValue()
+ " AND name<>''"
+ " AND data_source_obj_id=" + currentDataSource.getId()
+ " AND " + additionalWhere);
} catch (TskCoreException | NoCurrentCaseException ex) {
logger.log(Level.WARNING, onError, ex);
//unable to get count of files for the specified types cell will be displayed as empty
}
}
return null;
}
/**
* Get count of files in a data source.
*
* @param currentDataSource The data source.
*
* @return The count.
*/
static Long getCountOfFiles(DataSource currentDataSource) {
return getCountOfFiles(currentDataSource,
"type<>" + TskData.TSK_DB_FILES_TYPE_ENUM.VIRTUAL_DIR.getFileType(),
"Unable to get count of files, providing empty results");
}
/**
* Get count of unallocated files in a data source.
*
* @param currentDataSource The data source.
*
* @return The count.
*/
static Long getCountOfUnallocatedFiles(DataSource currentDataSource) {
return getCountOfFiles(currentDataSource,
"type<>" + TskData.TSK_DB_FILES_TYPE_ENUM.VIRTUAL_DIR.getFileType()
+ " AND dir_flags=" + TskData.TSK_FS_NAME_FLAG_ENUM.UNALLOC.getValue(),
"Unable to get counts of unallocated files for datasource, providing empty results");
}
/**
* Get count of directories in a data source.
*
* @param currentDataSource The data source.
*
* @return The count.
*/
static Long getCountOfDirectories(DataSource currentDataSource) {
return getCountOfFiles(currentDataSource,
"type<>" + TskData.TSK_DB_FILES_TYPE_ENUM.VIRTUAL_DIR.getFileType()
+ " AND meta_type=" + TskData.TSK_FS_META_TYPE_ENUM.TSK_FS_META_TYPE_DIR.getValue(),
"Unable to get count of directories for datasource, providing empty results");
}
/**
* Get count of slack files in a data source.
*
* @param currentDataSource The data source.
*
* @return The count.
*/
static Long getCountOfSlackFiles(DataSource currentDataSource) {
return getCountOfFiles(currentDataSource,
"type=" + TskData.TSK_DB_FILES_TYPE_ENUM.SLACK.getFileType(),
"Unable to get count of slack files for datasources, providing empty results");
}
/**
* An interface for handling a result set and returning a value.
*/
private interface ResultSetHandler<T> {
T process(ResultSet resultset) throws SQLException;
}
/**
* Retrieves a result based on the provided query.
*
* @param query The query.
* @param processor The result set handler.
* @param errorMessage The error message to display if there is an error
* retrieving the resultset.
*
* @return The ResultSetHandler value or null if no ResultSet could be
* obtained.
*/
private static <T> T getBaseQueryResult(String query, ResultSetHandler<T> processor, String errorMessage) {
try (SleuthkitCase.CaseDbQuery dbQuery = Case.getCurrentCaseThrows().getSleuthkitCase().executeQuery(query)) {
ResultSet resultSet = dbQuery.getResultSet();
try {
return processor.process(resultSet);
} catch (SQLException ex) {
logger.log(Level.WARNING, errorMessage, ex);
}
} catch (TskCoreException | NoCurrentCaseException ex) {
logger.log(Level.WARNING, errorMessage, ex);
}
return null;
}
/**
* Gets the size of unallocated files in a particular datasource.
*
* @param currentDataSource The data source.
*
* @return The size or null if the query could not be executed.
*/
static Long getSizeOfUnallocatedFiles(DataSource currentDataSource) {
if (currentDataSource == null) {
return null;
}
final String valueParam = "value";
final String countParam = "count";
String query = "SELECT SUM(size) AS " + valueParam + ", COUNT(*) AS " + countParam
+ " FROM tsk_files WHERE type<>" + TskData.TSK_DB_FILES_TYPE_ENUM.VIRTUAL_DIR.getFileType()
+ " AND dir_type<>" + TskData.TSK_FS_NAME_TYPE_ENUM.VIRT_DIR.getValue()
+ " AND dir_flags=" + TskData.TSK_FS_NAME_FLAG_ENUM.UNALLOC.getValue()
+ " AND name<>''"
+ " AND data_source_obj_id=" + currentDataSource.getId();
ResultSetHandler<Long> handler = (resultSet) -> {
if (resultSet.next()) {
// ensure that there is an unallocated count result that is attached to this data source
long resultCount = resultSet.getLong(valueParam);
return (resultCount > 0) ? resultSet.getLong(valueParam) : null;
} else {
return null;
}
};
String errorMessage = "Unable to get size of unallocated files; returning null.";
return getBaseQueryResult(query, handler, errorMessage);
}
/**
* Generates a result set handler that will return a map of string to long.
*
* @param keyParam The named parameter in the result set representing the
* key.
* @param valueParam The named parameter in the result set representing the
* value.
*
* @return The result set handler to generate the map of string to long.
*/
private static ResultSetHandler<LinkedHashMap<String, Long>> getStringLongResultSetHandler(String keyParam, String valueParam) {
return (resultSet) -> {
LinkedHashMap<String, Long> toRet = new LinkedHashMap<>();
while (resultSet.next()) {
try {
toRet.put(resultSet.getString(keyParam), resultSet.getLong(valueParam));
} catch (SQLException ex) {
logger.log(Level.WARNING, "Failed to get a result pair from the result set.", ex);
}
}
return toRet;
};
}
/**
* Retrieves counts for each artifact type in a data source.
*
* @param selectedDataSource The data source.
*
* @return A mapping of artifact type name to the counts or null if there
* was an error executing the query.
*/
static Map<String, Long> getCountsOfArtifactsByType(DataSource selectedDataSource) {
if (selectedDataSource == null) {
return Collections.emptyMap();
}
final String nameParam = "name";
final String valueParam = "value";
String query
= "SELECT bbt.display_name AS " + nameParam + ", COUNT(*) AS " + valueParam
+ " FROM blackboard_artifacts bba "
+ " INNER JOIN blackboard_artifact_types bbt ON bba.artifact_type_id = bbt.artifact_type_id"
+ " WHERE bba.data_source_obj_id =" + selectedDataSource.getId()
+ " GROUP BY bbt.display_name";
String errorMessage = "Unable to get artifact type counts; returning null.";
return getBaseQueryResult(query, getStringLongResultSetHandler(nameParam, valueParam), errorMessage);
}
/**
* Describes a result of a program run on a datasource.
*/
static class TopProgramsResult {
private final String programName;
private final String programPath;
private final Long runTimes;
private final Date lastRun;
/**
* Main constructor.
*
* @param programName The name of the program.
* @param programPath The path of the program.
* @param runTimes The number of runs.
*/
TopProgramsResult(String programName, String programPath, Long runTimes, Date lastRun) {
this.programName = programName;
this.programPath = programPath;
this.runTimes = runTimes;
this.lastRun = lastRun;
}
/**
* @return The name of the program
*/
String getProgramName() {
return programName;
}
/**
* @return The path of the program.
*/
String getProgramPath() {
return programPath;
}
/**
* @return The number of run times or null if not present.
*/
Long getRunTimes() {
return runTimes;
}
/**
* @return The last time the program was run or null if not present.
*/
public Date getLastRun() {
return lastRun;
}
}
/**
* A SQL join type.
*/
private enum JoinType {
LEFT,
RIGHT,
INNER,
OUTER
}
/**
* A blackboard attribute value column.
*/
private enum AttributeColumn {
value_text,
value_int32,
value_int64
}
/**
* The suffix joined to a key name for use as an identifier of a query.
*/
private static final String QUERY_SUFFIX = "_query";
/**
* Creates a sql statement querying the blackboard attributes table for a
* particular attribute type and returning a specified value. That query
* also joins with the blackboard artifact table.
*
* @param joinType The type of join statement to create.
* @param attributeColumn The blackboard attribute column that should be
* returned.
* @param attrType The attribute type to query for.
* @param keyName The aliased name of the attribute to return. This
* is also used to calculate the alias of the query
* same as getFullKey.
* @param bbaName The blackboard artifact table alias.
*
* @return The generated sql statement.
*/
private static String getAttributeJoin(JoinType joinType, AttributeColumn attributeColumn, ATTRIBUTE_TYPE attrType, String keyName, String bbaName) {
String queryName = keyName + QUERY_SUFFIX;
String innerQueryName = "inner_attribute_" + queryName;
return "\n" + joinType + " JOIN (\n"
+ " SELECT \n"
+ " " + innerQueryName + ".artifact_id,\n"
+ " " + innerQueryName + "." + attributeColumn + " AS " + keyName + "\n"
+ " FROM blackboard_attributes " + innerQueryName + "\n"
+ " WHERE " + innerQueryName + ".attribute_type_id = " + attrType.getTypeID() + " -- " + attrType.name() + "\n"
+ ") " + queryName + " ON " + queryName + ".artifact_id = " + bbaName + ".artifact_id\n";
}
/**
* Given a column key, creates the full name for the column key.
*
* @param key The column key.
*
* @return The full identifier for the column key.
*/
private static String getFullKey(String key) {
return key + QUERY_SUFFIX + "." + key;
}
/**
* Constructs a SQL 'where' statement from a list of clauses and puts
* parenthesis around each clause.
*
* @param clauses The clauses
*
* @return The generated 'where' statement.
*/
private static String getWhereString(List<String> clauses) {
if (clauses.isEmpty()) {
return "";
}
List<String> parenthesized = clauses.stream()
.map(c -> "(" + c + ")")
.collect(Collectors.toList());
return "\nWHERE " + String.join("\n AND ", parenthesized) + "\n";
}
/**
* Generates a [column] LIKE sql clause.
*
* @param column The column identifier.
* @param likeString The string that will be used as column comparison.
* @param isLike if false, the statement becomes NOT LIKE.
*
* @return The generated statement.
*/
private static String getLikeClause(String column, String likeString, boolean isLike) {
return column + (isLike ? "" : " NOT") + " LIKE '" + likeString + "'";
}
/**
* Retrieves a list of the top programs used on the data source. Currently
* determines this based off of which prefetch results return the highest
* count.
*
* @param dataSource The data source.
* @param count The number of programs to return.
*
* @return
*/
static List<TopProgramsResult> getTopPrograms(DataSource dataSource, int count) {
if (dataSource == null || count <= 0) {
return Collections.emptyList();
}
// ntosboot should be ignored
final String ntosBootIdentifier = "NTOSBOOT";
// programs in windows directory to be ignored
final String windowsDir = "/WINDOWS%";
final String nameParam = "name";
final String pathParam = "path";
final String runCountParam = "run_count";
final String lastRunParam = "last_run";
String bbaQuery = "bba";
final String query = "SELECT\n"
+ " " + getFullKey(nameParam) + " AS " + nameParam + ",\n"
+ " " + getFullKey(pathParam) + " AS " + pathParam + ",\n"
+ " MAX(" + getFullKey(runCountParam) + ") AS " + runCountParam + ",\n"
+ " MAX(" + getFullKey(lastRunParam) + ") AS " + lastRunParam + "\n"
+ "FROM blackboard_artifacts " + bbaQuery + "\n"
+ getAttributeJoin(JoinType.INNER, AttributeColumn.value_text, ATTRIBUTE_TYPE.TSK_PROG_NAME, nameParam, bbaQuery)
+ getAttributeJoin(JoinType.LEFT, AttributeColumn.value_text, ATTRIBUTE_TYPE.TSK_PATH, pathParam, bbaQuery)
+ getAttributeJoin(JoinType.LEFT, AttributeColumn.value_int32, ATTRIBUTE_TYPE.TSK_COUNT, runCountParam, bbaQuery)
+ getAttributeJoin(JoinType.LEFT, AttributeColumn.value_int64, ATTRIBUTE_TYPE.TSK_DATETIME, lastRunParam, bbaQuery)
+ getWhereString(Arrays.asList(
bbaQuery + ".artifact_type_id = " + ARTIFACT_TYPE.TSK_PROG_RUN.getTypeID(),
bbaQuery + ".data_source_obj_id = " + dataSource.getId(),
// exclude ntosBootIdentifier from results
getLikeClause(getFullKey(nameParam), ntosBootIdentifier, false),
// exclude windows directory items from results
getFullKey(pathParam) + " IS NULL OR " + getLikeClause(getFullKey(pathParam), windowsDir, false)
))
+ "GROUP BY " + getFullKey(nameParam) + ", " + getFullKey(pathParam) + "\n"
+ "ORDER BY \n"
+ " MAX(" + getFullKey(runCountParam) + ") DESC,\n"
+ " MAX(" + getFullKey(lastRunParam) + ") DESC,\n"
+ " " + getFullKey(nameParam) + " ASC";
final String errorMessage = "Unable to get top program results; returning null.";
ResultSetHandler<List<TopProgramsResult>> handler = (resultSet) -> {
List<TopProgramsResult> progResults = new ArrayList<>();
boolean quitAtCount = false;
while (resultSet.next() && (!quitAtCount || progResults.size() < count)) {
try {
long lastRunEpoch = resultSet.getLong(lastRunParam);
Date lastRun = (resultSet.wasNull()) ? null : new Date(lastRunEpoch * 1000);
Long runCount = resultSet.getLong(runCountParam);
if (resultSet.wasNull()) {
runCount = null;
}
if (lastRun != null || runCount != null) {
quitAtCount = true;
}
progResults.add(new TopProgramsResult(
resultSet.getString(nameParam),
resultSet.getString(pathParam),
runCount,
lastRun));
} catch (SQLException ex) {
logger.log(Level.WARNING, "Failed to get a top program result from the result set.", ex);
}
}
return progResults;
};
return getBaseQueryResult(query, handler, errorMessage);
}
/**
* Functions that determine the folder name of a list of path elements. If
* not matched, function returns null.
*/
private static final List<Function<List<String>, String>> SHORT_FOLDER_MATCHERS = Arrays.asList(
// handle Program Files and Program Files (x86) - if true, return the next folder
(pathList) -> {
if (pathList.size() < 2) {
return null;
}
String rootParent = pathList.get(0).toUpperCase();
if ("PROGRAM FILES".equals(rootParent) || "PROGRAM FILES (X86)".equals(rootParent)) {
return pathList.get(1);
} else {
return null;
}
},
// if there is a folder named "APPLICATION DATA" or "APPDATA"
(pathList) -> {
for (String pathEl : pathList) {
String uppered = pathEl.toUpperCase();
if ("APPLICATION DATA".equals(uppered) || "APPDATA".equals(uppered)) {
return "AppData";
}
}
return null;
}
);
/**
* Determines a short folder name if any. Otherwise, returns empty string.
*
* @param strPath The string path.
*
* @return The short folder name or empty string if not found.
*/
static String getShortFolderName(String strPath, String applicationName) {
if (strPath == null) {
return "";
}
List<String> pathEls = new ArrayList<>(Arrays.asList(applicationName));
File file = new File(strPath);
while (file != null && StringUtils.isNotBlank(file.getName())) {
pathEls.add(file.getName());
file = file.getParentFile();
}
Collections.reverse(pathEls);
for (Function<List<String>, String> matchEntry : SHORT_FOLDER_MATCHERS) {
String result = matchEntry.apply(pathEls);
if (StringUtils.isNotBlank(result)) {
return result;
}
}
return "";
}
/**
* Generates a string which is a concatenation of the value received from
* the result set.
*
* @param query The query.
* @param valueParam The parameter for the value in the result set.
* @param separator The string separator used in concatenation.
* @param errorMessage The error message if the result set could not
* be received.
* @param singleErrorMessage The error message if a single result could not
* be obtained.
*
* @return The concatenated string or null if the query could not be
* executed.
*/
private static String getConcattedStringsResult(String query, String valueParam, String separator, String errorMessage, String singleErrorMessage) {
ResultSetHandler<String> handler = (resultSet) -> {
String toRet = "";
boolean first = true;
while (resultSet.next()) {
try {
if (first) {
first = false;
} else {
toRet += separator;
}
toRet += resultSet.getString(valueParam);
} catch (SQLException ex) {
logger.log(Level.WARNING, singleErrorMessage, ex);
}
}
return toRet;
};
return getBaseQueryResult(query, handler, errorMessage);
}
/**
* Generates a concatenated string value based on the text value of a
* particular attribute in a particular artifact for a specific data source.
*
* @param dataSourceId The data source id.
* @param artifactTypeId The artifact type id.
* @param attributeTypeId The attribute type id.
*
* @return The concatenated value or null if the query could not be
* executed.
*/
private static String getConcattedAttrValue(long dataSourceId, int artifactTypeId, int attributeTypeId) {
final String valueParam = "concatted_attribute_value";
String query = "SELECT attr.value_text AS " + valueParam
+ " FROM blackboard_artifacts bba "
+ " INNER JOIN blackboard_attributes attr ON bba.artifact_id = attr.artifact_id "
+ " WHERE bba.data_source_obj_id = " + dataSourceId
+ " AND bba.artifact_type_id = " + artifactTypeId
+ " AND attr.attribute_type_id = " + attributeTypeId;
String errorMessage = "Unable to execute query to retrieve concatted attribute values.";
String singleErrorMessage = "There was an error retrieving one of the results. That result will be omitted from concatted value.";
String separator = ", ";
return getConcattedStringsResult(query, valueParam, separator, errorMessage, singleErrorMessage);
}
/**
* Retrieves the concatenation of operating system attributes for a
* particular data source.
*
* @param dataSource The data source.
*
* @return The concatenated value or null if the query could not be
* executed.
*/
static String getOperatingSystems(DataSource dataSource) {
if (dataSource == null) {
return null;
}
return getConcattedAttrValue(dataSource.getId(),
BlackboardArtifact.ARTIFACT_TYPE.TSK_OS_INFO.getTypeID(),
BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PROG_NAME.getTypeID());
}
/**
* Retrieves the concatenation of data source usage for a particular data
* source.
*
* @param dataSource The data source.
*
* @return The concatenated value or null if the query could not be
* executed.
*/
static String getDataSourceType(DataSource dataSource) {
if (dataSource == null) {
return null;
}
return getConcattedAttrValue(dataSource.getId(),
BlackboardArtifact.ARTIFACT_TYPE.TSK_DATA_SOURCE_USAGE.getTypeID(),
BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DESCRIPTION.getTypeID());
}
/**
* Get a map containing the TSK_DATA_SOURCE_USAGE description attributes
* associated with each data source in the current case.
*
* @return Collection which maps datasource id to a String which displays a
* comma seperated list of values of data source usage types
* expected to be in the datasource
*/
static Map<Long, String> getDataSourceTypes() {
try {
SleuthkitCase skCase = Case.getCurrentCaseThrows().getSleuthkitCase();
List<BlackboardArtifact> listOfArtifacts = skCase.getBlackboardArtifacts(BlackboardArtifact.ARTIFACT_TYPE.TSK_DATA_SOURCE_USAGE);
Map<Long, String> typeMap = new HashMap<>();
for (BlackboardArtifact typeArtifact : listOfArtifacts) {
BlackboardAttribute descriptionAttr = typeArtifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DESCRIPTION));
if (typeArtifact.getDataSource() != null && descriptionAttr != null) {
long dsId = typeArtifact.getDataSource().getId();
String type = typeMap.get(typeArtifact.getDataSource().getId());
if (type == null) {
type = descriptionAttr.getValueString();
} else {
type = type + ", " + descriptionAttr.getValueString();
}
typeMap.put(dsId, type);
}
}
return typeMap;
} catch (TskCoreException | NoCurrentCaseException ex) {
logger.log(Level.WARNING, "Unable to get types of files for all datasources, providing empty results", ex);
return Collections.emptyMap();
}
}
/**
* Get a map containing the number of files in each data source in the
* current case.
*
* @return Collection which maps datasource id to a count for the number of
* files in the datasource, will only contain entries for
* datasources which have at least 1 file
*/
static Map<Long, Long> getCountsOfFiles() {
try {
final String countFilesQuery = "data_source_obj_id, COUNT(*) AS value"
+ " FROM tsk_files WHERE type<>" + TskData.TSK_DB_FILES_TYPE_ENUM.VIRTUAL_DIR.getFileType()
+ " AND dir_type<>" + TskData.TSK_FS_NAME_TYPE_ENUM.VIRT_DIR.getValue()
+ " AND name<>'' GROUP BY data_source_obj_id"; //NON-NLS
return getValuesMap(countFilesQuery);
} catch (TskCoreException | NoCurrentCaseException ex) {
logger.log(Level.WARNING, "Unable to get counts of files for all datasources, providing empty results", ex);
return Collections.emptyMap();
}
}
/**
* Get a map containing the number of artifacts in each data source in the
* current case.
*
* @return Collection which maps datasource id to a count for the number of
* artifacts in the datasource, will only contain entries for
* datasources which have at least 1 artifact
*/
static Map<Long, Long> getCountsOfArtifacts() {
try {
final String countArtifactsQuery = "data_source_obj_id, COUNT(*) AS value"
+ " FROM blackboard_artifacts WHERE review_status_id !=" + BlackboardArtifact.ReviewStatus.REJECTED.getID()
+ " GROUP BY data_source_obj_id"; //NON-NLS
return getValuesMap(countArtifactsQuery);
} catch (TskCoreException | NoCurrentCaseException ex) {
logger.log(Level.WARNING, "Unable to get counts of artifacts for all datasources, providing empty results", ex);
return Collections.emptyMap();
}
}
/**
* Get a map containing the number of tags which have been applied in each
* data source in the current case. Not necessarily the same as the number
* of items tagged, as an item can have any number of tags.
*
* @return Collection which maps datasource id to a count for the number of
* tags which have been applied in the datasource, will only contain
* entries for datasources which have at least 1 item tagged.
*/
static Map<Long, Long> getCountsOfTags() {
try {
final String countFileTagsQuery = "data_source_obj_id, COUNT(*) AS value"
+ " FROM content_tags as content_tags, tsk_files as tsk_files"
+ " WHERE content_tags.obj_id = tsk_files.obj_id"
+ " GROUP BY data_source_obj_id"; //NON-NLS
//new hashmap so it can be modifiable
Map<Long, Long> tagCountMap = new HashMap<>(getValuesMap(countFileTagsQuery));
final String countArtifactTagsQuery = "data_source_obj_id, COUNT(*) AS value"
+ " FROM blackboard_artifact_tags as artifact_tags, blackboard_artifacts AS arts"
+ " WHERE artifact_tags.artifact_id = arts.artifact_id"
+ " GROUP BY data_source_obj_id"; //NON-NLS
//combine the results from the count artifact tags query into the copy of the mapped results from the count file tags query
getValuesMap(countArtifactTagsQuery).forEach((key, value) -> tagCountMap.merge(key, value, (value1, value2) -> value1 + value2));
return tagCountMap;
} catch (TskCoreException | NoCurrentCaseException ex) {
logger.log(Level.WARNING, "Unable to get counts of tags for all datasources, providing empty results", ex);
return Collections.emptyMap();
}
}
/**
* Get the number of files in the case database for the current data source
* which have the specified mimetypes.
*
* @param currentDataSource the data source which we are finding a file
* count
*
* @param setOfMimeTypes the set of mime types which we are finding the
* number of occurences of
*
* @return a Long value which represents the number of occurrences of the
* specified mime types in the current case for the specified data
* source, null if no count was retrieved
*/
static Long getCountOfFilesForMimeTypes(DataSource currentDataSource, Set<String> setOfMimeTypes) {
if (currentDataSource != null) {
try {
String inClause = String.join("', '", setOfMimeTypes);
SleuthkitCase skCase = Case.getCurrentCaseThrows().getSleuthkitCase();
return skCase.countFilesWhere("data_source_obj_id=" + currentDataSource.getId()
+ " AND type<>" + TskData.TSK_DB_FILES_TYPE_ENUM.VIRTUAL_DIR.getFileType()
+ " AND dir_type<>" + TskData.TSK_FS_NAME_TYPE_ENUM.VIRT_DIR.getValue()
+ " AND mime_type IN ('" + inClause + "')"
+ " AND name<>''");
} catch (TskCoreException | NoCurrentCaseException ex) {
logger.log(Level.WARNING, "Unable to get count of files for specified mime types", ex);
//unable to get count of files for the specified mimetypes cell will be displayed as empty
}
}
return null;
}
/**
* Helper method to execute a select query with a
* DataSourceSingleValueCallback.
*
* @param query the portion of the query which should follow the SELECT
*
* @return a map of datasource object ID to a value of type Long
*
* @throws TskCoreException
* @throws NoCurrentCaseException
*/
private static Map<Long, Long> getValuesMap(String query) throws TskCoreException, NoCurrentCaseException {
SleuthkitCase skCase = Case.getCurrentCaseThrows().getSleuthkitCase();
DataSourceSingleValueCallback callback = new DataSourceSingleValueCallback();
skCase.getCaseDbAccessManager().select(query, callback);
return callback.getMapOfValues();
}
/**
* Empty private constructor
*/
private DataSourceInfoUtilities() {
}
}

View File

@ -1,120 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<Form version="1.5" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
<AuxValues>
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="true"/>
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/>
<AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
</AuxValues>
<Layout>
<DimensionLayout dim="0">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="0" attributes="0">
<EmptySpace min="-2" max="-2" attributes="0"/>
<Group type="103" groupAlignment="0" max="-2" attributes="0">
<Component id="fileCountsByMimeTypeScrollPane" linkSize="1" pref="140" max="32767" attributes="0"/>
<Component id="byMimeTypeLabel" max="32767" attributes="0"/>
</Group>
<EmptySpace type="separate" min="-2" max="-2" attributes="0"/>
<Group type="103" groupAlignment="0" attributes="0">
<Component id="byCategoryLabel" alignment="0" min="-2" max="-2" attributes="0"/>
<Component id="fileCountsByCategoryScrollPane" linkSize="1" alignment="0" min="-2" pref="82" max="-2" attributes="0"/>
</Group>
<EmptySpace type="separate" min="-2" max="-2" attributes="0"/>
<Group type="103" groupAlignment="0" attributes="0">
<Component id="jLabel1" min="-2" pref="79" max="-2" attributes="0"/>
<Component id="artifactCountsScrollPane" min="-2" pref="244" max="-2" attributes="0"/>
</Group>
<EmptySpace max="32767" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
<DimensionLayout dim="1">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="0" attributes="0">
<EmptySpace min="-2" max="-2" attributes="0"/>
<Group type="103" groupAlignment="3" attributes="0">
<Component id="byMimeTypeLabel" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="byCategoryLabel" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="jLabel1" alignment="3" min="-2" max="-2" attributes="0"/>
</Group>
<EmptySpace min="-2" max="-2" attributes="0"/>
<Group type="103" groupAlignment="0" attributes="0">
<Component id="artifactCountsScrollPane" alignment="1" pref="0" max="32767" attributes="0"/>
<Group type="102" attributes="0">
<Group type="103" groupAlignment="0" attributes="0">
<Component id="fileCountsByMimeTypeScrollPane" linkSize="2" min="-2" pref="107" max="-2" attributes="0"/>
<Component id="fileCountsByCategoryScrollPane" linkSize="2" min="-2" pref="86" max="-2" attributes="0"/>
</Group>
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
</Group>
</Group>
<EmptySpace max="-2" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
</Layout>
<SubComponents>
<Container class="javax.swing.JScrollPane" name="fileCountsByMimeTypeScrollPane">
<AuxValues>
<AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
</AuxValues>
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
<SubComponents>
<Component class="javax.swing.JTable" name="fileCountsByMimeTypeTable">
</Component>
</SubComponents>
</Container>
<Component class="javax.swing.JLabel" name="byMimeTypeLabel">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/datasourcesummary/Bundle.properties" key="DataSourceSummaryCountsPanel.byMimeTypeLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
</Component>
<Container class="javax.swing.JScrollPane" name="fileCountsByCategoryScrollPane">
<AuxValues>
<AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
</AuxValues>
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
<SubComponents>
<Component class="javax.swing.JTable" name="fileCountsByCategoryTable">
</Component>
</SubComponents>
</Container>
<Component class="javax.swing.JLabel" name="byCategoryLabel">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/datasourcesummary/Bundle.properties" key="DataSourceSummaryCountsPanel.byCategoryLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
</Component>
<Component class="javax.swing.JLabel" name="jLabel1">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/datasourcesummary/Bundle.properties" key="DataSourceSummaryCountsPanel.jLabel1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
</Component>
<Container class="javax.swing.JScrollPane" name="artifactCountsScrollPane">
<AuxValues>
<AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
</AuxValues>
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
<SubComponents>
<Component class="javax.swing.JTable" name="artifactCountsTable">
</Component>
</SubComponents>
</Container>
</SubComponents>
</Form>

View File

@ -1,342 +0,0 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2019 Basis Technology Corp.
* Contact: carrier <at> sleuthkit <dot> org
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.sleuthkit.autopsy.casemodule.datasourcesummary;
import java.util.Map;
import org.sleuthkit.autopsy.coreutils.Logger;
import javax.swing.JLabel;
import javax.swing.table.DefaultTableCellRenderer;
import org.openide.util.NbBundle.Messages;
import org.sleuthkit.autopsy.casemodule.Case;
import org.sleuthkit.autopsy.coreutils.FileTypeUtils;
import org.sleuthkit.datamodel.DataSource;
/**
* Panel for displaying summary information on the known files present in the
* specified DataSource
*/
@Messages({"DataSourceSummaryCountsPanel.FilesByMimeTypeTableModel.type.header=File Type",
"DataSourceSummaryCountsPanel.FilesByMimeTypeTableModel.count.header=Count",
"DataSourceSummaryCountsPanel.ArtifactCountsTableModel.type.header=Result Type",
"DataSourceSummaryCountsPanel.ArtifactCountsTableModel.count.header=Count",
"DataSourceSummaryCountsPanel.FilesByCategoryTableModel.type.header=File Type",
"DataSourceSummaryCountsPanel.FilesByCategoryTableModel.count.header=Count"
})
class DataSourceSummaryCountsPanel extends javax.swing.JPanel {
// Result returned for a data model if no data found.
private static final Object[][] EMPTY_PAIRS = new Object[][]{};
// column headers for mime type table
private static final Object[] MIME_TYPE_COLUMN_HEADERS = new Object[]{
Bundle.DataSourceSummaryCountsPanel_FilesByMimeTypeTableModel_type_header(),
Bundle.DataSourceSummaryCountsPanel_FilesByMimeTypeTableModel_count_header()
};
// column headers for file by category table
private static final Object[] FILE_BY_CATEGORY_COLUMN_HEADERS = new Object[]{
Bundle.DataSourceSummaryCountsPanel_FilesByCategoryTableModel_type_header(),
Bundle.DataSourceSummaryCountsPanel_FilesByCategoryTableModel_count_header()
};
// column headers for artifact counts table
private static final Object[] ARTIFACT_COUNTS_COLUMN_HEADERS = new Object[]{
Bundle.DataSourceSummaryCountsPanel_ArtifactCountsTableModel_type_header(),
Bundle.DataSourceSummaryCountsPanel_ArtifactCountsTableModel_count_header()
};
private static final long serialVersionUID = 1L;
private static final Logger logger = Logger.getLogger(DataSourceSummaryCountsPanel.class.getName());
private final DefaultTableCellRenderer rightAlignedRenderer = new DefaultTableCellRenderer();
private DataSource dataSource;
/**
* Creates new form DataSourceSummaryCountsPanel
*/
DataSourceSummaryCountsPanel() {
rightAlignedRenderer.setHorizontalAlignment(JLabel.RIGHT);
initComponents();
fileCountsByMimeTypeTable.getTableHeader().setReorderingAllowed(false);
fileCountsByCategoryTable.getTableHeader().setReorderingAllowed(false);
artifactCountsTable.getTableHeader().setReorderingAllowed(false);
setDataSource(null);
}
/**
* The datasource currently used as the model in this panel.
*
* @return The datasource currently being used as the model in this panel.
*/
public DataSource getDataSource() {
return dataSource;
}
/**
* Sets datasource to visualize in the panel.
*
* @param dataSource The datasource to use in this panel.
*/
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
if (dataSource == null || !Case.isCaseOpen()) {
updateCountsTableData(EMPTY_PAIRS,
EMPTY_PAIRS,
EMPTY_PAIRS);
} else {
updateCountsTableData(getMimeTypeModel(dataSource),
getFileCategoryModel(dataSource),
getArtifactCountsModel(dataSource));
}
}
/**
* Specify the DataSource to display file information for.
*
* @param mimeTypeDataModel The mime type data model.
* @param fileCategoryDataModel The file category data model.
* @param artifactDataModel The artifact type data model.
*/
private void updateCountsTableData(Object[][] mimeTypeDataModel, Object[][] fileCategoryDataModel, Object[][] artifactDataModel) {
fileCountsByMimeTypeTable.setModel(new NonEditableTableModel(mimeTypeDataModel, MIME_TYPE_COLUMN_HEADERS));
fileCountsByMimeTypeTable.getColumnModel().getColumn(1).setCellRenderer(rightAlignedRenderer);
fileCountsByMimeTypeTable.getColumnModel().getColumn(0).setPreferredWidth(130);
fileCountsByCategoryTable.setModel(new NonEditableTableModel(fileCategoryDataModel, FILE_BY_CATEGORY_COLUMN_HEADERS));
fileCountsByCategoryTable.getColumnModel().getColumn(1).setCellRenderer(rightAlignedRenderer);
fileCountsByCategoryTable.getColumnModel().getColumn(0).setPreferredWidth(130);
artifactCountsTable.setModel(new NonEditableTableModel(artifactDataModel, ARTIFACT_COUNTS_COLUMN_HEADERS));
artifactCountsTable.getColumnModel().getColumn(0).setPreferredWidth(230);
artifactCountsTable.getColumnModel().getColumn(1).setCellRenderer(rightAlignedRenderer);
this.repaint();
}
/**
* Determines the JTable data model for datasource mime types.
*
* @param dataSource The DataSource.
*
* @return The model to be used with a JTable.
*/
@Messages({
"DataSourceSummaryCountsPanel.FilesByMimeTypeTableModel.images.row=Images",
"DataSourceSummaryCountsPanel.FilesByMimeTypeTableModel.videos.row=Videos",
"DataSourceSummaryCountsPanel.FilesByMimeTypeTableModel.audio.row=Audio",
"DataSourceSummaryCountsPanel.FilesByMimeTypeTableModel.documents.row=Documents",
"DataSourceSummaryCountsPanel.FilesByMimeTypeTableModel.executables.row=Executables"
})
private static Object[][] getMimeTypeModel(DataSource dataSource) {
return new Object[][]{
new Object[]{Bundle.DataSourceSummaryCountsPanel_FilesByMimeTypeTableModel_images_row(),
getCount(dataSource, FileTypeUtils.FileTypeCategory.IMAGE)},
new Object[]{Bundle.DataSourceSummaryCountsPanel_FilesByMimeTypeTableModel_videos_row(),
getCount(dataSource, FileTypeUtils.FileTypeCategory.VIDEO)},
new Object[]{Bundle.DataSourceSummaryCountsPanel_FilesByMimeTypeTableModel_audio_row(),
getCount(dataSource, FileTypeUtils.FileTypeCategory.AUDIO)},
new Object[]{Bundle.DataSourceSummaryCountsPanel_FilesByMimeTypeTableModel_documents_row(),
getCount(dataSource, FileTypeUtils.FileTypeCategory.DOCUMENTS)},
new Object[]{Bundle.DataSourceSummaryCountsPanel_FilesByMimeTypeTableModel_executables_row(),
getCount(dataSource, FileTypeUtils.FileTypeCategory.EXECUTABLE)}
};
}
/**
* Retrieves the counts of files of a particular mime type for a particular
* DataSource.
*
* @param dataSource The DataSource.
* @param category The mime type category.
*
* @return The count.
*/
private static Long getCount(DataSource dataSource, FileTypeUtils.FileTypeCategory category) {
return DataSourceInfoUtilities.getCountOfFilesForMimeTypes(dataSource, category.getMediaTypes());
}
/**
* Determines the JTable data model for datasource file categories.
*
* @param dataSource The DataSource.
*
* @return The model to be used with a JTable.
*/
@Messages({
"DataSourceSummaryCountsPanel.FilesByCategoryTableModel.all.row=All",
"DataSourceSummaryCountsPanel.FilesByCategoryTableModel.allocated.row=Allocated",
"DataSourceSummaryCountsPanel.FilesByCategoryTableModel.unallocated.row=Unallocated",
"DataSourceSummaryCountsPanel.FilesByCategoryTableModel.slack.row=Slack",
"DataSourceSummaryCountsPanel.FilesByCategoryTableModel.directory.row=Directory"
})
private static Object[][] getFileCategoryModel(DataSource selectedDataSource) {
Long fileCount = zeroIfNull(DataSourceInfoUtilities.getCountOfFiles(selectedDataSource));
Long unallocatedFiles = zeroIfNull(DataSourceInfoUtilities.getCountOfUnallocatedFiles(selectedDataSource));
Long allocatedFiles = zeroIfNull(getAllocatedCount(fileCount, unallocatedFiles));
Long slackFiles = zeroIfNull(DataSourceInfoUtilities.getCountOfSlackFiles(selectedDataSource));
Long directories = zeroIfNull(DataSourceInfoUtilities.getCountOfDirectories(selectedDataSource));
return new Object[][]{
new Object[]{Bundle.DataSourceSummaryCountsPanel_FilesByCategoryTableModel_all_row(), fileCount},
new Object[]{Bundle.DataSourceSummaryCountsPanel_FilesByCategoryTableModel_allocated_row(), allocatedFiles},
new Object[]{Bundle.DataSourceSummaryCountsPanel_FilesByCategoryTableModel_unallocated_row(), unallocatedFiles},
new Object[]{Bundle.DataSourceSummaryCountsPanel_FilesByCategoryTableModel_slack_row(), slackFiles},
new Object[]{Bundle.DataSourceSummaryCountsPanel_FilesByCategoryTableModel_directory_row(), directories}
};
}
/**
* Returns 0 if value is null.
*
* @param origValue The original value.
*
* @return The value or 0 if null.
*/
private static Long zeroIfNull(Long origValue) {
return origValue == null ? 0 : origValue;
}
/**
* Safely gets the allocated files count.
*
* @param allFilesCount The count of all files.
* @param unallocatedFilesCount The count of unallocated files.
*
* @return The count of allocated files.
*/
private static long getAllocatedCount(Long allFilesCount, Long unallocatedFilesCount) {
if (allFilesCount == null) {
return 0;
} else if (unallocatedFilesCount == null) {
return allFilesCount;
} else {
return allFilesCount - unallocatedFilesCount;
}
}
/**
* The counts of different artifact types found in a DataSource.
*
* @param selectedDataSource The DataSource.
*
* @return The JTable data model of counts of artifact types.
*/
private static Object[][] getArtifactCountsModel(DataSource selectedDataSource) {
Map<String, Long> artifactMapping = DataSourceInfoUtilities.getCountsOfArtifactsByType(selectedDataSource);
if (artifactMapping == null) {
return EMPTY_PAIRS;
}
return artifactMapping.entrySet().stream()
.filter((entrySet) -> entrySet != null && entrySet.getKey() != null)
.sorted((a, b) -> a.getKey().compareTo(b.getKey()))
.map((entrySet) -> new Object[]{entrySet.getKey(), entrySet.getValue()})
.toArray(Object[][]::new);
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
fileCountsByMimeTypeScrollPane = new javax.swing.JScrollPane();
fileCountsByMimeTypeTable = new javax.swing.JTable();
byMimeTypeLabel = new javax.swing.JLabel();
fileCountsByCategoryScrollPane = new javax.swing.JScrollPane();
fileCountsByCategoryTable = new javax.swing.JTable();
byCategoryLabel = new javax.swing.JLabel();
jLabel1 = new javax.swing.JLabel();
artifactCountsScrollPane = new javax.swing.JScrollPane();
artifactCountsTable = new javax.swing.JTable();
fileCountsByMimeTypeScrollPane.setViewportView(fileCountsByMimeTypeTable);
org.openide.awt.Mnemonics.setLocalizedText(byMimeTypeLabel, org.openide.util.NbBundle.getMessage(DataSourceSummaryCountsPanel.class, "DataSourceSummaryCountsPanel.byMimeTypeLabel.text")); // NOI18N
fileCountsByCategoryScrollPane.setViewportView(fileCountsByCategoryTable);
org.openide.awt.Mnemonics.setLocalizedText(byCategoryLabel, org.openide.util.NbBundle.getMessage(DataSourceSummaryCountsPanel.class, "DataSourceSummaryCountsPanel.byCategoryLabel.text")); // NOI18N
org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(DataSourceSummaryCountsPanel.class, "DataSourceSummaryCountsPanel.jLabel1.text")); // NOI18N
artifactCountsScrollPane.setViewportView(artifactCountsTable);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(fileCountsByMimeTypeScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 140, Short.MAX_VALUE)
.addComponent(byMimeTypeLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(byCategoryLabel)
.addComponent(fileCountsByCategoryScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 82, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 79, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(artifactCountsScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 244, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {fileCountsByCategoryScrollPane, fileCountsByMimeTypeScrollPane});
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(byMimeTypeLabel)
.addComponent(byCategoryLabel)
.addComponent(jLabel1))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(artifactCountsScrollPane, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(fileCountsByMimeTypeScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 107, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(fileCountsByCategoryScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 86, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(0, 0, Short.MAX_VALUE)))
.addContainerGap())
);
layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {fileCountsByCategoryScrollPane, fileCountsByMimeTypeScrollPane});
}// </editor-fold>//GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JScrollPane artifactCountsScrollPane;
private javax.swing.JTable artifactCountsTable;
private javax.swing.JLabel byCategoryLabel;
private javax.swing.JLabel byMimeTypeLabel;
private javax.swing.JScrollPane fileCountsByCategoryScrollPane;
private javax.swing.JTable fileCountsByCategoryTable;
private javax.swing.JScrollPane fileCountsByMimeTypeScrollPane;
private javax.swing.JTable fileCountsByMimeTypeTable;
private javax.swing.JLabel jLabel1;
// End of variables declaration//GEN-END:variables
}

View File

@ -1,70 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<Form version="1.5" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
<AuxValues>
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="true"/>
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/>
<AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
</AuxValues>
<Layout>
<DimensionLayout dim="0">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="0" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<Group type="103" groupAlignment="0" attributes="0">
<Component id="programsRunLabel" min="-2" pref="155" max="-2" attributes="0"/>
<Component id="topProgramsScrollPane" min="-2" pref="460" max="-2" attributes="0"/>
</Group>
<EmptySpace pref="128" max="32767" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
<DimensionLayout dim="1">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="0" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<Component id="programsRunLabel" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="topProgramsScrollPane" min="-2" max="-2" attributes="0"/>
<EmptySpace max="32767" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
</Layout>
<SubComponents>
<Component class="javax.swing.JLabel" name="programsRunLabel">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/datasourcesummary/Bundle.properties" key="DataSourceSummaryUserActivityPanel.programsRunLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<AuxValues>
<AuxValue name="JavaCodeGenerator_VariableLocal" type="java.lang.Boolean" value="true"/>
<AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="0"/>
</AuxValues>
</Component>
<Container class="javax.swing.JScrollPane" name="topProgramsScrollPane">
<Properties>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[750, 187]"/>
</Property>
</Properties>
<AuxValues>
<AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
</AuxValues>
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
<SubComponents>
<Component class="javax.swing.JTable" name="topProgramsTable">
</Component>
</SubComponents>
</Container>
</SubComponents>
</Form>

View File

@ -1,291 +0,0 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2020 Basis Technology Corp.
* Contact: carrier <at> sleuthkit <dot> org
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.sleuthkit.autopsy.casemodule.datasourcesummary;
import java.awt.Component;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;
import org.openide.util.NbBundle.Messages;
import org.sleuthkit.autopsy.casemodule.Case;
import org.sleuthkit.datamodel.DataSource;
/**
* A panel to display user activity.
*/
@Messages({
"DataSourceSummaryUserActivityPanel_tab_title=User Activity",
"DataSourceSummaryUserActivityPanel_TopProgramsTableModel_name_header=Program",
"DataSourceSummaryUserActivityPanel_TopProgramsTableModel_folder_header=Folder",
"DataSourceSummaryUserActivityPanel_TopProgramsTableModel_count_header=Run Times",
"DataSourceSummaryUserActivityPanel_TopProgramsTableModel_lastrun_header=Last Run"
})
public class DataSourceSummaryUserActivityPanel extends javax.swing.JPanel {
private static final long serialVersionUID = 1L;
private static final DateFormat DATETIME_FORMAT = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss", Locale.getDefault());
private static final int TOP_PROGS_COUNT = 10;
private static final DefaultTableCellRenderer RIGHT_ALIGNED_RENDERER = new DefaultTableCellRenderer();
static {
RIGHT_ALIGNED_RENDERER.setHorizontalAlignment(JLabel.RIGHT);
}
private DataSource dataSource;
/**
* Creates new form DataSourceUserActivityPanel
*/
public DataSourceSummaryUserActivityPanel() {
initComponents();
topProgramsTable.getTableHeader().setReorderingAllowed(false);
}
/**
* The datasource currently used as the model in this panel.
*
* @return The datasource currently being used as the model in this panel.
*/
public DataSource getDataSource() {
return dataSource;
}
/**
* Sets datasource to visualize in the panel.
*
* @param dataSource The datasource to use in this panel.
*/
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
if (dataSource == null || !Case.isCaseOpen()) {
updateTopPrograms(new TopProgramsModel(null));
} else {
updateTopPrograms(getTopProgramsModel(dataSource));
}
}
/**
* Updates the Top Programs Table in the gui.
*
* @param data The data in Object[][] form to be used by the
* DefaultTableModel.
*/
private void updateTopPrograms(TopProgramsModel model) {
topProgramsTable.setModel(model);
topProgramsTable.getColumnModel().getColumn(0).setPreferredWidth(250);
topProgramsTable.getColumnModel().getColumn(0).setCellRenderer(PATH_CELL_RENDERER);
topProgramsTable.getColumnModel().getColumn(1).setPreferredWidth(150);
topProgramsTable.getColumnModel().getColumn(2).setCellRenderer(RIGHT_ALIGNED_RENDERER);
topProgramsTable.getColumnModel().getColumn(2).setPreferredWidth(80);
topProgramsTable.getColumnModel().getColumn(3).setPreferredWidth(150);
topProgramsScrollPane.getVerticalScrollBar().setValue(0);
this.repaint();
}
/**
* The counts of top programs run.
*
* @param selectedDataSource The DataSource.
*
* @return The JTable data model of counts of program runs.
*/
private static TopProgramsModel getTopProgramsModel(DataSource selectedDataSource) {
List<DataSourceInfoUtilities.TopProgramsResult> topProgramList
= DataSourceInfoUtilities.getTopPrograms(selectedDataSource, TOP_PROGS_COUNT);
if (topProgramList == null) {
return new TopProgramsModel(null);
} else {
return new TopProgramsModel(topProgramList);
}
}
/**
* A POJO defining the values present in the name cell. Defines the name as
* well as the path for the tooltip.
*/
private static class ProgramNameCellValue {
private final String programName;
private final String programPath;
ProgramNameCellValue(String programName, String programPath) {
this.programName = programName;
this.programPath = programPath;
}
@Override
public String toString() {
// override so that the value in the cell reads as programName
return programName;
}
/**
* @return The program name.
*/
String getProgramName() {
return programName;
}
/**
* @return The path of the program.
*/
String getProgramPath() {
return programPath;
}
}
/**
* Defines a cell renderer for the first cell rendering the name as the text
* and path as the tooltip.
*/
private static TableCellRenderer PATH_CELL_RENDERER = new DefaultTableCellRenderer() {
public Component getTableCellRendererComponent(
JTable table, Object value,
boolean isSelected, boolean hasFocus,
int row, int column) {
JLabel c = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if (value instanceof ProgramNameCellValue) {
ProgramNameCellValue cellValue = (ProgramNameCellValue) value;
c.setToolTipText(cellValue.getProgramPath());
}
return c;
}
};
/**
* Defines the table model for a JTable of the programs. Accepts a list of
* TopProgramsResult objects as rows data source.
*/
private static class TopProgramsModel extends AbstractTableModel {
private static final long serialVersionUID = 1L;
// column headers for artifact counts table
private static final String[] TOP_PROGS_COLUMN_HEADERS = new String[]{
Bundle.DataSourceSummaryUserActivityPanel_TopProgramsTableModel_name_header(),
Bundle.DataSourceSummaryUserActivityPanel_TopProgramsTableModel_folder_header(),
Bundle.DataSourceSummaryUserActivityPanel_TopProgramsTableModel_count_header(),
Bundle.DataSourceSummaryUserActivityPanel_TopProgramsTableModel_lastrun_header()
};
private final List<DataSourceInfoUtilities.TopProgramsResult> programResults;
/**
* Main constructor.
*
* @param programResults The results to display.
*/
TopProgramsModel(List<DataSourceInfoUtilities.TopProgramsResult> programResults) {
this.programResults = programResults == null ? new ArrayList<>() : Collections.unmodifiableList(programResults);
}
@Override
public String getColumnName(int column) {
return column < 0 || column >= TOP_PROGS_COLUMN_HEADERS.length ? null : TOP_PROGS_COLUMN_HEADERS[column];
}
@Override
public int getRowCount() {
return programResults.size();
}
@Override
public int getColumnCount() {
return TOP_PROGS_COLUMN_HEADERS.length;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
if (rowIndex < 0 || rowIndex >= programResults.size()) {
return null;
}
DataSourceInfoUtilities.TopProgramsResult result = programResults.get(rowIndex);
switch (columnIndex) {
case 0:
return new ProgramNameCellValue(result.getProgramName(), result.getProgramPath());
case 1:
return DataSourceInfoUtilities.getShortFolderName(result.getProgramPath(), result.getProgramName());
case 2:
return result.getRunTimes();
case 3:
return result.getLastRun() == null ? null : DATETIME_FORMAT.format(result.getLastRun());
default:
return null;
}
}
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
javax.swing.JLabel programsRunLabel = new javax.swing.JLabel();
topProgramsScrollPane = new javax.swing.JScrollPane();
topProgramsTable = new javax.swing.JTable();
org.openide.awt.Mnemonics.setLocalizedText(programsRunLabel, org.openide.util.NbBundle.getMessage(DataSourceSummaryUserActivityPanel.class, "DataSourceSummaryUserActivityPanel.programsRunLabel.text")); // NOI18N
topProgramsScrollPane.setPreferredSize(new java.awt.Dimension(750, 187));
topProgramsScrollPane.setViewportView(topProgramsTable);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(programsRunLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 155, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(topProgramsScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 460, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(128, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(programsRunLabel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(topProgramsScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
}// </editor-fold>//GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JScrollPane topProgramsScrollPane;
private javax.swing.JTable topProgramsTable;
// End of variables declaration//GEN-END:variables
}

View File

@ -1,23 +1,24 @@
OptionsCategory_Name_TagNamesOptions=\u30bf\u30b0
#Tue Aug 18 18:09:21 UTC 2020
OptionsCategory_Name_TagNamesOptions=\u30ab\u30b9\u30bf\u30e0\u30bf\u30b0
OptionsCategory_TagNames=TagNames
TagNameDefinition.predefTagNames.bookmark.text=\u30d6\u30c3\u30af\u30de\u30fc\u30af
TagNameDefinition.predefTagNames.followUp.text=\u30d5\u30a9\u30ed\u30fc\u30a2\u30c3\u30d7
TagNameDefinition.predefTagNames.notableItem.text=\u9855\u8457\u306a\u9805\u76ee
TagNameDialog.editTitle.text=\u30bf\u30b0\u3092\u7de8\u96c6
TagNameDialog.JOptionPane.tagDescriptionIllegalCharacters.message=\u30bf\u30b0\u306e\u8a18\u8ff0\u306b\u30ab\u30f3\u30de(,)\u3084\u30bb\u30df\u30b3\u30ed\u30f3(;)\u3092\u542b\u3081\u3089\u308c\u307e\u305b\u3093
TagNameDialog.JOptionPane.tagDescriptionIllegalCharacters.title=\u30bf\u30b0\u306e\u8a18\u8ff0\u306b\u7121\u52b9\u306a\u6587\u5b57\u304c\u3042\u308a\u307e\u3059
TagNameDialog.title.text=\u65b0\u898f\u30bf\u30b0
TagNameDialog.JOptionPane.tagNameIllegalCharacters.message=\u30bf\u30b0\u540d\u306b\u6b21\u306e\u8a18\u53f7\u3092\u542b\u3081\u3089\u308c\u307e\u305b\u3093: \\ : * ? " < > | , ;
TagNameDialog.JOptionPane.tagNameIllegalCharacters.title=\u30bf\u30b0\u540d\u306b\u7121\u52b9\u306a\u6587\u5b57\u304c\u3042\u308a\u307e\u3059
TagNameDialog.JOptionPane.tagNameEmpty.message=\u30bf\u30b0\u540d\u306f\u7a7a(\u672a\u5165\u529b)\u306e\u72b6\u614b\u306b\u3067\u304d\u307e\u305b\u3093\u3002
TagNameDialog.JOptionPane.tagNameEmpty.title=\u7a7a(\u672a\u5165\u529b)\u306e\u72b6\u614b\u306e\u30bf\u30b0\u540d
TagNameDialog.JOptionPane.tagNameIllegalCharacters.message=\u30bf\u30b0\u540d\u306b\u6b21\u306e\u8a18\u53f7\u3092\u542b\u3081\u3089\u308c\u307e\u305b\u3093\: \\ \: * ? " < > | , ;
TagNameDialog.JOptionPane.tagNameIllegalCharacters.title=\u30bf\u30b0\u540d\u306b\u7121\u52b9\u306a\u6587\u5b57\u304c\u3042\u308a\u307e\u3059
TagNameDialog.cancelButton.text=\u53d6\u308a\u6d88\u3057
TagNameDialog.editTitle.text=\u30bf\u30b0\u3092\u7de8\u96c6
TagNameDialog.newTagNameLabel.text=\u540d\u524d\:
TagNameDialog.okButton.text=OK
TagNameDialog.tagNameTextField.text=
TagNameDialog.title.text=\u65b0\u898f\u30bf\u30b0
TagOptionsPanel.TagNameDialog.tagNameAlreadyExists.message=\u30bf\u30b0\u540d\u306f\u4e00\u610f\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002\u3053\u306e\u540d\u524d\u306e\u30bf\u30b0\u306f\u3059\u3067\u306b\u5b58\u5728\u3057\u307e\u3059\u3002
TagOptionsPanel.TagNameDialog.tagNameAlreadyExists.title=\u30bf\u30b0\u540d\u3092\u8907\u88fd
TagsManager.notableTagEnding.text=\ (\u9855\u8457)
TagOptionsPanel.deleteTagNameButton.text=\u30bf\u30b0\u3092\u524a\u9664
TagOptionsPanel.newTagNameButton.text=\u65b0\u898f\u30bf\u30b0
TagOptionsPanel.tagTypesListLabel.text=\u30bf\u30b0\u540d:
TagNameDialog.okButton.text=OK
TagNameDialog.cancelButton.text=\u53d6\u308a\u6d88\u3057
TagNameDialog.tagNameTextField.text=
TagNameDialog.newTagNameLabel.text=\u540d\u524d:
TagOptionsPanel.tagTypesListLabel.text=\u30bf\u30b0\u540d\:
TagsManager.notableTagEnding.text=\ (\u9855\u8457)

View File

@ -127,6 +127,24 @@ public class FileManager implements Closeable {
return caseDb.findAllFilesWhere("data_source_obj_id = " + dataSource.getId() + " AND " + createFileTypeInCondition(mimeTypes));
}
/**
* Find all files with the exact given name and parentId.
*
* @param parentId Id of the parent folder to search.
* @param name Exact file name to match.
*
* @return A list of matching files.
*
* @throws TskCoreException
*/
public synchronized List<AbstractFile> findFilesExactName(long parentId, String name) throws TskCoreException{
if (null == caseDb) {
throw new TskCoreException("File manager has been closed");
}
String whereClause = "name = '%s'";
return caseDb.findAllFilesInFolderWhere(parentId, String.format(whereClause, name));
}
/**
* Converts a list of MIME types into an SQL "mime_type IN" condition.
*

View File

@ -0,0 +1,3 @@
#Tue Aug 18 18:09:21 UTC 2020
OpenIDE-Module-Long-Description=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u53d6\u8fbc\u30e2\u30b8\u30e5\u30fc\u30eb\u3068\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3002\n\n\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30dd\u30b8\u30c8\u30ea\u306e\u53d6\u8fbc\u30e2\u30b8\u30e5\u30fc\u30eb\u306f\u3001\u9078\u629e\u3057\u305f\u76f8\u95a2\u30bf\u30a4\u30d7\u3068\u4e00\u81f4\u3059\u308b\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u306e\u5c5e\u6027\u3092\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u4fdd\u5b58\u3057\u307e\u3059\u3002\n\u4fdd\u5b58\u3055\u308c\u305f\u5c5e\u6027\u306f\u3001\u4eca\u5f8c\u306e\u30b1\u30fc\u30b9\u3067\u3001\u53d6\u308a\u8fbc\u307f\u4e2d\u306b\u30d5\u30a1\u30a4\u30eb\u3068\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u3092\u95a2\u9023\u4ed8\u3051\u3066\u5206\u6790\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002\u300d
OpenIDE-Module-Short-Description=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ea\u30dd\u30b8\u30c8\u30ea\u8aad\u8fbc\u30e2\u30b8\u30e5\u30fc\u30eb

View File

@ -12,7 +12,6 @@ CentralRepoDbChoice.PostgreSQL.Text=Custom PostgreSQL
CentralRepoDbChoice.PostgreSQL_Multiuser.Text=PostgreSQL using multi-user settings
CentralRepoDbChoice.Sqlite.Text=SQLite
CentralRepoDbManager.connectionErrorMsg.text=Failed to connect to central repository database.
CentralRepositoryService.progressMsg.updatingDataSourcesTable=Checking for v1.2 data updates...
CentralRepositoryService.progressMsg.updatingSchema=Updating schema...
CentralRepositoryService.serviceName=Central Repository Service
CorrelationAttributeInstance.invalidName.message=Invalid database table name. Name must start with a lowercase letter and can only contain lowercase letters, numbers, and '_'.

View File

@ -0,0 +1,10 @@
#Tue Aug 18 18:09:20 UTC 2020
CentralRepoDbChoice.Disabled.Text=\u7121\u52b9
CentralRepoDbChoice.PostgreSQL.Text=\u30ab\u30b9\u30bf\u30e0PostgreSQL
CentralRepoDbChoice.PostgreSQL_Multiuser.Text=\u30de\u30eb\u30c1\u30e6\u30fc\u30b6\u30fc\u8a2d\u5b9a\u4f7f\u7528PostgreSQL
CentralRepoDbChoice.Sqlite.Text=SQLite
CentralRepoDbManager.connectionErrorMsg.text=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ea\u30dd\u30b8\u30c8\u30ea\u30fc\u30fb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3078\u306e\u63a5\u7d9a\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002
CentralRepositoryService.progressMsg.updatingSchema=\u30b9\u30ad\u30fc\u30de\u3092\u66f4\u65b0\u3057\u3066\u3044\u307e\u3059\u2026
CentralRepositoryService.serviceName=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ea\u30dd\u30b8\u30c8\u30ea\u30fc\u30fb\u30b5\u30fc\u30d3\u30b9
CorrelationAttributeUtil.emailaddresses.text=\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9
Persona.defaultName=\u540d\u524d\u306a\u3057

View File

@ -42,8 +42,8 @@ public class CentralRepositoryService implements AutopsyService {
}
@NbBundle.Messages({
"CentralRepositoryService.progressMsg.updatingSchema=Updating schema...",
"CentralRepositoryService.progressMsg.updatingDataSourcesTable=Checking for v1.2 data updates...",})
"CentralRepositoryService.progressMsg.updatingSchema=Updating schema..."
})
@Override
public void openCaseResources(CaseContext context) throws AutopsyServiceException {
if (!CentralRepository.isEnabled()) {
@ -58,7 +58,6 @@ public class CentralRepositoryService implements AutopsyService {
return;
}
progress.progress(Bundle.CentralRepositoryService_progressMsg_updatingDataSourcesTable());
dataUpgradeForVersion1dot2(context.getCase());
}

View File

@ -0,0 +1,5 @@
#Tue Aug 18 18:09:20 UTC 2020
IngestEventsListener.ingestmodule.name=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ea\u30dd\u30b8\u30c8\u30ea
Installer.initialCreateSqlite.messageDesc=\u51e6\u7406\u3059\u308b\u3059\u3079\u3066\u306e\u30cf\u30c3\u30b7\u30e5\u3068\u8b58\u5225\u5b50\u306b\u95a2\u3059\u308b\u60c5\u5831\u3092\u4fdd\u5b58\u3057\u307e\u3059\u3002 \u4ee5\u524d\u306b\u78ba\u8a8d\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u3092\u7121\u8996\u3057\u3001\u30b1\u30fc\u30b9\u9593\u306e\u95a2\u9023\u3092\u4f5c\u6210\u3067\u304d\u307e\u3059\u3002
Installer.initialCreateSqlite.messageHeader=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ea\u30dd\u30b8\u30c8\u30ea\u30fc\u304c\u7121\u52b9\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002 \u6709\u52b9\u306b\u3057\u307e\u3059\u304b\uff1f
Installer.initialCreateSqlite.title=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ea\u30dd\u30b8\u30c8\u30ea\u30fc\u3092 \u6709\u52b9\u306b\u3057\u307e\u3059\u304b\uff1f

View File

@ -0,0 +1,7 @@
#Tue Aug 18 18:09:20 UTC 2020
CentralRepoIngestModel_name_header=\u540d\u524d\uff1a<br>
CentralRepoIngestModel_previous_case_header=<br>\u4ee5\u524d\u306e\u30b1\u30fc\u30b9\uff1a<br>
CentralRepoIngestModule.errorMessage.isNotEnabled=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u8a2d\u5b9a\u304c\u521d\u671f\u5316\u3055\u308c\u3066\u3044\u306a\u3044\u305f\u3081\u3001\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u53d6\u8fbc\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u5b9f\u884c\u3067\u304d\u307e\u305b\u3093\u3002
CentralRepoIngestModuleFactory.ingestmodule.name=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ea\u30dd\u30b8\u30c8\u30ea
CentralRepoIngestModule_notable_message_header=<html>\u3053\u306e\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u5185\u306e\u30d5\u30a1\u30a4\u30eb\u306f\u4ee5\u524d\u300c\u6ce8\u76ee\u300d\u3068\u3057\u3066\u30bf\u30b0\u4ed8\u3051\u3055\u308c\u3066\u3044\u307e\u3059\u3002<br>
CentralRepoIngestModule_postToBB_knownBadMsg=\u6ce8\u76ee\uff1a {0}

View File

@ -1,5 +1,14 @@
#Tue Aug 18 18:09:20 UTC 2020
AddNewOrganizationDialog.addNewOrg.msg=\u65b0\u898f\u7d44\u7e54\u3092\u8ffd\u52a0
AddNewOrganizationDialog.bnCancel.text=\u53d6\u308a\u6d88\u3057
AddNewOrganizationDialog.bnOK.text=OK
AddNewOrganizationDialog.bnOk.addFailed.text=\u65b0\u898f\u7d44\u7e54\u3092\u8ffd\u52a0\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
AddNewOrganizationDialog.lbOrganizationName.text=\u7d44\u7e54\u540d\:
AddNewOrganizationDialog.lbPocEmail.text=\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\:
AddNewOrganizationDialog.lbPocHeading.text=\u9023\u7d61\u5148\:
AddNewOrganizationDialog.lbPocName.text=\u540d\u524d\:
AddNewOrganizationDialog.lbPocPhone.text=\u96fb\u8a71\u756a\u53f7\:
AddNewOrganizationDialog.tfName.tooltip=POC\u540d
AddNewOrganizationDialog.validation.incompleteFields=\u7d44\u7e54\u540d\u304c\u5fc5\u8981\u3067\u3059\u3002
CasesTableModel.case=\u30b1\u30fc\u30b9\u540d
CasesTableModel.creationDate=\u4f5c\u6210\u65e5
@ -7,20 +16,30 @@ CasesTableModel.noData=\u30b1\u30fc\u30b9\u306f\u3042\u308a\u307e\u305b\u3093
DataSourcesTableModel.dataSource=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u540d
DataSourcesTableModel.deviceId=\u30c7\u30d0\u30a4\u30b9ID
DataSourcesTableModel.noData=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u306f\u3042\u308a\u307e\u305b\u3093
EamDbSettingsDialog.bnCancel.text=\u53d6\u308a\u6d88\u3057
EamDbSettingsDialog.bnDatabasePathFileOpen.text=\u53c2\u7167...
EamDbSettingsDialog.bnOk.text=OK
EamDbSettingsDialog.chooserPath.failedToGetDbPathMsg=\u9078\u629e\u3057\u305f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306f\u7121\u52b9\u3067\u3059\u3002\u3082\u3046\u4e00\u5ea6\u304a\u8a66\u3057\u304f\u3060\u3055\u3044\u3002
EamDbSettingsDialog.fcDatabasePath.title=central_repository.db\u306e\u5834\u6240\u3092\u9078\u629e
EamDbSettingsDialog.lbDatabaseType.text=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30bf\u30a4\u30d7 :
EamDbSettingsDialog.lbDatabaseDesc.text=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\:
EamDbSettingsDialog.lbDatabasePath.text=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30d1\u30b9 \:
EamDbSettingsDialog.lbDatabaseType.text=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30bf\u30a4\u30d7 \:
EamDbSettingsDialog.lbFullDbPath.text=
EamDbSettingsDialog.lbHostName.text=\u30db\u30b9\u30c8\u540d / IP \:
EamDbSettingsDialog.lbPort.text=\u30dd\u30fc\u30c8 \:
EamDbSettingsDialog.lbSingleUserSqLite.text=SQLite\u306f\u4e00\u5ea6\u306b1\u4eba\u306e\u8abf\u67fb\u54e1\u306e\u307f\u304c\u4f7f\u7528\u3057\u307e\u3059\u3002
EamDbSettingsDialog.lbUserName.text=\u30e6\u30fc\u30b6\u30fc\u540d \:
EamDbSettingsDialog.lbUserPassword.text=\u30e6\u30fc\u30b6\u30fc\u30d1\u30b9\u30ef\u30fc\u30c9 \:
EamDbSettingsDialog.okButton.connectionErrorMsg.text=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u30fb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u63a5\u7d9a\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
EamDbSettingsDialog.okButton.corruptDatabaseExists.message=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306f\u5b58\u5728\u3057\u307e\u3059\u304c\u3001\u6b63\u3057\u3044\u5f62\u5f0f\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u624b\u52d5\u3067\u524a\u9664\u3059\u308b\u304b\u5225\u306e\u30d1\u30b9\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044(\u5fc5\u8981\u306b\u5fdc\u3058\u3066)\u3002
EamDbSettingsDialog.okButton.corruptDatabaseExists.title=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u8aad\u307f\u8fbc\u307f\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f
EamDbSettingsDialog.okButton.createDbDialog.message=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306f\u5b58\u5728\u3057\u307e\u305b\u3093\u3002\u4f5c\u6210\u3057\u307e\u3059\u304b?
EamDbSettingsDialog.okButton.createDbDialog.title=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306f\u5b58\u5728\u3057\u307e\u305b\u3093
EamDbSettingsDialog.okButton.createDbError.title=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093
EamDbSettingsDialog.okButton.createPostgresDbError.message=Postgres\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3002Postgres\u30b5\u30fc\u30d0\u30fc\u306e\u30a2\u30c9\u30ec\u30b9\u3001\u30dd\u30fc\u30c8\u3001\u30ed\u30b0\u30a4\u30f3\u8cc7\u683c\u60c5\u5831\u304c\u6b63\u3057\u3044\u304b\u78ba\u8a8d\u3057\u3066\u304b\u3089\u3082\u3046\u4e00\u5ea6\u304a\u8a66\u3057\u304f\u3060\u3055\u3044\u3002
EamDbSettingsDialog.okButton.createSQLiteDbError.message=SQLite\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3002\u5834\u6240\u304c\u5b58\u5728\u3057\u3001\u66f8\u304d\u8fbc\u307f\u6a29\u9650\u304c\u3042\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304b\u3089\u3082\u3046\u4e00\u5ea6\u304a\u8a66\u3057\u304f\u3060\u3055\u3044\u3002
EamDbSettingsDialog.okButton.databaseConnectionFailed.message=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u63a5\u7d9a\u3067\u304d\u307e\u305b\u3093\u3002\u8a2d\u5b9a\u3092\u78ba\u8a8d\u3057\u3066\u304b\u3089\u3082\u3046\u4e00\u5ea6\u304a\u8a66\u3057\u304f\u3060\u3055\u3044\u3002
EamDbSettingsDialog.okButton.databaseConnectionFailed.title=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u63a5\u7d9a\u306b\u5931\u6557\u3057\u307e\u3057\u305f
EamDbSettingsDialog.okButton.corruptDatabaseExists.message=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ea\u30dd\u30b8\u30c8\u30ea\u30fb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306f\u5b58\u5728\u3057\u307e\u3059\u304c\u3001\u6b63\u3057\u3044\u5f62\u5f0f\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 \u624b\u52d5\u3067\u524a\u9664\u3059\u308b\u304b\u3001\u5225\u306e\u30d1\u30b9\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\uff08\u8a72\u5f53\u3059\u308b\u5834\u5408\uff09\u3002
EamDbSettingsDialog.okButton.corruptDatabaseExists.title=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ea\u30dd\u30b8\u30c8\u30ea\u30fb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u8aad\u307f\u8fbc\u307f\u30a8\u30e9\u30fc
EamDbSettingsDialog.okButton.createDbDialog.message=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ea\u30dd\u30b8\u30c8\u30ea\u30fb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304c\u5b58\u5728\u3057\u307e\u305b\u3093\u3002\u4f5c\u6210\u3057\u307e\u3059\u304b\uff1f
EamDbSettingsDialog.okButton.createDbDialog.title=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ea\u30dd\u30b8\u30c8\u30ea\u30fb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304c\u5b58\u5728\u3057\u3066\u3044\u307e\u305b\u3093
EamDbSettingsDialog.okButton.createDbError.title=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ea\u30dd\u30b8\u30c8\u30ea\u30fb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093
EamDbSettingsDialog.okButton.createPostgresDbError.message=Postgres\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ea\u30dd\u30b8\u30c8\u30ea\u30fb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3002\u30a2\u30c9\u30ec\u30b9\u3001\u30dd\u30fc\u30c8\u3001\u304a\u3088\u3073\u30ed\u30b0\u30a4\u30f3\u8cc7\u683c\u60c5\u5831\u304cPostgres\u30b5\u30fc\u30d0\u30fc\u306b\u5bfe\u3057\u3066\u6b63\u3057\u3044\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u3001\u518d\u5b9f\u884c\u3057\u3066\u304f\u3060\u3055\u3044\u3002
EamDbSettingsDialog.okButton.createSQLiteDbError.message=SQLite\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ea\u30dd\u30b8\u30c8\u30ea\u30fb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3002\u5834\u6240\u304c\u5b58\u5728\u3057\u3001\u66f8\u304d\u8fbc\u307f\u6a29\u9650\u304c\u3042\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u3001\u518d\u5b9f\u884c\u3057\u3066\u304f\u3060\u3055\u3044\u3002
EamDbSettingsDialog.okButton.databaseConnectionFailed.message=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ea\u30dd\u30b8\u30c8\u30ea\u30fb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u63a5\u7d9a\u3067\u304d\u307e\u305b\u3093\u3002 \u8a2d\u5b9a\u3092\u78ba\u8a8d\u3057\u3066\u3001\u3082\u3046\u4e00\u5ea6\u304a\u8a66\u3057\u304f\u3060\u3055\u3044\u3002
EamDbSettingsDialog.okButton.databaseConnectionFailed.title=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ea\u30dd\u30b8\u30c8\u30ea\u30fb\u30ea\u30dd\u30b8\u30c8\u30ea\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u306b\u5931\u6557\u3057\u307e\u3057\u305f
EamDbSettingsDialog.okButton.errorMsg.text=Autopsy\u3092\u518d\u8d77\u52d5\u3057\u3066\u3001\u65b0\u898f\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u306e\u4f7f\u7528\u3092\u958b\u59cb\u3057\u3066\u304f\u3060\u3055\u3044\u3002
EamDbSettingsDialog.okButton.errorTitle.text=\u518d\u8d77\u52d5\u304c\u5fc5\u8981\u3067\u3059\u3002
EamDbSettingsDialog.textPrompt.dbName=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u540d
@ -28,16 +47,84 @@ EamDbSettingsDialog.textPrompt.hostnameOrIP=\u30db\u30b9\u30c8\u540d\u307e\u305f
EamDbSettingsDialog.textPrompt.password=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30e6\u30fc\u30b6\u30fc\u306e\u30d1\u30b9\u30ef\u30fc\u30c9
EamDbSettingsDialog.textPrompt.port=\u30dd\u30fc\u30c8\u756a\u53f7
EamDbSettingsDialog.textPrompt.user=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30e6\u30fc\u30b6\u30fc
EamDbSettingsDialog.tfDatabasePath.text=
EamDbSettingsDialog.tfDatabasePath.toolTipText=SQLite db\u30d5\u30a1\u30a4\u30eb\u306b\u683c\u7d0d\u3059\u308b\u30d5\u30a1\u30a4\u30eb\u540d\u3068\u30d1\u30b9
EamDbSettingsDialog.title.text=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u30fb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u69cb\u6210
EamDbSettingsDialog.validation.finished=[OK] \u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u8a2d\u5b9a\u3092\u4fdd\u5b58\u3057\u3001[\u30aa\u30d7\u30b7\u30e7\u30f3] \u306b\u623b\u308a\u307e\u3059\u3002\u3042\u308b\u3044\u306f\u3001\u5225\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30bf\u30a4\u30d7\u3092\u9078\u629e\u3057\u307e\u3059\u3002
EamDbSettingsDialog.validation.incompleteFields=\u9078\u629e\u3057\u305f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u3059\u3079\u3066\u306e\u5024\u3092\u5165\u529b\u3057\u307e\u3059\u3002
EamOptionsController.moduleErr=\u5024\u306e\u5909\u66f4\u3092\u51e6\u7406\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
EamOptionsController.moduleErr.msg=\u5024\u306e\u5909\u66f4\u306e\u51e6\u7406\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002
GlobalSettingsPanel.updateFailed.title=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u306e\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u306b\u5931\u6557\u3057\u307e\u3057\u305f
EamPostgresSettingsDialog.bnCancel.text=\u53d6\u308a\u6d88\u3057
EamPostgresSettingsDialog.bnSave.text=\u4fdd\u5b58
EamPostgresSettingsDialog.bnTestConnection.text=\u30c6\u30b9\u30c8\u63a5\u7d9a
EamPostgresSettingsDialog.lbDatabaseName.text=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u540d \:
EamPostgresSettingsDialog.lbHostName.text=\u30db\u30b9\u30c8\u540d / IP \:
EamPostgresSettingsDialog.lbPort.text=\u30dd\u30fc\u30c8 \:
EamPostgresSettingsDialog.lbUserName.text=\u30e6\u30fc\u30b6\u30fc\u540d \:
EamPostgresSettingsDialog.lbUserPassword.text=\u30e6\u30fc\u30b6\u30fc\u30d1\u30b9\u30ef\u30fc\u30c9 \:
EamSqliteSettingsDialog.bnCancel.text=\u53d6\u308a\u6d88\u3057
EamSqliteSettingsDialog.bnDatabasePathFileOpen.text=\u53c2\u7167...
EamSqliteSettingsDialog.bnOk.text=OK
EamSqliteSettingsDialog.bnTestDatabase.text=\u30c6\u30b9\u30c8\u63a5\u7d9a
EamSqliteSettingsDialog.lbDatabasePath.text=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30d1\u30b9 \:
EamSqliteSettingsDialog.lbTestDatabase.text=
EamSqliteSettingsDialog.lbTestDatabaseWarning.text=
EamSqliteSettingsDialog.tfDatabasePath.text=
EamSqliteSettingsDialog.tfDatabasePath.toolTipText=SQLite db\u30d5\u30a1\u30a4\u30eb\u306b\u683c\u7d0d\u3059\u308b\u30d5\u30a1\u30a4\u30eb\u540d\u3068\u30d1\u30b9
GlobalSettingsPanel.Case\ Details.AccessibleContext.accessibleName=\u30b1\u30fc\u30b9\u8a73\u7d30
GlobalSettingsPanel.askForCentralRepoDbChoice.customPostgrestChoice.text=PostgreSQL\u306e\u69cb\u6210
GlobalSettingsPanel.askForCentralRepoDbChoice.disableChoice.text=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ea\u30dd\u30b8\u30c8\u30ea\u30fc\u3092\u7121\u52b9\u306b\u3059\u308b
GlobalSettingsPanel.askForCentralRepoDbChoice.sqliteChoice.text=SQLite\u3092\u4f7f\u7528\u3059\u308b
GlobalSettingsPanel.bnDbConfigure.text=\u69cb\u6210
GlobalSettingsPanel.bnImportDatabase.label=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u3092\u30a4\u30f3\u30dd\u30fc\u30c8
GlobalSettingsPanel.bnManageProperties.text=\u76f8\u95a2\u5206\u6790\u30d7\u30ed\u30d1\u30c6\u30a3\u3092\u7ba1\u7406
GlobalSettingsPanel.bnTestConfigure.text=\u30c6\u30b9\u30c8
GlobalSettingsPanel.casesPanel.border.title=\u30b1\u30fc\u30b9\u8a73\u7d30
GlobalSettingsPanel.casesTextArea.text=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u306e\u30b1\u30fc\u30b9\u8a73\u7d30\u3092\u4e00\u89a7\u8868\u793a\u3059\u308b\u30c6\u30fc\u30d6\u30eb\u3092\u8868\u793a\u3057\u307e\u3059\u3002
GlobalSettingsPanel.cbUseCentralRepo.text=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u3092\u4f7f\u7528
GlobalSettingsPanel.correlationPropertiesTextArea.text=\u5f8c\u3067\u76f8\u95a2\u5206\u6790\u3067\u304d\u308b\u3088\u3046\u3001\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u306b\u3069\u306e\u30d5\u30a1\u30a4\u30eb\u3068\u7d50\u679c\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u3092\u4fdd\u7ba1\u3059\u308b\u304b\u9078\u629e\u3057\u307e\u3059\u3002\n
GlobalSettingsPanel.ingestRunningWarningLabel.text=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u5b9f\u884c\u4e2d\u306f\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u8a2d\u5b9a\u3092\u5909\u66f4\u3067\u304d\u307e\u305b\u3093\!
GlobalSettingsPanel.lbCentralRepository.text=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u3092\u4f7f\u7528\u3059\u308b\u3068\u3001\u30b1\u30fc\u30b9\u9593\u306e\u30d5\u30a1\u30a4\u30eb\u3068\u7d50\u679c\u3092\u76f8\u95a2\u5206\u6790\u3067\u304d\u307e\u3059\u3002\u30b1\u30fc\u30b9\u304c\u958b\u3044\u3066\u3044\u308b\u9593\u306f\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u69cb\u6210\u3092\u4fee\u6b63\u3067\u304d\u307e\u305b\u3093\u3002
GlobalSettingsPanel.lbDatabaseSettings.text=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u8a2d\u5b9a
GlobalSettingsPanel.lbDbLocationLabel.text=\u5834\u6240\:
GlobalSettingsPanel.lbDbNameLabel.text=\u540d\u524d\:
GlobalSettingsPanel.lbDbPlatformTypeLabel.text=\u30bf\u30a4\u30d7\:
GlobalSettingsPanel.manageOrganizationButton.text=\u7d44\u7e54\u3092\u7ba1\u7406
GlobalSettingsPanel.onMultiUserChange.disabledMu.description=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ea\u30dd\u30b8\u30c8\u30ea\u30fc\u306f\u30ed\u30fc\u30ab\u30ebSQLite\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3068\u3057\u3066\u518d\u69cb\u6210\u3055\u308c\u307e\u3059
GlobalSettingsPanel.onMultiUserChange.disabledMu.description2=[PostgreSQL\u306e\u69cb\u6210]\u3092\u62bc\u3057\u3066\u3001PostgreSQL\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u5909\u66f4\u3057\u307e\u3059\u3002
GlobalSettingsPanel.onMultiUserChange.disabledMu.title=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ea\u30dd\u30b8\u30c8\u30ea\u30fc\u306e\u5909\u66f4\u304c\u5fc5\u8981\u3067\u3059
GlobalSettingsPanel.onMultiUserChange.enable.description=\u3053\u306ePostgreSQL\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u4f7f\u7528\u3059\u308b\u3088\u3046\u306b\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ea\u30dd\u30b8\u30c8\u30ea\u30fc\u3092\u66f4\u65b0\u3057\u307e\u3059\u304b\uff1f
GlobalSettingsPanel.onMultiUserChange.enable.description2=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ea\u30dd\u30b8\u30c8\u30ea\u30fc\u306b\u306f\u904e\u53bb\u306e\u30b1\u30fc\u30b9\u304b\u3089\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u3068\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u4fdd\u5b58\u3055\u308c\u307e\u3059\u3002
GlobalSettingsPanel.onMultiUserChange.enable.title=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ea\u30dd\u30b8\u30c8\u30ea\u30fc\u3067\u4f7f\u7528\u3057\u307e\u3059\u304b\uff1f
GlobalSettingsPanel.organizationPanel.border.title=\u7d44\u7e54
GlobalSettingsPanel.organizationTextArea.text=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u5185\u3067\u7d44\u7e54\u60c5\u5831\u3092\u8ffd\u8de1\u3067\u304d\u307e\u3059\u3002
GlobalSettingsPanel.pnCorrelationProperties.border.title=\u76f8\u95a2\u5206\u6790\u30d7\u30ed\u30d1\u30c6\u30a3
GlobalSettingsPanel.pnDatabaseConfiguration.title=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u69cb\u6210
GlobalSettingsPanel.showCasesButton.text=\u30b1\u30fc\u30b9\u3092\u7ba1\u7406
GlobalSettingsPanel.tbOops.text=
GlobalSettingsPanel.testCurrentConfiguration.dbDoesNotExist.message=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304c\u5b58\u5728\u3057\u307e\u305b\u3093\u3002
GlobalSettingsPanel.testStatusLabel.text=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u5b9f\u884c\u4e2d\u306f\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u8a2d\u5b9a\u3092\u5909\u66f4\u3067\u304d\u307e\u305b\u3093\!
GlobalSettingsPanel.validationErrMsg.ingestRunning=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u5b9f\u884c\u4e2d\u306f\u8a2d\u5b9a\u3092\u5909\u66f4\u3067\u304d\u307e\u305b\u3093\u3002
GlobalSettingsPanel.validationerrMsg.mustConfigure=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u69cb\u6210\u3057\u3066\u3053\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u6709\u52b9\u5316\u3057\u307e\u3059\u3002
ImportHashDatabaseDialog.known.text=\u65e2\u77e5
ImportHashDatabaseDialog.knownBad.text=\u9855\u8457
ImportHashDatabaseDialog.tfDatabaseName.tooltip=\u3053\u306e\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306e\u540d\u524d
ImportHashDatabaseDialog.tfDatabaseVersion.tooltip.text=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u756a\u53f7
ManageArtifactTypesDialog.taInstructionsMsg.text=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u4e2d\u306e\u76f8\u95a2\u5206\u6790\u306b\u4f7f\u7528\u3059\u308b\u76f8\u95a2\u5206\u6790\u30d7\u30ed\u30d1\u30c6\u30a3\u30921\u3064\u4ee5\u4e0a\u6709\u52b9\u5316\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u306f\u30b0\u30ed\u30fc\u30d0\u30eb\u3067\u3042\u308b\u305f\u3081\u3001\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u306e\u3059\u3079\u3066\u306e\u30e6\u30fc\u30b6\u30fc\u306b\u5f71\u97ff\u3057\u307e\u3059\u3002
ManageCasesDialog.caseInfoLabel.text=\u30b1\u30fc\u30b9\u60c5\u5831\:
ManageCasesDialog.caseNumberLabel.text=\u30b1\u30fc\u30b9\u756a\u53f7\:
ManageCasesDialog.closeButton.text=\u9589\u3058\u308b
ManageCasesDialog.dataSourcesLabel.text=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\:
ManageCasesDialog.examinerEmailLabel.text=\u8abf\u67fb\u54e1\u306e\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\:
ManageCasesDialog.examinerNameLabel.text=\u8abf\u67fb\u54e1\u540d\:
ManageCasesDialog.examinerPhoneLabel.text=\u8abf\u67fb\u54e1\u306e\u96fb\u8a71\u756a\u53f7\:
ManageCasesDialog.notesLabel.text=\u5099\u8003\:
ManageCasesDialog.orgLabel.text=\u7d44\u7e54\:
ManageCasesDialog.title.text=\u30b1\u30fc\u30b9\u3092\u7ba1\u7406
ManageCorrelationPropertiesDialog.cancelButton.text=\u53d6\u308a\u6d88\u3057
ManageCorrelationPropertiesDialog.lbWarningMsg.text=\u8b66\u544a\u30e1\u30c3\u30bb\u30fc\u30b8
ManageCorrelationPropertiesDialog.noneSelected=\u76f8\u95a2\u5206\u6790\u30d7\u30ed\u30d1\u30c6\u30a3\u304c\u6709\u52b9\u306b\u306a\u3063\u3066\u3044\u307e\u305b\u3093\u3002
ManageCorrelationPropertiesDialog.okButton.text=OK
ManageCorrelationPropertiesDialog.okbutton.failure=\u66f4\u65b0\u3057\u305f\u9078\u629e\u306e\u4fdd\u5b58\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
ManageCorrelationPropertiesDialog.title=\u76f8\u95a2\u5206\u6790\u30d7\u30ed\u30d1\u30c6\u30a3\u3092\u7ba1\u7406
ManageOrganizationsDialog.closeButton.text=\u9589\u3058\u308b
@ -49,99 +136,20 @@ ManageOrganizationsDialog.newButton.text=\u65b0\u898f
ManageOrganizationsDialog.orgDescriptionTextArea.text=\u7d44\u7e54\u306f\u3001\u95a2\u9023\u4ed8\u3051\u3089\u308c\u3066\u3044\u308b\u8ffd\u52a0\u306e\u9023\u7d61\u5148\u60c5\u5831\u3092\u63d0\u4f9b\u3059\u308b\u969b\u306b\u4f7f\u7528\u3057\u307e\u3059\u3002
ManageOrganizationsDialog.orgDetailsLabel.text=\u7d44\u7e54\u8a73\u7d30
ManageOrganizationsDialog.orgListLabel.text=\u7d44\u7e54
ManageOrganizationsDialog.orgNameLabel.text=\u7d44\u7e54\u540d:
ManageOrganizationsDialog.pocEmailLabel.text=\u9023\u7d61\u5148\u306e\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9:
ManageOrganizationsDialog.pocNameLabel.text=\u9023\u7d61\u5148\u540d:
ManageOrganizationsDialog.pocPhoneLabel.text=\u9023\u7d61\u5148\u306e\u96fb\u8a71\u756a\u53f7:
ManageOrganizationsDialog.orgNameLabel.text=\u7d44\u7e54\u540d\:
ManageOrganizationsDialog.pocEmailLabel.text=\u9023\u7d61\u5148\u306e\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\:
ManageOrganizationsDialog.pocNameLabel.text=\u9023\u7d61\u5148\u540d\:
ManageOrganizationsDialog.pocPhoneLabel.text=\u9023\u7d61\u5148\u306e\u96fb\u8a71\u756a\u53f7\:
ManageOrganizationsDialog.title.text=\u7d44\u7e54\u3092\u7ba1\u7406
ManageOrganizationsDialog.unableToDeleteOrg.message=\u9078\u629e\u3057\u305f\u7d44\u7e54\u3092\u524a\u9664\u3067\u304d\u307e\u305b\u3093\u3002
ManageOrganizationsDialog.unableToDeleteOrg.title=\u524a\u9664\u3067\u304d\u307e\u305b\u3093
OptionsCategory_Name_Central_Repository_Options=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc
OptionsCategory_Keywords_Central_Repository_Options=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u8a2d\u5b9a
ImportHashDatabaseDialog.known.text=\u65e2\u77e5
ImportHashDatabaseDialog.knownBad.text=\u9855\u8457
EamPostgresSettingsDialog.lbUserPassword.text=\u30e6\u30fc\u30b6\u30fc\u30d1\u30b9\u30ef\u30fc\u30c9 :
EamPostgresSettingsDialog.lbUserName.text=\u30e6\u30fc\u30b6\u30fc\u540d :
EamPostgresSettingsDialog.bnCancel.text=\u53d6\u308a\u6d88\u3057
EamPostgresSettingsDialog.lbPort.text=\u30dd\u30fc\u30c8 :
EamPostgresSettingsDialog.lbHostName.text=\u30db\u30b9\u30c8\u540d / IP :
EamPostgresSettingsDialog.bnTestConnection.text=\u30c6\u30b9\u30c8\u63a5\u7d9a
EamPostgresSettingsDialog.lbDatabaseName.text=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u540d :
EamSqliteSettingsDialog.bnCancel.text=\u53d6\u308a\u6d88\u3057
EamSqliteSettingsDialog.lbTestDatabase.text=
EamSqliteSettingsDialog.bnTestDatabase.text=\u30c6\u30b9\u30c8\u63a5\u7d9a
EamSqliteSettingsDialog.lbTestDatabaseWarning.text=
EamSqliteSettingsDialog.bnDatabasePathFileOpen.text=\u53c2\u7167...
EamSqliteSettingsDialog.tfDatabasePath.toolTipText=SQLite db\u30d5\u30a1\u30a4\u30eb\u306b\u683c\u7d0d\u3059\u308b\u30d5\u30a1\u30a4\u30eb\u540d\u3068\u30d1\u30b9
EamSqliteSettingsDialog.tfDatabasePath.text=
EamSqliteSettingsDialog.lbDatabasePath.text=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30d1\u30b9 :
ImportHashDatabaseDialog.tfDatabaseName.tooltip=\u3053\u306e\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306e\u540d\u524d
ImportHashDatabaseDialog.tfDatabaseVersion.tooltip.text=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u756a\u53f7
ImportHashDatabaseDialog.tfDatabaseName.tooltip=\u3053\u306e\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306e\u540d\u524d
ImportHashDatabaseDialog.tfDatabaseVersion.tooltip.text=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u756a\u53f7
GlobalSettingsPanel.tbOops.text=
GlobalSettingsPanel.lbDatabaseSettings.text=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u8a2d\u5b9a
GlobalSettingsPanel.bnImportDatabase.label=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u3092\u30a4\u30f3\u30dd\u30fc\u30c8
AddNewOrganizationDialog.lbPocPhone.text=\u96fb\u8a71\u756a\u53f7:
AddNewOrganizationDialog.lbPocEmail.text=\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9:
AddNewOrganizationDialog.lbPocName.text=\u540d\u524d:
AddNewOrganizationDialog.lbPocHeading.text=\u9023\u7d61\u5148:
AddNewOrganizationDialog.lbOrganizationName.text=\u7d44\u7e54\u540d:
AddNewOrganizationDialog.bnCancel.text=\u53d6\u308a\u6d88\u3057
AddNewOrganizationDialog.bnOK.text=OK
AddNewOrganizationDialog.tfName.tooltip=POC\u540d
ManageTagsDialog.okButton.text=OK
ManageTagsDialog.cancelButton.text=\u53d6\u308a\u6d88\u3057
ManageArtifactTypesDialog.taInstructionsMsg.text=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u4e2d\u306e\u76f8\u95a2\u5206\u6790\u306b\u4f7f\u7528\u3059\u308b\u76f8\u95a2\u5206\u6790\u30d7\u30ed\u30d1\u30c6\u30a3\u30921\u3064\u4ee5\u4e0a\u6709\u52b9\u5316\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u306f\u30b0\u30ed\u30fc\u30d0\u30eb\u3067\u3042\u308b\u305f\u3081\u3001\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u306e\u3059\u3079\u3066\u306e\u30e6\u30fc\u30b6\u30fc\u306b\u5f71\u97ff\u3057\u307e\u3059\u3002
EamSqliteSettingsDialog.bnOk.text=OK
EamPostgresSettingsDialog.bnSave.text=\u4fdd\u5b58
EamDbSettingsDialog.bnDatabasePathFileOpen.text=\u53c2\u7167...
EamDbSettingsDialog.tfDatabasePath.toolTipText=SQLite db\u30d5\u30a1\u30a4\u30eb\u306b\u683c\u7d0d\u3059\u308b\u30d5\u30a1\u30a4\u30eb\u540d\u3068\u30d1\u30b9
EamDbSettingsDialog.tfDatabasePath.text=
EamDbSettingsDialog.lbDatabasePath.text=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30d1\u30b9 :
EamDbSettingsDialog.bnCancel.text=\u53d6\u308a\u6d88\u3057
EamDbSettingsDialog.bnOk.text=OK
EamDbSettingsDialog.lbHostName.text=\u30db\u30b9\u30c8\u540d / IP :
EamDbSettingsDialog.lbUserPassword.text=\u30e6\u30fc\u30b6\u30fc\u30d1\u30b9\u30ef\u30fc\u30c9 :
EamDbSettingsDialog.lbUserName.text=\u30e6\u30fc\u30b6\u30fc\u540d :
EamDbSettingsDialog.lbPort.text=\u30dd\u30fc\u30c8 :
GlobalSettingsPanel.pnDatabaseConfiguration.title=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u69cb\u6210
GlobalSettingsPanel.lbDbPlatformTypeLabel.text=\u30bf\u30a4\u30d7:
GlobalSettingsPanel.lbDbNameLabel.text=\u540d\u524d:
GlobalSettingsPanel.bnDbConfigure.text=\u69cb\u6210
GlobalSettingsPanel.lbDbLocationLabel.text=\u5834\u6240:
ManageCorrelationPropertiesDialog.lbWarningMsg.text=\u8b66\u544a\u30e1\u30c3\u30bb\u30fc\u30b8
ManageCorrelationPropertiesDialog.cancelButton.text=\u53d6\u308a\u6d88\u3057
ManageCorrelationPropertiesDialog.okButton.text=OK
GlobalSettingsPanel.bnManageProperties.text=\u76f8\u95a2\u5206\u6790\u30d7\u30ed\u30d1\u30c6\u30a3\u3092\u7ba1\u7406
EamDbSettingsDialog.lbDatabaseDesc.text=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb:
EamDbSettingsDialog.lbFullDbPath.text=
GlobalSettingsPanel.cbUseCentralRepo.text=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u3092\u4f7f\u7528
GlobalSettingsPanel.organizationTextArea.text=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u5185\u3067\u7d44\u7e54\u60c5\u5831\u3092\u8ffd\u8de1\u3067\u304d\u307e\u3059\u3002
GlobalSettingsPanel.manageOrganizationButton.text=\u7d44\u7e54\u3092\u7ba1\u7406
GlobalSettingsPanel.lbCentralRepository.text=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u3092\u4f7f\u7528\u3059\u308b\u3068\u3001\u30b1\u30fc\u30b9\u9593\u306e\u30d5\u30a1\u30a4\u30eb\u3068\u7d50\u679c\u3092\u76f8\u95a2\u5206\u6790\u3067\u304d\u307e\u3059\u3002\u30b1\u30fc\u30b9\u304c\u958b\u3044\u3066\u3044\u308b\u9593\u306f\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u69cb\u6210\u3092\u4fee\u6b63\u3067\u304d\u307e\u305b\u3093\u3002
GlobalSettingsPanel.pnCorrelationProperties.border.title=\u76f8\u95a2\u5206\u6790\u30d7\u30ed\u30d1\u30c6\u30a3
GlobalSettingsPanel.organizationPanel.border.title=\u7d44\u7e54
GlobalSettingsPanel.casesPanel.border.title=\u30b1\u30fc\u30b9\u8a73\u7d30
GlobalSettingsPanel.showCasesButton.text=\u30b1\u30fc\u30b9\u3092\u7ba1\u7406
ManageTagsDialog.okButton.text=OK
OptionsCategory_Keywords_Central_Repository_Options=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u8a2d\u5b9a
OptionsCategory_Name_Central_Repository_Options=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc
ShowCasesDialog.caseDetailsTable.AccessibleContext.accessibleDescription=\u5217\u540d\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u30bd\u30fc\u30c8\u3057\u307e\u3059\u3002
ShowCasesDialog.caseDetailsTable.toolTipText=\u5217\u540d\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u30bd\u30fc\u30c8\u3057\u307e\u3059\u3002\u30c6\u30fc\u30d6\u30eb\u3092\u53f3\u30af\u30ea\u30c3\u30af\u3057\u3066\u3055\u3089\u306a\u308b\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u8868\u793a\u3057\u307e\u3059\u3002
ShowCasesDialog.closeButton.AccessibleContext.accessibleName=\u9589\u3058\u308b
ShowCasesDialog.closeButton.actionCommand=\u9589\u3058\u308b
ShowCasesDialog.closeButton.text=\u9589\u3058\u308b
ShowCasesDialog.caseDetailsTable.toolTipText=\u5217\u540d\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u30bd\u30fc\u30c8\u3057\u307e\u3059\u3002\u30c6\u30fc\u30d6\u30eb\u3092\u53f3\u30af\u30ea\u30c3\u30af\u3057\u3066\u3055\u3089\u306a\u308b\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u8868\u793a\u3057\u307e\u3059\u3002
ShowCasesDialog.title=\u30b1\u30fc\u30b9\u8a73\u7d30
GlobalSettingsPanel.Case\ Details.AccessibleContext.accessibleName=\u30b1\u30fc\u30b9\u8a73\u7d30
ShowCasesDialog.caseDetailsTable.AccessibleContext.accessibleDescription=\u5217\u540d\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u30bd\u30fc\u30c8\u3057\u307e\u3059\u3002
GlobalSettingsPanel.casesTextArea.text=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u306e\u30b1\u30fc\u30b9\u8a73\u7d30\u3092\u4e00\u89a7\u8868\u793a\u3059\u308b\u30c6\u30fc\u30d6\u30eb\u3092\u8868\u793a\u3057\u307e\u3059\u3002
GlobalSettingsPanel.ingestRunningWarningLabel.text=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u5b9f\u884c\u4e2d\u306f\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u8a2d\u5b9a\u3092\u5909\u66f4\u3067\u304d\u307e\u305b\u3093!
GlobalSettingsPanel.correlationPropertiesTextArea.text=\u5f8c\u3067\u76f8\u95a2\u5206\u6790\u3067\u304d\u308b\u3088\u3046\u3001\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u306b\u3069\u306e\u30d5\u30a1\u30a4\u30eb\u3068\u7d50\u679c\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u3092\u4fdd\u7ba1\u3059\u308b\u304b\u9078\u629e\u3057\u307e\u3059\u3002\n
ManageCasesDialog.examinerPhoneLabel.text=\u8abf\u67fb\u54e1\u306e\u96fb\u8a71\u756a\u53f7:
ManageCasesDialog.examinerNameLabel.text=\u8abf\u67fb\u54e1\u540d:
ManageCasesDialog.examinerEmailLabel.text=\u8abf\u67fb\u54e1\u306e\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9:
ManageCasesDialog.caseNumberLabel.text=\u30b1\u30fc\u30b9\u756a\u53f7:
ManageCasesDialog.orgLabel.text=\u7d44\u7e54:
ManageCasesDialog.closeButton.text=\u9589\u3058\u308b
ManageCasesDialog.notesLabel.text=\u5099\u8003:
ManageCasesDialog.dataSourcesLabel.text=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9:
ManageCasesDialog.caseInfoLabel.text=\u30b1\u30fc\u30b9\u60c5\u5831:
GlobalSettingsPanel.bnTestConfigure.text=\u69cb\u6210
GlobalSettingsPanel.testStatusLabel.text=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u5b9f\u884c\u4e2d\u306f\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u8a2d\u5b9a\u3092\u5909\u66f4\u3067\u304d\u307e\u305b\u3093!

View File

@ -18,19 +18,18 @@ PersonaDetailsPanel.nameLbl.text=Name:
AddAliasDialog.accountsLbl.text=Account:
AddAliasDialog.okBtn.text=OK
AddAliasDialog.cancelBtn.text=Cancel
PersonaDetailsPanel.casesLbl.text=Cases found in:
PersonaDetailsPanel.casesLbl.text=Cases found in
PersonaDetailsPanel.deleteAliasBtn.text=Delete
PersonaDetailsPanel.addAliasBtn.text=Add
PersonaDetailsPanel.aliasesLabel.text=Aliases:
PersonaDetailsPanel.aliasesLabel.text=Aliases
PersonaDetailsPanel.deleteMetadataBtn.text=Delete
PersonaDetailsPanel.addMetadataBtn.text=Add
PersonaDetailsPanel.metadataLabel.text=Metadata:
PersonaDetailsPanel.metadataLabel.text=Metadata
PersonaDetailsPanel.deleteAccountBtn.text=Delete
PersonaDetailsPanel.addAccountBtn.text=Add
PersonaDetailsPanel.accountsLbl.text=Accounts:
PersonaDetailsPanel.accountsLbl.text=Accounts
PersonaDetailsPanel.commentField.text=
PersonaDetailsPanel.commentLbl.text=Comment:
PersonaDetailsPanel.nameField.text=
PersonaDetailsPanel.nameLbl.text=Name:
PersonaDetailsPanel.examinerLbl.text=Created by:
PersonaDetailsPanel.examinerField.text=
@ -81,3 +80,4 @@ CreatePersonaAccountDialog.identiferLbl.text=Identifier:
CreatePersonaAccountDialog.okBtn.text=OK
PersonasTopComponent.introText.text=Personas represent an online identity. They span cases and are stored in the Central Repository based on accounts that were found in artifacts. You can create, edit, and delete personas here.
PersonasTopComponent.cbFilterByKeyword.text=Filter personas by keyword
PersonaDetailsPanel.nameField.text=

View File

@ -52,19 +52,18 @@ PersonaDetailsPanel.nameLbl.text=Name:
AddAliasDialog.accountsLbl.text=Account:
AddAliasDialog.okBtn.text=OK
AddAliasDialog.cancelBtn.text=Cancel
PersonaDetailsPanel.casesLbl.text=Cases found in:
PersonaDetailsPanel.casesLbl.text=Cases found in
PersonaDetailsPanel.deleteAliasBtn.text=Delete
PersonaDetailsPanel.addAliasBtn.text=Add
PersonaDetailsPanel.aliasesLabel.text=Aliases:
PersonaDetailsPanel.aliasesLabel.text=Aliases
PersonaDetailsPanel.deleteMetadataBtn.text=Delete
PersonaDetailsPanel.addMetadataBtn.text=Add
PersonaDetailsPanel.metadataLabel.text=Metadata:
PersonaDetailsPanel.metadataLabel.text=Metadata
PersonaDetailsPanel.deleteAccountBtn.text=Delete
PersonaDetailsPanel.addAccountBtn.text=Add
PersonaDetailsPanel.accountsLbl.text=Accounts:
PersonaDetailsPanel.accountsLbl.text=Accounts
PersonaDetailsPanel.commentField.text=
PersonaDetailsPanel.commentLbl.text=Comment:
PersonaDetailsPanel.nameField.text=
PersonaDetailsPanel.nameLbl.text=Name:
PersonaDetailsPanel.examinerLbl.text=Created by:
PersonaDetailsPanel.examinerField.text=
@ -127,6 +126,7 @@ CreatePersonaAccountDialog.identiferLbl.text=Identifier:
CreatePersonaAccountDialog.okBtn.text=OK
PersonasTopComponent.introText.text=Personas represent an online identity. They span cases and are stored in the Central Repository based on accounts that were found in artifacts. You can create, edit, and delete personas here.
PersonasTopComponent.cbFilterByKeyword.text=Filter personas by keyword
PersonaDetailsPanel.nameField.text=
PersonasTopComponent_delete_confirmation_msg=Are you sure you want to delete this persona?
PersonasTopComponent_delete_confirmation_Title=Are you sure?
PersonasTopComponent_delete_exception_msg=Failed to delete persona.

View File

@ -1,12 +1,112 @@
PersonaDetailsDialog.okBtn.text=OK
PersonaDetailsDialog.cancelBtn.text=\u53d6\u308a\u6d88\u3057
AddAliasDialog.cancelBtn.text=\u53d6\u308a\u6d88\u3057
#Tue Aug 18 18:09:20 UTC 2020
AddAliasDialog.accountsLbl.text=\u30a2\u30ab\u30a6\u30f3\u30c8\uff1a
AddAliasDialog.cancelBtn.text=\u30ad\u30e3\u30f3\u30bb\u30eb
AddAliasDialog.okBtn.text=OK
PersonaAccountDialog.okBtn.text=OK
PersonaAccountDialog.cancelBtn.text=\u53d6\u308a\u6d88\u3057
PersonaAliasDialog.cancelBtn.text_1=\u53d6\u308a\u6d88\u3057
PersonaAliasDialog.okBtn.text_1=OK
PersonaMetadataDialog.okBtn.text=OK
PersonaMetadataDialog.cancelBtn.text=\u53d6\u308a\u6d88\u3057
AddMetadataDialog.title.text=\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u8ffd\u52a0
AddMetadataDialog_dup_Title=\u30e1\u30bf\u30c7\u30fc\u30bf\u8ffd\u52a0\u30a8\u30e9\u30fc
AddMetadataDialog_dup_msg=\u3053\u306e\u540d\u524d\u306e\u30e1\u30bf\u30c7\u30fc\u30bf\u30a8\u30f3\u30c8\u30ea\u306f\u65e2\u306b\u3053\u306e\u30da\u30eb\u30bd\u30ca\u306b\u8ffd\u52a0\u3055\u308c\u3066\u3044\u307e\u3059\u3002
AddMetadataDialog_empty_name_Title=\u6b20\u843d\u3057\u3066\u3044\u308b\u30d5\u30a3\u30fc\u30eb\u30c9
AddMetadataDialog_empty_name_msg=\u30e1\u30bf\u30c7\u30fc\u30bf\u30a8\u30f3\u30c8\u30ea\u306e\u540d\u524d\u307e\u305f\u306f\u5024\u3092\u7a7a\u767d\u306b\u306f\u51fa\u6765\u307e\u305b\u3093\u3002
CTL_OpenPersonas=\u30da\u30eb\u30bd\u30ca
CTL_PersonaDetailsTopComponent=\u30da\u30eb\u30bd\u30ca\u306e\u8a73\u7d30
CTL_PersonasTopComponentAction=\u30da\u30eb\u30bd\u30ca
CreatePersonaAccountDialog.cancelBtn.text=\u30ad\u30e3\u30f3\u30bb\u30eb
CreatePersonaAccountDialog.identiferLbl.text=\u8b58\u5225\u540d\uff1a
CreatePersonaAccountDialog.okBtn.text=OK
CreatePersonaAccountDialog.cancelBtn.text=\u53d6\u308a\u6d88\u3057
CreatePersonaAccountDialog.title.text=\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u4f5c\u6210
CreatePersonaAccountDialog.typeLbl.text=\u30bf\u30a4\u30d7\uff1a
CreatePersonaAccountDialog_error_msg=\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u4f5c\u6210\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002
CreatePersonaAccountDialog_error_title=\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u30a8\u30e9\u30fc
CreatePersonaAccountDialog_invalid_account_Title=\u7121\u52b9\u306a\u30a2\u30ab\u30a6\u30f3\u30c8\u8b58\u5225\u540d
CreatePersonaAccountDialog_invalid_account_msg=\u30a2\u30ab\u30a6\u30f3\u30c8ID\u304c\u7121\u52b9\u3067\u3059\u3002
CreatePersonaAccountDialog_success_msg=\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u8ffd\u52a0\u3055\u308c\u307e\u3057\u305f\u3002
CreatePersonaAccountDialog_success_title=\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u8ffd\u52a0\u3055\u308c\u307e\u3057\u305f
OpenPersonasAction.displayName=\u30da\u30eb\u30bd\u30ca
PersonaAccountDialog.cancelBtn.text=\u30ad\u30e3\u30f3\u30bb\u30eb
PersonaAccountDialog.confidenceLbl.text=\u4fe1\u983c\u5ea6\uff1a
PersonaAccountDialog.identiferLbl.text=\u8b58\u5225\u540d\uff1a
PersonaAccountDialog.justificationLbl.text=\u8aac\u660e\uff1a
PersonaAccountDialog.okBtn.text=OK
PersonaAccountDialog.title.text=\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u8ffd\u52a0
PersonaAccountDialog.typeLbl.text=\u30bf\u30a4\u30d7\uff1a
PersonaAccountDialog_dup_Title=\u30a2\u30ab\u30a6\u30f3\u30c8\u8ffd\u52a0\u30a8\u30e9\u30fc
PersonaAccountDialog_dup_msg=\u3053\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u306f\u3059\u3067\u306b\u30da\u30eb\u30bd\u30ca\u306b\u8ffd\u52a0\u3055\u308c\u3066\u3044\u307e\u3059\u3002
PersonaAccountDialog_get_types_exception_Title=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ea\u30dd\u30b8\u30c8\u30ea\u30fc\u30fb\u30a8\u30e9\u30fc
PersonaAccountDialog_get_types_exception_msg=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ea\u30dd\u30b8\u30c8\u30ea\u30fc\u3078\u306e\u30a2\u30af\u30bb\u30b9\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002
PersonaAccountDialog_identifier_empty_Title=\u8b58\u5225\u540d\u304c\u7a7a\u767d
PersonaAccountDialog_identifier_empty_msg=\u8b58\u5225\u540d\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u7a7a\u306b\u306f\u3067\u304d\u307e\u305b\u3093\u3002
PersonaAccountDialog_invalid_account_Title=\u7121\u52b9\u306a\u30a2\u30ab\u30a6\u30f3\u30c8ID
PersonaAccountDialog_invalid_account_msg=\u30a2\u30ab\u30a6\u30f3\u30c8ID\u304c\u7121\u52b9\u3067\u3059\u3002
PersonaAccountDialog_search_empty_Title=\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093
PersonaAccountDialog_search_empty_msg=\u6307\u5b9a\u3055\u308c\u305f\u8b58\u5225\u540d\u3068\u30bf\u30a4\u30d7\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002
PersonaAccountDialog_search_failure_Title=\u30a2\u30ab\u30a6\u30f3\u30c8\u8ffd\u52a0\u30a8\u30e9\u30fc
PersonaAccountDialog_search_failure_msg=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ea\u30dd\u30b8\u30c8\u30ea\u30fc\u30fb\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u691c\u7d22\u306b\u5931\u6557\u3057\u307e\u3057\u305f
PersonaAliasDialog.aliasLbl.text=\u30a8\u30a4\u30ea\u30a2\u30b9\uff1a
PersonaAliasDialog.cancelBtn.text_1=\u30ad\u30e3\u30f3\u30bb\u30eb
PersonaAliasDialog.confidenceLbl.text=\u4fe1\u983c\u5ea6\uff1a
PersonaAliasDialog.justificationLbl.text=\u8aac\u660e\uff1a
PersonaAliasDialog.okBtn.text_1=OK
PersonaAliasDialog.title.text=\u30a8\u30a4\u30ea\u30a2\u30b9\u3092\u8ffd\u52a0
PersonaAliasDialog_dup_Title=\u30a8\u30a4\u30ea\u30a2\u30b9\u8ffd\u52a0\u30a8\u30e9\u30fc
PersonaAliasDialog_dup_msg=\u3053\u306e\u30a8\u30a4\u30ea\u30a2\u30b9\u306f\u65e2\u306b\u3053\u306e\u30da\u30eb\u30bd\u30ca\u306b\u8ffd\u52a0\u3055\u308c\u3066\u3044\u307e\u3059\u3002
PersonaAliasDialog_empty_Title=\u30a8\u30a4\u30ea\u30a2\u30b9\u304c\u7a7a\u767d
PersonaAliasDialog_empty_msg=\u30a8\u30a4\u30ea\u30a2\u30b9\u3092\u7a7a\u767d\u306b\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002
PersonaDetailsDialog.cancelBtn.text=\u30ad\u30e3\u30f3\u30bb\u30eb
PersonaDetailsDialog.okBtn.text=OK
PersonaDetailsDialogCreateTitle=\u30da\u30eb\u30bd\u30ca\u3092\u4f5c\u6210
PersonaDetailsDialogEditTitle=\u30da\u30eb\u30bd\u30ca\u3092\u7de8\u96c6
PersonaDetailsDialogViewTitle=\u30da\u30eb\u30bd\u30ca\u3092\u8868\u793a
PersonaDetailsPanel.accountsLbl.text=\u30a2\u30ab\u30a6\u30f3\u30c8\uff1a
PersonaDetailsPanel.addAccountBtn.text=\u8ffd\u52a0
PersonaDetailsPanel.addAliasBtn.text=\u8ffd\u52a0
PersonaDetailsPanel.addMetadataBtn.text=\u8ffd\u52a0
PersonaDetailsPanel.aliasesLabel.text=\u30a8\u30a4\u30ea\u30a2\u30b9\uff1a
PersonaDetailsPanel.casesLbl.text=\u898b\u3064\u304b\u3063\u305f\u30b1\u30fc\u30b9\uff1a
PersonaDetailsPanel.commentLbl.text=\u30b3\u30e1\u30f3\u30c8\uff1a
PersonaDetailsPanel.creationDateLbl.text=\u4f5c\u6210\u65e5\uff1a
PersonaDetailsPanel.deleteAccountBtn.text=\u524a\u9664
PersonaDetailsPanel.deleteAliasBtn.text=\u524a\u9664
PersonaDetailsPanel.deleteMetadataBtn.text=\u524a\u9664
PersonaDetailsPanel.editAccountBtn.text=\u7de8\u96c6
PersonaDetailsPanel.editAliasBtn.text=\u7de8\u96c6
PersonaDetailsPanel.editMetadataBtn.text=\u7de8\u96c6
PersonaDetailsPanel.examinerLbl.text=\u4f5c\u6210\u8005\uff1a
PersonaDetailsPanel.metadataLabel.text=\u30e1\u30bf\u30c7\u30fc\u30bf\uff1a
PersonaDetailsPanel.nameLbl.text=\u540d\u524d\uff1a
PersonaDetailsPanel_CentralRepoErr_Title=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ea\u30dd\u30b8\u30c8\u30ea\u30fc\u306e\u30a8\u30e9\u30fc
PersonaDetailsPanel_CentralRepoErr_msg=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ea\u30dd\u30b8\u30c8\u30ea\u30fc\u3078\u306e\u66f8\u304d\u8fbc\u307f\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002
PersonaDetailsPanel_EmptyComment_Title=\u7a7a\u767d\u306e\u30da\u30eb\u30bd\u30ca\u30b3\u30e1\u30f3\u30c8
PersonaDetailsPanel_EmptyComment_msg=\u30da\u30eb\u30bd\u30ca\u306e\u30b3\u30e1\u30f3\u30c8\u306f\u7a7a\u767d\u306b\u3067\u304d\u307e\u305b\u3093\u3002
PersonaDetailsPanel_EmptyName_Title=\u30da\u30eb\u30bd\u30ca\u540d\u304c\u7a7a\u767d
PersonaDetailsPanel_EmptyName_msg=\u30da\u30eb\u30bd\u30ca\u540d\u306f\u7a7a\u767d\u306b\u3067\u304d\u307e\u305b\u3093\u3002
PersonaDetailsPanel_NotEnoughAccounts_Title=\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u3042\u308a\u307e\u305b\u3093
PersonaDetailsPanel_NotEnoughAccounts_msg=\u30da\u30eb\u30bd\u30ca\u306b\u306f\u5c11\u306a\u304f\u3068\u30821\u3064\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u5fc5\u8981\u3067\u3059\u3002
PersonaDetailsPanel_empty_justification_Title=\u8aac\u660e\u304c\u7a7a\u767d
PersonaDetailsPanel_empty_justification_msg=\u8aac\u660e\u30d5\u30a3\u30fc\u30eb\u30c9\u306f\u7a7a\u306b\u3067\u304d\u307e\u305b\u3093
PersonaDetailsPanel_load_exception_Title=\u521d\u671f\u5316\u30a8\u30e9\u30fc
PersonaDetailsPanel_load_exception_msg=\u30da\u30eb\u30bd\u30ca\u3092\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\u3067\u3057\u305f\u3002
PersonaMetadataDialog.cancelBtn.text=\u30ad\u30e3\u30f3\u30bb\u30eb
PersonaMetadataDialog.confidenceLbl.text=\u4fe1\u983c\u5ea6\uff1a
PersonaMetadataDialog.justificationLbl.text=\u8aac\u660e\uff1a
PersonaMetadataDialog.nameLbl.text=\u540d\u524d\uff1a
PersonaMetadataDialog.okBtn.text=OK
PersonaMetadataDialog.valueLbl.text=\u5024\uff1a
PersonasTopComponent.cbFilterByKeyword.text=\u30ad\u30fc\u30ef\u30fc\u30c9\u3067\u30da\u30eb\u30bd\u30ca\u3092\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u3059\u308b
PersonasTopComponent.createAccountBtn.text=\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u4f5c\u6210
PersonasTopComponent.createBtn.text=\u65b0\u3057\u3044\u30da\u30eb\u30bd\u30ca
PersonasTopComponent.deleteBtn.text=\u30da\u30eb\u30bd\u30ca\u3092\u524a\u9664
PersonasTopComponent.editBtn.text=\u30da\u30eb\u30bd\u30ca\u3092\u7de8\u96c6
PersonasTopComponent.introText.text=\u30da\u30eb\u30bd\u30ca\u306f\u30aa\u30f3\u30e9\u30a4\u30f3ID\u3092\u8868\u3057\u307e\u3059\u3002 \u305d\u308c\u3089\u306f\u30b1\u30fc\u30b9\u306b\u307e\u305f\u304c\u308a\u3001\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u3067\u898b\u3064\u304b\u3063\u305f\u30a2\u30ab\u30a6\u30f3\u30c8\u306b\u57fa\u3065\u3044\u3066\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ea\u30dd\u30b8\u30c8\u30ea\u30fc\u306b\u4fdd\u5b58\u3055\u308c\u307e\u3059\u3002 \u3053\u3053\u3067\u30da\u30eb\u30bd\u30ca\u3092\u4f5c\u6210\u3001\u7de8\u96c6\u3001\u524a\u9664\u3067\u304d\u307e\u3059\u3002
PersonasTopComponent.resultsTable.columnModel.title0=ID
PersonasTopComponent.resultsTable.columnModel.title1=\u540d\u524d
PersonasTopComponent.searchAccountRadio.text=\u30a2\u30ab\u30a6\u30f3\u30c8
PersonasTopComponent.searchBtn.text=\u8868\u793a
PersonasTopComponent.searchNameRadio.text=\u540d\u524d
PersonasTopComponent_Name=\u30da\u30eb\u30bd\u30ca
PersonasTopComponent_delete_confirmation_Title=\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
PersonasTopComponent_delete_confirmation_msg=\u3053\u306e\u30da\u30eb\u30bd\u30ca\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b\uff1f
PersonasTopComponent_delete_exception_Title=\u524a\u9664\u30a8\u30e9\u30fc
PersonasTopComponent_delete_exception_msg=\u30da\u30eb\u30bd\u30ca\u3092\u524a\u9664\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
PersonasTopComponent_noCR_msg=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ea\u30dd\u30b8\u30c8\u30ea\u30fc\u304c\u7121\u52b9\u3067\u3059\u3002
PersonasTopComponent_search_exception_Title=\u691c\u7d22\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 \u30b1\u30fc\u30b9\u3092\u958b\u3044\u3066\u3001\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ea\u30dd\u30b8\u30c8\u30ea\u30fc\u30fb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u5b8c\u5168\u306b\u521d\u671f\u5316\u3057\u3066\u304f\u3060\u3055\u3044\u3002
PersonasTopComponent_search_exception_msg=\u30da\u30eb\u30bd\u30ca\u306e\u691c\u7d22\u30a8\u30e9\u30fc

View File

@ -38,7 +38,7 @@ import org.sleuthkit.autopsy.coreutils.ThreadConfined;
@ActionID(category = "Tools", id = "org.sleuthkit.autopsy.centralrepository.persona.OpenPersonasAction")
@ActionRegistration(displayName = "#CTL_OpenPersonas", lazy = false)
@ActionReferences(value = {
@ActionReference(path = "Menu/Tools", position = 105)
@ActionReference(path = "Menu/Tools", position = 1825, separatorBefore = 1824)
})
public final class OpenPersonasAction extends CallableSystemAction {

View File

@ -3,7 +3,6 @@
<Form version="1.5" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JDialogFormInfo">
<Properties>
<Property name="defaultCloseOperation" type="int" value="2"/>
<Property name="resizable" type="boolean" value="false"/>
</Properties>
<SyntheticProperties>
<SyntheticProperty name="formSizePolicy" type="int" value="1"/>
@ -24,26 +23,21 @@
<Layout>
<DimensionLayout dim="0">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="1" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<Group type="103" groupAlignment="1" attributes="0">
<Component id="pdp" alignment="0" pref="660" max="32767" attributes="0"/>
<Group type="102" alignment="0" attributes="0">
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
<Group type="102" attributes="0">
<EmptySpace pref="470" max="32767" attributes="0"/>
<Component id="okBtn" linkSize="2" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="cancelBtn" linkSize="2" min="-2" max="-2" attributes="0"/>
</Group>
</Group>
<EmptySpace max="-2" attributes="0"/>
</Group>
<Component id="jScrollPane1" alignment="0" max="32767" attributes="0"/>
</Group>
</DimensionLayout>
<DimensionLayout dim="1">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" attributes="0">
<EmptySpace max="32767" attributes="0"/>
<Component id="pdp" min="-2" pref="564" max="-2" attributes="0"/>
<Group type="102" alignment="0" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<Component id="jScrollPane1" max="32767" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Group type="103" groupAlignment="3" attributes="0">
<Component id="okBtn" alignment="3" min="-2" max="-2" attributes="0"/>
@ -84,7 +78,18 @@
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="okBtnActionPerformed"/>
</Events>
</Component>
<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>
<Component class="org.sleuthkit.autopsy.centralrepository.persona.PersonaDetailsPanel" name="pdp">
</Component>
</SubComponents>
</Container>
</SubComponents>
</Form>

View File

@ -87,10 +87,10 @@ public class PersonaDetailsDialog extends JDialog {
cancelBtn = new javax.swing.JButton();
okBtn = new javax.swing.JButton();
jScrollPane1 = new javax.swing.JScrollPane();
pdp = new org.sleuthkit.autopsy.centralrepository.persona.PersonaDetailsPanel();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setResizable(false);
org.openide.awt.Mnemonics.setLocalizedText(cancelBtn, org.openide.util.NbBundle.getMessage(PersonaDetailsDialog.class, "PersonaDetailsDialog.cancelBtn.text")); // NOI18N
cancelBtn.setMaximumSize(new java.awt.Dimension(79, 23));
@ -109,20 +109,20 @@ public class PersonaDetailsDialog extends JDialog {
}
});
jScrollPane1.setBorder(null);
jScrollPane1.setViewportView(pdp);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(pdp, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 660, Short.MAX_VALUE)
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
.addGap(0, 0, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
.addContainerGap(470, Short.MAX_VALUE)
.addComponent(okBtn)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(cancelBtn, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addComponent(cancelBtn, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
.addComponent(jScrollPane1)
);
layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {cancelBtn, okBtn});
@ -130,8 +130,8 @@ public class PersonaDetailsDialog extends JDialog {
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(pdp, javax.swing.GroupLayout.PREFERRED_SIZE, 564, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap()
.addComponent(jScrollPane1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(okBtn)
@ -165,6 +165,7 @@ public class PersonaDetailsDialog extends JDialog {
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton cancelBtn;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JButton okBtn;
private org.sleuthkit.autopsy.centralrepository.persona.PersonaDetailsPanel pdp;
// End of variables declaration//GEN-END:variables

View File

@ -45,7 +45,7 @@
</DimensionLayout>
<DimensionLayout dim="1">
<Group type="103" groupAlignment="0" attributes="0">
<EmptySpace min="0" pref="521" max="32767" attributes="0"/>
<EmptySpace min="0" pref="583" max="32767" attributes="0"/>
<Group type="103" rootIndex="1" groupAlignment="0" attributes="0">
<Group type="102" alignment="0" attributes="0">
<Component id="detailsPanel" min="-2" max="-2" attributes="0"/>
@ -61,53 +61,18 @@
<Layout>
<DimensionLayout dim="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"/>
<Group type="103" groupAlignment="0" attributes="0">
<Component id="accountsTablePane" alignment="1" pref="605" max="32767" attributes="0"/>
<Component id="accountsLbl" alignment="0" max="32767" attributes="0"/>
<Component id="metadataLabel" alignment="0" max="32767" attributes="0"/>
<Component id="metadataTablePane" alignment="1" max="32767" attributes="0"/>
<Component id="aliasesLabel" alignment="0" max="32767" attributes="0"/>
<Component id="aliasesTablePane" alignment="0" max="32767" attributes="0"/>
<Component id="casesLbl" alignment="0" max="32767" attributes="0"/>
<Component id="casesTablePane" max="32767" attributes="0"/>
<Group type="102" alignment="0" attributes="0">
<Component id="commentLbl" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="commentField" max="32767" attributes="0"/>
</Group>
<Group type="102" alignment="0" attributes="0">
<Component id="nameLbl" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="nameField" max="32767" attributes="0"/>
</Group>
<Group type="102" attributes="0">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="0" attributes="0">
<Component id="addAccountBtn" min="-2" max="-2" attributes="0"/>
<EmptySpace type="separate" max="-2" attributes="0"/>
<Component id="editAccountBtn" min="-2" max="-2" attributes="0"/>
<EmptySpace type="separate" max="-2" attributes="0"/>
<Component id="deleteAccountBtn" min="-2" max="-2" attributes="0"/>
</Group>
<Group type="102" alignment="0" attributes="0">
<Component id="addMetadataBtn" min="-2" max="-2" attributes="0"/>
<EmptySpace type="separate" max="-2" attributes="0"/>
<Component id="editMetadataBtn" min="-2" max="-2" attributes="0"/>
<EmptySpace type="separate" max="-2" attributes="0"/>
<Component id="deleteMetadataBtn" min="-2" max="-2" attributes="0"/>
</Group>
<Group type="102" alignment="0" attributes="0">
<Component id="addAliasBtn" min="-2" max="-2" attributes="0"/>
<EmptySpace type="separate" max="-2" attributes="0"/>
<Component id="editAliasBtn" min="-2" max="-2" attributes="0"/>
<EmptySpace type="separate" max="-2" attributes="0"/>
<Component id="deleteAliasBtn" min="-2" max="-2" attributes="0"/>
</Group>
</Group>
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
</Group>
<Group type="102" alignment="0" attributes="0">
<Component id="examinerLbl" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
@ -117,6 +82,46 @@
<EmptySpace max="-2" attributes="0"/>
<Component id="creationDateField" max="32767" attributes="0"/>
</Group>
<Group type="102" alignment="0" attributes="0">
<Component id="commentLbl" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="commentField" max="32767" attributes="0"/>
</Group>
<Group type="102" attributes="0">
<EmptySpace min="10" pref="10" max="-2" attributes="0"/>
<Group type="103" groupAlignment="0" attributes="0">
<Component id="aliasesTablePane" alignment="1" pref="595" max="32767" attributes="0"/>
<Component id="metadataTablePane" alignment="1" max="32767" attributes="0"/>
<Component id="accountsTablePane" alignment="1" max="32767" attributes="0"/>
<Group type="102" attributes="0">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" attributes="0">
<Component id="addAliasBtn" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="editAliasBtn" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="deleteAliasBtn" min="-2" max="-2" attributes="0"/>
</Group>
<Group type="102" attributes="0">
<Component id="addMetadataBtn" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="editMetadataBtn" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="deleteMetadataBtn" min="-2" max="-2" attributes="0"/>
</Group>
<Group type="102" attributes="0">
<Component id="addAccountBtn" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="editAccountBtn" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="deleteAccountBtn" min="-2" max="-2" attributes="0"/>
</Group>
</Group>
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
</Group>
<Component id="casesTablePane" max="32767" attributes="0"/>
</Group>
</Group>
</Group>
<EmptySpace max="-2" attributes="0"/>
</Group>
@ -125,7 +130,12 @@
<DimensionLayout dim="1">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="0" attributes="0">
<EmptySpace max="32767" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Group type="103" groupAlignment="3" attributes="0">
<Component id="nameLbl" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="nameField" alignment="3" min="-2" max="-2" attributes="0"/>
</Group>
<EmptySpace min="-2" pref="18" max="-2" attributes="0"/>
<Group type="103" groupAlignment="3" attributes="0">
<Component id="examinerLbl" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="examinerField" alignment="3" min="-2" max="-2" attributes="0"/>
@ -137,12 +147,7 @@
<Component id="commentField" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="commentLbl" alignment="3" min="-2" max="-2" attributes="0"/>
</Group>
<EmptySpace min="-2" pref="20" max="-2" attributes="0"/>
<Group type="103" groupAlignment="3" attributes="0">
<Component id="nameLbl" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="nameField" alignment="3" min="-2" max="-2" attributes="0"/>
</Group>
<EmptySpace max="-2" attributes="0"/>
<EmptySpace min="-2" pref="18" max="-2" attributes="0"/>
<Component id="accountsLbl" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="accountsTablePane" min="-2" pref="56" max="-2" attributes="0"/>
@ -152,7 +157,7 @@
<Component id="deleteAccountBtn" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="editAccountBtn" alignment="3" min="-2" max="-2" attributes="0"/>
</Group>
<EmptySpace max="-2" attributes="0"/>
<EmptySpace type="unrelated" max="-2" attributes="0"/>
<Component id="metadataLabel" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="metadataTablePane" min="-2" pref="66" max="-2" attributes="0"/>
@ -162,7 +167,7 @@
<Component id="deleteMetadataBtn" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="editMetadataBtn" alignment="3" min="-2" max="-2" attributes="0"/>
</Group>
<EmptySpace max="-2" attributes="0"/>
<EmptySpace type="unrelated" max="-2" attributes="0"/>
<Component id="aliasesLabel" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="aliasesTablePane" min="-2" pref="74" max="-2" attributes="0"/>
@ -172,7 +177,7 @@
<Component id="deleteAliasBtn" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="editAliasBtn" alignment="3" min="-2" max="-2" attributes="0"/>
</Group>
<EmptySpace max="-2" attributes="0"/>
<EmptySpace type="unrelated" max="-2" attributes="0"/>
<Component id="casesLbl" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="casesTablePane" min="-2" pref="63" max="-2" attributes="0"/>
@ -229,6 +234,11 @@
</Component>
<Component class="javax.swing.JLabel" name="nameLbl">
<Properties>
<Property name="font" type="java.awt.Font" editor="org.netbeans.modules.form.editors2.FontEditor">
<FontInfo relative="true">
<Font bold="true" component="nameLbl" property="font" relativeSize="true" size="0"/>
</FontInfo>
</Property>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/centralrepository/persona/Bundle.properties" key="PersonaDetailsPanel.nameLbl.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
@ -244,6 +254,11 @@
</Component>
<Component class="javax.swing.JLabel" name="accountsLbl">
<Properties>
<Property name="font" type="java.awt.Font" editor="org.netbeans.modules.form.editors2.FontEditor">
<FontInfo relative="true">
<Font bold="true" component="accountsLbl" property="font" relativeSize="true" size="0"/>
</FontInfo>
</Property>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/centralrepository/persona/Bundle.properties" key="PersonaDetailsPanel.accountsLbl.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
@ -291,6 +306,11 @@
</Component>
<Component class="javax.swing.JLabel" name="metadataLabel">
<Properties>
<Property name="font" type="java.awt.Font" editor="org.netbeans.modules.form.editors2.FontEditor">
<FontInfo relative="true">
<Font bold="true" component="metadataLabel" property="font" relativeSize="true" size="0"/>
</FontInfo>
</Property>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/centralrepository/persona/Bundle.properties" key="PersonaDetailsPanel.metadataLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
@ -338,6 +358,11 @@
</Component>
<Component class="javax.swing.JLabel" name="aliasesLabel">
<Properties>
<Property name="font" type="java.awt.Font" editor="org.netbeans.modules.form.editors2.FontEditor">
<FontInfo relative="true">
<Font bold="true" component="aliasesLabel" property="font" relativeSize="true" size="0"/>
</FontInfo>
</Property>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/centralrepository/persona/Bundle.properties" key="PersonaDetailsPanel.aliasesLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
@ -385,6 +410,11 @@
</Component>
<Component class="javax.swing.JLabel" name="casesLbl">
<Properties>
<Property name="font" type="java.awt.Font" editor="org.netbeans.modules.form.editors2.FontEditor">
<FontInfo relative="true">
<Font bold="true" component="casesLbl" property="font" relativeSize="true" size="0"/>
</FontInfo>
</Property>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/centralrepository/persona/Bundle.properties" key="PersonaDetailsPanel.casesLbl.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>

View File

@ -399,11 +399,13 @@ public final class PersonaDetailsPanel extends javax.swing.JPanel {
commentField.setEditable(false);
commentField.setText(org.openide.util.NbBundle.getMessage(PersonaDetailsPanel.class, "PersonaDetailsPanel.commentField.text")); // NOI18N
nameLbl.setFont(nameLbl.getFont().deriveFont(nameLbl.getFont().getStyle() | java.awt.Font.BOLD));
org.openide.awt.Mnemonics.setLocalizedText(nameLbl, org.openide.util.NbBundle.getMessage(PersonaDetailsPanel.class, "PersonaDetailsPanel.nameLbl.text")); // NOI18N
nameField.setEditable(false);
nameField.setText(org.openide.util.NbBundle.getMessage(PersonaDetailsPanel.class, "PersonaDetailsPanel.nameField.text")); // NOI18N
accountsLbl.setFont(accountsLbl.getFont().deriveFont(accountsLbl.getFont().getStyle() | java.awt.Font.BOLD));
org.openide.awt.Mnemonics.setLocalizedText(accountsLbl, org.openide.util.NbBundle.getMessage(PersonaDetailsPanel.class, "PersonaDetailsPanel.accountsLbl.text")); // NOI18N
accountsTable.setModel(new javax.swing.table.DefaultTableModel(
@ -428,6 +430,7 @@ public final class PersonaDetailsPanel extends javax.swing.JPanel {
org.openide.awt.Mnemonics.setLocalizedText(deleteAccountBtn, org.openide.util.NbBundle.getMessage(PersonaDetailsPanel.class, "PersonaDetailsPanel.deleteAccountBtn.text")); // NOI18N
deleteAccountBtn.setEnabled(false);
metadataLabel.setFont(metadataLabel.getFont().deriveFont(metadataLabel.getFont().getStyle() | java.awt.Font.BOLD));
org.openide.awt.Mnemonics.setLocalizedText(metadataLabel, org.openide.util.NbBundle.getMessage(PersonaDetailsPanel.class, "PersonaDetailsPanel.metadataLabel.text")); // NOI18N
metadataTable.setModel(new javax.swing.table.DefaultTableModel(
@ -452,6 +455,7 @@ public final class PersonaDetailsPanel extends javax.swing.JPanel {
org.openide.awt.Mnemonics.setLocalizedText(deleteMetadataBtn, org.openide.util.NbBundle.getMessage(PersonaDetailsPanel.class, "PersonaDetailsPanel.deleteMetadataBtn.text")); // NOI18N
deleteMetadataBtn.setEnabled(false);
aliasesLabel.setFont(aliasesLabel.getFont().deriveFont(aliasesLabel.getFont().getStyle() | java.awt.Font.BOLD));
org.openide.awt.Mnemonics.setLocalizedText(aliasesLabel, org.openide.util.NbBundle.getMessage(PersonaDetailsPanel.class, "PersonaDetailsPanel.aliasesLabel.text")); // NOI18N
aliasesTable.setModel(new javax.swing.table.DefaultTableModel(
@ -476,6 +480,7 @@ public final class PersonaDetailsPanel extends javax.swing.JPanel {
org.openide.awt.Mnemonics.setLocalizedText(deleteAliasBtn, org.openide.util.NbBundle.getMessage(PersonaDetailsPanel.class, "PersonaDetailsPanel.deleteAliasBtn.text")); // NOI18N
deleteAliasBtn.setEnabled(false);
casesLbl.setFont(casesLbl.getFont().deriveFont(casesLbl.getFont().getStyle() | java.awt.Font.BOLD));
org.openide.awt.Mnemonics.setLocalizedText(casesLbl, org.openide.util.NbBundle.getMessage(PersonaDetailsPanel.class, "PersonaDetailsPanel.casesLbl.text")); // NOI18N
casesTable.setModel(new javax.swing.table.DefaultTableModel(
@ -498,43 +503,14 @@ public final class PersonaDetailsPanel extends javax.swing.JPanel {
.addGroup(detailsPanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(detailsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(accountsTablePane, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 605, Short.MAX_VALUE)
.addComponent(accountsLbl, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(metadataLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(metadataTablePane, javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(aliasesLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(aliasesTablePane)
.addComponent(casesLbl, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(casesTablePane)
.addGroup(detailsPanelLayout.createSequentialGroup()
.addComponent(commentLbl)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(commentField))
.addGroup(detailsPanelLayout.createSequentialGroup()
.addComponent(nameLbl)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(nameField))
.addGroup(detailsPanelLayout.createSequentialGroup()
.addGroup(detailsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(detailsPanelLayout.createSequentialGroup()
.addComponent(addAccountBtn)
.addGap(18, 18, 18)
.addComponent(editAccountBtn)
.addGap(18, 18, 18)
.addComponent(deleteAccountBtn))
.addGroup(detailsPanelLayout.createSequentialGroup()
.addComponent(addMetadataBtn)
.addGap(18, 18, 18)
.addComponent(editMetadataBtn)
.addGap(18, 18, 18)
.addComponent(deleteMetadataBtn))
.addGroup(detailsPanelLayout.createSequentialGroup()
.addComponent(addAliasBtn)
.addGap(18, 18, 18)
.addComponent(editAliasBtn)
.addGap(18, 18, 18)
.addComponent(deleteAliasBtn)))
.addGap(0, 0, Short.MAX_VALUE))
.addGroup(detailsPanelLayout.createSequentialGroup()
.addComponent(examinerLbl)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
@ -542,13 +518,49 @@ public final class PersonaDetailsPanel extends javax.swing.JPanel {
.addGap(18, 18, 18)
.addComponent(creationDateLbl)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(creationDateField)))
.addComponent(creationDateField))
.addGroup(detailsPanelLayout.createSequentialGroup()
.addComponent(commentLbl)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(commentField))
.addGroup(detailsPanelLayout.createSequentialGroup()
.addGap(10, 10, 10)
.addGroup(detailsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(aliasesTablePane, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 595, Short.MAX_VALUE)
.addComponent(metadataTablePane, javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(accountsTablePane, javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(detailsPanelLayout.createSequentialGroup()
.addGroup(detailsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(detailsPanelLayout.createSequentialGroup()
.addComponent(addAliasBtn)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(editAliasBtn)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(deleteAliasBtn))
.addGroup(detailsPanelLayout.createSequentialGroup()
.addComponent(addMetadataBtn)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(editMetadataBtn)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(deleteMetadataBtn))
.addGroup(detailsPanelLayout.createSequentialGroup()
.addComponent(addAccountBtn)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(editAccountBtn)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(deleteAccountBtn)))
.addGap(0, 0, Short.MAX_VALUE))
.addComponent(casesTablePane))))
.addContainerGap())
);
detailsPanelLayout.setVerticalGroup(
detailsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(detailsPanelLayout.createSequentialGroup()
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap()
.addGroup(detailsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(nameLbl)
.addComponent(nameField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addGroup(detailsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(examinerLbl)
.addComponent(examinerField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
@ -558,11 +570,7 @@ public final class PersonaDetailsPanel extends javax.swing.JPanel {
.addGroup(detailsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(commentField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(commentLbl))
.addGap(20, 20, 20)
.addGroup(detailsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(nameLbl)
.addComponent(nameField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGap(18, 18, 18)
.addComponent(accountsLbl)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(accountsTablePane, javax.swing.GroupLayout.PREFERRED_SIZE, 56, javax.swing.GroupLayout.PREFERRED_SIZE)
@ -571,7 +579,7 @@ public final class PersonaDetailsPanel extends javax.swing.JPanel {
.addComponent(addAccountBtn)
.addComponent(deleteAccountBtn)
.addComponent(editAccountBtn))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(metadataLabel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(metadataTablePane, javax.swing.GroupLayout.PREFERRED_SIZE, 66, javax.swing.GroupLayout.PREFERRED_SIZE)
@ -580,7 +588,7 @@ public final class PersonaDetailsPanel extends javax.swing.JPanel {
.addComponent(addMetadataBtn)
.addComponent(deleteMetadataBtn)
.addComponent(editMetadataBtn))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(aliasesLabel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(aliasesTablePane, javax.swing.GroupLayout.PREFERRED_SIZE, 74, javax.swing.GroupLayout.PREFERRED_SIZE)
@ -589,7 +597,7 @@ public final class PersonaDetailsPanel extends javax.swing.JPanel {
.addComponent(addAliasBtn)
.addComponent(deleteAliasBtn)
.addComponent(editAliasBtn))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(casesLbl)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(casesTablePane, javax.swing.GroupLayout.PREFERRED_SIZE, 63, javax.swing.GroupLayout.PREFERRED_SIZE)
@ -606,7 +614,7 @@ public final class PersonaDetailsPanel extends javax.swing.JPanel {
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 521, Short.MAX_VALUE)
.addGap(0, 583, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(detailsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)

View File

@ -2,11 +2,16 @@ OpenIDE-Module-Name=CommandLineAutopsy
OptionsCategory_Keywords_Command_Line_Ingest_Settings=Command Line Ingest Settings
OptionsCategory_Keywords_General=Options
OptionsCategory_Name_Command_Line_Ingest=Command Line Ingest
CommandLinePanel.jLabel1.text=Ingest is running from command line
CommandLinePanel.jLabel1.text=Running command line task.
CommandLineStartupWindow.title.text=Running in Command Line Mode
CommandLineIngestSettingsPanel.bnEditIngestSettings.text=Configure Ingest
CommandLineIngestSettingsPanel.bnEditIngestSettings.text=Configure
CommandLineIngestSettingsPanel.bnEditReportSettings.actionCommand=Report Module Settings
CommandLineIngestSettingsPanel.bnEditReportSettings.toolTipText=Report generation settings for the command line processing mode context.
CommandLineIngestSettingsPanel.bnEditReportSettings.text=Configure Reporting
CommandLineIngestSettingsPanel.jLabelDescription.text=<html>You can create cases, add data sources, run ingest modules, and generate reports from the command line.<br>This options panel allows you to configure the settings to use when running ingest modules and generating reports.<br>See the user documentation for details.</html>
CommandLineIngestSettingsPanel.bnEditReportSettings.text=Configure
CommandLineIngestSettingsPanel.bnEditIngestSettings.toolTipText=Ingest job settings for the command line processing mode context.
CommandLineIngestSettingsPanel.ingestDescriptionTextPane.text=Configure the profiles to use from the command line.
CommandLineIngestSettingsPanel.reportDescriptionTextPane.text=Report profiles define which report module and configuration to use.
CommandLineIngestSettingsPanel.reportProfileLabel.text=Report Profile:
CommandLineIngestSettingsPanel.ingestProfileLabel.text=Ingest Profile:
CommandLineIngestSettingsPanel.bnEditReportSettings.AccessibleContext.accessibleName=Configure
CommandLineIngestSettingsPanel.jTextPane1.text=Ingest profiles define which ingest filters, modules and configuration to use.

View File

@ -1,12 +1,22 @@
CommandLineIngestSettingPanel_empty_report_name_mgs=Report profile name was empty, no profile created.
CommandLineIngestSettingPanel_existing_report_name_mgs=Report profile name was already exists, no profile created.
CommandListIngestSettingsPanel_Default_Report_DisplayName=Default
CommandListIngestSettingsPanel_Make_Config=Make new profile...
CommandListIngestSettingsPanel_Report_Name_Msg=Please supply a report profile name:
OpenIDE-Module-Name=CommandLineAutopsy
OptionsCategory_Keywords_Command_Line_Ingest_Settings=Command Line Ingest Settings
OptionsCategory_Keywords_General=Options
OptionsCategory_Name_Command_Line_Ingest=Command Line Ingest
CommandLinePanel.jLabel1.text=Ingest is running from command line
CommandLinePanel.jLabel1.text=Running command line task.
CommandLineStartupWindow.title.text=Running in Command Line Mode
CommandLineIngestSettingsPanel.bnEditIngestSettings.text=Configure Ingest
CommandLineIngestSettingsPanel.bnEditIngestSettings.text=Configure
CommandLineIngestSettingsPanel.bnEditReportSettings.actionCommand=Report Module Settings
CommandLineIngestSettingsPanel.bnEditReportSettings.toolTipText=Report generation settings for the command line processing mode context.
CommandLineIngestSettingsPanel.bnEditReportSettings.text=Configure Reporting
CommandLineIngestSettingsPanel.jLabelDescription.text=<html>You can create cases, add data sources, run ingest modules, and generate reports from the command line.<br>This options panel allows you to configure the settings to use when running ingest modules and generating reports.<br>See the user documentation for details.</html>
CommandLineIngestSettingsPanel.bnEditReportSettings.text=Configure
CommandLineIngestSettingsPanel.bnEditIngestSettings.toolTipText=Ingest job settings for the command line processing mode context.
CommandLineIngestSettingsPanel.ingestDescriptionTextPane.text=Configure the profiles to use from the command line.
CommandLineIngestSettingsPanel.reportDescriptionTextPane.text=Report profiles define which report module and configuration to use.
CommandLineIngestSettingsPanel.reportProfileLabel.text=Report Profile:
CommandLineIngestSettingsPanel.ingestProfileLabel.text=Ingest Profile:
CommandLineIngestSettingsPanel.bnEditReportSettings.AccessibleContext.accessibleName=Configure
CommandLineIngestSettingsPanel.jTextPane1.text=Ingest profiles define which ingest filters, modules and configuration to use.

View File

@ -1,7 +1,7 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2019-2019 Basis Technology Corp.
* Copyright 2019-2020 Basis Technology Corp.
* Contact: carrier <at> sleuthkit <dot> org
*
* Licensed under the Apache License, Version 2.0 (the "License");
@ -34,7 +34,8 @@ class CommandLineCommand {
ADD_DATA_SOURCE,
RUN_INGEST,
LIST_ALL_DATA_SOURCES,
GENERATE_REPORTS;
GENERATE_REPORTS,
OPEN_CASE_IN_UI;
}
/**
@ -47,7 +48,8 @@ class CommandLineCommand {
CASE_FOLDER_PATH,
DATA_SOURCE_PATH,
DATA_SOURCE_ID,
INGEST_PROFILE_NAME;
INGEST_PROFILE_NAME,
REPORT_PROFILE_NAME;
}
private final CommandType type;

View File

@ -1,7 +1,7 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2019-2019 Basis Technology Corp.
* Copyright 2019-2020 Basis Technology Corp.
* Contact: carrier <at> sleuthkit <dot> org
*
* Licensed under the Apache License, Version 2.0 (the "License");
@ -42,7 +42,6 @@ import org.sleuthkit.autopsy.casemodule.Case.CaseType;
import org.sleuthkit.autopsy.casemodule.CaseActionException;
import org.sleuthkit.autopsy.casemodule.CaseDetails;
import org.sleuthkit.autopsy.casemodule.CaseMetadata;
import static org.sleuthkit.autopsy.casemodule.CaseMetadata.getFileExtension;
import org.sleuthkit.autopsy.core.RuntimeProperties;
import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorCallback;
import static org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorCallback.DataSourceProcessorResult.CRITICAL_ERRORS;
@ -74,7 +73,7 @@ import org.sleuthkit.datamodel.TskCoreException;
* cause Autopsy to create a case, add a specified data source, run ingest on
* that data source, list all data sources in the case, and generate reports.
*/
public class CommandLineIngestManager {
public class CommandLineIngestManager extends CommandLineManager{
private static final Logger LOGGER = Logger.getLogger(CommandLineIngestManager.class.getName());
private static final Set<IngestManager.IngestJobEvent> INGEST_JOB_EVENTS_OF_INTEREST = EnumSet.of(IngestManager.IngestJobEvent.CANCELLED, IngestManager.IngestJobEvent.COMPLETED);
@ -142,7 +141,7 @@ public class CommandLineIngestManager {
if (commands == null || commands.isEmpty()) {
LOGGER.log(Level.SEVERE, "No command line commands specified");
System.err.println("No command line commands specified");
System.out.println("No command line commands specified");
return;
}
@ -170,7 +169,7 @@ public class CommandLineIngestManager {
} catch (CaseActionException ex) {
String baseCaseName = command.getInputs().get(CommandLineCommand.InputType.CASE_NAME.name());
LOGGER.log(Level.SEVERE, "Error creating or opening case " + baseCaseName, ex);
System.err.println("Error creating or opening case " + baseCaseName);
System.out.println("Error creating or opening case " + baseCaseName);
// Do not process any other commands
return;
}
@ -184,7 +183,7 @@ public class CommandLineIngestManager {
// open the case, if it hasn't been already opened by CREATE_CASE command
if (caseForJob == null) {
String caseDirPath = inputs.get(CommandLineCommand.InputType.CASE_FOLDER_PATH.name());
openCase(caseDirPath);
caseForJob = CommandLineIngestManager.this.openCase(caseDirPath);
}
String dataSourcePath = inputs.get(CommandLineCommand.InputType.DATA_SOURCE_PATH.name());
@ -196,7 +195,7 @@ public class CommandLineIngestManager {
} catch (InterruptedException | AutoIngestDataSourceProcessor.AutoIngestDataSourceProcessorException | CaseActionException ex) {
String dataSourcePath = command.getInputs().get(CommandLineCommand.InputType.DATA_SOURCE_PATH.name());
LOGGER.log(Level.SEVERE, "Error adding data source " + dataSourcePath, ex);
System.err.println("Error adding data source " + dataSourcePath);
System.out.println("Error adding data source " + dataSourcePath);
// Do not process any other commands
return;
}
@ -210,7 +209,7 @@ public class CommandLineIngestManager {
// open the case, if it hasn't been already opened by CREATE_CASE or ADD_DATA_SOURCE commands
if (caseForJob == null) {
String caseDirPath = inputs.get(CommandLineCommand.InputType.CASE_FOLDER_PATH.name());
openCase(caseDirPath);
caseForJob = CommandLineIngestManager.this.openCase(caseDirPath);
}
// populate the AutoIngestDataSource structure, if that hasn't been done by ADD_DATA_SOURCE command
@ -225,7 +224,7 @@ public class CommandLineIngestManager {
content = Case.getCurrentCaseThrows().getSleuthkitCase().getContentById(dataSourceObjId);
} catch (TskCoreException ex) {
LOGGER.log(Level.SEVERE, "Exception while trying to find data source with object ID " + dataSourceId, ex);
System.err.println("Exception while trying to find data source with object ID " + dataSourceId);
System.out.println("Exception while trying to find data source with object ID " + dataSourceId);
// Do not process any other commands
return;
}
@ -250,7 +249,7 @@ public class CommandLineIngestManager {
} catch (InterruptedException | CaseActionException ex) {
String dataSourcePath = command.getInputs().get(CommandLineCommand.InputType.DATA_SOURCE_PATH.name());
LOGGER.log(Level.SEVERE, "Error running ingest on data source " + dataSourcePath, ex);
System.err.println("Error running ingest on data source " + dataSourcePath);
System.out.println("Error running ingest on data source " + dataSourcePath);
// Do not process any other commands
return;
}
@ -265,7 +264,7 @@ public class CommandLineIngestManager {
// open the case, if it hasn't been already opened by previous command
if (caseForJob == null) {
String caseDirPath = inputs.get(CommandLineCommand.InputType.CASE_FOLDER_PATH.name());
openCase(caseDirPath);
caseForJob = CommandLineIngestManager.this.openCase(caseDirPath);
}
String outputDirPath = getOutputDirPath(caseForJob);
@ -273,7 +272,7 @@ public class CommandLineIngestManager {
} catch (CaseActionException ex) {
String caseDirPath = command.getInputs().get(CommandLineCommand.InputType.CASE_FOLDER_PATH.name());
LOGGER.log(Level.SEVERE, "Error opening case in case directory: " + caseDirPath, ex);
System.err.println("Error opening case in case directory: " + caseDirPath);
System.out.println("Error opening case in case directory: " + caseDirPath);
// Do not process any other commands
return;
}
@ -288,17 +287,22 @@ public class CommandLineIngestManager {
// open the case, if it hasn't been already opened by previous command
if (caseForJob == null) {
String caseDirPath = inputs.get(CommandLineCommand.InputType.CASE_FOLDER_PATH.name());
openCase(caseDirPath);
caseForJob = CommandLineIngestManager.this.openCase(caseDirPath);
}
// generate reports
String reportName = inputs.get(CommandLineCommand.InputType.REPORT_PROFILE_NAME.name());
if (reportName == null) {
reportName = CommandLineIngestSettingsPanel.getDefaultReportingConfigName();
}
// generate reports
ReportProgressIndicator progressIndicator = new ReportProgressIndicator(new LoggingProgressIndicator());
ReportGenerator generator = new ReportGenerator(CommandLineIngestSettingsPanel.getReportingConfigName(), progressIndicator);
ReportProgressIndicator progressIndicator = new ReportProgressIndicator(new CommandLineProgressIndicator());
ReportGenerator generator = new ReportGenerator(reportName, progressIndicator);
generator.generateReports();
} catch (CaseActionException ex) {
String caseDirPath = command.getInputs().get(CommandLineCommand.InputType.CASE_FOLDER_PATH.name());
LOGGER.log(Level.SEVERE, "Error opening case in case directory: " + caseDirPath, ex);
System.err.println("Error opening case in case directory: " + caseDirPath);
System.out.println("Error opening case in case directory: " + caseDirPath);
// Do not process any other commands
return;
}
@ -316,14 +320,14 @@ public class CommandLineIngestManager {
* logged.
*/
LOGGER.log(Level.SEVERE, "Unexpected error", ex);
System.err.println("Unexpected error. Exiting...");
System.out.println("Unexpected error. Exiting...");
} finally {
try {
Case.closeCurrentCase();
} catch (CaseActionException ex) {
LOGGER.log(Level.WARNING, "Exception while closing case", ex);
System.err.println("Exception while closing case");
System.out.println("Exception while closing case");
}
}
@ -369,55 +373,6 @@ public class CommandLineIngestManager {
LOGGER.log(Level.INFO, "Opened case {0}", caseForJob.getName());
}
/**
* Opens existing case.
*
* @param caseFolderPath full path to case directory
*
* @throws CaseActionException
*/
private void openCase(String caseFolderPath) throws CaseActionException {
LOGGER.log(Level.INFO, "Opening case in directory {0}", caseFolderPath);
String metadataFilePath = findAutFile(caseFolderPath);
Case.openAsCurrentCase(metadataFilePath);
caseForJob = Case.getCurrentCase();
LOGGER.log(Level.INFO, "Opened case {0}", caseForJob.getName());
}
/**
* Finds the path to the .aut file for the specified case directory.
*
* @param caseDirectory the directory to check for a .aut file
*
* @return the path to the first .aut file found in the directory
*
* @throws CaseActionException if there was an issue finding a .aut file
*/
private String findAutFile(String caseDirectory) throws CaseActionException {
File caseFolder = Paths.get(caseDirectory).toFile();
if (caseFolder.exists()) {
/*
* Search for '*.aut' files.
*/
File[] fileArray = caseFolder.listFiles();
if (fileArray == null) {
throw new CaseActionException("No files found in case directory");
}
String autFilePath = null;
for (File file : fileArray) {
String name = file.getName().toLowerCase();
if (autFilePath == null && name.endsWith(getFileExtension())) {
return file.getAbsolutePath();
}
}
throw new CaseActionException("No .aut files found in case directory");
}
throw new CaseActionException("Case directory was not found");
}
/**
* Passes the data source for the current job through a data source
* processor that adds it to the case database.
@ -425,17 +380,11 @@ public class CommandLineIngestManager {
* @param caseForJob The case
* @param dataSource The data source.
*
* @throws
* AutoIngestDataSourceProcessor.AutoIngestDataSourceProcessorExceptioif
* there
* was
* a
* DSP
* processing
* error
* @throws AutoIngestDataSourceProcessorException if there was a DSP
* processing error.
*
* @throws ead running the job processing task is interrupted while
* blocked, i.e., if auto ingest is shutting down.
* @throws InterruptedException running the job processing task while
* blocking, i.e., if auto ingest is shutting down.
*/
private void runDataSourceProcessor(Case caseForJob, AutoIngestDataSource dataSource) throws InterruptedException, AutoIngestDataSourceProcessor.AutoIngestDataSourceProcessorException {
@ -558,7 +507,7 @@ public class CommandLineIngestManager {
if (selectedProfile == null) {
// unable to find the user specified profile
LOGGER.log(Level.SEVERE, "Unable to find ingest profile: {0}. Ingest cancelled!", ingestProfileName);
System.err.println("Unable to find ingest profile: " + ingestProfileName + ". Ingest cancelled!");
System.out.println("Unable to find ingest profile: " + ingestProfileName + ". Ingest cancelled!");
return;
}
@ -567,7 +516,7 @@ public class CommandLineIngestManager {
if (selectedFileSet == null) {
// unable to find the user specified profile
LOGGER.log(Level.SEVERE, "Unable to find file filter {0} for ingest profile: {1}. Ingest cancelled!", new Object[]{selectedProfile.getFileIngestFilter(), ingestProfileName});
System.err.println("Unable to find file filter " + selectedProfile.getFileIngestFilter() + " for ingest profile: " + ingestProfileName + ". Ingest cancelled!");
System.out.println("Unable to find file filter " + selectedProfile.getFileIngestFilter() + " for ingest profile: " + ingestProfileName + ". Ingest cancelled!");
return;
}
}

View File

@ -16,32 +16,10 @@
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
<AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,44,0,0,1,-112"/>
</AuxValues>
<Layout>
<DimensionLayout dim="0">
<Group type="103" groupAlignment="0" attributes="0">
<Component id="nodeScrollPane" alignment="1" max="32767" attributes="0"/>
</Group>
</DimensionLayout>
<DimensionLayout dim="1">
<Group type="103" groupAlignment="0" attributes="0">
<Component id="nodeScrollPane" alignment="0" pref="421" max="32767" attributes="0"/>
</Group>
</DimensionLayout>
</Layout>
<SubComponents>
<Container class="javax.swing.JScrollPane" name="nodeScrollPane">
<Properties>
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[0, 0]"/>
</Property>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[803, 553]"/>
</Property>
</Properties>
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
<SubComponents>
<Container class="javax.swing.JPanel" name="nodePanel">
<Properties>
@ -52,35 +30,13 @@
<Dimension value="[801, 551]"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
<BorderConstraints direction="Center"/>
</Constraint>
</Constraints>
<Layout>
<DimensionLayout dim="0">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<Group type="103" groupAlignment="0" attributes="0">
<Component id="bnEditIngestSettings" alignment="0" min="-2" pref="155" max="-2" attributes="0"/>
<Component id="jLabelDescription" alignment="0" min="-2" max="-2" attributes="0"/>
<Component id="bnEditReportSettings" alignment="0" min="-2" pref="155" max="-2" attributes="0"/>
</Group>
<EmptySpace pref="-34" max="32767" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
<DimensionLayout dim="1">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="0" attributes="0">
<EmptySpace min="-2" pref="27" max="-2" attributes="0"/>
<Component id="jLabelDescription" min="-2" max="-2" attributes="0"/>
<EmptySpace type="unrelated" max="-2" attributes="0"/>
<Component id="bnEditIngestSettings" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="bnEditReportSettings" min="-2" max="-2" attributes="0"/>
<EmptySpace pref="381" max="32767" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
</Layout>
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
<SubComponents>
<Component class="javax.swing.JButton" name="bnEditIngestSettings">
<Properties>
@ -97,13 +53,11 @@
<Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="bnEditIngestSettingsActionPerformed"/>
</Events>
</Component>
<Component class="javax.swing.JLabel" name="jLabelDescription">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/commandlineingest/Bundle.properties" key="CommandLineIngestSettingsPanel.jLabelDescription.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="2" gridY="2" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="9" insetsBottom="0" insetsRight="0" anchor="18" weightX="0.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JButton" name="bnEditReportSettings">
<Properties>
@ -117,13 +71,153 @@
<ResourceString bundle="org/sleuthkit/autopsy/commandlineingest/Bundle.properties" key="CommandLineIngestSettingsPanel.bnEditReportSettings.actionCommand" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<AccessibilityProperties>
<Property name="AccessibleContext.accessibleName" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/commandlineingest/Bundle.properties" key="CommandLineIngestSettingsPanel.bnEditReportSettings.AccessibleContext.accessibleName" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</AccessibilityProperties>
<Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="bnEditReportSettingsActionPerformed"/>
</Events>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="2" gridY="4" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="9" insetsBottom="0" insetsRight="0" anchor="18" weightX="0.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JTextPane" name="ingestDescriptionTextPane">
<Properties>
<Property name="editable" type="boolean" value="false"/>
<Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
<Color blue="f0" green="f0" id="Label.background" palette="3" red="f0" type="palette"/>
</Property>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/commandlineingest/Bundle.properties" key="CommandLineIngestSettingsPanel.ingestDescriptionTextPane.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<AuxValues>
<AuxValue name="JavaCodeGenerator_VariableLocal" type="java.lang.Boolean" value="true"/>
<AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="0"/>
</AuxValues>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="0" gridWidth="3" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="5" insetsLeft="5" insetsBottom="10" insetsRight="5" anchor="18" weightX="1.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JLabel" name="ingestProfileLabel">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/commandlineingest/Bundle.properties" key="CommandLineIngestSettingsPanel.ingestProfileLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<AuxValues>
<AuxValue name="JavaCodeGenerator_VariableLocal" type="java.lang.Boolean" value="true"/>
<AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="0"/>
</AuxValues>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="2" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="25" insetsBottom="0" insetsRight="0" anchor="17" weightX="0.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JComboBox" name="ingestProfileCB">
<Properties>
<Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor">
<StringArray count="1">
<StringItem index="0" value="Default"/>
</StringArray>
</Property>
<Property name="enabled" type="boolean" value="false"/>
</Properties>
<AuxValues>
<AuxValue name="JavaCodeGenerator_TypeParameters" type="java.lang.String" value="&lt;String&gt;"/>
</AuxValues>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="1" gridY="2" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="5" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JTextPane" name="reportDescriptionTextPane">
<Properties>
<Property name="editable" type="boolean" value="false"/>
<Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
<Color blue="f0" green="f0" id="Label.background" palette="3" red="f0" type="palette"/>
</Property>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/commandlineingest/Bundle.properties" key="CommandLineIngestSettingsPanel.reportDescriptionTextPane.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<AuxValues>
<AuxValue name="JavaCodeGenerator_VariableLocal" type="java.lang.Boolean" value="true"/>
<AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="0"/>
</AuxValues>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="3" gridWidth="3" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="15" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="10" weightX="0.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JLabel" name="reportProfileLabel">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/commandlineingest/Bundle.properties" key="CommandLineIngestSettingsPanel.reportProfileLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<AuxValues>
<AuxValue name="JavaCodeGenerator_VariableLocal" type="java.lang.Boolean" value="true"/>
<AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="0"/>
</AuxValues>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="4" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="25" insetsBottom="0" insetsRight="0" anchor="17" weightX="0.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JComboBox" name="reportProfileCB">
<Properties>
<Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor">
<StringArray count="0"/>
</Property>
</Properties>
<AuxValues>
<AuxValue name="JavaCodeGenerator_TypeParameters" type="java.lang.String" value="&lt;String&gt;"/>
</AuxValues>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="1" gridY="4" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="5" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.Box$Filler" name="bottomFiller">
<AuxValues>
<AuxValue name="JavaCodeGenerator_VariableLocal" type="java.lang.Boolean" value="true"/>
<AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="0"/>
</AuxValues>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="5" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="1.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JTextPane" name="jTextPane1">
<Properties>
<Property name="editable" type="boolean" value="false"/>
<Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
<Color blue="f0" green="f0" id="Label.background" palette="3" red="f0" type="palette"/>
</Property>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/commandlineingest/Bundle.properties" key="CommandLineIngestSettingsPanel.jTextPane1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="1" gridWidth="3" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="10" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="17" weightX="0.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
</SubComponents>
</Container>
</SubComponents>
</Container>
</SubComponents>
</Form>

View File

@ -1,7 +1,7 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2019-2019 Basis Technology Corp.
* Copyright 2019-2020 Basis Technology Corp.
* Contact: carrier <at> sleuthkit <dot> org
*
* Licensed under the Apache License, Version 2.0 (the "License");
@ -21,12 +21,16 @@ package org.sleuthkit.autopsy.commandlineingest;
import java.awt.BorderLayout;
import java.awt.Cursor;
import java.util.List;
import java.util.Set;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JOptionPane;
import org.openide.util.NbBundle.Messages;
import org.sleuthkit.autopsy.ingest.IngestJobSettings;
import org.sleuthkit.autopsy.ingest.IngestJobSettingsPanel;
import org.openide.windows.WindowManager;
import org.sleuthkit.autopsy.coreutils.Logger;
import static org.sleuthkit.autopsy.report.infrastructure.ReportWizardAction.doReportWizard;
import org.sleuthkit.autopsy.report.infrastructure.ReportWizardAction;
/**
* Configuration panel for auto ingest settings.
@ -48,12 +52,13 @@ public class CommandLineIngestSettingsPanel extends javax.swing.JPanel {
*/
public CommandLineIngestSettingsPanel(CommandLineIngestSettingsPanelController theController) {
initComponents();
setupReportList();
}
/**
* @return the REPORTING_CONFIGURATION_NAME
*/
public static String getReportingConfigName() {
public static String getDefaultReportingConfigName() {
return REPORTING_CONFIGURATION_NAME;
}
@ -87,6 +92,58 @@ public class CommandLineIngestSettingsPanel extends javax.swing.JPanel {
}
}
@Messages({
"CommandListIngestSettingsPanel_Default_Report_DisplayName=Default",
"CommandListIngestSettingsPanel_Make_Config=Make new profile..."
})
/**
* Initializes the report profile list combo box.
*/
private void setupReportList() {
Set<String> configNames = ReportWizardAction.getReportConfigNames();
configNames.remove(REPORTING_CONFIGURATION_NAME);
DefaultComboBoxModel<String> model = new DefaultComboBoxModel<>();
model.addElement(Bundle.CommandListIngestSettingsPanel_Default_Report_DisplayName());
for (String name : configNames) {
model.addElement(name);
}
model.addElement(Bundle.CommandListIngestSettingsPanel_Make_Config());
reportProfileCB.setModel(model);
reportProfileCB.setSelectedIndex(0);
}
/**
* Checks to see if there is currently a profile define with the given name.
*
* @param name Profile name to check.
*
* @return True if there is a report with the given name.
*/
private boolean doesReportProfileNameExist(String name) {
Set<String> configNames = ReportWizardAction.getReportConfigNames();
return configNames.contains(name);
}
/**
* Returns the currently selected report profile name from the cb. For backwards
* compatibility if Default is selected, the existing default
* profile name of CommandLineIngest will be returned.
*
* @return The selected profile name.
*/
private String getReportName() {
String reportName = (String) reportProfileCB.getSelectedItem();
if (reportName.equals(Bundle.CommandListIngestSettingsPanel_Default_Report_DisplayName())) {
reportName = REPORTING_CONFIGURATION_NAME;
}
return reportName;
}
/**
* 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
@ -95,20 +152,26 @@ public class CommandLineIngestSettingsPanel extends javax.swing.JPanel {
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
java.awt.GridBagConstraints gridBagConstraints;
nodeScrollPane = new javax.swing.JScrollPane();
nodePanel = new javax.swing.JPanel();
bnEditIngestSettings = new javax.swing.JButton();
jLabelDescription = new javax.swing.JLabel();
bnEditReportSettings = new javax.swing.JButton();
javax.swing.JTextPane ingestDescriptionTextPane = new javax.swing.JTextPane();
javax.swing.JLabel ingestProfileLabel = new javax.swing.JLabel();
ingestProfileCB = new javax.swing.JComboBox<>();
javax.swing.JTextPane reportDescriptionTextPane = new javax.swing.JTextPane();
javax.swing.JLabel reportProfileLabel = new javax.swing.JLabel();
reportProfileCB = new javax.swing.JComboBox<>();
javax.swing.Box.Filler bottomFiller = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0));
jTextPane1 = new javax.swing.JTextPane();
setPreferredSize(new java.awt.Dimension(810, 422));
nodeScrollPane.setMinimumSize(new java.awt.Dimension(0, 0));
nodeScrollPane.setPreferredSize(new java.awt.Dimension(803, 553));
setLayout(new java.awt.BorderLayout());
nodePanel.setMinimumSize(new java.awt.Dimension(100, 100));
nodePanel.setPreferredSize(new java.awt.Dimension(801, 551));
nodePanel.setLayout(new java.awt.GridBagLayout());
org.openide.awt.Mnemonics.setLocalizedText(bnEditIngestSettings, org.openide.util.NbBundle.getMessage(CommandLineIngestSettingsPanel.class, "CommandLineIngestSettingsPanel.bnEditIngestSettings.text")); // NOI18N
bnEditIngestSettings.setToolTipText(org.openide.util.NbBundle.getMessage(CommandLineIngestSettingsPanel.class, "CommandLineIngestSettingsPanel.bnEditIngestSettings.toolTipText")); // NOI18N
@ -118,8 +181,12 @@ public class CommandLineIngestSettingsPanel extends javax.swing.JPanel {
bnEditIngestSettingsActionPerformed(evt);
}
});
org.openide.awt.Mnemonics.setLocalizedText(jLabelDescription, org.openide.util.NbBundle.getMessage(CommandLineIngestSettingsPanel.class, "CommandLineIngestSettingsPanel.jLabelDescription.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new java.awt.Insets(0, 9, 0, 0);
nodePanel.add(bnEditIngestSettings, gridBagConstraints);
org.openide.awt.Mnemonics.setLocalizedText(bnEditReportSettings, org.openide.util.NbBundle.getMessage(CommandLineIngestSettingsPanel.class, "CommandLineIngestSettingsPanel.bnEditReportSettings.text")); // NOI18N
bnEditReportSettings.setToolTipText(org.openide.util.NbBundle.getMessage(CommandLineIngestSettingsPanel.class, "CommandLineIngestSettingsPanel.bnEditReportSettings.toolTipText")); // NOI18N
@ -129,48 +196,120 @@ public class CommandLineIngestSettingsPanel extends javax.swing.JPanel {
bnEditReportSettingsActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 4;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new java.awt.Insets(0, 9, 0, 0);
nodePanel.add(bnEditReportSettings, gridBagConstraints);
bnEditReportSettings.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(CommandLineIngestSettingsPanel.class, "CommandLineIngestSettingsPanel.bnEditReportSettings.AccessibleContext.accessibleName")); // NOI18N
javax.swing.GroupLayout nodePanelLayout = new javax.swing.GroupLayout(nodePanel);
nodePanel.setLayout(nodePanelLayout);
nodePanelLayout.setHorizontalGroup(
nodePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(nodePanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(nodePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(bnEditIngestSettings, javax.swing.GroupLayout.PREFERRED_SIZE, 155, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabelDescription, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(bnEditReportSettings, javax.swing.GroupLayout.PREFERRED_SIZE, 155, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
nodePanelLayout.setVerticalGroup(
nodePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(nodePanelLayout.createSequentialGroup()
.addGap(27, 27, 27)
.addComponent(jLabelDescription, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(bnEditIngestSettings)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(bnEditReportSettings)
.addContainerGap(381, Short.MAX_VALUE))
);
ingestDescriptionTextPane.setEditable(false);
ingestDescriptionTextPane.setBackground(javax.swing.UIManager.getDefaults().getColor("Label.background"));
ingestDescriptionTextPane.setText(org.openide.util.NbBundle.getMessage(CommandLineIngestSettingsPanel.class, "CommandLineIngestSettingsPanel.ingestDescriptionTextPane.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.gridwidth = 3;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 10, 5);
nodePanel.add(ingestDescriptionTextPane, gridBagConstraints);
nodeScrollPane.setViewportView(nodePanel);
org.openide.awt.Mnemonics.setLocalizedText(ingestProfileLabel, org.openide.util.NbBundle.getMessage(CommandLineIngestSettingsPanel.class, "CommandLineIngestSettingsPanel.ingestProfileLabel.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(0, 25, 0, 0);
nodePanel.add(ingestProfileLabel, gridBagConstraints);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(nodeScrollPane, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(nodeScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 421, Short.MAX_VALUE)
);
ingestProfileCB.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "Default" }));
ingestProfileCB.setEnabled(false);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.insets = new java.awt.Insets(0, 5, 0, 0);
nodePanel.add(ingestProfileCB, gridBagConstraints);
reportDescriptionTextPane.setEditable(false);
reportDescriptionTextPane.setBackground(javax.swing.UIManager.getDefaults().getColor("Label.background"));
reportDescriptionTextPane.setText(org.openide.util.NbBundle.getMessage(CommandLineIngestSettingsPanel.class, "CommandLineIngestSettingsPanel.reportDescriptionTextPane.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 3;
gridBagConstraints.gridwidth = 3;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.insets = new java.awt.Insets(15, 5, 5, 5);
nodePanel.add(reportDescriptionTextPane, gridBagConstraints);
org.openide.awt.Mnemonics.setLocalizedText(reportProfileLabel, org.openide.util.NbBundle.getMessage(CommandLineIngestSettingsPanel.class, "CommandLineIngestSettingsPanel.reportProfileLabel.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 4;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(0, 25, 0, 0);
nodePanel.add(reportProfileLabel, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 4;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.insets = new java.awt.Insets(0, 5, 0, 0);
nodePanel.add(reportProfileCB, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 5;
gridBagConstraints.weighty = 1.0;
nodePanel.add(bottomFiller, gridBagConstraints);
jTextPane1.setEditable(false);
jTextPane1.setBackground(javax.swing.UIManager.getDefaults().getColor("Label.background"));
jTextPane1.setText(org.openide.util.NbBundle.getMessage(CommandLineIngestSettingsPanel.class, "CommandLineIngestSettingsPanel.jTextPane1.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.gridwidth = 3;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(10, 5, 5, 5);
nodePanel.add(jTextPane1, gridBagConstraints);
add(nodePanel, java.awt.BorderLayout.CENTER);
}// </editor-fold>//GEN-END:initComponents
@Messages({
"CommandListIngestSettingsPanel_Report_Name_Msg=Please supply a report profile name:",
"CommandLineIngestSettingPanel_empty_report_name_mgs=Report profile name was empty, no profile created.",
"CommandLineIngestSettingPanel_existing_report_name_mgs=Report profile name was already exists, no profile created."
})
private void bnEditReportSettingsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bnEditReportSettingsActionPerformed
String reportName = getReportName();
if (reportName.equals(Bundle.CommandListIngestSettingsPanel_Make_Config())) {
reportName = JOptionPane.showInputDialog(this, Bundle.CommandListIngestSettingsPanel_Report_Name_Msg());
// User hit cancel
if (reportName == null) {
return;
} else if (reportName.isEmpty()) {
JOptionPane.showMessageDialog(WindowManager.getDefault().getMainWindow(), Bundle.CommandLineIngestSettingPanel_empty_report_name_mgs());
return;
} else if (doesReportProfileNameExist(reportName)) {
JOptionPane.showMessageDialog(WindowManager.getDefault().getMainWindow(), Bundle.CommandLineIngestSettingPanel_existing_report_name_mgs());
return;
}
}
this.getParent().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
doReportWizard(getReportingConfigName(), DISPLAY_CASE_SPECIFIC_DATA, RUN_REPORTS);
doReportWizard(reportName, DISPLAY_CASE_SPECIFIC_DATA, RUN_REPORTS);
setupReportList();
if (((DefaultComboBoxModel) reportProfileCB.getModel()).getIndexOf(reportName) >= 0) {
reportProfileCB.setSelectedItem(reportName);
}
this.getParent().setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
}//GEN-LAST:event_bnEditReportSettingsActionPerformed
@ -181,8 +320,9 @@ public class CommandLineIngestSettingsPanel extends javax.swing.JPanel {
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton bnEditIngestSettings;
private javax.swing.JButton bnEditReportSettings;
private javax.swing.JLabel jLabelDescription;
private javax.swing.JComboBox<String> ingestProfileCB;
private javax.swing.JTextPane jTextPane1;
private javax.swing.JPanel nodePanel;
private javax.swing.JScrollPane nodeScrollPane;
private javax.swing.JComboBox<String> reportProfileCB;
// End of variables declaration//GEN-END:variables
}

View File

@ -0,0 +1,92 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2020 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.commandlineingest;
import java.io.File;
import java.nio.file.Paths;
import java.util.logging.Level;
import org.sleuthkit.autopsy.casemodule.Case;
import org.sleuthkit.autopsy.casemodule.CaseActionException;
import static org.sleuthkit.autopsy.casemodule.CaseMetadata.getFileExtension;
import org.sleuthkit.autopsy.coreutils.Logger;
/**
* Base class for the command line managers.
*/
class CommandLineManager {
private static final Logger LOGGER = Logger.getLogger(CommandLineOpenCaseManager.class.getName());
/**
* Opens existing case.
*
* @param casePath full path to case directory or full path to .aut file
*
* @throws CaseActionException
*/
Case openCase(String casePath) throws CaseActionException {
String metadataFilePath;
if (casePath.endsWith(".aut") && (new File(casePath)).isFile()) {
LOGGER.log(Level.INFO, "Opening case {0}", casePath);
metadataFilePath = casePath;
} else {
LOGGER.log(Level.INFO, "Opening case in directory {0}", casePath);
metadataFilePath = findAutFile(casePath);
}
Case.openAsCurrentCase(metadataFilePath);
Case newCase = Case.getCurrentCase();
LOGGER.log(Level.INFO, "Opened case {0}", newCase.getName());
return newCase;
}
/**
* Finds the path to the .aut file for the specified case directory.
*
* @param caseDirectory the directory to check for a .aut file
*
* @return the path to the first .aut file found in the directory
*
* @throws CaseActionException if there was an issue finding a .aut file
*/
private String findAutFile(String caseDirectory) throws CaseActionException {
File caseFolder = Paths.get(caseDirectory).toFile();
if (caseFolder.exists()) {
/*
* Search for '*.aut' files.
*/
File[] fileArray = caseFolder.listFiles();
if (fileArray == null) {
throw new CaseActionException("No files found in case directory");
}
String autFilePath = null;
for (File file : fileArray) {
String name = file.getName().toLowerCase();
if (autFilePath == null && name.endsWith(getFileExtension())) {
return file.getAbsolutePath();
}
}
throw new CaseActionException("No .aut files found in case directory");
}
throw new CaseActionException("Case directory was not found");
}
}

View File

@ -0,0 +1,69 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2020 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.commandlineingest;
import java.util.logging.Level;
import org.sleuthkit.autopsy.casemodule.CaseActionException;
import org.sleuthkit.autopsy.coreutils.Logger;
/**
* Handles the opening of a case from the command line.
*
*/
public class CommandLineOpenCaseManager extends CommandLineManager {
private static final Logger LOGGER = Logger.getLogger(CommandLineOpenCaseManager.class.getName());
private final String casePath;
public CommandLineOpenCaseManager(String casePath) {
this.casePath = casePath;
}
/**
* Starts the thread to open the case.
*/
public void start() {
new Thread(new CommandLineOpenCaseManager.JobProcessingTask()).start();
}
/**
* A runnable class that open the given class in the list of command line
* options.
*/
private final class JobProcessingTask implements Runnable {
@Override
public void run() {
if (casePath == null || casePath.isEmpty()) {
LOGGER.log(Level.SEVERE, "No command line commands specified");
System.out.println("No command line commands specified");
return;
}
try {
CommandLineOpenCaseManager.this.openCase(casePath);
LOGGER.log(Level.INFO, "Opening case at " + casePath);
} catch (CaseActionException ex) {
LOGGER.log(Level.SEVERE, "Error opening case from command line ", ex);
System.out.println("Error opening case ");
}
}
}
}

View File

@ -1,7 +1,7 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2019-2019 Basis Technology Corp.
* Copyright 2019-2020 Basis Technology Corp.
* Contact: carrier <at> sleuthkit <dot> org
*
* Licensed under the Apache License, Version 2.0 (the "License");
@ -20,6 +20,7 @@ package org.sleuthkit.autopsy.commandlineingest;
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
@ -51,7 +52,8 @@ public class CommandLineOptionProcessor extends OptionProcessor {
private final Option runIngestCommandOption = Option.withoutArgument('r', "runIngest");
private final Option ingestProfileOption = Option.requiredArgument('p', "ingestProfile");
private final Option listAllDataSourcesCommandOption = Option.withoutArgument('l', "listAllDataSources");
private final Option generateReportsOption = Option.withoutArgument('g', "generateReports");
private final Option generateReportsOption = Option.optionalArgument('g', "generateReports");
private final Option defaultArgument = Option.defaultArguments();
private boolean runFromCommandLine = false;
@ -60,6 +62,8 @@ public class CommandLineOptionProcessor extends OptionProcessor {
final static String CASETYPE_MULTI = "multi";
final static String CASETYPE_SINGLE = "single";
private String defaultArgumentValue = null;
@Override
protected Set<Option> getOptions() {
Set<Option> set = new HashSet<>();
@ -75,6 +79,7 @@ public class CommandLineOptionProcessor extends OptionProcessor {
set.add(ingestProfileOption);
set.add(listAllDataSourcesCommandOption);
set.add(generateReportsOption);
set.add(defaultArgument);
return set;
}
@ -82,16 +87,19 @@ public class CommandLineOptionProcessor extends OptionProcessor {
protected void process(Env env, Map<Option, String[]> values) throws CommandException {
logger.log(Level.INFO, "Processing Autopsy command line options"); //NON-NLS
System.out.println("Processing Autopsy command line options");
runFromCommandLine = false;
if (values.containsKey(defaultArgument)) {
defaultArgumentValue = values.get(defaultArgument)[0];
runFromCommandLine = true;
return;
}
// input arguments must contain at least one command
if (!(values.containsKey(createCaseCommandOption) || values.containsKey(addDataSourceCommandOption)
|| values.containsKey(runIngestCommandOption) || values.containsKey(listAllDataSourcesCommandOption)
|| values.containsKey(generateReportsOption))) {
// not running from command line
logger.log(Level.INFO, "No command line commands passed in as inputs. Not running from command line."); //NON-NLS
System.err.println("No command line commands passed in as inputs. Not running from command line.");
return;
handleError("Invalid command line, an input option must be supplied.");
}
// parse input parameters
@ -100,47 +108,30 @@ public class CommandLineOptionProcessor extends OptionProcessor {
if (values.containsKey(caseNameOption)) {
argDirs = values.get(caseNameOption);
if (argDirs.length < 1) {
logger.log(Level.SEVERE, "Missing argument 'caseName'");
System.err.println("Missing argument 'caseName'");
return;
handleError("Missing argument 'caseName'");
}
inputCaseName = argDirs[0];
if (inputCaseName == null || inputCaseName.isEmpty()) {
logger.log(Level.SEVERE, "'caseName' argument is empty");
System.err.println("'caseName' argument is empty");
return;
handleError("'caseName' argument is empty");
}
}
String caseType = "";
if (values.containsKey(caseTypeOption)) {
argDirs = values.get(caseTypeOption);
if (argDirs.length < 1) {
logger.log(Level.SEVERE, "Missing argument 'caseType'");
System.err.println("Missing argument 'caseType'");
return;
handleError("Missing argument 'caseType'");
}
caseType = argDirs[0];
if (caseType == null || caseType.isEmpty()) {
logger.log(Level.SEVERE, "'caseType' argument is empty");
System.err.println("'caseType' argument is empty");
return;
}
if (!caseType.equalsIgnoreCase(CASETYPE_MULTI) && !caseType.equalsIgnoreCase(CASETYPE_SINGLE)) {
logger.log(Level.SEVERE, "'caseType' argument is invalid");
System.err.println("'caseType' argument is invalid");
return;
}
if (caseType.equalsIgnoreCase(CASETYPE_MULTI) && !FeatureAccessUtils.canCreateMultiUserCases()) {
logger.log(Level.SEVERE, "Unable to create multi user case.");
System.err.println("Unable to create multi user case. Confirm that multi user settings are configured correctly.");
return;
handleError("'caseType' argument is empty");
} else if (!caseType.equalsIgnoreCase(CASETYPE_MULTI) && !caseType.equalsIgnoreCase(CASETYPE_SINGLE)) {
handleError("'caseType' argument is invalid");
} else if (caseType.equalsIgnoreCase(CASETYPE_MULTI) && !FeatureAccessUtils.canCreateMultiUserCases()) {
handleError("Unable to create multi user case. Confirm that multi user settings are configured correctly.");
}
}
@ -148,22 +139,16 @@ public class CommandLineOptionProcessor extends OptionProcessor {
if (values.containsKey(caseBaseDirOption)) {
argDirs = values.get(caseBaseDirOption);
if (argDirs.length < 1) {
logger.log(Level.SEVERE, "Missing argument 'caseBaseDir'");
System.err.println("Missing argument 'caseBaseDir'");
return;
handleError("Missing argument 'caseBaseDir'");
}
caseBaseDir = argDirs[0];
if (caseBaseDir == null || caseBaseDir.isEmpty()) {
logger.log(Level.SEVERE, "Missing argument 'caseBaseDir'");
System.err.println("Missing argument 'caseBaseDir'");
return;
handleError("Missing argument 'caseBaseDir' option");
}
if (!(new File(caseBaseDir).exists()) || !(new File(caseBaseDir).isDirectory())) {
logger.log(Level.SEVERE, "''caseBaseDir'' {0} directory doesn''t exist or is not a directory", caseBaseDir);
System.err.println("'caseBaseDir' directory doesn't exist or is not a directory: " + caseBaseDir);
return;
handleError("'caseBaseDir' directory doesn't exist or is not a directory: " + caseBaseDir);
}
}
@ -172,23 +157,17 @@ public class CommandLineOptionProcessor extends OptionProcessor {
argDirs = values.get(dataSourcePathOption);
if (argDirs.length < 1) {
logger.log(Level.SEVERE, "Missing argument 'dataSourcePath'");
System.err.println("Missing argument 'dataSourcePath'");
return;
handleError("Missing argument 'dataSourcePath'");
}
dataSourcePath = argDirs[0];
// verify inputs
if (dataSourcePath == null || dataSourcePath.isEmpty()) {
logger.log(Level.SEVERE, "Missing argument 'dataSourcePath'");
System.err.println("Missing argument 'dataSourcePath'");
return;
handleError("Missing argument 'dataSourcePath'");
}
if (!(new File(dataSourcePath).exists())) {
logger.log(Level.SEVERE, "Input data source file {0} doesn''t exist", dataSourcePath);
System.err.println("Input data source file " + dataSourcePath + " doesn't exist");
return;
handleError("Input data source file " + dataSourcePath + " doesn't exist");
}
}
@ -197,17 +176,13 @@ public class CommandLineOptionProcessor extends OptionProcessor {
argDirs = values.get(dataSourceObjectIdOption);
if (argDirs.length < 1) {
logger.log(Level.SEVERE, "Missing argument 'dataSourceObjectIdOption'");
System.err.println("Missing argument 'dataSourceObjectIdOption'");
return;
handleError("Missing argument 'dataSourceObjectIdOption'");
}
dataSourceId = argDirs[0];
// verify inputs
if (dataSourceId == null || dataSourceId.isEmpty()) {
logger.log(Level.SEVERE, "Input data source id is empty");
System.err.println("Input data source id is empty");
return;
handleError("Input data source id is empty");
}
}
@ -216,23 +191,17 @@ public class CommandLineOptionProcessor extends OptionProcessor {
argDirs = values.get(caseDirOption);
if (argDirs.length < 1) {
logger.log(Level.SEVERE, "Missing argument 'caseDirOption'");
System.err.println("Missing argument 'caseDirOption'");
return;
handleError("Argument missing from 'caseDir' option");
}
caseDir = argDirs[0];
// verify inputs
if (caseDir == null || caseDir.isEmpty()) {
logger.log(Level.SEVERE, "Missing argument 'caseDirOption'");
System.err.println("Missing argument 'caseDirOption'");
return;
handleError("Argument missing from 'caseDir'");
}
if (!(new File(caseDir).exists()) || !(new File(caseDir).isDirectory())) {
logger.log(Level.SEVERE, "Case directory {0} doesn''t exist or is not a directory", caseDir);
System.err.println("Case directory " + caseDir + " doesn't exist or is not a directory");
return;
handleError("Case directory " + caseDir + " does not exist or is not a directory");
}
}
@ -241,17 +210,13 @@ public class CommandLineOptionProcessor extends OptionProcessor {
argDirs = values.get(ingestProfileOption);
if (argDirs.length < 1) {
logger.log(Level.SEVERE, "Missing argument 'ingestProfile'");
System.err.println("Missing argument 'ingestProfile'");
return;
handleError("Argument missing from 'ingestProfile' option");
}
ingestProfile = argDirs[0];
// verify inputs
if (ingestProfile == null || ingestProfile.isEmpty()) {
logger.log(Level.SEVERE, "Missing argument 'ingestProfile'");
System.err.println("Missing argument 'ingestProfile'");
return;
handleError("Missing argument 'ingestProfile'");
}
}
@ -260,19 +225,13 @@ public class CommandLineOptionProcessor extends OptionProcessor {
if (values.containsKey(createCaseCommandOption)) {
// 'caseName' must always be specified for "CREATE_CASE" command
if (inputCaseName.isEmpty()) {
logger.log(Level.SEVERE, "'caseName' argument is empty");
System.out.println("'caseName' argument is empty");
runFromCommandLine = false;
return;
if (inputCaseName == null || inputCaseName.isEmpty()) {
handleError("'caseName' argument is empty");
}
// 'caseBaseDir' must always be specified for "CREATE_CASE" command
if (caseBaseDir.isEmpty()) {
logger.log(Level.SEVERE, "'caseBaseDir' argument is empty");
System.err.println("'caseBaseDir' argument is empty");
runFromCommandLine = false;
return;
if (caseBaseDir == null || caseBaseDir.isEmpty()) {
handleError("'caseBaseDir' argument is empty");
}
CommandLineCommand newCommand = new CommandLineCommand(CommandLineCommand.CommandType.CREATE_CASE);
@ -289,18 +248,12 @@ public class CommandLineOptionProcessor extends OptionProcessor {
// 'caseDir' must only be specified if the case is not being created during the current run
if (!values.containsKey(createCaseCommandOption) && caseDir.isEmpty()) {
// new case is not being created during this run, so 'caseDir' should have been specified
logger.log(Level.SEVERE, "'caseDir' argument is empty");
System.err.println("'caseDir' argument is empty");
runFromCommandLine = false;
return;
handleError("'caseDir' argument is empty");
}
// 'dataSourcePath' must always be specified for "ADD_DATA_SOURCE" command
if (dataSourcePath.isEmpty()) {
logger.log(Level.SEVERE, "'dataSourcePath' argument is empty");
System.err.println("'dataSourcePath' argument is empty");
runFromCommandLine = false;
return;
if (dataSourcePath == null || dataSourcePath.isEmpty()) {
handleError("'dataSourcePath' argument is empty");
}
CommandLineCommand newCommand = new CommandLineCommand(CommandLineCommand.CommandType.ADD_DATA_SOURCE);
@ -316,19 +269,13 @@ public class CommandLineOptionProcessor extends OptionProcessor {
// 'caseDir' must only be specified if the case is not being created during the current run
if (!values.containsKey(createCaseCommandOption) && caseDir.isEmpty()) {
// new case is not being created during this run, so 'caseDir' should have been specified
logger.log(Level.SEVERE, "'caseDir' argument is empty");
System.err.println("'caseDir' argument is empty");
runFromCommandLine = false;
return;
handleError("'caseDir' argument is empty");
}
// if new data source is being added during this run, then 'dataSourceId' is not specified
if (!values.containsKey(addDataSourceCommandOption) && dataSourceId.isEmpty()) {
// data source is not being added during this run, so 'dataSourceId' should have been specified
logger.log(Level.SEVERE, "'dataSourceId' argument is empty");
System.err.println("'dataSourceId' argument is empty");
runFromCommandLine = false;
return;
handleError("'dataSourceId' argument is empty");
}
CommandLineCommand newCommand = new CommandLineCommand(CommandLineCommand.CommandType.RUN_INGEST);
@ -343,12 +290,9 @@ public class CommandLineOptionProcessor extends OptionProcessor {
if (values.containsKey(listAllDataSourcesCommandOption)) {
// 'caseDir' must only be specified if the case is not being created during the current run
if (!values.containsKey(createCaseCommandOption) && caseDir.isEmpty()) {
if (!values.containsKey(createCaseCommandOption) && (caseDir == null || caseDir.isEmpty())) {
// new case is not being created during this run, so 'caseDir' should have been specified
logger.log(Level.SEVERE, "'caseDir' argument is empty");
System.err.println("'caseDir' argument is empty");
runFromCommandLine = false;
return;
handleError("'caseDir' argument is empty");
}
CommandLineCommand newCommand = new CommandLineCommand(CommandLineCommand.CommandType.LIST_ALL_DATA_SOURCES);
@ -358,19 +302,32 @@ public class CommandLineOptionProcessor extends OptionProcessor {
}
// Add "GENERATE_REPORTS" command, if present
String reportProfile = null;
if (values.containsKey(generateReportsOption)) {
// 'caseDir' must only be specified if the case is not being created during the current run
if (!values.containsKey(createCaseCommandOption) && caseDir.isEmpty()) {
// new case is not being created during this run, so 'caseDir' should have been specified
logger.log(Level.SEVERE, "'caseDir' argument is empty");
System.err.println("'caseDir' argument is empty");
runFromCommandLine = false;
return;
handleError("'caseDir' argument is empty");
}
argDirs = values.get(generateReportsOption);
if (argDirs.length > 0) {
reportProfile = argDirs[0];
}
// If the user doesn't supply an options for generateReports the
// argsDirs length will be 0, so if reportProfile is empty
// something is not right.
if (reportProfile != null && reportProfile.isEmpty()) {
handleError("'generateReports' argument is empty");
}
CommandLineCommand newCommand = new CommandLineCommand(CommandLineCommand.CommandType.GENERATE_REPORTS);
newCommand.addInputValue(CommandLineCommand.InputType.CASE_FOLDER_PATH.name(), caseDir);
if (reportProfile != null) {
newCommand.addInputValue(CommandLineCommand.InputType.REPORT_PROFILE_NAME.name(), reportProfile);
}
commands.add(newCommand);
runFromCommandLine = true;
}
@ -385,12 +342,33 @@ public class CommandLineOptionProcessor extends OptionProcessor {
return runFromCommandLine;
}
/**
* Return the value of the default argument.
*
* @return The default argument value or null if one was not set.
*/
public String getDefaultArgument() {
return defaultArgumentValue;
}
/**
* Returns list of all commands passed in via command line.
*
* @return list of input commands
*/
List<CommandLineCommand> getCommands() {
return commands;
return Collections.unmodifiableList(commands);
}
/**
* Send the error message to the log file and create the exception.
*
* @param errorMessage
*
* @throws CommandException
*/
private void handleError(String errorMessage) throws CommandException {
logger.log(Level.SEVERE, errorMessage);
throw new CommandException(1, errorMessage);
}
}

View File

@ -26,7 +26,7 @@
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="1" attributes="0">
<EmptySpace min="-2" pref="20" max="-2" attributes="0"/>
<Component id="jLabel1" pref="305" max="32767" attributes="0"/>
<Component id="jLabel1" max="32767" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
</Group>
</Group>

View File

@ -1,7 +1,7 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2019-2019 Basis Technology Corp.
* Copyright 2019-2020 Basis Technology Corp.
* Contact: carrier <at> sleuthkit <dot> org
*
* Licensed under the Apache License, Version 2.0 (the "License");
@ -52,7 +52,7 @@ class CommandLinePanel extends JPanel {
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addGap(20, 20, 20)
.addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, 305, Short.MAX_VALUE)
.addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap())
);
layout.setVerticalGroup(

View File

@ -0,0 +1,75 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2020 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.commandlineingest;
import org.sleuthkit.autopsy.progress.LoggingProgressIndicator;
import org.sleuthkit.autopsy.progress.ProgressIndicator;
/**
* Wrap a LoggingProgressIndicator to support both logging to the log file
* and the command line.
*/
public class CommandLineProgressIndicator implements ProgressIndicator {
private final LoggingProgressIndicator loggingIndicator = new LoggingProgressIndicator();
@Override
public void start(String message, int totalWorkUnits) {
loggingIndicator.start(message, totalWorkUnits);
System.out.println(message);
}
@Override
public void start(String message) {
loggingIndicator.start(message);
System.out.println(message);
}
@Override
public void switchToIndeterminate(String message) {
loggingIndicator.switchToIndeterminate(message);
}
@Override
public void switchToDeterminate(String message, int workUnitsCompleted, int totalWorkUnits) {
loggingIndicator.switchToDeterminate(message, workUnitsCompleted, totalWorkUnits);
}
@Override
public void progress(String message) {
loggingIndicator.progress(message);
System.out.println(message);
}
@Override
public void progress(int workUnitsCompleted) {
loggingIndicator.progress(workUnitsCompleted);
}
@Override
public void progress(String message, int workUnitsCompleted) {
loggingIndicator.progress(message);
System.out.println(message);
}
@Override
public void finish() {
loggingIndicator.finish();
}
}

View File

@ -21,7 +21,6 @@ CVTTopComponent.accountsBrowser.TabConstraints.tabTitle_1=Browse
CVTTopComponent.browseVisualizeTabPane.AccessibleContext.accessibleName=Visualize
CVTTopComponent.vizPanel.TabConstraints.tabTitle_1=Visualize
VisualizationPanel.fitGraphButton.text=
VisualizationPanel.jTextArea1.text=Right-click an account in the Browse Accounts table, and select 'Visualize' to begin.
VisualizationPanel.fitZoomButton.toolTipText=Fit visualization to available space.
VisualizationPanel.fitZoomButton.text=
VisualizationPanel.zoomActualButton.toolTipText=Reset visualization default zoom state.
@ -51,3 +50,4 @@ VisualizationPanel.zoomLabel.text=Zoom:
VisualizationPanel.snapshotButton.toolTipText=Generate Snapshot report.
CVTTopComponent.filtersPane.TabConstraints.tabTitle=Filters
CVTTopComponent.filterTabPanel.TabConstraints.tabTitle=Filters
VisualizationPanel.jTextPane1.text=Right-click an account in the Browse Accounts table, and select 'Visualize' to begin.

View File

@ -61,7 +61,6 @@ CVTTopComponent.accountsBrowser.TabConstraints.tabTitle_1=Browse
CVTTopComponent.browseVisualizeTabPane.AccessibleContext.accessibleName=Visualize
CVTTopComponent.vizPanel.TabConstraints.tabTitle_1=Visualize
VisualizationPanel.fitGraphButton.text=
VisualizationPanel.jTextArea1.text=Right-click an account in the Browse Accounts table, and select 'Visualize' to begin.
VisualizationPanel.fitZoomButton.toolTipText=Fit visualization to available space.
VisualizationPanel.fitZoomButton.text=
# {0} - layout name
@ -99,6 +98,7 @@ VisualizationPanel.zoomLabel.text=Zoom:
VisualizationPanel.snapshotButton.toolTipText=Generate Snapshot report.
CVTTopComponent.filtersPane.TabConstraints.tabTitle=Filters
CVTTopComponent.filterTabPanel.TabConstraints.tabTitle=Filters
VisualizationPanel.jTextPane1.text=Right-click an account in the Browse Accounts table, and select 'Visualize' to begin.
VisualizationPanel_action_dialogs_title=Communications
VisualizationPanel_action_name_text=Snapshot Report
VisualizationPanel_module_name=Communications

View File

@ -1,97 +1,93 @@
#Tue Aug 18 18:09:20 UTC 2020
AccountInstanceNode_Tooltip_Template=\u9023\u7d61\u5148\uff1a{0}-\u30da\u30eb\u30bd\u30ca\uff1a{1}
AccountInstanceNode_Tooltip_suffix=(1 of {0})
AccountNode.accountName=\u30a2\u30ab\u30a6\u30f3\u30c8
AccountNode.accountType=\u30bf\u30a4\u30d7
AccountNode.device=\u30c7\u30d0\u30a4\u30b9
AccountNode.messageCount=\u9805\u76ee
applyText=\u9069\u7528
CTL_OpenCVTAction=\u30b3\u30df\u30e5\u30cb\u30b1\u30fc\u30b7\u30e7\u30f3
CVTTopComponent.name=\ \u30b3\u30df\u30e5\u30cb\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u53ef\u8996\u5316
CVTTopComponent.TabConstraints.tabTitle=\u53ef\u8996\u5316
CVTTopComponent.accountsBrowser.TabConstraints.tabTitle=\u53c2\u7167
FiltersPanel.applyFiltersButton.text=\u9069\u7528
FiltersPanel.devicesLabel.text=\u30c7\u30d0\u30a4\u30b9:
FiltersPanel.accountTypesLabel.text=\u30a2\u30ab\u30a6\u30f3\u30c8\u30bf\u30a4\u30d7:
FiltersPanel.filtersTitleLabel.text=\u30d5\u30a3\u30eb\u30bf\u30fc
FiltersPanel.unCheckAllAccountTypesButton.text=\u3059\u3079\u3066\u306e\u30c1\u30a7\u30c3\u30af\u3092\u5916\u3059
FiltersPanel.checkAllAccountTypesButton.text=\u3059\u3079\u3066\u306e\u30c1\u30a7\u30c3\u30af
FiltersPanel.unCheckAllDevicesButton.text=\u3059\u3079\u3066\u306e\u30c1\u30a7\u30c3\u30af\u3092\u5916\u3059
FiltersPanel.checkAllDevicesButton.text=\u3059\u3079\u3066\u306e\u30c1\u30a7\u30c3\u30af
FiltersPanel.dateRangeLabel.text=\u65e5\u4ed8\u7bc4\u56f2:
FiltersPanel.startCheckBox.text=\u958b\u59cb:
FiltersPanel.endCheckBox.text=\u7d42\u4e86:
FiltersPanel.refreshButton.text=\u66f4\u65b0
FiltersPanel.deviceRequiredLabel.text=\u5c11\u306a\u304f\u3068\u30821\u3064\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002
CVTTopComponent.accountsBrowser.TabConstraints.tabTitle_1=\u53c2\u7167
CVTTopComponent.browseVisualizeTabPane.AccessibleContext.accessibleName=\u53ef\u8996\u5316
CVTTopComponent.name=\ \u30b3\u30df\u30e5\u30cb\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u53ef\u8996\u5316
CVTTopComponent.vizPanel.TabConstraints.tabTitle=\u53ef\u8996\u5316
CVTTopComponent.vizPanel.TabConstraints.tabTitle_1=\u53ef\u8996\u5316
FiltersPanel.accountTypeRequiredLabel.text=\u5c11\u306a\u304f\u3068\u30821\u3064\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002
FiltersPanel.needsRefreshLabel.text=\u8868\u793a\u3055\u308c\u3066\u3044\u308b\u30c7\u30fc\u30bf\u306f\u53e4\u3044\u3067\u3059\u3002[\u66f4\u65b0] \u3092\u62bc\u3057\u3066\u304f\u3060\u3055\u3044\u3002
FiltersPanel.accountTypesLabel.text=\u30a2\u30ab\u30a6\u30f3\u30c8\u30bf\u30a4\u30d7\:
FiltersPanel.applyFiltersButton.text=\u9069\u7528
FiltersPanel.checkAllAccountTypesButton.text=\u3059\u3079\u3066\u306e\u30c1\u30a7\u30c3\u30af
FiltersPanel.checkAllDevicesButton.text=\u3059\u3079\u3066\u306e\u30c1\u30a7\u30c3\u30af
FiltersPanel.dateRangeLabel.text=\u65e5\u4ed8\u7bc4\u56f2\:
FiltersPanel.deviceRequiredLabel.text=\u5c11\u306a\u304f\u3068\u30821\u3064\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002
FiltersPanel.devicesLabel.text=\u30c7\u30d0\u30a4\u30b9\:
FiltersPanel.endCheckBox.text=\u7d42\u4e86\:
FiltersPanel.filtersTitleLabel.text=\u30d5\u30a3\u30eb\u30bf\u30fc
FiltersPanel.limitErrorMsgLabel.text=\u7121\u52b9\u306a\u6574\u6570\u5024\u3067\u3059\u3002
FiltersPanel.limitHeaderLabel.text=\u30b3\u30df\u30e5\u30cb\u30b1\u30fc\u30b7\u30e7\u30f3\u9650\u754c\u5024\:
FiltersPanel.mostRecentLabel.text=\u6700\u65b0\:
FiltersPanel.needsRefreshLabel.text=\u8868\u793a\u3055\u308c\u3066\u3044\u308b\u30c7\u30fc\u30bf\u304c\u6700\u65b0\u3067\u306a\u3044\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002 [\u66f4\u65b0]\u3092\u62bc\u3057\u3066\u4e0b\u3055\u3044\u3002
FiltersPanel.refreshButton.text=\u66f4\u65b0
FiltersPanel.startCheckBox.text=\u958b\u59cb\:
FiltersPanel.unCheckAllAccountTypesButton.text=\u3059\u3079\u3066\u306e\u30c1\u30a7\u30c3\u30af\u3092\u5916\u3059
FiltersPanel.unCheckAllDevicesButton.text=\u3059\u3079\u3066\u306e\u30c1\u30a7\u30c3\u30af\u3092\u5916\u3059
OpenCVTAction.displayName=\u30b3\u30df\u30e5\u30cb\u30b1\u30fc\u30b7\u30e7\u30f3
PinAccountsAction.pluralText=\u9078\u629e\u3057\u305f\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u53ef\u8996\u5316\u306b\u8ffd\u52a0
PinAccountsAction.singularText=\u9078\u629e\u3057\u305f\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u53ef\u8996\u5316\u306b\u8ffd\u52a0
refreshText=\u7d50\u679c\u3092\u66f4\u65b0
ResetAndPinAccountsAction.pluralText=\u9078\u629e\u3057\u305f\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u307f\u3092\u53ef\u8996\u5316
ResetAndPinAccountsAction.singularText=\u9078\u629e\u3057\u305f\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u307f\u3092\u53ef\u8996\u5316
UnpinAccountsAction.pluralText=\u9078\u629e\u3057\u305f\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u524a\u9664
UnpinAccountsAction.singularText=\u9078\u629e\u3057\u305f\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u524a\u9664
VisalizationPanel.paintingError=\u53ef\u8996\u5316\u306e\u63cf\u753b\u4e2d\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
# {0} - \u30c7\u30d5\u30a9\u30eb\u30c8\u540d
VisualizationPane_accept_defaultName=\u30ec\u30dd\u30fc\u30c8\u540d\u304c\u7a7a(\u672a\u5165\u529b)\u3067\u3057\u305f\u3002[OK] \u3092\u62bc\u3057\u3066\u6b21\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30ec\u30dd\u30fc\u30c8\u540d\u3092\u8a31\u53ef\u3057\u3066\u304f\u3060\u3055\u3044: {0}
VisualizationPane_blank_report_title=\u7a7a(\u672a\u5165\u529b)\u306e\u72b6\u614b\u306e\u30ec\u30dd\u30fc\u30c8\u540d
VisualizationPane_DisplayName=\u30ec\u30dd\u30fc\u30c8\u3092\u958b\u304f
VisualizationPane_fileName_prompt=\u30b3\u30df\u30e5\u30cb\u30b1\u30fc\u30b7\u30e7\u30f3\u30fb\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u30fb\u30ec\u30dd\u30fc\u30c8\u306e\u540d\u524d\u3092\u5165\u529b:
VisualizationPane_MessageBoxTitle=\u30ec\u30dd\u30fc\u30c8\u30aa\u30fc\u30d7\u30f3\u5931\u6557
VisualizationPane_MissingReportFileMessage=\u30ec\u30dd\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u306f\u3059\u3067\u306b\u5b58\u5728\u3057\u307e\u305b\u3093\u3002
VisualizationPane_NoAssociatedEditorMessage=\u3053\u306e\u30bf\u30a4\u30d7\u306e\u30ec\u30dd\u30fc\u30c8\u306b\u95a2\u9023\u4ed8\u3051\u3089\u308c\u3066\u3044\u308b\u30a8\u30c7\u30a3\u30bf\u30fc\u304c\u306a\u3044\u304b\u3001\u95a2\u9023\u4ed8\u3051\u3089\u308c\u3066\u3044\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u8d77\u52d5\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
VisualizationPane_NoOpenInEditorSupportMessage=\u3053\u306e\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0(\u30aa\u30da\u30ec\u30fc\u30c6\u30a3\u30f3\u30b0\u30b7\u30b9\u30c6\u30e0)\u306f\u3053\u306e\u65b9\u6cd5\u3067\u30a8\u30c7\u30a3\u30bf\u30fc\u3067\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304f\u3053\u3068\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u305b\u3093\u3002
VisualizationPane_Open_Report=\u30ec\u30dd\u30fc\u30c8\u3092\u958b\u304f
# {0} - \u30ec\u30dd\u30fc\u30c8\u540d
VisualizationPane_overrite_exiting=\u65e2\u5b58\u306e\u30ec\u30dd\u30fc\u30c8\u3092\u4e0a\u66f8\u304d\u3057\u307e\u3059\u304b?\n{0}
VisualizationPane_Report_OK_Button=OK
# {0} - \u30ec\u30dd\u30fc\u30c8\u30d1\u30b9
VisualizationPane_Report_Success=\u6b21\u306e\u5834\u6240\u306b\u30ec\u30dd\u30fc\u30c8\u304c\u6b63\u5e38\u306b\u4f5c\u6210\u3055\u308c\u307e\u3057\u305f:\n{0}
VisualizationPane_ReportFileOpenPermissionDeniedMessage=\u30ec\u30dd\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304f\u8a31\u53ef\u304c\u62d2\u5426\u3055\u308c\u307e\u3057\u305f\u3002
VisualizationPane_Report_OK_Button=OK
VisualizationPane_Report_Success=\u6b21\u306e\u5834\u6240\u306b\u30ec\u30dd\u30fc\u30c8\u304c\u6b63\u5e38\u306b\u4f5c\u6210\u3055\u308c\u307e\u3057\u305f\:\n{0}
VisualizationPane_accept_defaultName=\u30ec\u30dd\u30fc\u30c8\u540d\u304c\u7a7a(\u672a\u5165\u529b)\u3067\u3057\u305f\u3002[OK] \u3092\u62bc\u3057\u3066\u6b21\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30ec\u30dd\u30fc\u30c8\u540d\u3092\u8a31\u53ef\u3057\u3066\u304f\u3060\u3055\u3044\: {0}
VisualizationPane_blank_report_title=\u7a7a(\u672a\u5165\u529b)\u306e\u72b6\u614b\u306e\u30ec\u30dd\u30fc\u30c8\u540d
VisualizationPane_fileName_prompt=\u30b3\u30df\u30e5\u30cb\u30b1\u30fc\u30b7\u30e7\u30f3\u30fb\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u30fb\u30ec\u30dd\u30fc\u30c8\u306e\u540d\u524d\u3092\u5165\u529b\:
VisualizationPane_overrite_exiting=\u65e2\u5b58\u306e\u30ec\u30dd\u30fc\u30c8\u3092\u4e0a\u66f8\u304d\u3057\u307e\u3059\u304b?\n{0}
VisualizationPane_reportName=\u30b3\u30df\u30e5\u30cb\u30b1\u30fc\u30b7\u30e7\u30f3\u30fb\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8
VisualizationPanel.backButton.text_1=
VisualizationPanel.backButton.toolTipText=\u30af\u30ea\u30c3\u30af\u3057\u3066\u623b\u308b
VisualizationPanel.cancelButton.text=\u53d6\u308a\u6d88\u3057
VisualizationPanel.circleLayoutButton.text=\u5186\u5f62
VisualizationPanel.clearVizButton.actionCommand=
VisualizationPanel.clearVizButton.text_1=
VisualizationPanel.clearVizButton.toolTipText=\u30af\u30ea\u30c3\u30af\u3057\u3066\u30c1\u30e3\u30fc\u30c8\u3092\u6d88\u53bb
VisualizationPanel.computingLayout=\u30ec\u30a4\u30a2\u30a6\u30c8\u3092\u8a08\u7b97\u4e2d\u3067\u3059
VisualizationPanel.jButton1.text=\u8fc5\u901f\u304b\u3064\u6709\u6a5f\u7684
CVTTopComponent.vizPanel.TabConstraints.tabTitle=\u53ef\u8996\u5316
CVTTopComponent.accountsBrowser.TabConstraints.tabTitle_1=\u53c2\u7167
CVTTopComponent.browseVisualizeTabPane.AccessibleContext.accessibleName=\u53ef\u8996\u5316
CVTTopComponent.vizPanel.TabConstraints.tabTitle_1=\u53ef\u8996\u5316
VisualizationPanel.fastOrganicLayoutButton.text=
VisualizationPanel.fastOrganicLayoutButton.toolTipText=\u30af\u30ea\u30c3\u30af\u3057\u3066\u30c1\u30e3\u30fc\u30c8\u3092\u518d\u63cf\u753b
VisualizationPanel.fitGraphButton.text=
VisualizationPanel.jTextArea1.text=[\u30a2\u30ab\u30a6\u30f3\u30c8\u53c2\u7167] \u30c6\u30fc\u30d6\u30eb\u3067\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u53f3\u30af\u30ea\u30c3\u30af\u3057\u3001[\u53ef\u8996\u5316] \u3092\u9078\u629e\u3057\u3066\u958b\u59cb\u3057\u307e\u3059\u3002
VisualizationPanel.jTextPane1.text=[\u30a2\u30ab\u30a6\u30f3\u30c8\u53c2\u7167] \u30c6\u30fc\u30d6\u30eb\u3067\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u53f3\u30af\u30ea\u30c3\u30af\u3057\u3001[\u53ef\u8996\u5316] \u3092\u9078\u629e\u3057\u3066\u958b\u59cb\u3057\u307e\u3059\u3002
VisualizationPanel.fitZoomButton.text=
VisualizationPanel.fitZoomButton.toolTipText=\u53ef\u8996\u5316\u3092\u9069\u5408
VisualizationPanel.forwardButton.text=
VisualizationPanel.forwardButton.toolTipText=\u30af\u30ea\u30c3\u30af\u3057\u3066\u9032\u3080
# {0} - \u30ec\u30a4\u30a2\u30a6\u30c8\u540d
VisualizationPanel.layoutFail.text={0} \u30ec\u30a4\u30a2\u30a6\u30c8\u304c\u5931\u6557\u3057\u307e\u3057\u305f\u3002\u5225\u306e\u30ec\u30a4\u30a2\u30a6\u30c8\u3092\u304a\u8a66\u3057\u304f\u3060\u3055\u3044\u3002
# {0} - \u30ec\u30a4\u30a2\u30a6\u30c8\u540d
VisualizationPanel.layoutFailWithLockedVertices.text=\u9802\u70b9\u304c\u30ed\u30c3\u30af\u3055\u308c\u305f {0} \u30ec\u30a4\u30a2\u30a6\u30c8\u304c\u5931\u6557\u3057\u307e\u3057\u305f\u3002\u4e00\u90e8\u306e\u9802\u70b9\u306e\u30ed\u30c3\u30af\u3092\u89e3\u9664\u3059\u308b\u304b\u3001\u5225\u306e\u30ec\u30a4\u30a2\u30a6\u30c8\u3092\u304a\u8a66\u3057\u304f\u3060\u3055\u3044\u3002
VisualizationPanel.lockAction.pluralText=\u9078\u629e\u3057\u305f\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u30ed\u30c3\u30af
VisualizationPanel.lockAction.singularText=\u9078\u629e\u3057\u305f\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u30ed\u30c3\u30af
VisualizationPanel.organicLayoutButton.text=\u6709\u6a5f\u7684
VisualizationPanel.snapshotButton.text_1=\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u30fb\u30ec\u30dd\u30fc\u30c8
VisualizationPanel.unlockAction.pluralText=\u9078\u629e\u3057\u305f\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u30ed\u30c3\u30af\u3092\u89e3\u9664
VisualizationPanel.unlockAction.singularText=\u9078\u629e\u3057\u305f\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u30ed\u30c3\u30af
VisualizationPanel.zoomLabel.text=100%
VisualizationPanel.jLabel2.text=\u30ba\u30fc\u30e0:
VisualizationPanel.fitZoomButton.toolTipText=\u53ef\u8996\u5316\u3092\u9069\u5408
VisualizationPanel.fitZoomButton.text=
VisualizationPanel.zoomActualButton.toolTipText=\u30ba\u30fc\u30e0\u3092\u30ea\u30bb\u30c3\u30c8
VisualizationPanel.zoomActualButton.text=
VisualizationPanel.zoomInButton.toolTipText=\u30ba\u30fc\u30e0\u30a4\u30f3
VisualizationPanel.zoomActualButton.toolTipText=\u30ba\u30fc\u30e0\u3092\u30ea\u30bb\u30c3\u30c8
VisualizationPanel.zoomInButton.text=
VisualizationPanel.zoomOutButton.toolTipText=\u30ba\u30fc\u30e0\u30a2\u30a6\u30c8
VisualizationPanel.zoomInButton.toolTipText=\u30ba\u30fc\u30e0\u30a4\u30f3
VisualizationPanel.zoomLabel.text=100%
VisualizationPanel.zoomOutButton.text=
VisualizationPanel.fastOrganicLayoutButton.text=
VisualizationPanel.backButton.text_1=
VisualizationPanel.circleLayoutButton.text=\u5186\u5f62
VisualizationPanel.organicLayoutButton.text=\u6709\u6a5f\u7684
VisualizationPanel.hierarchyLayoutButton.text=\u968e\u5c64\u7684
VisualizationPanel.clearVizButton.text_1=
VisualizationPanel.snapshotButton.text_1=\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u30fb\u30ec\u30dd\u30fc\u30c8
VisualizationPanel.clearVizButton.actionCommand=
VisualizationPanel.backButton.toolTipText=\u30af\u30ea\u30c3\u30af\u3057\u3066\u623b\u308b
VisualizationPanel.forwardButton.toolTipText=\u30af\u30ea\u30c3\u30af\u3057\u3066\u9032\u3080
VisualizationPanel.fastOrganicLayoutButton.toolTipText=\u30af\u30ea\u30c3\u30af\u3057\u3066\u30c1\u30e3\u30fc\u30c8\u3092\u518d\u63cf\u753b
VisualizationPanel.clearVizButton.toolTipText=\u30af\u30ea\u30c3\u30af\u3057\u3066\u30c1\u30e3\u30fc\u30c8\u3092\u6d88\u53bb
FiltersPanel.limitHeaderLabel.text=\u30b3\u30df\u30e5\u30cb\u30b1\u30fc\u30b7\u30e7\u30f3\u9650\u754c\u5024:
FiltersPanel.mostRecentLabel.text=\u6700\u65b0:
FiltersPanel.limitErrorMsgLabel.text=\u7121\u52b9\u306a\u6574\u6570\u5024\u3067\u3059\u3002
VisualizationPanel.forwardButton.text=
VisualizationPanel.zoomOutButton.toolTipText=\u30ba\u30fc\u30e0\u30a2\u30a6\u30c8
VisualizationPanel_action_dialogs_title=\u30b3\u30df\u30e5\u30cb\u30b1\u30fc\u30b7\u30e7\u30f3
VisualizationPanel_action_name_text=\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u30fb\u30ec\u30dd\u30fc\u30c8
VisualizationPanel_module_name=\u30b3\u30df\u30e5\u30cb\u30b1\u30fc\u30b7\u30e7\u30f3
VisualizationPanel_snapshot_report_failure=\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u30fb\u30ec\u30dd\u30fc\u30c8\u304c\u4f5c\u6210\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u4f5c\u6210\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
applyText=\u9069\u7528
refreshText=\u7d50\u679c\u3092\u66f4\u65b0

View File

@ -32,39 +32,21 @@
</Constraint>
</Constraints>
<Layout>
<DimensionLayout dim="0">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="0" attributes="0">
<EmptySpace pref="316" max="32767" attributes="0"/>
<Component id="jTextArea1" min="-2" pref="424" max="-2" attributes="0"/>
<EmptySpace pref="481" max="32767" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
<DimensionLayout dim="1">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="0" attributes="0">
<EmptySpace max="32767" attributes="0"/>
<Component id="jTextArea1" min="-2" pref="47" max="-2" attributes="0"/>
<EmptySpace max="32767" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
</Layout>
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
<SubComponents>
<Component class="javax.swing.JTextArea" name="jTextArea1">
<Component class="javax.swing.JTextPane" name="jTextPane1">
<Properties>
<Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
<Color blue="f0" green="f0" red="f0" type="rgb"/>
</Property>
<Property name="columns" type="int" value="20"/>
<Property name="lineWrap" type="boolean" value="true"/>
<Property name="rows" type="int" value="5"/>
<Property name="editable" type="boolean" value="false"/>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/communications/Bundle.properties" key="VisualizationPanel.jTextArea1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
<ResourceString bundle="org/sleuthkit/autopsy/communications/Bundle.properties" key="VisualizationPanel.jTextPane1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
<Property name="opaque" type="boolean" value="false"/>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="-1" gridY="-1" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="50" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="11" weightX="0.0" weightY="1.0"/>
</Constraint>
</Constraints>
</Component>
</SubComponents>
</Container>

View File

@ -46,7 +46,10 @@ import java.awt.Dimension;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
@ -85,15 +88,14 @@ import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JTextPane;
import javax.swing.JToolBar;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.SwingWorker;
import org.apache.commons.lang3.StringUtils;
import org.controlsfx.control.Notifications;
import org.jdesktop.layout.GroupLayout;
import org.openide.util.NbBundle;
import org.openide.windows.WindowManager;
import org.sleuthkit.autopsy.casemodule.Case;
@ -370,10 +372,11 @@ final public class VisualizationPanel extends JPanel {
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
GridBagConstraints gridBagConstraints;
borderLayoutPanel = new JPanel();
placeHolderPanel = new JPanel();
jTextArea1 = new JTextArea();
jTextPane1 = new JTextPane();
notificationsJFXPanel = new JFXPanel();
toolbar = new JToolBar();
backButton = new JButton();
@ -395,26 +398,16 @@ final public class VisualizationPanel extends JPanel {
borderLayoutPanel.setLayout(new BorderLayout());
jTextArea1.setBackground(new Color(240, 240, 240));
jTextArea1.setColumns(20);
jTextArea1.setLineWrap(true);
jTextArea1.setRows(5);
jTextArea1.setText(NbBundle.getMessage(VisualizationPanel.class, "VisualizationPanel.jTextArea1.text")); // NOI18N
placeHolderPanel.setLayout(new GridBagLayout());
GroupLayout placeHolderPanelLayout = new GroupLayout(placeHolderPanel);
placeHolderPanel.setLayout(placeHolderPanelLayout);
placeHolderPanelLayout.setHorizontalGroup(placeHolderPanelLayout.createParallelGroup(GroupLayout.LEADING)
.add(placeHolderPanelLayout.createSequentialGroup()
.addContainerGap(316, Short.MAX_VALUE)
.add(jTextArea1, GroupLayout.PREFERRED_SIZE, 424, GroupLayout.PREFERRED_SIZE)
.addContainerGap(481, Short.MAX_VALUE))
);
placeHolderPanelLayout.setVerticalGroup(placeHolderPanelLayout.createParallelGroup(GroupLayout.LEADING)
.add(placeHolderPanelLayout.createSequentialGroup()
.addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.add(jTextArea1, GroupLayout.PREFERRED_SIZE, 47, GroupLayout.PREFERRED_SIZE)
.addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
jTextPane1.setEditable(false);
jTextPane1.setText(NbBundle.getMessage(VisualizationPanel.class, "VisualizationPanel.jTextPane1.text")); // NOI18N
jTextPane1.setOpaque(false);
gridBagConstraints = new GridBagConstraints();
gridBagConstraints.anchor = GridBagConstraints.NORTH;
gridBagConstraints.weighty = 1.0;
gridBagConstraints.insets = new Insets(50, 0, 0, 0);
placeHolderPanel.add(jTextPane1, gridBagConstraints);
borderLayoutPanel.add(placeHolderPanel, BorderLayout.CENTER);
borderLayoutPanel.add(notificationsJFXPanel, BorderLayout.PAGE_END);
@ -854,7 +847,7 @@ final public class VisualizationPanel extends JPanel {
private JToolBar.Separator jSeparator1;
private JToolBar.Separator jSeparator2;
private JToolBar.Separator jSeparator3;
private JTextArea jTextArea1;
private JTextPane jTextPane1;
private JFXPanel notificationsJFXPanel;
private JPanel placeHolderPanel;
private JButton snapshotButton;

View File

@ -1,3 +1,4 @@
#Tue Aug 18 18:09:21 UTC 2020
ContactDetailsPane.nameLabel.text=\u30d7\u30ec\u30fc\u30b9\u30db\u30eb\u30c0\u30fc
ContactNode_Email=\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9
ContactNode_Home_Number=\u81ea\u5b85\u96fb\u8a71\u756a\u53f7
@ -12,12 +13,18 @@ ContactsViewer_columnHeader_Phone=\u96fb\u8a71\u756a\u53f7
ContactsViewer_noContacts_message=<\u9078\u629e\u3057\u305f\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u9023\u7d61\u5148\u306f\u3042\u308a\u307e\u305b\u3093>
ContactsViewer_tabTitle=\u9023\u7d61\u5148
MediaViewer_Name=\u30e1\u30c7\u30a3\u30a2\u6dfb\u4ed8\u30d5\u30a1\u30a4\u30eb
MessageNode_Node_Property_Attms=\u6dfb\u4ed8\u30d5\u30a1\u30a4\u30eb
MessageNode_Node_Property_Attms=\u6dfb\u4ed8\u30d5\u30a1\u30a4\u30eb\u6570
MessageNode_Node_Property_Date=\u65e5\u4ed8
MessageNode_Node_Property_From=\u5dee\u51fa\u4eba
MessageNode_Node_Property_Subject=\u4ef6\u540d
MessageNode_Node_Property_To=\u5b9b\u5148
MessageNode_Node_Property_Type=\u30bf\u30a4\u30d7
MessageViewer.backButton.AccessibleContext.accessibleDescription=
MessageViewer.backButton.text=\u30b9\u30ec\u30c3\u30c9
MessageViewer.showAllButton.text=\u3059\u3079\u3066\u306e\u30e1\u30c3\u30bb\u30fc\u30b8
MessageViewer.showingMessagesLabel.text=\u6b21\u306e\u30b9\u30ec\u30c3\u30c9\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u8868\u793a\u4e2d\u3067\u3059\:
MessageViewer.threadNameLabel.text=<threadName>
MessageViewer.threadsLabel.text=\u30b9\u30ec\u30c3\u30c9\u3092\u9078\u629e\u3057\u3066\u8868\u793a
MessageViewer_columnHeader_Attms=\u6dfb\u4ed8\u30d5\u30a1\u30a4\u30eb
MessageViewer_columnHeader_Date=\u65e5\u4ed8
MessageViewer_columnHeader_EarlyDate=\u6700\u3082\u53e4\u3044\u30e1\u30c3\u30bb\u30fc\u30b8
@ -30,23 +37,24 @@ MessageViewer_viewMessage_all=\u3059\u3079\u3066
MessageViewer_viewMessage_calllogs=\u901a\u8a71\u30ed\u30b0
MessageViewer_viewMessage_selected=\u9078\u629e\u6e08\u307f
MessageViewer_viewMessage_unthreaded=\u30b9\u30ec\u30c3\u30c9\u89e3\u9664\u6e08\u307f
SummaryViewer.countsPanel.border.title=\u30ab\u30a6\u30f3\u30c8
SummaryViewer.contactsLabel.text=\u9023\u7d61\u5148:
SummaryViewer.attachmentsLabel.text=\u30e1\u30c7\u30a3\u30a2\u6dfb\u4ed8\u30d5\u30a1\u30a4\u30eb:
OutlineViewPanel.messageLabel.text=<\u30b3\u30f3\u30c8\u30ed\u30fc\u30eb\u3092\u7121\u52b9\u5316\u3057\u307e\u3057\u305f>
SummaryViewer.messagesDataLabel.text=\u30e1\u30c3\u30bb\u30fc\u30b8
SummaryViewer.callLogsDataLabel.text=callLogs
SummaryViewer.contactsDataLabel.text=\u9023\u7d61\u5148
SummaryViewer.attachmentsDataLabel.text=\u6dfb\u4ed8\u30d5\u30a1\u30a4\u30eb
SummaryViewer.messagesLabel.text=\u30e1\u30c3\u30bb\u30fc\u30b8:
SummaryViewer.callLogsLabel.text=\u901a\u8a71\u30ed\u30b0:
SummaryViewer.attachmentsLabel.text=\u30e1\u30c7\u30a3\u30a2\u6dfb\u4ed8\u30d5\u30a1\u30a4\u30eb\:
SummaryViewer.callLogsDataLabel.text=callLogs
SummaryViewer.callLogsLabel.text=\u901a\u8a71\u30ed\u30b0\:
SummaryViewer.caseReferencesPanel.border.title=\u305d\u306e\u4ed6\u306e\u767a\u751f
SummaryViewer.contactsDataLabel.text=\u9023\u7d61\u5148
SummaryViewer.contactsLabel.text=\u9023\u7d61\u5148\:
SummaryViewer.countsPanel.border.title=\u30ab\u30a6\u30f3\u30c8
SummaryViewer.fileReferencesPanel.border.title=\u73fe\u5728\u306e\u30b1\u30fc\u30b9\u306e\u30d5\u30a1\u30a4\u30eb\u30ec\u30d5\u30a1\u30ec\u30f3\u30b9
SummaryViewer.messagesDataLabel.text=\u30e1\u30c3\u30bb\u30fc\u30b8
SummaryViewer.messagesLabel.text=\u30e1\u30c3\u30bb\u30fc\u30b8\:
SummaryViewer_CaseRefNameColumn_Title=\u30b1\u30fc\u30b9\u540d
SummaryViewer_CentralRepository_Message=<\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u3092\u6709\u52b9\u5316\u3057\u3066\u305d\u306e\u4ed6\u306e\u767a\u751f\u3092\u8868\u793a>
SummaryViewer_Creation_Date_Title=\u4f5c\u6210\u65e5
SummaryViewer_FileRefNameColumn_Title=\u30d1\u30b9
SummaryViewer_TabTitle=\u30b5\u30de\u30ea\u30fc
SummeryViewer_FileRef_Message=<\u30a2\u30ab\u30a6\u30f3\u30c8\u30921\u3064\u9078\u629e\u3057\u3066\u30d5\u30a1\u30a4\u30eb\u30ec\u30d5\u30a1\u30ec\u30f3\u30b9\u3092\u8868\u793a>
ThreadRootMessagePanel.showAllCheckBox.text=\u3059\u3079\u3066\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u8868\u793a
ThreadPane.backButton.text=<---
SummaryViewer.caseReferencesPanel.border.title=\u305d\u306e\u4ed6\u306e\u767a\u751f
MessageViewer.threadsLabel.text=\u30b9\u30ec\u30c3\u30c9\u3092\u9078\u629e\u3057\u3066\u8868\u793a

View File

@ -1,46 +1,64 @@
AnnotationsContentViewer.centralRepositoryEntryDataLabel.case=\u30b1\u30fc\u30b9:
AnnotationsContentViewer.centralRepositoryEntryDataLabel.comment=\u30b3\u30e1\u30f3\u30c8:
AnnotationsContentViewer.centralRepositoryEntryDataLabel.path=\u30d1\u30b9:
AnnotationsContentViewer.centralRepositoryEntryDataLabel.type=\u30bf\u30a4\u30d7:
AnnotationsContentViewer.tagEntryDataLabel.comment=\u30b3\u30e1\u30f3\u30c8:
AnnotationsContentViewer.tagEntryDataLabel.tag=\u30bf\u30b0:
AnnotationsContentViewer.tagEntryDataLabel.tagUser=\u30bf\u30b0\u30e6\u30fc\u30b6\u30fc:
#Tue Aug 18 18:09:20 UTC 2020
AnnotationsContentViewer.centralRepositoryEntry.title=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ea\u30dd\u30b8\u30c8\u30ea\u30b3\u30e1\u30f3\u30c8
AnnotationsContentViewer.centralRepositoryEntryDataLabel.case=\u30b1\u30fc\u30b9\:
AnnotationsContentViewer.centralRepositoryEntryDataLabel.comment=\u30b3\u30e1\u30f3\u30c8\:
AnnotationsContentViewer.centralRepositoryEntryDataLabel.path=\u30d1\u30b9\:
AnnotationsContentViewer.centralRepositoryEntryDataLabel.type=\u30bf\u30a4\u30d7\:
AnnotationsContentViewer.fileHitEntry.artifactCommentTitle=\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u306e\u30b3\u30e1\u30f3\u30c8
AnnotationsContentViewer.fileHitEntry.comment=\u30b3\u30e1\u30f3\u30c8\uff1a
AnnotationsContentViewer.fileHitEntry.hashSetHitTitle=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u30fb\u30d2\u30c3\u30c8\u30b3\u30e1\u30f3\u30c8
AnnotationsContentViewer.fileHitEntry.interestingFileHitTitle=\u8208\u5473\u6df1\u3044\u30d5\u30a1\u30a4\u30eb\u30d2\u30c3\u30c8\u30b3\u30e1\u30f3\u30c8
AnnotationsContentViewer.fileHitEntry.setName=\u30bb\u30c3\u30c8\u540d\uff1a
AnnotationsContentViewer.onEmpty=\u3053\u306e\u30a2\u30a4\u30c6\u30e0\u306e\u6ce8\u91c8\u306f\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002
AnnotationsContentViewer.sourceFile.title=\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb
AnnotationsContentViewer.tagEntry.title=\u30bf\u30b0
AnnotationsContentViewer.tagEntryDataLabel.comment=\u30b3\u30e1\u30f3\u30c8\:
AnnotationsContentViewer.tagEntryDataLabel.tag=\u30bf\u30b0\:
AnnotationsContentViewer.tagEntryDataLabel.tagUser=\u5be9\u67fb\u5b98\uff1a
AnnotationsContentViewer.title=\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3
AnnotationsContentViewer.toolTip=\u9078\u629e\u3057\u305f\u30b3\u30f3\u30c6\u30f3\u30c4\u3068\u95a2\u9023\u4ed8\u3051\u3089\u308c\u3066\u3044\u308b\u30bf\u30b0\u3068\u30b3\u30e1\u30f3\u30c8\u3092\u8868\u793a\u3057\u307e\u3059\u3002
ApplicationContentViewer.title=\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3
ApplicationContentViewer.toolTip=\u30d5\u30a1\u30a4\u30eb\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u8868\u793a\u3057\u307e\u3059\u3002
FXVideoPanel.media.unsupportedFormat=\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u306a\u3044\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3067\u3059\u3002
FXVideoPanel.mediaPane.infoLabel=\u524a\u9664\u3057\u305f\u52d5\u753b\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\u304f\u3060\u3055\u3044\u3002
FXVideoPanel.pauseButton.infoLabel.playbackErr=\u52d5\u753b\u3092\u518d\u751f\u3067\u304d\u307e\u305b\u3093\u3002
FXVideoPanel.progress.bufferingCancelled=\u30e1\u30c7\u30a3\u30a2\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0\u304c\u53d6\u308a\u6d88\u3055\u308c\u307e\u3057\u305f\u3002
FXVideoPanel.progress.bufferingFile={0} \u3092\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0\u4e2d\u3067\u3059
FXVideoPanel.progress.bufferingInterrupted=\u30e1\u30c7\u30a3\u30a2\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0\u304c\u4e2d\u65ad\u3055\u308c\u307e\u3057\u305f\u3002
FXVideoPanel.progress.errorWritingVideoToDisk=\u52d5\u753b\u3092\u30c7\u30a3\u30b9\u30af\u306b\u66f8\u304d\u8fbc\u307f\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f
FXVideoPanel.mediaPane.infoLabel=\u524a\u9664\u3057\u305f\u52d5\u753b\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\u304f\u3060\u3055\u3044\u3002
FXVideoPanel.progress.bufferingFile={0} \u3092\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0\u4e2d\u3067\u3059
FXVideoPanel.progressLabel.buffering=\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0\u4e2d\u3067\u3059...
FXVideoPanel.media.unsupportedFormat=\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u306a\u3044\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3067\u3059\u3002
GstVideoPanel.ExtractMedia.progress.buffering={0} \u3092\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0\u4e2d\u3067\u3059
GstVideoPanel.cannotProcFile.err=\u30e1\u30c7\u30a3\u30a2\u30d7\u30ec\u30a4\u30e4\u30fc\u306f\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u51e6\u7406\u3067\u304d\u307e\u305b\u3093\u3002
GstVideoPanel.exception.problemFile.msg=\u3053\u306e\u30d5\u30a1\u30a4\u30eb({0})\u304b\u3089\u30d5\u30ec\u30fc\u30e0\u3092\u30ad\u30e3\u30d7\u30c1\u30e3\u30fc\u3067\u304d\u307e\u305b\u3093\u3002
GstVideoPanel.exception.problemPause.msg=\u52d5\u753b\u30d5\u30a1\u30a4\u30eb\u306b\u554f\u984c\u304c\u3042\u308a\u307e\u3059\u3002\u7dcf\u518d\u751f\u6642\u9593\u306e\u53d6\u5f97\u4e2d\u306b\u4e00\u6642\u505c\u6b62\u3092\u8a66\u307f\u308b\u3068\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3059\u3002
GstVideoPanel.exception.problemPauseCaptFrame.msg=\u52d5\u753b\u30d5\u30a1\u30a4\u30eb\u306b\u554f\u984c\u304c\u3042\u308a\u307e\u3059\u3002\u30d5\u30ec\u30fc\u30e0\u306e\u30ad\u30e3\u30d7\u30c1\u30e3\u30fc\u4e2d\u306b\u4e00\u6642\u505c\u6b62\u3092\u8a66\u307f\u308b\u3068\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3059\u3002
GstVideoPanel.exception.problemPlay.msg=\u52d5\u753b\u30d5\u30a1\u30a4\u30eb\u306b\u554f\u984c\u304c\u3042\u308a\u307e\u3059\u3002\u7dcf\u518d\u751f\u6642\u9593\u306e\u53d6\u5f97\u4e2d\u306b\u518d\u751f\u3092\u8a66\u307f\u308b\u3068\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3059\u3002
GstVideoPanel.exception.problemPlayCaptFrame.msg=\u52d5\u753b\u30d5\u30a1\u30a4\u30eb\u306b\u554f\u984c\u304c\u3042\u308a\u307e\u3059\u3002\u30d5\u30ec\u30fc\u30e0\u306e\u30ad\u30e3\u30d7\u30c1\u30e3\u30fc\u4e2d\u306b\u518d\u751f\u3092\u8a66\u307f\u308b\u3068\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3059\u3002
GstVideoPanel.exception.problemStopCaptFrame.msg=\u52d5\u753b\u30d5\u30a1\u30a4\u30eb\u306b\u554f\u984c\u304c\u3042\u308a\u307e\u3059\u3002\u30d5\u30ec\u30fc\u30e0\u306e\u30ad\u30e3\u30d7\u30c1\u30e3\u30fc\u4e2d\u306b\u505c\u6b62\u3092\u8a66\u307f\u308b\u3068\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3059\u3002
GstVideoPanel.noOpenCase.errMsg=\u958b\u3044\u3066\u3044\u308b\u30b1\u30fc\u30b9\u306f\u3042\u308a\u307e\u305b\u3093\u3002
Html_text_display_error=HTML\u30c6\u30ad\u30b9\u30c8\u3092\u8868\u793a\u3067\u304d\u307e\u305b\u3093\u3002 \u6b63\u3057\u304f\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3055\u308c\u305fHTML\u3067\u306a\u3044\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002
GstVideoPanel.progress.buffering=\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0\u4e2d\u3067\u3059...
GstVideoPanel.progress.infoLabel.updateErr=\u6b21\u306e\u52d5\u753b\u306e\u9032\u6357\u72b6\u6cc1\u3092\u66f4\u65b0\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\: {0}
GstVideoPanel.progressLabel.bufferingErr=\u30d5\u30a1\u30a4\u30eb\u306e\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f
GstVideoPanel.setupVideo.infoLabel.text=\u524a\u9664\u3057\u305f\u52d5\u753b\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\u304f\u3060\u3055\u3044\u3002
HtmlPanel.showImagesToggleButton.text=\u30a4\u30e1\u30fc\u30b8\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9
HtmlPanel_showImagesToggleButton_hide=\u30a4\u30e1\u30fc\u30b8\u3092\u975e\u8868\u793a\u306b\u3059\u308b
HtmlPanel_showImagesToggleButton_show=\u30a4\u30e1\u30fc\u30b8\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9
HtmlViewer_file_error=\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306f\u898b\u3064\u304b\u3089\u306a\u3044\u304b\u3001\u89e3\u8aad\u3067\u304d\u307e\u305b\u3093\u3002
MediaFileViewer.initGst.gstException.msg=\u30aa\u30fc\u30c7\u30a3\u30aa/\u52d5\u753b\u8996\u8074\u6a5f\u80fd\u3068\u30d5\u30ec\u30fc\u30e0\u62bd\u51fa\u6a5f\u80fd\u3092\u4f7f\u7528\u3059\u308b\u305f\u3081\u306bGstreamer\u3092\u521d\u671f\u5316\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 \u30aa\u30fc\u30c7\u30a3\u30aa/\u52d5\u753b\u8996\u8074\u304c\u7121\u52b9\u5316\u3055\u308c\u307e\u3059\u3002
GstVideoPanel.setupVideo.infoLabel.text=\u524a\u9664\u3057\u305f\u52d5\u753b\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\u304f\u3060\u3055\u3044\u3002
GstVideoPanel.exception.problemFile.msg=\u3053\u306e\u30d5\u30a1\u30a4\u30eb({0})\u304b\u3089\u30d5\u30ec\u30fc\u30e0\u3092\u30ad\u30e3\u30d7\u30c1\u30e3\u30fc\u3067\u304d\u307e\u305b\u3093\u3002
GstVideoPanel.exception.problemPlay.msg=\u52d5\u753b\u30d5\u30a1\u30a4\u30eb\u306b\u554f\u984c\u304c\u3042\u308a\u307e\u3059\u3002\u7dcf\u518d\u751f\u6642\u9593\u306e\u53d6\u5f97\u4e2d\u306b\u518d\u751f\u3092\u8a66\u307f\u308b\u3068\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3059\u3002
GstVideoPanel.exception.problemPause.msg=\u52d5\u753b\u30d5\u30a1\u30a4\u30eb\u306b\u554f\u984c\u304c\u3042\u308a\u307e\u3059\u3002\u7dcf\u518d\u751f\u6642\u9593\u306e\u53d6\u5f97\u4e2d\u306b\u4e00\u6642\u505c\u6b62\u3092\u8a66\u307f\u308b\u3068\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3059\u3002
GstVideoPanel.exception.problemPauseCaptFrame.msg=\u52d5\u753b\u30d5\u30a1\u30a4\u30eb\u306b\u554f\u984c\u304c\u3042\u308a\u307e\u3059\u3002\u30d5\u30ec\u30fc\u30e0\u306e\u30ad\u30e3\u30d7\u30c1\u30e3\u30fc\u4e2d\u306b\u4e00\u6642\u505c\u6b62\u3092\u8a66\u307f\u308b\u3068\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3059\u3002
GstVideoPanel.exception.problemPlayCaptFrame.msg=\u52d5\u753b\u30d5\u30a1\u30a4\u30eb\u306b\u554f\u984c\u304c\u3042\u308a\u307e\u3059\u3002\u30d5\u30ec\u30fc\u30e0\u306e\u30ad\u30e3\u30d7\u30c1\u30e3\u30fc\u4e2d\u306b\u518d\u751f\u3092\u8a66\u307f\u308b\u3068\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3059\u3002
GstVideoPanel.exception.problemStopCaptFrame.msg=\u52d5\u753b\u30d5\u30a1\u30a4\u30eb\u306b\u554f\u984c\u304c\u3042\u308a\u307e\u3059\u3002\u30d5\u30ec\u30fc\u30e0\u306e\u30ad\u30e3\u30d7\u30c1\u30e3\u30fc\u4e2d\u306b\u505c\u6b62\u3092\u8a66\u307f\u308b\u3068\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3059\u3002
GstVideoPanel.progress.buffering=\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0\u4e2d\u3067\u3059...
GstVideoPanel.progressLabel.bufferingErr=\u30d5\u30a1\u30a4\u30eb\u306e\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f
GstVideoPanel.progress.infoLabel.updateErr=\u6b21\u306e\u52d5\u753b\u306e\u9032\u6357\u72b6\u6cc1\u3092\u66f4\u65b0\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: {0}
GstVideoPanel.ExtractMedia.progress.buffering={0} \u3092\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0\u4e2d\u3067\u3059
Html_text_display_error=HTML\u30c6\u30ad\u30b9\u30c8\u3092\u8868\u793a\u3067\u304d\u307e\u305b\u3093\u3002 \u6b63\u3057\u304f\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3055\u308c\u305fHTML\u3067\u306a\u3044\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002
JPEGViewerDummy.jLabel1.text=JPEG\u30d5\u30a1\u30a4\u30eb\u304c\u8868\u793a\u3055\u308c\u3066\u3044\u307e\u3059\:
JPEGViewerDummy.jTextField1.text=jTextField1
MediaFileViewer.AccessibleContext.accessibleDescription=
MediaFileViewer.initGst.gstException.msg=\u30aa\u30fc\u30c7\u30a3\u30aa/\u52d5\u753b\u8996\u8074\u6a5f\u80fd\u3068\u30d5\u30ec\u30fc\u30e0\u62bd\u51fa\u6a5f\u80fd\u3092\u4f7f\u7528\u3059\u308b\u305f\u3081\u306bGstreamer\u3092\u521d\u671f\u5316\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 \u30aa\u30fc\u30c7\u30a3\u30aa/\u52d5\u753b\u8996\u8074\u304c\u7121\u52b9\u5316\u3055\u308c\u307e\u3059\u3002
MediaFileViewer.title=\u30e1\u30c7\u30a3\u30a2
MediaFileViewer.toolTip=\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u30de\u30eb\u30c1\u30e1\u30c7\u30a3\u30a2\u30d5\u30a1\u30a4\u30eb(\u30a4\u30e1\u30fc\u30b8\u3001\u52d5\u753b\u3001\u30aa\u30fc\u30c7\u30a3\u30aa)\u3092\u8868\u793a\u3057\u307e\u3059
MediaPlayerPanel.VolumeIcon.text=\ \u30dc\u30ea\u30e5\u30fc\u30e0
MediaPlayerPanel.audioSlider.toolTipText=
MediaPlayerPanel.infoLabel.text=\u30a8\u30e9\u30fc\u306a\u3057
MediaPlayerPanel.noSupport=\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u306a\u3044\u30d5\u30a1\u30a4\u30eb\u3067\u3059\u3002
MediaPlayerPanel.timeFormat=%02d:%02d:%02d
MediaPlayerPanel.playButton.text=\u25ba
MediaPlayerPanel.playbackDisabled=\u30d3\u30c7\u30aa\u3068\u30aa\u30fc\u30c7\u30a3\u30aa\u306e\u518d\u751f\u3067\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 \u30bb\u30c3\u30b7\u30e7\u30f3\u306e\u6b8b\u308a\u306e\u671f\u9593\u3001\u30d3\u30c7\u30aa\u3068\u30aa\u30fc\u30c7\u30a3\u30aa\u306e\u518d\u751f\u306f\u7121\u52b9\u306b\u306a\u308a\u307e\u3059\u3002
MediaPlayerPanel.progressLabel.text=00\:00\:00/00\:00\:00
MediaPlayerPanel.timeFormat=%02d\:%02d\:%02d
MediaPlayerPanel.unknownTime=\u4e0d\u660e
MediaViewImagePanel.createTagOption=\u4f5c\u6210
MediaViewImagePanel.deleteTagOption=\u524a\u9664
@ -51,56 +69,62 @@ MediaViewImagePanel.exportTagOption=\u30a8\u30af\u30b9\u30dd\u30fc\u30c8
MediaViewImagePanel.externalViewerButton.text=\u5916\u90e8\u30d3\u30e5\u30fc\u30ef\u30fc\u3067\u958b\u304f Ctrl+E
MediaViewImagePanel.fileChooserTitle=\u4fdd\u5b58\u5834\u6240\u3092\u9078\u629e
MediaViewImagePanel.hideTagOption=\u975e\u8868\u793a
MediaViewImagePanel.imgFileTooLarge.msg=\u6b21\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\u3067\u3057\u305f(\u5927\u304d\u3059\u304e\u3066)\: {0}
MediaViewImagePanel.rotateLeftButton.text=
MediaViewImagePanel.rotateLeftButton.toolTipText=
MediaViewImagePanel.rotateRightButton.text=
MediaViewImagePanel.rotationTextField.text=
MediaViewImagePanel.successfulExport=\u30bf\u30b0\u4ed8\u3051\u3055\u308c\u305f\u30a4\u30e1\u30fc\u30b8\u304c\u6b63\u5e38\u306b\u4fdd\u5b58\u3055\u308c\u307e\u3057\u305f\u3002
MediaViewImagePanel.tagsMenu.text_1=\u30bf\u30b0\u30e1\u30cb\u30e5\u30fc
MediaViewImagePanel.unsuccessfulExport=\u30bf\u30b0\u4ed8\u3051\u3055\u308c\u305f\u30a4\u30e1\u30fc\u30b8\u3092\u30c7\u30a3\u30b9\u30af\u306b\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u3067\u304d\u307e\u305b\u3093\u3002
MediaViewVideoPanel.pauseButton.text=\u25ba
MediaViewVideoPanel.progressLabel.text=00:00
MediaViewImagePanel.zoomInButton.text=
MediaViewImagePanel.zoomOutButton.text=
MediaViewImagePanel.zoomResetButton.text=\u30ea\u30bb\u30c3\u30c8
MediaViewImagePanel.zoomTextField.text=
MediaViewVideoPanel.infoLabel.text=\u4fdd\u5b58
MediaViewImagePanel.imgFileTooLarge.msg=\u6b21\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\u3067\u3057\u305f(\u5927\u304d\u3059\u304e\u3066): {0}
MessageContentViewer.AtrachmentsPanel.title=\u6dfb\u4ed8\u30d5\u30a1\u30a4\u30eb
MessageContentViewer.title=\u30e1\u30c3\u30bb\u30fc\u30b8
MessageContentViewer.toolTip=\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u8868\u793a\u3057\u307e\u3059\u3002
MediaViewVideoPanel.pauseButton.text=\u25ba
MediaViewVideoPanel.progressLabel.text=00\:00
MessageArtifactViewer.textbodyScrollPane.TabConstraints.tabTitle=\u30c6\u30ad\u30b9\u30c8
Metadata.nodeText.exceptionNotice.text=\u30d5\u30a1\u30a4\u30eb\u306e\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\:
Metadata.nodeText.nonFilePassedIn=\u30d5\u30a1\u30a4\u30eb\u4ee5\u5916\u306e\u3082\u306e\u304c\u901a\u904e\u3057\u307e\u3057\u305f
Metadata.nodeText.none=\u306a\u3057
Metadata.nodeText.text=\u9001\u4fe1\u5143\u306eSleuth Kit\u306eistat\u30c4\u30fc\u30eb\:
Metadata.nodeText.truncated=(\u4e00\u62ec\u524a\u9664\u3055\u308c\u305f\u7d50\u679c)
Metadata.nodeText.unknown=\u4e0d\u660e
Metadata.tableRowContent.md5notCalc=\u672a\u8a08\u7b97
Metadata.tableRowTitle.accessed=\u30a2\u30af\u30bb\u30b9\u6e08\u307f
Metadata.tableRowTitle.acquisitionDetails=\u53d6\u5f97\u306e\u8a73\u7d30
Metadata.tableRowTitle.changed=\u5909\u66f4\u6e08\u307f
Metadata.tableRowTitle.created=\u4f5c\u6210\u6e08\u307f
Metadata.tableRowTitle.deviceId=\u30c7\u30d0\u30a4\u30b9ID
Metadata.tableRowTitle.downloadSource=\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u5143
Metadata.tableRowTitle.fileNameAlloc=\u30d5\u30a1\u30a4\u30eb\u540d\u306e\u5272\u308a\u5f53\u3066
Metadata.tableRowTitle.hashLookupResults=\u30cf\u30c3\u30b7\u30e5\u30eb\u30c3\u30af\u30a2\u30c3\u30d7\u7d50\u679c
Metadata.tableRowTitle.imageType=\u30bf\u30a4\u30d7
Metadata.tableRowTitle.internalid=\u5185\u90e8ID
Metadata.tableRowTitle.localPath=\u30ed\u30fc\u30ab\u30eb\u30d1\u30b9
Metadata.tableRowTitle.md5=MD5
Metadata.tableRowTitle.metadataAlloc=\u30e1\u30bf\u30c7\u30fc\u30bf\u306e\u5272\u308a\u5f53\u3066
Metadata.tableRowTitle.mimeType=MIME\u30bf\u30a4\u30d7
Metadata.tableRowTitle.modified=\u4fee\u6b63\u6e08\u307f
Metadata.tableRowTitle.name=\u540d\u524d
Metadata.tableRowTitle.sectorSize=\u30bb\u30af\u30bf\u30fc\u30b5\u30a4\u30ba
Metadata.tableRowTitle.sha1=SHA1
Metadata.tableRowTitle.sha256=SHA256
Metadata.tableRowTitle.size=\u30b5\u30a4\u30ba
Metadata.tableRowTitle.fileNameAlloc=\u30d5\u30a1\u30a4\u30eb\u540d\u306e\u5272\u308a\u5f53\u3066
Metadata.tableRowTitle.metadataAlloc=\u30e1\u30bf\u30c7\u30fc\u30bf\u306e\u5272\u308a\u5f53\u3066
Metadata.tableRowTitle.modified=\u4fee\u6b63\u6e08\u307f
Metadata.tableRowTitle.accessed=\u30a2\u30af\u30bb\u30b9\u6e08\u307f
Metadata.tableRowTitle.created=\u4f5c\u6210\u6e08\u307f
Metadata.tableRowTitle.changed=\u5909\u66f4\u6e08\u307f
Metadata.tableRowContent.md5notCalc=\u672a\u8a08\u7b97
Metadata.tableRowTitle.md5=MD5
Metadata.tableRowTitle.hashLookupResults=\u30cf\u30c3\u30b7\u30e5\u30eb\u30c3\u30af\u30a2\u30c3\u30d7\u7d50\u679c
Metadata.tableRowTitle.internalid=\u5185\u90e8ID
Metadata.tableRowTitle.localPath=\u30ed\u30fc\u30ab\u30eb\u30d1\u30b9
Metadata.tableRowTitle.timezone=\u30bf\u30a4\u30e0\u30be\u30fc\u30f3
Metadata.tableRowTitle.type=\u30bf\u30a4\u30d7
Metadata.title=\u30d5\u30a1\u30a4\u30eb\u306e\u30e1\u30bf\u30c7\u30fc\u30bf
Metadata.toolTip=\u30d5\u30a1\u30a4\u30eb\u306e\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u8868\u793a\u3057\u307e\u3059\u3002
Metadata.nodeText.nonFilePassedIn=\u30d5\u30a1\u30a4\u30eb\u4ee5\u5916\u306e\u3082\u306e\u304c\u901a\u904e\u3057\u307e\u3057\u305f
Metadata.nodeText.text=\u9001\u4fe1\u5143\u306eSleuth Kit\u306eistat\u30c4\u30fc\u30eb:
Metadata.nodeText.exceptionNotice.text=\u30d5\u30a1\u30a4\u30eb\u306e\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f:
MessageContentViewer.textbodyScrollPane.TabConstraints.tabTitle=\u30c6\u30ad\u30b9\u30c8
JPEGViewerDummy.jLabel1.text=JPEG\u30d5\u30a1\u30a4\u30eb\u304c\u8868\u793a\u3055\u308c\u3066\u3044\u307e\u3059:
JPEGViewerDummy.jTextField1.text=jTextField1
PDFViewer.encryptedDialog=\u3053\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306f\u30d1\u30b9\u30ef\u30fc\u30c9\u3067\u4fdd\u8b77\u3055\u308c\u3066\u3044\u307e\u3059\u3002
PDFViewer.errorDialog=\u3053\u306ePDF\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u958b\u304f\u3068\u304d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 \u8a73\u7d30\u306b\u3064\u3044\u3066\u306f\u3001\u30ed\u30b0\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002 \u3053\u306e\u6a5f\u80fd\u3092\u4ed6\u306ePDF\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3067\u5f15\u304d\u7d9a\u304d\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002
PListNode.KeyCol=\u30ad\u30fc
PListNode.TypeCol=\u30bf\u30a4\u30d7
PListNode.ValueCol=\u5024
PListViewer.DataType.message=\u30d0\u30a4\u30ca\u30ea\u30fc\u30c7\u30fc\u30bf\u5024\u304c\u8868\u793a\u3055\u308c\u3066\u3044\u307e\u305b\u3093
PListViewer.ExportFailed.message=Plist\u30d5\u30a1\u30a4\u30eb\u306e\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002
PListViewer.ExportSuccess.message=Plist\u30d5\u30a1\u30a4\u30eb\u304c\u6b63\u5e38\u306b\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u3055\u308c\u307e\u3057\u305f
PListViewer.exportButton.text=\u30a8\u30af\u30b9\u30dd\u30fc\u30c8
PListViewer.processPlist.errorMessage=plist\u30d5\u30a1\u30a4\u30eb\u306e\u89e3\u6790/\u8868\u793a\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
PListViewer.processPlist.interruptedMessage=plist\u30d5\u30a1\u30a4\u30eb\u306e\u89e3\u6790/\u8868\u793a\u4e2d\u306b\u4e2d\u65ad\u3055\u308c\u307e\u3057\u305f\u3002
SQLiteTableView.DisplayAs.text=\u5225\u540d\u3067\u8868\u793a
@ -110,42 +134,630 @@ SQLiteViewer.comboBox.noTableEntry=\u30c6\u30fc\u30d6\u30eb\u304c\u898b\u3064\u3
SQLiteViewer.csvExport.confirm.msg=\u65e2\u5b58\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u4e0a\u66f8\u304d\u3057\u307e\u3059\u304b?
SQLiteViewer.csvExport.fileName.empty=\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u3059\u308b\u30d5\u30a1\u30a4\u30eb\u540d\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
SQLiteViewer.csvExport.title=CSV\u30d5\u30a1\u30a4\u30eb\u306b\u30a8\u30af\u30b9\u30dd\u30fc\u30c8
SQLiteViewer.currPageLabel.text=x
SQLiteViewer.errorMessage.failedToExtractFile=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u304b\u3089\u30d5\u30a1\u30a4\u30eb\u3092\u62bd\u51fa\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
SQLiteViewer.errorMessage.failedToinitJDBCDriver=SQLite\u306eJDBC\u30c9\u30e9\u30a4\u30d0\u30fc\u3092\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\u3067\u3057\u305f\u3002
SQLiteViewer.errorMessage.failedToQueryDatabase=\u30d5\u30a1\u30a4\u30eb\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30c6\u30fc\u30d6\u30eb\u3092\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\u3067\u3057\u305f\u3002
SQLiteViewer.errorMessage.failedToinitJDBCDriver=SQLite\u306eJDBC\u30c9\u30e9\u30a4\u30d0\u30fc\u3092\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\u3067\u3057\u305f\u3002
SQLiteViewer.errorMessage.interrupted=\u30d5\u30a1\u30a4\u30eb\u306e\u51e6\u7406\u304c\u4e2d\u65ad\u3055\u308c\u307e\u3057\u305f\u3002
SQLiteViewer.errorMessage.noCurrentCase=\u30b1\u30fc\u30b9\u304c\u9589\u3058\u3089\u308c\u307e\u3057\u305f\u3002
# {0} - \u4f8b\u5916\u30e1\u30c3\u30bb\u30fc\u30b8
SQLiteViewer.errorMessage.unexpectedError=\u4e88\u671f\u305b\u306c\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f:\n{0)\u3002
SQLiteViewer.exportTableToCsv.FileName=\u30d5\u30a1\u30a4\u30eb\u540d:
SQLiteViewer.exportTableToCsv.TableName=\u30c6\u30fc\u30d6\u30eb\u540d:
SQLiteViewer.exportTableToCsv.write.errText=\u30c6\u30fc\u30d6\u30eb\u30b3\u30f3\u30c6\u30f3\u30c4\u3092CSV\u30d5\u30a1\u30a4\u30eb\u306b\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
SQLiteViewer.nextPageButton.text=
SQLiteViewer.prevPageButton.text=
SQLiteViewer.numPagesLabel.text=N
SQLiteViewer.jLabel3.text=/
SQLiteViewer.currPageLabel.text=x
SQLiteViewer.jLabel2.text=\u30da\u30fc\u30b8
SQLiteViewer.numEntriesField.text=num Entries
SQLiteViewer.jLabel1.text=\u30c6\u30fc\u30d6\u30eb
PListViewer.exportButton.text=\u30a8\u30af\u30b9\u30dd\u30fc\u30c8
SQLiteViewer.errorMessage.unexpectedError=\u4e88\u671f\u305b\u306c\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\:\n{0)\u3002
SQLiteViewer.exportCsvButton.text=CSV\u306b\u30a8\u30af\u30b9\u30dd\u30fc\u30c8
MediaViewImagePanel.rotateLeftButton.text=
MediaViewImagePanel.zoomInButton.text=
MediaViewImagePanel.rotateRightButton.text=
MediaViewImagePanel.zoomOutButton.text=
MediaViewImagePanel.zoomResetButton.text=\u30ea\u30bb\u30c3\u30c8
MediaViewImagePanel.zoomTextField.text=
MediaViewImagePanel.rotationTextField.text=
MediaViewImagePanel.rotateLeftButton.toolTipText=
HtmlPanel.showImagesToggleButton.text=\u30a4\u30e1\u30fc\u30b8\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9
MediaPlayerPanel.audioSlider.toolTipText=
MediaPlayerPanel.VolumeIcon.text=\ \ \ \ \ \u30dc\u30ea\u30e5\u30fc\u30e0
MediaPlayerPanel.progressLabel.text=00:00:00/00:00:00
MediaPlayerPanel.playButton.text=\u25ba
MediaPlayerPanel.infoLabel.text=\u30a8\u30e9\u30fc\u306a\u3057
MediaViewImagePanel.tagsMenu.text_1=\u30bf\u30b0\u30e1\u30cb\u30e5\u30fc
# {0} - tableName
SQLiteViewer.readTable.errorText=\u6b21\u306e\u30c6\u30fc\u30d6\u30eb\u306e\u884c\u3092\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: {0}
# {0} - tableName
SQLiteViewer.selectTable.errorText=\u6b21\u306e\u30c6\u30fc\u30d6\u30eb\u306e\u884c\u30ab\u30a6\u30f3\u30c8\u3092\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: {0}
SQLiteViewer.exportTableToCsv.FileName=\u30d5\u30a1\u30a4\u30eb\u540d\:
SQLiteViewer.exportTableToCsv.TableName=\u30c6\u30fc\u30d6\u30eb\u540d\:
SQLiteViewer.exportTableToCsv.write.errText=\u30c6\u30fc\u30d6\u30eb\u30b3\u30f3\u30c6\u30f3\u30c4\u3092CSV\u30d5\u30a1\u30a4\u30eb\u306b\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
SQLiteViewer.jLabel1.text=\u30c6\u30fc\u30d6\u30eb
SQLiteViewer.jLabel2.text=\u30da\u30fc\u30b8
SQLiteViewer.jLabel3.text=/
SQLiteViewer.nextPageButton.text=
SQLiteViewer.numEntriesField.text=num Entries
SQLiteViewer.numPagesLabel.text=N
SQLiteViewer.prevPageButton.text=
SQLiteViewer.readTable.errorText=\u6b21\u306e\u30c6\u30fc\u30d6\u30eb\u306e\u884c\u3092\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\: {0}
SQLiteViewer.selectTable.errorText=\u6b21\u306e\u30c6\u30fc\u30d6\u30eb\u306e\u884c\u30ab\u30a6\u30f3\u30c8\u3092\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\: {0}
TranslatablePanel.comboBoxOption.originalText=\u539f\u6587
TranslatablePanel.comboBoxOption.translatedText=\u7ffb\u8a33\u3055\u308c\u305f\u30c6\u30ad\u30b9\u30c8
TranslatablePanel.onSetContentError.text=\u30c6\u30ad\u30b9\u30c8\u8868\u793a\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\uff1a{0}
fontManager.properties.title=ICEpdf\u30d5\u30a9\u30f3\u30c8\u30de\u30cd\u30fc\u30b8\u30e3\u30fc
manager.properties.brokenProperty=\u30c7\u30d5\u30a9\u30eb\u30c8\u30d7\u30ed\u30d1\u30c6\u30a3{0}\u304c\u7834\u640d\u3057\u3066\u3044\u307e\u3059\u3001\u5024\uff1a{1}
manager.properties.createNewDirectory=ICEpdf\u30d3\u30e5\u30fc\u30a2\u304c\u8a2d\u5b9a\u306e\u5909\u66f4\u3092\u4fdd\u5b58\u3059\u308b\u5834\u6240\u3067\u30c7\u30a3\u30ec\u30af\u30c8\u30ea{0}\u3092\u4f5c\u6210\u3059\u308b\u306b\u306f\u3001\n[\u306f\u3044]\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u4e0b\u3055\u3044\u3002\n\n\u300c\u3044\u3044\u3048\u300d\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u7d42\u4e86\u3059\u308b\u3068\u3001ICEpdf\u30d3\u30e5\u30fc\u30a2\u30fc\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u306b\u52a0\u3048\u305f\u3059\u3079\u3066\u306e\u5909\u66f4\u3092\u5931\u308f\u308c\u307e\u3059\u3002
manager.properties.deleted=\u30d7\u30ed\u30d1\u30c6\u30a3\u30d5\u30a1\u30a4\u30eb\u304c\u524a\u9664\u3055\u308c\u3066\u307e\u3059\n\uff08{0}\uff09\n\u518d\u4f5c\u6210\u3057\u307e\u3059\u304b\uff1f
manager.properties.failedCreation=\u30e6\u30fc\u30b6\u30fc\u30c7\u30fc\u30bf\u3092\u4fdd\u5b58\u3059\u308b\u305f\u3081\u306eICEpdf \u30d3\u30e5\u30fc\u30a2\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\uff1a\n{0}\nICEpdf\u30d3\u30e5\u30fc\u30a2\u306f\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u8a2d\u5b9a\u3078\u306e\u5909\u66f4\u3092\u4fdd\u5b58\u3057\u307e\u305b\u3093\u3002
manager.properties.lafError=\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u3067\u6307\u5b9a\u3055\u308c\u305fLook\uff06Feel {0}\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\n\u30b7\u30b9\u30c6\u30e0\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002
manager.properties.missingProperty=\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30d7\u30ed\u30d1\u30c6\u30a3{0}\u5024\u304c\u3042\u308a\u307e\u305b\u3093\uff1a{1}
manager.properties.modified=\u524d\u56de\u306e\u66f4\u65b0\u4ee5\u964d\u3001\u30d7\u30ed\u30d1\u30c6\u30a3\u30d5\u30a1\u30a4\u30eb\u304c\u5909\u66f4\u3055\u308c\u3066\u3044\u307e\u3059\n\uff08{0\u3001date\u3001long}\uff09\n\u30d5\u30a1\u30a4\u30eb\u306e\u5909\u66f4\u3092\u73fe\u5728\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u3068\u30de\u30fc\u30b8\u3057\u307e\u3059\u304b\uff1f
manager.properties.saveError=\u30d7\u30ed\u30d1\u30c6\u30a3\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3067\u304d\u307e\u305b\u3093\u3002\n\u6b21\u306e\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\uff1a\n{0}
manager.properties.session.nolock=\u30ed\u30c3\u30af\u30d5\u30a1\u30a4\u30eb\u306e\u4f5c\u6210\u30a8\u30e9\u30fc\uff1a\n{0}\n
manager.properties.session.readError=\u30d7\u30ed\u30d1\u30c6\u30a3\u30d5\u30a1\u30a4\u30eb\u306e\u8aad\u307f\u8fbc\u307f\u30a8\u30e9\u30fc\uff1a\n{0}
manager.properties.title=ICEpdf\u30d7\u30ed\u30d1\u30c6\u30a3\u30fb\u30de\u30cd\u30fc\u30b8\u30e3
parse.choice=\u8b66\u544a\uff1a{0}\u306f\u6709\u52b9\u306a\u9078\u629e\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002
parse.double=\u8b66\u544a\uff1a{0}\u306f\u6b63\u3057\u3044double\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002
parse.float=\u8b66\u544a\uff1a{0}\u306f\u6b63\u3057\u3044\u6d6e\u52d5\u5c0f\u6570\u70b9\u6570\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002
parse.integer=\u8b66\u544a\uff1a{0}\u306f\u6b63\u3057\u3044\u6574\u6570\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002
parse.laf=\u8b66\u544a\uff1a\u30eb\u30c3\u30af\u30a2\u30f3\u30c9\u30d5\u30a3\u30fc\u30eb{0}\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002
parse.title=\u30d7\u30ed\u30d1\u30c6\u30a3\u89e3\u6790\u30a8\u30e9\u30fc
pilot.display.msg={0}\u3092\u8868\u793a\u3057\u3066\u3044\u307e\u3059
pilot.error.classLoading=\u5fc5\u8981\u306a\u30af\u30e9\u30b9{0}\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002 \u5fc5\u8981\u306a\u30e9\u30a4\u30d6\u30e9\u30ea\u300cicepdf.jar\u300d\u304c\u30af\u30e9\u30b9\u30d1\u30b9\u306b\u306a\u3044\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059-PDF\u30d1\u30a4\u30ed\u30c3\u30c8\u304c\u7121\u52b9\u306b\u306a\u308a\u307e\u3057\u305f\u3002 ";
pilot.loading.error.msg=PDF\u30d1\u30a4\u30ed\u30c3\u30c8\uff1a{0}\u306e\u8aad\u307f\u8fbc\u307f\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002
pilot.loading.msg=\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8{0}\u3092\u958b\u3044\u3066\u3044\u307e\u3059\u2026
pilot.title=ICEbrowser - ICEpdf Pilot \u30a8\u30e9\u30fc
viewer.annotation.popup.delete.label=\u524a\u9664
viewer.annotation.popup.minimizeAll.label=\u30dd\u30c3\u30d7\u30a2\u30c3\u30d7\u3092\u6700\u5c0f\u5316
viewer.annotation.popup.openAll.label=\u3059\u3079\u3066\u306e\u30dd\u30c3\u30d7\u30a2\u30c3\u30d7\u3092\u958b\u304f
viewer.annotation.popup.reply.label=\u5fdc\u7b54
viewer.annotation.popup.replyTo.label=\u518d\uff1a{0}
viewer.annotation.popup.status.accepted.label=\u53d7\u3051\u5165\u308c\u307e\u3057\u305f
viewer.annotation.popup.status.accepted.msg={0}\u304c\u627f\u8a8d\u3057\u305f\u8a2d\u5b9a
viewer.annotation.popup.status.accepted.title=\u627f\u8a8d\u6e08\u307f\uff1a{0}
viewer.annotation.popup.status.cancelled.label=\u30ad\u30e3\u30f3\u30bb\u30eb\u3055\u308c\u307e\u3057\u305f
viewer.annotation.popup.status.cancelled.msg={0}\u306b\u30ad\u30e3\u30f3\u30bb\u30eb\u3055\u308c\u307e\u3057\u305f
viewer.annotation.popup.status.cancelled.title=\u30ad\u30e3\u30f3\u30bb\u30eb\u6e08\u307f\uff1a{0}
viewer.annotation.popup.status.completed.label=\u5b8c\u4e86\u3057\u307e\u3057\u305f
viewer.annotation.popup.status.completed.msg={0}\u304c\u30bb\u30c3\u30c8\u3092\u5b8c\u6210\u3057\u307e\u3057\u305f
viewer.annotation.popup.status.completed.title=\u5b8c\u4e86\uff1a{0}
viewer.annotation.popup.status.label=\u30b9\u30c6\u30fc\u30bf\u30b9\u3092\u8a2d\u5b9a
viewer.annotation.popup.status.none.label=\u306a\u3057
viewer.annotation.popup.status.none.msg={0}\u306b\u3088\u3063\u3066\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093
viewer.annotation.popup.status.none.title=\u306a\u3057\uff1a{0}
viewer.annotation.popup.status.rejected.label=\u62d2\u5426\u3055\u308c\u307e\u3057\u305f
viewer.annotation.popup.status.rejected.msg=\u62d2\u5426\u6307\u5b9a\uff1a{0}
viewer.annotation.popup.status.rejected.title=\u62d2\u5426\u3055\u308c\u307e\u3057\u305f\uff1a{0}
viewer.annotation.signature.menu.showCertificates.label=\u8a3c\u660e\u66f8\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u3092\u8868\u793a
viewer.annotation.signature.menu.signaturePageNavigation.label=\u30da\u30fc\u30b8\u306b\u79fb\u52d5\u2026
viewer.annotation.signature.menu.signatureProperties.label=\u7f72\u540d\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u3092\u8868\u793a
viewer.annotation.signature.menu.validateSignature.label=\u7f72\u540d\u3092\u691c\u8a3c
viewer.annotation.signature.properties.dialog.certificateExpired.failure=-\u7f72\u540d\u8005\u8a3c\u660e\u66f8\u306e\u6709\u52b9\u671f\u9650\u304c\u5207\u308c\u3066\u3044\u307e\u3059\u3002
viewer.annotation.signature.properties.dialog.invalid.label=\u7f72\u540d\u304c\u7121\u52b9\u3067\u3059
viewer.annotation.signature.properties.dialog.location.label=\u5834\u6240\uff1a{0}
viewer.annotation.signature.properties.dialog.pathValidation.failure=-\u30d1\u30b9\u306e\u691c\u8a3c\u30c1\u30a7\u30c3\u30af\u304c\u5931\u6557\u3057\u307e\u3057\u305f\u3002
viewer.annotation.signature.properties.dialog.pathValidation.success=-\u30d1\u30b9\u691c\u8a3c\u30c1\u30a7\u30c3\u30af\u304c\u6210\u529f\u3057\u307e\u3057\u305f\u3002
viewer.annotation.signature.properties.dialog.reason.label=\u7406\u7531\uff1a{0}
viewer.annotation.signature.properties.dialog.revocation.failure=-\u5931\u52b9\u30c1\u30a7\u30c3\u30af\u306f\u5b9f\u884c\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f\u3002
viewer.annotation.signature.properties.dialog.revocation.success=-\u7f72\u540d\u8005\u306e\u8a3c\u660e\u66f8\u306f\u6709\u52b9\u3067\u3042\u308a\u3001\u53d6\u308a\u6d88\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002
viewer.annotation.signature.properties.dialog.showCertificates.label=\u7f72\u540d\u8005\u306e\u8a3c\u660e\u66f8\u2026
viewer.annotation.signature.properties.dialog.signedBy.label={0} {1}\u306b\u3088\u308b\u7f72\u540d
viewer.annotation.signature.properties.dialog.signerInfo.title=\u7f72\u540d\u8005\u60c5\u5831
viewer.annotation.signature.properties.dialog.signingTime.label=\u7f72\u540d\u6642\u9593\uff1a{0}
viewer.annotation.signature.properties.dialog.title=\u7f72\u540d\u306e\u30d7\u30ed\u30d1\u30c6\u30a3
viewer.annotation.signature.properties.dialog.unknown.label=\u7f72\u540d\u306f\u6709\u52b9\u3067\u3059
viewer.annotation.signature.properties.dialog.valid.label=\u7f72\u540d\u306e\u6709\u52b9\u6027\u306f\u4e0d\u660e\u3067\u3059
viewer.annotation.signature.properties.dialog.validity.title=\u59a5\u5f53\u6027\u306e\u8981\u7d04
viewer.annotation.signature.validation.common.doc.major.label=-\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u304c\u7f72\u540d\u5f8c\u306b\u5909\u66f4\u307e\u305f\u306f\u7834\u640d\u3055\u308c\u3066\u3044\u307e\u3059
viewer.annotation.signature.validation.common.doc.modified.label=\ - \u3053\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306f\u5909\u66f4\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u304c,\u305d\u306e\u5f8c\u5909\u66f4\u304c\u52a0\u3048\u3089\u308c\u3066\u3044\u307e\u3059
viewer.annotation.signature.validation.common.doc.unmodified.label=-\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306f\u7f72\u540d\u3055\u308c\u3066\u304b\u3089\u5909\u66f4\u3055\u308c\u3066\u3044\u307e\u305b\u3093
viewer.annotation.signature.validation.common.identity.unchecked.label=-\u7f72\u540d\u306f\u6709\u52b9\u3067\u3059\u304c\u3001\u7f72\u540d\u8005ID\u306e\u53d6\u308a\u6d88\u3057\u304c\u78ba\u8a8d\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
viewer.annotation.signature.validation.common.identity.unknown.label=-keystore\u3067\u898b\u3064\u304b\u3089\u306a\u304b\u3063\u305f\u305f\u3081\u3001\u7f72\u540d\u8005\u306eID\u306f\u4e0d\u660e\u3067\u3059
viewer.annotation.signature.validation.common.identity.valid.label=-\u7f72\u540d\u8005\u306eID\u306f\u6709\u52b9\u3067\u3059
viewer.annotation.signature.validation.common.invalid.label=\u7f72\u540d\u304c\u7121\u52b9\u3067\u3059\uff1a
viewer.annotation.signature.validation.common.notAvailable.label=\u306a\u3057
viewer.annotation.signature.validation.common.signedBy.label=-{0} {1}\u306b\u3088\u308b\u7f72\u540d
viewer.annotation.signature.validation.common.time.embedded.label=\u3000-\u7f72\u540d\u306b\u306f\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u304c\u57cb\u3081\u8fbc\u307e\u308c\u3066\u3044\u307e\u3057\u305f\u304c\u3001\u691c\u8a3c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
viewer.annotation.signature.validation.common.time.local.label=-\u7f72\u540d\u6642\u523b\u306f\u3001\u3053\u306e\u7f72\u540d\u8005\u306e\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u30fc\u306e\u6642\u8a08\u304b\u3089\u3067\u3059
viewer.annotation.signature.validation.common.unknown.label=\u7f72\u540d\u306f\u6709\u52b9\u3067\u3059\uff1a
viewer.annotation.signature.validation.common.valid.label=\u7f72\u540d\u306e\u6709\u52b9\u6027\u306f\u4e0d\u660e\u3067\u3059\uff1a
viewer.annotation.signature.validation.dialog.close.button.label=\u9589\u3058\u308b
viewer.annotation.signature.validation.dialog.signerProperties.button.label=\u7f72\u540d\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u2026
viewer.annotation.signature.validation.dialog.title=\u7f72\u540d\u691c\u8a3c\u306e\u6982\u8981
viewer.button.cancel.label=\u30ad\u30e3\u30f3\u30bb\u30eb
viewer.button.cancel.mnemonic=C
viewer.button.ok.label=OK
viewer.button.ok.mnemonic=O
viewer.commandLin.error=\u4f7f\u7528\u6cd5\: java org.icepdf.ri.viewer.Main [-loadfile <value>] [-loadurl <value>]
viewer.common.number.eight=8
viewer.common.number.eighteen=18
viewer.common.number.eleven=11
viewer.common.number.fifteen=15
viewer.common.number.five=5
viewer.common.number.fortyEight=48
viewer.common.number.four=4
viewer.common.number.fourteen=14
viewer.common.number.nine=9
viewer.common.number.nineteen=19
viewer.common.number.one=1
viewer.common.number.seven=7
viewer.common.number.seventeen=17
viewer.common.number.six=6
viewer.common.number.sixteen=16
viewer.common.number.thirteen=13
viewer.common.number.thirtySix=36
viewer.common.number.three=3
viewer.common.number.twelve=12
viewer.common.number.twenty=20
viewer.common.number.twentyFive=25
viewer.common.number.twentyFour=24
viewer.common.number.twentyOne=21
viewer.common.number.twentySeven=27
viewer.common.number.twentySix=26
viewer.common.number.twentyThree=23
viewer.common.number.twentyTwo=22
viewer.common.number.two=2
viewer.dialog.about.pageNumber.label=ICEpdf Web\u30b5\u30a4\u30c8\u3067\u6700\u65b0\u306e\u30cb\u30e5\u30fc\u30b9\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\nhttp\://www.icepdf.org/
viewer.dialog.about.title=ICEpdf\u30d3\u30e5\u30fc\u30a2\u306b\u3064\u3044\u3066
viewer.dialog.documentInformation.author.label=\u4f5c\u8005\uff1a
viewer.dialog.documentInformation.created.label=\u4f5c\u6210\uff1a
viewer.dialog.documentInformation.creator.label=\u4f5c\u6210\u8005\uff1a
viewer.dialog.documentInformation.keywords.label=\u30ad\u30fc\u30ef\u30fc\u30c9\uff1a
viewer.dialog.documentInformation.modified.label=\u5909\u66f4\uff1a
viewer.dialog.documentInformation.notAvailable=\u5229\u7528\u4e0d\u53ef
viewer.dialog.documentInformation.producer.label=\u30d7\u30ed\u30c7\u30e5\u30fc\u30b5\u30fc\uff1a
viewer.dialog.documentInformation.subject.label=\u4ef6\u540d\uff1a
viewer.dialog.documentInformation.title=\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u60c5\u5831
viewer.dialog.documentInformation.title.label=\u984c\u540d\uff1a
viewer.dialog.documentPermissions.accessibility.label=\u30b3\u30f3\u30c6\u30f3\u30c4\u30fb\u30a2\u30af\u30bb\u30b7\u30d3\u30ea\u30c6\u30a3\u304c\u6709\u52b9\uff1a
viewer.dialog.documentPermissions.allowed=\u8a31\u53ef\u3057\u307e\u3059
viewer.dialog.documentPermissions.assembly.label=\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u7d44\u307f\u7acb\u3066\uff1a
viewer.dialog.documentPermissions.changing.label=\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u5909\u66f4\uff1a
viewer.dialog.documentPermissions.comments.label=\u8457\u8005\u306e\u30b3\u30e1\u30f3\u30c8\u3068\u30d5\u30a9\u30fc\u30e0\u30d5\u30a3\u30fc\u30eb\u30c9\uff1a
viewer.dialog.documentPermissions.copyExtraction.label=\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u30b3\u30d4\u30fc\u307e\u305f\u306f\u62bd\u51fa\uff1a
viewer.dialog.documentPermissions.encryptionLevel.label=\u6697\u53f7\u5316\u30ec\u30d9\u30eb\uff1a
viewer.dialog.documentPermissions.formFillingIn.label=\u30d5\u30a9\u30fc\u30e0\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u8a18\u5165\u307e\u305f\u306f\u7f72\u540d\uff1a
viewer.dialog.documentPermissions.fullyAllowed=\u5b8c\u5168\u306b\u8a31\u53ef
viewer.dialog.documentPermissions.no=\u756a\u53f7
viewer.dialog.documentPermissions.none=\u306a\u3057
viewer.dialog.documentPermissions.notAllowed=\u7981\u6b62\u3055\u308c\u3066\u3044\u307e\u3059
viewer.dialog.documentPermissions.ownerPassword.label=\u6240\u6709\u8005\u30d1\u30b9\u30ef\u30fc\u30c9\uff1a
viewer.dialog.documentPermissions.partial=\u90e8\u5206\u7684\uff08\u4f4e\u54c1\u8cea\uff09
viewer.dialog.documentPermissions.printing.label=\u5370\u5237\uff1a
viewer.dialog.documentPermissions.securityLevel={0}-bit v{1} R {2}
viewer.dialog.documentPermissions.securityMethod.label=\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u65b9\u6cd5\uff1a
viewer.dialog.documentPermissions.standardSecurity=Adobe Acrobat\u6a19\u6e96\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3
viewer.dialog.documentPermissions.title=\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u6a29\u9650
viewer.dialog.documentPermissions.userPassword.label=\u30e6\u30fc\u30b6\u30fc\u30d1\u30b9\u30ef\u30fc\u30c9\uff1a
viewer.dialog.documentPermissions.yes=\u306f\u3044
viewer.dialog.error.exception.msg=\u30b3\u30de\u30f3\u30c9\u306e\u5b9f\u884c\u4e2d\u306b\u6b21\u306e\u4f8b\u5916\u306e\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\n{0}\u3002
viewer.dialog.error.exception.title=ICEsoft ICEpdf-\u4f8b\u5916
viewer.dialog.exportSVG.exportError.msg=ICEpdf\u306f{0}\u306b\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\n\u30b5\u30dd\u30fc\u30c8\u5916\u306e\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u304b\u3001\n\u30d5\u30a1\u30a4\u30eb\u304c\u7834\u640d\u3057\u3066\u3044\u307e\u3059\u3002
viewer.dialog.exportSVG.exportError.title=ICEsoft ICEpdf-SVG\u30a8\u30e9\u30fc
viewer.dialog.exportSVG.noExtensionError.msg=\u30d5\u30a1\u30a4\u30eb\u62e1\u5f35\u5b50\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002
viewer.dialog.exportSVG.noExtensionError.title=ICEsoft ICEpdf-SVG\u30a8\u30e9\u30fc
viewer.dialog.exportSVG.status.error.msg=\u30da\u30fc\u30b8{0}\u3092SVG\u30d5\u30a1\u30a4\u30eb\u306b\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u3059\u308b\u969b\u306e\u554f\u984c\u3000{1}\uff1a{2}
viewer.dialog.exportSVG.status.exporting.msg=\u30da\u30fc\u30b8{0}\u3092SVG\u30d5\u30a1\u30a4\u30eb{1}\u3078\u306e\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u4e2d \u2026
viewer.dialog.exportSVG.status.finished.msg=\u30da\u30fc\u30b8{0}\u3092SVG\u30d5\u30a1\u30a4\u30eb{1}\u3078\u306e\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u304c\u7d42\u4e86\u3057\u307e\u3057\u305f
viewer.dialog.exportSVG.title=SVG\u306b\u30a8\u30af\u30b9\u30dd\u30fc\u30c8
viewer.dialog.exportText.noExtensionError.msg=\u30d5\u30a1\u30a4\u30eb\u62e1\u5f35\u5b50\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002
viewer.dialog.exportText.noExtensionError.title=ICEsoft ICEpdf-\u4fdd\u5b58\u30a8\u30e9\u30fc
viewer.dialog.exportText.progress.msg=PDF\u30c6\u30ad\u30b9\u30c8\u306e\u62bd\u51fa
viewer.dialog.exportText.title=\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u30c6\u30ad\u30b9\u30c8\u306e\u30a8\u30af\u30b9\u30dd\u30fc\u30c8
viewer.dialog.fonts.border.label=\u3053\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3067\u4f7f\u7528\u3055\u308c\u3066\u3044\u308b\u30d5\u30a9\u30f3\u30c8
viewer.dialog.fonts.info.encoding.label=\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\uff1a{0}
viewer.dialog.fonts.info.substitution.path.label=\u30d1\u30b9\uff1a{0}
viewer.dialog.fonts.info.substitution.type.label=\u5b9f\u969b\u306e\u30bf\u30a4\u30d7\uff1a{0}
viewer.dialog.fonts.info.type.label=\u30bf\u30a4\u30d7\uff1a{0}
viewer.dialog.fonts.resetCache.label=\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u30ea\u30bb\u30c3\u30c8
viewer.dialog.fonts.resetCache.tip=\u30d5\u30a9\u30f3\u30c8\u30fb\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u30ea\u30bb\u30c3\u30c8\u3057\u3001\u518d\u30b9\u30ad\u30e3\u30f3\u3057\u3066\u65b0\u3057\u3044\u30d5\u30a9\u30f3\u30c8\u3092\u63a2\u3057\u307e\u3059\u3002
viewer.dialog.fonts.searching.label=\u30d5\u30a9\u30f3\u30c8\u30c7\u30fc\u30bf\u3092\u53ce\u96c6\u3057\u3066\u3044\u307e\u3059\uff08{0}\uff05\uff09\u3002
viewer.dialog.fonts.title=\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u30d5\u30a9\u30f3\u30c8\u30d7\u30ed\u30d1\u30c6\u30a3
viewer.dialog.goToPage.description.label=\u30da\u30fc\u30b8\u756a\u53f7
viewer.dialog.goToPage.title=\u30da\u30fc\u30b8\u306b\u79fb\u52d5\u2026
viewer.dialog.information.copyAll.msg=\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306b\u306f{0}\u30da\u30fc\u30b8\u4ee5\u4e0a\u3042\u308a\u307e\u3059\u3002\n\u300c\u30c6\u30ad\u30b9\u30c8\u3092\u30a8\u30af\u30b9\u30dd\u30fc\u30c8..."\u300d\u4f7f\u7528\u3057\u3066\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u30c6\u30ad\u30b9\u30c8\u3092\u62bd\u51fa\u3057\u3066\u4e0b\u3055\u3044\u3002
viewer.dialog.information.copyAll.title=ICEsoft ICEpdf-\u60c5\u5831
viewer.dialog.openDocument.exception.msg=ICEpdf\u306f\u6307\u5b9a\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb{0}\u3092\u958b\u3051\u307e\u305b\u3093\u3067\u3057\u305f\u3002\n\u30d5\u30a1\u30a4\u30eb\u304c\u7834\u640d\u3057\u3066\u3044\u308b\u304b\u3001\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u7121\u3044\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u306e\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002
viewer.dialog.openDocument.exception.title=ICEsoft ICEpdf-\u4f8b\u5916
viewer.dialog.openDocument.pdfException.msg=ICEpdf\u306f\u6307\u5b9a\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u3051\u307e\u305b\u3093{0}\n\u30d5\u30a1\u30a4\u30eb\u304c\u7834\u640d\u3057\u3066\u3044\u308b\u304b\u3001\u30b5\u30dd\u30fc\u30c8\u5916\u306e\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u306e\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002
viewer.dialog.openDocument.pdfException.title=ICEsoft ICEpdf-PDF\u4f8b\u5916
viewer.dialog.openDocument.pdfSecurityException.msg=ICEpdf\u306f\u6697\u53f7\u5316\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb{0}\u3092\u958b\u3051\u307e\u305b\u3093\u3067\u3057\u305f\u3002\n\u3053\u308c\u306f\u3001\u7121\u52b9\u306a\u30d1\u30b9\u30ef\u30fc\u30c9\u307e\u305f\u306fJCE\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u306e\u6b20\u843d\u306e\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\n\n\u8a73\u7d30\u306b\u3064\u3044\u3066\u306f\u3001ICEpdf\u958b\u767a\u8005\u30ac\u30a4\u30c9\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002
viewer.dialog.openDocument.pdfSecurityException.title=ICEsoft ICEpdf - PDF\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u4f8b\u5916
viewer.dialog.openFile.error.msg=ICEpdf\u306f\u6307\u5b9a\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb{0}\u3092\u958b\u3051\u307e\u305b\u3093\u3067\u3057\u305f\u3002\n\u30d5\u30a1\u30a4\u30eb\u304c\u7834\u640d\u3057\u3066\u3044\u308b\u304b\u3001\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u306a\u3044\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u306e\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002
viewer.dialog.openFile.error.title=ICEsoft ICEpdf-\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304f\u30a8\u30e9\u30fc
viewer.dialog.openFile.title=\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304f
viewer.dialog.openURL.downloading.msg={0}\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u3044\u307e\u3059
viewer.dialog.openURL.exception.msg=\u300cICEpdf\u306f\u6307\u5b9a\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u3051\u307e\u305b\u3093\u3002{0}\nURL\uff1a{1}\u300d
viewer.dialog.openURL.exception.title=ICEsoft ICEpdf-URL\u4f8b\u5916
viewer.dialog.openURL.title=URL\u3092\u958b\u304f
viewer.dialog.printing.status.start.msg=\u30d7\u30ea\u30f3\u30bf\u3078\u30da\u30fc\u30b8\u3092\u30b9\u30d7\u30fc\u30eb\u4e2d
viewer.dialog.saveAs.extensionError.msg=ICEpdf\u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u7121\u3044\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u306e\u70ba\u3001{0}\u306b\u4fdd\u5b58\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
viewer.dialog.saveAs.extensionError.title=ICEsoft ICEpdf-\u4fdd\u5b58\u30a8\u30e9\u30fc
viewer.dialog.saveAs.noExtensionError.msg=\u30d5\u30a1\u30a4\u30eb\u62e1\u5f35\u5b50\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002
viewer.dialog.saveAs.noExtensionError.title=ICEsoft ICEpdf-\u4fdd\u5b58\u30a8\u30e9\u30fc
viewer.dialog.saveAs.noPermission.msg=\u3053\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u4fdd\u5b58\u3059\u308b\u6a29\u9650\u307e\u305f\u306f\u8cc7\u683c\u60c5\u5831\u304c\u3042\u308a\u307e\u305b\u3093\u3002
viewer.dialog.saveAs.noPermission.title=ICEpdf \u30d3\u30e5\u30fc\u30a2 RI-\u4fdd\u5b58\u30a8\u30e9\u30fc
viewer.dialog.saveAs.noUpdates.msg=\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u5909\u66f4\u3092\u4fdd\u5b58\u3059\u308b\u306b\u306fICEpdfPRO\u306b\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3057\u3066\u304f\u3060\u3055\u3044\u3002
viewer.dialog.saveAs.noUpdates.title=ICEpdf \u30d3\u30e5\u30fc\u30a2 RI
viewer.dialog.saveAs.noneUniqueName.msg=\u30d5\u30a1\u30a4\u30eb{0}\u306f\u65e2\u306b\u5b58\u5728\u3057\u307e\u3059\u3002 \u4e00\u610f\u306e\u540d\u524d\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002
viewer.dialog.saveAs.noneUniqueName.title=ICEsoft ICEpdf-\u4fdd\u5b58\u30a8\u30e9\u30fc
viewer.dialog.saveAs.title=\u540d\u524d\u3092\u4ed8\u3051\u3066\u4fdd\u5b58
viewer.dialog.saveOnClose.noUpdates.msg=\u5909\u66f4\u3092{0}\u306b\u4fdd\u5b58\u3057\u307e\u3059\u304b\uff1f
viewer.dialog.saveOnClose.noUpdates.title=ICEpdf \u30d3\u30e5\u30fc\u30a2 RI
viewer.dialog.security.cancelButton.label=\u30ad\u30e3\u30f3\u30bb\u30eb
viewer.dialog.security.cancelButton.mnemonic=C
viewer.dialog.security.msg=\u3053\u306ePDF\u306f\u4fdd\u8b77\u3055\u308c\u3066\u3044\u307e\u3059
viewer.dialog.security.okButton.label=OK
viewer.dialog.security.okButton.mnemonic=O
viewer.dialog.security.password.label=\u30d1\u30b9\u30ef\u30fc\u30c9\uff1a
viewer.dialog.security.title=\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3
viewer.exportText.fileStamp.msg=ICEsoft ICEpdf\u30d3\u30e5\u30fc\u30a2\u3001\uff08c\uff09ICEsoft Technologies\u3001Inc.
viewer.exportText.fileStamp.progress.moreFile.msg={2}\u3000\u30da\u30fc\u30b8
viewer.exportText.fileStamp.progress.msg={1}\u306e\u3046\u3061{0}\u3092\u5b8c\u4e86\u3057\u307e\u3057\u305f\u3002
viewer.exportText.fileStamp.progress.oneFile.msg={2}\u30da\u30fc\u30b8
viewer.exportText.pageStamp.msg=<\!----- \u30da\u30fc\u30b8{0}\u3000\u30c6\u30ad\u30b9\u30c8 ---->
viewer.launcher.URLError.dialog.message=ICEpdf\u306f\u6307\u5b9a\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u3051\u307e\u305b\u3093\u3002 {0}\u3001URL\uff1a{1}\u3002
viewer.launcher.URLError.dialog.title=ICEsoft ICEpdf
viewer.launcher.lookAndFeel.error.message=\u6307\u5b9a\u3055\u308c\u305f\u30eb\u30c3\u30af\u30a2\u30f3\u30c9\u30d5\u30a3\u30fc\u30eb\uff08{0}\uff09\u306f\u3001\u3053\u306e\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u304b\u3089\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u305b\u3093\u3002
viewer.menu.close.label=\u9589\u3058\u308b
viewer.menu.document.firstPage.label=\uff11\u30da\u30fc\u30b8\u76ee
viewer.menu.document.gotToPage.label=\u30da\u30fc\u30b8\u306b\u79fb\u52d5\u2026
viewer.menu.document.label=\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8
viewer.menu.document.lastPage.label=\u6700\u7d42\u30da\u30fc\u30b8
viewer.menu.document.mnemonic=D
viewer.menu.document.nextPage.label=\u6b21\u306e\u30da\u30fc\u30b8
viewer.menu.document.previousPage.label=\u524d\u306e\u30da\u30fc\u30b8
viewer.menu.document.search.label=\u691c\u51fa...
viewer.menu.documentFonts.label=\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u30d5\u30a9\u30f3\u30c8\u2026
viewer.menu.documentInformation.label=\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u60c5\u5831\u2026
viewer.menu.documentPermission.label=\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u6a29\u9650\u2026
viewer.menu.edit.copy.label=\u30b3\u30d4\u30fc
viewer.menu.edit.delete.label=\u524a\u9664
viewer.menu.edit.deselectAll.label=\u3059\u3079\u3066\u306e\u9078\u629e\u3092\u89e3\u9664
viewer.menu.edit.label=\u7de8\u96c6
viewer.menu.edit.mnemonic=E
viewer.menu.edit.redo.label=\u3084\u308a\u76f4\u3057
viewer.menu.edit.selectAll.label=\u3059\u3079\u3066\u9078\u629e
viewer.menu.edit.undo.label=\u5143\u306b\u623b\u3059
viewer.menu.exit.label=\u7d42\u4e86\uff1a
viewer.menu.exportSVG.label=SVG\u3092\u30a8\u30af\u30b9\u30dd\u30fc\u30c8...
viewer.menu.exportText.label=\u30c6\u30ad\u30b9\u30c8\u3092\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u2026
viewer.menu.file.label=\u30d5\u30a1\u30a4\u30eb
viewer.menu.file.mnemonic=F
viewer.menu.help.about.label=ICEpdf\u30d3\u30e5\u30fc\u30a2\u306b\u3064\u3044\u3066\u2026
viewer.menu.help.label=\u30d8\u30eb\u30d7
viewer.menu.help.mnemonic=H
viewer.menu.open.URL.label=URL...
viewer.menu.open.file.label=\u30d5\u30a1\u30a4\u30eb...
viewer.menu.open.label=\u958b\u304f
viewer.menu.print.label=\u5370\u5237\u2026
viewer.menu.printSetup.label=\u5370\u5237\u8a2d\u5b9a\u2026
viewer.menu.saveAs.label=\u540d\u524d\u3092\u4ed8\u3051\u3066\u4fdd\u5b58\u2026
viewer.menu.view.actualSize.label=\u5b9f\u5bf8
viewer.menu.view.fitInWindow.label=\u30a6\u30a3\u30f3\u30c9\u30a6\u306b\u5408\u308f\u305b\u308b
viewer.menu.view.fitWidth.label=\u5e45\u306b\u5408\u308f\u305b\u308b
viewer.menu.view.hideToolBar.label=\u30c4\u30fc\u30eb\u30d0\u30fc\u3092\u975e\u8868\u793a
viewer.menu.view.hideUtilityPane.label=\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3\u30fb\u30a6\u30a3\u30f3\u30c9\u30a6\u3092\u975e\u8868\u793a
viewer.menu.view.label=\u8868\u793a
viewer.menu.view.mnemonic=V
viewer.menu.view.rotateLeft.label=\u5de6\u56de\u8ee2
viewer.menu.view.rotateRight.label=\u53f3\u56de\u8ee2
viewer.menu.view.showToolBar.label=\u30c4\u30fc\u30eb\u30d0\u30fc\u3092\u8868\u793a
viewer.menu.view.showUtilityPane.label=\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3\u30fb\u30da\u30a4\u30f3\u3092\u8868\u793a
viewer.menu.view.zoomIn.label=\u30ba\u30fc\u30e0\u30a4\u30f3
viewer.menu.view.zoomOut.label=\u30ba\u30fc\u30e0\u30a2\u30a6\u30c8
viewer.menu.window.1.label=1
viewer.menu.window.1.mnemonic=1
viewer.menu.window.2.label=2
viewer.menu.window.2.mnemonic=2
viewer.menu.window.3.label=3
viewer.menu.window.3.mnemonic=3
viewer.menu.window.4.label=4
viewer.menu.window.4.mnemonic=4
viewer.menu.window.5.label=5
viewer.menu.window.5.mnemonic=5
viewer.menu.window.6.label=6
viewer.menu.window.7.label=7
viewer.menu.window.7.mnemonic=7
viewer.menu.window.8.label=8
viewer.menu.window.8.mnemonic=8
viewer.menu.window.9.label=9
viewer.menu.window.9.mnemonic=9
viewer.menu.window.frontAll.label=\u3059\u3079\u3066\u3092\u524d\u9762\u306b
viewer.menu.window.frontAll.mnemonic=B
viewer.menu.window.label=\u30a6\u30a3\u30f3\u30c9\u30a6
viewer.menu.window.minAll.label=\u3059\u3079\u3066\u3092\u6700\u5c0f\u5316
viewer.menu.window.minAll.mnemonic=M
viewer.menu.window.mnemonic=W
viewer.statusbar.currentPage=\u30da\u30fc\u30b8{0} / {1}
viewer.toolbar.hideToolBar.label=\u30c4\u30fc\u30eb\u30d0\u30fc\u3092\u975e\u8868\u793a
viewer.toolbar.hideUtilityPane.label=\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3\u30fb\u30a6\u30a3\u30f3\u30c9\u30a6\u3092\u975e\u8868\u793a
viewer.toolbar.navigation.current.tooltip=\u73fe\u5728\u306e\u30da\u30fc\u30b8\u756a\u53f7
viewer.toolbar.navigation.firstPage.tooltip=\uff11\u30da\u30fc\u30b8\u76ee
viewer.toolbar.navigation.nextPage.tooltip=\u6b21\u306e\u30da\u30fc\u30b8
viewer.toolbar.navigation.pages.tooltip=\u30da\u30fc\u30b8\u6570
viewer.toolbar.navigation.previousPage.tooltip=\u524d\u306e\u30da\u30fc\u30b8
viewer.toolbar.open.tooltip=\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u958b\u304f
viewer.toolbar.pageFit.actualsize.tooltip=\u5b9f\u5bf8
viewer.toolbar.pageFit.fitWidth.tooltip=\u5e45\u306b\u5408\u308f\u305b\u308b
viewer.toolbar.pageFit.fitWindow.tooltip=\u30a6\u30a3\u30f3\u30c9\u30a6\u306b\u5408\u308f\u305b\u308b
viewer.toolbar.pageFit.fontEngine.tooltip=\u30d5\u30a9\u30f3\u30c8\u30a8\u30f3\u30b8\u30f3\u3092\u6709\u52b9/\u7121\u52b9\u306b\u3059\u308b
viewer.toolbar.pageIndicator=\u306e {0}
viewer.toolbar.pageView.continuous.facingPage.tooltip=\u9023\u7d9a\u3057\u305f\u30da\u30fc\u30b8\u30d3\u30e5\u30fc
viewer.toolbar.pageView.continuous.singlePage.tooltip=\u5358\u4e00\u30da\u30fc\u30b8\u9023\u7d9a\u8868\u793a
viewer.toolbar.pageView.nonContinuous.facingPage.tooltip=\u4e0d\u9023\u7d9a\u30da\u30fc\u30b8\u8868\u793a
viewer.toolbar.pageView.nonContinuous.singlePage.tooltip=\u5358\u4e00\u30da\u30fc\u30b8\u306e\u975e\u9023\u7d9a\u8868\u793a
viewer.toolbar.print.label=\u5370\u5237
viewer.toolbar.print.tooltip=\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u5370\u5237
viewer.toolbar.rotation.left.tooltip=\u5de6\u56de\u8ee2
viewer.toolbar.rotation.right.tooltip=\u53f3\u56de\u8ee2
viewer.toolbar.saveAs.label=\u540d\u524d\u3092\u4ed8\u3051\u3066\u4fdd\u5b58
viewer.toolbar.saveAs.tooltip=\u540d\u524d\u3092\u4ed8\u3051\u3066\u4fdd\u5b58...
viewer.toolbar.search.label=\u691c\u7d22
viewer.toolbar.search.tooltip=\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u691c\u7d22
viewer.toolbar.showToolBar.label=\u30c4\u30fc\u30eb\u30d0\u30fc\u3092\u8868\u793a
viewer.toolbar.showUtilityPane.label=\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3\u30da\u30a4\u30f3\u3092\u8868\u793a
viewer.toolbar.tool.circle.label=\u4e38
viewer.toolbar.tool.circle.tooltip=\u30b5\u30fc\u30af\u30eb\u6ce8\u91c8\u30c4\u30fc\u30eb
viewer.toolbar.tool.forms.highlight.label=\u30d5\u30a9\u30fc\u30e0\u306e\u5f37\u8abf\u8868\u793a
viewer.toolbar.tool.forms.highlight.tooltip=\u30d5\u30a9\u30fc\u30e0\u306e\u30cf\u30a4\u30e9\u30a4\u30c8\u3092\u8868\u793a/\u975e\u8868\u793a
viewer.toolbar.tool.freeText.label=\u30d5\u30ea\u30fc\u30c6\u30ad\u30b9\u30c8
viewer.toolbar.tool.freeText.tooltip=\u30d5\u30ea\u30fc\u30c6\u30ad\u30b9\u30c8\u6ce8\u91c8\u30c4\u30fc\u30eb
viewer.toolbar.tool.highlight.label=\u30cf\u30a4\u30e9\u30a4\u30c8
viewer.toolbar.tool.highlight.tooltip=\u30cf\u30a4\u30e9\u30a4\u30c8\u6ce8\u91c8\u30c4\u30fc\u30eb
viewer.toolbar.tool.ink.label=\u30a4\u30f3\u30af
viewer.toolbar.tool.ink.tooltip=\u30a4\u30f3\u30af\u6ce8\u91c8\u30c4\u30fc\u30eb
viewer.toolbar.tool.line.label=\u7dda
viewer.toolbar.tool.line.tooltip=\u30e9\u30a4\u30f3\u6ce8\u91c8\u30c4\u30fc\u30eb
viewer.toolbar.tool.lineArrow.label=\u7dda\u77e2\u5370
viewer.toolbar.tool.lineArrow.tooltip=\u7dda\u77e2\u5370\u6ce8\u91c8\u30c4\u30fc\u30eb
viewer.toolbar.tool.link.tooltip=\u30ea\u30f3\u30af\u6ce8\u91c8\u30c4\u30fc\u30eb
viewer.toolbar.tool.pan.tooltip=\u30d1\u30f3\u30c4\u30fc\u30eb
viewer.toolbar.tool.plolyLine.label=\u30dd\u30ea\u30e9\u30a4\u30f3
viewer.toolbar.tool.plolyLine.tooltip=\u30dd\u30ea\u30e9\u30a4\u30f3\u6ce8\u91c8\u30c4\u30fc\u30eb
viewer.toolbar.tool.rectangle.label=\u9577\u65b9\u5f62
viewer.toolbar.tool.rectangle.tooltip=\u9577\u65b9\u5f62\u6ce8\u91c8\u30c4\u30fc\u30eb
viewer.toolbar.tool.select.tooltip=\u9078\u629e\u30c4\u30fc\u30eb
viewer.toolbar.tool.strikeOut.label=\u53d6\u308a\u6d88\u3057\u7dda
viewer.toolbar.tool.strikeOut.tooltip=\u53d6\u308a\u6d88\u3057\u7dda\u6ce8\u91c8\u30c4\u30fc\u30eb
viewer.toolbar.tool.text.tooltip=\u30c6\u30ad\u30b9\u30c8\u9078\u629e\u30c4\u30fc\u30eb
viewer.toolbar.tool.textAnno.label=\u30c6\u30ad\u30b9\u30c8\u6ce8\u91c8
viewer.toolbar.tool.textAnno.tooltip=\u30c6\u30ad\u30b9\u30c8\u6ce8\u91c8\u30c4\u30fc\u30eb
viewer.toolbar.tool.underline.label=\u4e0b\u7dda
viewer.toolbar.tool.underline.tooltip=\u4e0b\u7dda\u7de8\u96c6\u30c4\u30fc\u30eb
viewer.toolbar.tool.zoomDynamic.tooltip=\u30ba\u30fc\u30e0\u52d5\u7684\u30c4\u30fc\u30eb
viewer.toolbar.tool.zoomIn.tooltip=\u30ba\u30fc\u30e0\u30a4\u30f3\u30c4\u30fc\u30eb
viewer.toolbar.tool.zoomMarquis.tooltip=\u30de\u30fc\u30ad\u30fc\u30ba\u30fc\u30e0\u30c4\u30fc\u30eb
viewer.toolbar.tool.zoomOut.tooltip=\u30ba\u30fc\u30e0\u30a2\u30a6\u30c8\u30c4\u30fc\u30eb
viewer.toolbar.utilityPane.label=\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3\u30fb\u30da\u30a4\u30f3
viewer.toolbar.utilityPane.tooltip=\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3\u30fb\u30da\u30a4\u30f3\u306e\u8868\u793a/\u975e\u8868\u793a
viewer.toolbar.zoom.in.tooltip=\u30ba\u30fc\u30e0\u30a4\u30f3
viewer.toolbar.zoom.out.tooltip=\u30ba\u30fc\u30e0\u30a2\u30a6\u30c8
viewer.toolbar.zoom.tooltip=\u30ba\u30fc\u30e0
viewer.utilityPane.action.addAction=\u8ffd\u52a0
viewer.utilityPane.action.dialog.delete.msgs=\u3053\u306e\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b\uff1f
viewer.utilityPane.action.dialog.delete.title=\u524a\u9664\u78ba\u8a8d
viewer.utilityPane.action.dialog.goto.bottom.label=\u4e0b\uff1a
viewer.utilityPane.action.dialog.goto.browse=\u30d6\u30e9\u30a6\u30ba...
viewer.utilityPane.action.dialog.goto.current=\u5834\u6240\u3092\u8a2d\u5b9a
viewer.utilityPane.action.dialog.goto.current.label=\u73fe\u5728\u306e\u30d3\u30e5\u30fc\uff1a
viewer.utilityPane.action.dialog.goto.explicitDestination.title=\u6697\u9ed9\u306e\u5b9b\u5148
viewer.utilityPane.action.dialog.goto.left.label=\u5de6\uff1a
viewer.utilityPane.action.dialog.goto.name.label=\u540d\u524d\uff1a
viewer.utilityPane.action.dialog.goto.nameDestination.title=\u540d\u4ed8\u304d\u5b9b\u5148
viewer.utilityPane.action.dialog.goto.nameTree.branch.label={0}\u301c{1}
viewer.utilityPane.action.dialog.goto.nameTree.root.label=\u540d\u524d\u30c4\u30ea\u30fc
viewer.utilityPane.action.dialog.goto.nameTree.title=\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u540d\u30c4\u30ea\u30fc
viewer.utilityPane.action.dialog.goto.page.label=\u30da\u30fc\u30b8\uff1a
viewer.utilityPane.action.dialog.goto.right.label=\u53f3\uff1a
viewer.utilityPane.action.dialog.goto.title=GoTo\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u30d7\u30ed\u30d1\u30c6\u30a3
viewer.utilityPane.action.dialog.goto.top.label=\u4e0a\uff1a
viewer.utilityPane.action.dialog.goto.type.fit.label=\u30da\u30fc\u30b8\u306b\u5408\u308f\u305b\u308b
viewer.utilityPane.action.dialog.goto.type.fitb.label=\u30da\u30fc\u30b8\u5883\u754c\u306b\u5408\u308f\u305b\u308b
viewer.utilityPane.action.dialog.goto.type.fitbh.label=\u5883\u754c\u3092\u4e0a\u306b\u5408\u308f\u305b\u308b
viewer.utilityPane.action.dialog.goto.type.fitbv.label=\u5883\u754c\u3092\u5de6\u306b\u5408\u308f\u305b\u308b
viewer.utilityPane.action.dialog.goto.type.fith.label=\u4e0a\u5e45\u306b\u5408\u308f\u305b\u308b
viewer.utilityPane.action.dialog.goto.type.fitr.label=\u30ba\u30fc\u30e0\u30dc\u30c3\u30af\u30b9\u306b\u5408\u308f\u305b\u308b
viewer.utilityPane.action.dialog.goto.type.fitv.label=\u5de6\u306e\u5e45\u306b\u5408\u308f\u305b\u308b
viewer.utilityPane.action.dialog.goto.type.label=\u30bf\u30a4\u30d7
viewer.utilityPane.action.dialog.goto.type.xyz.label=\u7d76\u5bfe
viewer.utilityPane.action.dialog.goto.unassigned.label=NaN
viewer.utilityPane.action.dialog.goto.zoom.label=\u30ba\u30fc\u30e0\uff1a
viewer.utilityPane.action.dialog.launch.msgs=\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9\uff1a
viewer.utilityPane.action.dialog.launch.title=\u8d77\u52d5\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u30d7\u30ed\u30d1\u30c6\u30a3
viewer.utilityPane.action.dialog.new.msgs=\u30a2\u30af\u30b7\u30e7\u30f3\u30bf\u30a4\u30d7\uff1a
viewer.utilityPane.action.dialog.new.title=\u65b0\u3057\u3044\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u8ffd\u52a0
viewer.utilityPane.action.dialog.uri.msgs=URI\:
viewer.utilityPane.action.dialog.uri.title=URI\u30a2\u30af\u30b7\u30e7\u30f3\u30fb\u30d7\u30ed\u30d1\u30c6\u30a3
viewer.utilityPane.action.editAction=\u7de8\u96c6
viewer.utilityPane.action.removeAction=\u524a\u9664
viewer.utilityPane.action.selectionTitle=\u30a2\u30af\u30b7\u30e7\u30f3
viewer.utilityPane.action.type.destination.label=\u9001\u4ed8\u5148
viewer.utilityPane.action.type.goToAction.label=GoTo\u30a2\u30af\u30b7\u30e7\u30f3
viewer.utilityPane.action.type.launchAction.label=\u8d77\u52d5\u30a2\u30af\u30b7\u30e7\u30f3
viewer.utilityPane.action.type.uriAction.label=URI\u30a2\u30af\u30b7\u30e7\u30f3
viewer.utilityPane.annotation.border.beveled=\u9762\u53d6\u308a
viewer.utilityPane.annotation.border.borderType.invisibleRectangle=\u975e\u8868\u793a
viewer.utilityPane.annotation.border.borderType.visibleRectangle=\u8868\u793a
viewer.utilityPane.annotation.border.colorChooserTitle=\u67a0\u306e\u8272
viewer.utilityPane.annotation.border.colorLabel=\u8272\uff1a
viewer.utilityPane.annotation.border.dashed=\u7834\u7dda
viewer.utilityPane.annotation.border.inset=\u30a4\u30f3\u30bb\u30c3\u30c8
viewer.utilityPane.annotation.border.lineStyle=\u67a0\u30b9\u30bf\u30a4\u30eb\uff1a
viewer.utilityPane.annotation.border.lineThickness=\u67a0\u306e\u5e45\uff1a
viewer.utilityPane.annotation.border.linkType=\u67a0\u306e\u7a2e\u985e
viewer.utilityPane.annotation.border.solid=\u5b9f\u7dda
viewer.utilityPane.annotation.border.title=\u67a0
viewer.utilityPane.annotation.border.underline=\u4e0b\u7dda
viewer.utilityPane.annotation.circle.appearance.title=\u5186\u6ce8\u91c8
viewer.utilityPane.annotation.circle.colorBorderChooserTitle=\u67a0\u306e\u8272
viewer.utilityPane.annotation.circle.colorBorderLabel=\u67a0\u8272
viewer.utilityPane.annotation.circle.colorInteriorChooserTitle=\u5185\u5074\u8272
viewer.utilityPane.annotation.circle.colorInteriorLabel=\u5857\u308a\u3064\u3076\u3057\u8272\uff1a
viewer.utilityPane.annotation.circle.fillTypeLabel=\u5857\u308a\u3064\u3076\u3057\u30bf\u30a4\u30d7\uff1a
viewer.utilityPane.annotation.circle.lineStyle=\u67a0\u30b9\u30bf\u30a4\u30eb\uff1a
viewer.utilityPane.annotation.circle.lineThickness=\u67a0\u5e45\uff1a
viewer.utilityPane.annotation.circle.transparencyLabel=\u900f\u660e\u5ea6\uff1a
viewer.utilityPane.annotation.flags.disabled=\u7121\u52b9
viewer.utilityPane.annotation.flags.enabled=\u6709\u52b9
viewer.utilityPane.annotation.flags.noRotate=\u56de\u8ee2\u306a\u3057\uff1a
viewer.utilityPane.annotation.flags.noZoom=\u30ba\u30fc\u30e0\u306a\u3057\uff1a
viewer.utilityPane.annotation.flags.printable=\u5370\u5237\u53ef\u80fd\uff1a
viewer.utilityPane.annotation.flags.readOnly=\u8aad\u307f\u53d6\u308a\u5c02\u7528\uff1a
viewer.utilityPane.annotation.flags.title=\u5370
viewer.utilityPane.annotation.flags.yes=\u5370\u5237\u53ef\u80fd\uff1a
viewer.utilityPane.annotation.freeText.appearance.title=\u30d5\u30ea\u30fc\u30c6\u30ad\u30b9\u30c8\u6ce8\u91c8
viewer.utilityPane.annotation.freeText.border.color=\u67a0\u8272
viewer.utilityPane.annotation.freeText.border.color.ChooserTitle=\u67a0\u306e\u8272
viewer.utilityPane.annotation.freeText.border.style=\u67a0\u306e\u30b9\u30bf\u30a4\u30eb
viewer.utilityPane.annotation.freeText.border.thickness=\u30dc\u30fc\u30c0\u30fc\u5e45\uff1a
viewer.utilityPane.annotation.freeText.border.type=\u67a0\u30bf\u30a4\u30d7\uff1a
viewer.utilityPane.annotation.freeText.fill.color=\u5857\u308a\u3064\u3076\u3057\u8272\uff1a
viewer.utilityPane.annotation.freeText.fill.color.ChooserTitle=\u5857\u308a\u3064\u3076\u3057\u8272
viewer.utilityPane.annotation.freeText.fill.type=\u5857\u308a\u3064\u3076\u3057\u30bf\u30a4\u30d7\uff1a
viewer.utilityPane.annotation.freeText.font.color=\u30d5\u30a9\u30f3\u30c8\u8272\uff1a
viewer.utilityPane.annotation.freeText.font.color.ChooserTitle=\u30d5\u30a9\u30f3\u30c8\u8272
viewer.utilityPane.annotation.freeText.font.dialog=\u30c0\u30a4\u30a2\u30ed\u30b0
viewer.utilityPane.annotation.freeText.font.dialogInput=\u30c0\u30a4\u30a2\u30ed\u30b0\u5165\u529b
viewer.utilityPane.annotation.freeText.font.monospaced=Monospaced
viewer.utilityPane.annotation.freeText.font.name=\u30d5\u30a9\u30f3\u30c8\u540d\uff1a
viewer.utilityPane.annotation.freeText.font.name.HelveticaBoldOblique=Helvetica-BoldOblique
viewer.utilityPane.annotation.freeText.font.name.courier=Courier
viewer.utilityPane.annotation.freeText.font.name.courierBold=Courier-Bold
viewer.utilityPane.annotation.freeText.font.name.courierBoldOblique=Courier-BoldOblique
viewer.utilityPane.annotation.freeText.font.name.courierOblique=Courier-Oblique
viewer.utilityPane.annotation.freeText.font.name.helvetica=Helvetica
viewer.utilityPane.annotation.freeText.font.name.helveticaBold=Helvetica-Bold
viewer.utilityPane.annotation.freeText.font.name.helveticaOblique=Helvetica-Oblique
viewer.utilityPane.annotation.freeText.font.name.timesBold=Times-Bold
viewer.utilityPane.annotation.freeText.font.name.timesBoldItalic=Times-BoldItalic
viewer.utilityPane.annotation.freeText.font.name.timesItalic=Times-Italic
viewer.utilityPane.annotation.freeText.font.name.timesRoman=Times-Roman
viewer.utilityPane.annotation.freeText.font.sanSerif=SansSerif
viewer.utilityPane.annotation.freeText.font.serif=Serif
viewer.utilityPane.annotation.freeText.font.size=\u30d5\u30a9\u30f3\u30c8\u30b5\u30a4\u30ba\uff1a
viewer.utilityPane.annotation.freeText.font.style=\u30d5\u30a9\u30f3\u30c8\u30b9\u30bf\u30a4\u30eb\uff1a
viewer.utilityPane.annotation.freeText.font.style.bold=Bold
viewer.utilityPane.annotation.freeText.font.style.italic=Italic
viewer.utilityPane.annotation.freeText.font.style.plain=Plain
viewer.utilityPane.annotation.freeText.transparencyLabel=\u900f\u660e\u5ea6\uff1a
viewer.utilityPane.annotation.ink.appearance.title=\u30a4\u30f3\u30af\u6ce8\u91c8
viewer.utilityPane.annotation.ink.colorBorderChooserTitle=\u30a4\u30f3\u30af\u8272
viewer.utilityPane.annotation.ink.colorBorderLabel=\u30a4\u30f3\u30af\u8272\uff1a
viewer.utilityPane.annotation.ink.lineStyle=\u30a4\u30f3\u30af\u30b9\u30bf\u30a4\u30eb\uff1a
viewer.utilityPane.annotation.ink.lineThickness=\u30a4\u30f3\u30af\u5e45\uff1a
viewer.utilityPane.annotation.ink.transparencyLabel=\u900f\u660e\u5ea6\uff1a
viewer.utilityPane.annotation.line.appearance.title=\u30e9\u30a4\u30f3\u6ce8\u91c8
viewer.utilityPane.annotation.line.colorChooserTitle=\u30e9\u30a4\u30f3\u8272
viewer.utilityPane.annotation.line.colorInternalChooserTitle=\u7dda\u306e\u5185\u90e8\u8272
viewer.utilityPane.annotation.line.colorInternalLabel=\u5857\u308a\u3064\u3076\u3057\u306e\u8272\uff1a
viewer.utilityPane.annotation.line.colorLabel=\u8272\uff1a
viewer.utilityPane.annotation.line.end.circle=\u4e38
viewer.utilityPane.annotation.line.end.closedArrow=\u9589\u77e2\u5370
viewer.utilityPane.annotation.line.end.diamond=\u30c0\u30a4\u30e4\u30e2\u30f3\u30c9
viewer.utilityPane.annotation.line.end.none=\u306a\u3057
viewer.utilityPane.annotation.line.end.openArrow=\u958b\u77e2\u5370
viewer.utilityPane.annotation.line.end.square=\u56db\u89d2
viewer.utilityPane.annotation.line.endStyle=\u7d42\u4e86\uff1a
viewer.utilityPane.annotation.line.lineStyle=\u7dda\u306e\u30b9\u30bf\u30a4\u30eb\uff1a
viewer.utilityPane.annotation.line.lineThickness=\u7dda\u5e45\uff1a
viewer.utilityPane.annotation.line.startStyle=\u958b\u59cb\uff1a
viewer.utilityPane.annotation.line.transparencyLabel=\u900f\u660e\u5ea6\uff1a
viewer.utilityPane.annotation.link.appearance.title=\u30ea\u30f3\u30af\u6ce8\u91c8
viewer.utilityPane.annotation.link.highlightType=\u30cf\u30a4\u30e9\u30a4\u30c8\u30fb\u30b9\u30bf\u30a4\u30eb\uff1a
viewer.utilityPane.annotation.link.invert=\u53cd\u8ee2 `
viewer.utilityPane.annotation.link.none=\u306a\u3057
viewer.utilityPane.annotation.link.outline=\u30a2\u30a6\u30c8\u30e9\u30a4\u30f3
viewer.utilityPane.annotation.link.push=\u62bc\u3059
viewer.utilityPane.annotation.square.appearance.title=\u6b63\u65b9\u5f62\u6ce8\u91c8
viewer.utilityPane.annotation.square.borderTypeLabel=\u67a0\u30bf\u30a4\u30d7\uff1a
viewer.utilityPane.annotation.square.colorBorderChooserTitle=\u67a0\u8272
viewer.utilityPane.annotation.square.colorBorderLabel=\u67a0\u8272\uff1a
viewer.utilityPane.annotation.square.colorInteriorChooserTitle=\u5857\u308a\u3064\u3076\u3057\u306e\u8272
viewer.utilityPane.annotation.square.colorInteriorLabel=\u5857\u308a\u3064\u3076\u3057\u8272\uff1a
viewer.utilityPane.annotation.square.fillTypeLabel=\u5857\u308a\u3064\u3076\u3057\u30bf\u30a4\u30d7\uff1a
viewer.utilityPane.annotation.square.lineStyle=\u67a0\u30b9\u30bf\u30a4\u30eb\uff1a
viewer.utilityPane.annotation.square.lineThickness=\u67a0\u5e45\uff1a
viewer.utilityPane.annotation.square.transparencyLabel=\u900f\u660e\u5ea6\uff1a
viewer.utilityPane.annotation.tab.title=\u6ce8\u91c8
viewer.utilityPane.annotation.text.appearance.title=\u30c6\u30ad\u30b9\u30c8\u6ce8\u91c8
viewer.utilityPane.annotation.text.iconName=\u30a2\u30a4\u30b3\u30f3\uff1a
viewer.utilityPane.annotation.text.iconName.check=\u30c1\u30a7\u30c3\u30af
viewer.utilityPane.annotation.text.iconName.checkMark=\u30c1\u30a7\u30c3\u30af\u30de\u30fc\u30af
viewer.utilityPane.annotation.text.iconName.circle=\u4e38
viewer.utilityPane.annotation.text.iconName.comment=\u30b3\u30e1\u30f3\u30c8
viewer.utilityPane.annotation.text.iconName.cross=\u5341\u5b57
viewer.utilityPane.annotation.text.iconName.crossHairs=\u5341\u5b57\u7dda
viewer.utilityPane.annotation.text.iconName.help=\u30d8\u30eb\u30d7
viewer.utilityPane.annotation.text.iconName.insert=\u5dee\u5165\u308c
viewer.utilityPane.annotation.text.iconName.key=\u30ad\u30fc
viewer.utilityPane.annotation.text.iconName.newParagraph=\u65b0\u6bb5\u843d
viewer.utilityPane.annotation.text.iconName.paragraph=\u6bb5\u843d
viewer.utilityPane.annotation.text.iconName.rightArrow=\u53f3\u77e2\u5370
viewer.utilityPane.annotation.text.iconName.rightPointer=\u53f3\u30dd\u30a4\u30f3\u30bf\u30fc
viewer.utilityPane.annotation.text.iconName.star=\u661f
viewer.utilityPane.annotation.text.iconName.upArrow=\u4e0a\u77e2\u5370
viewer.utilityPane.annotation.text.iconName.upLeftArrow=\u5de6\u4e0a\u77e2\u5370
viewer.utilityPane.annotation.textMarkup.appearance.title=\u30c6\u30ad\u30b9\u30c8\u30de\u30fc\u30af\u30a2\u30c3\u30d7\u6ce8\u91c8
viewer.utilityPane.annotation.textMarkup.colorChooserTitle=\u30de\u30fc\u30af\u30a2\u30c3\u30d7\u8272
viewer.utilityPane.annotation.textMarkup.colorLabel=\u8272\uff1a
viewer.utilityPane.annotation.textMarkup.highlightType=\u7a2e\u985e\uff1a
viewer.utilityPane.annotation.textMarkup.transparencyLabel=\u900f\u660e\u5ea6\uff1a
viewer.utilityPane.attachments.column.compressedSize.title=\u5727\u7e2e\u30b5\u30a4\u30ba
viewer.utilityPane.attachments.column.description.title=\u8aac\u660e
viewer.utilityPane.attachments.column.fileName.title=\u540d\u524d
viewer.utilityPane.attachments.column.size.title=\u30b5\u30a4\u30ba
viewer.utilityPane.attachments.menu.saveAs.label=\u540d\u524d\u3092\u4ed8\u3051\u3066\u4fdd\u5b58\u2026
viewer.utilityPane.attachments.saveAs.replace.msg=\u30d5\u30a1\u30a4\u30eb{0}\u30d5\u30a1\u30a4\u30eb\u306f\u65e2\u306b\u5b58\u5728\u3057\u307e\u3059\u3002 \u66f8\u304d\u63db\u3048\u307e\u3059\u304b\uff1f
viewer.utilityPane.attachments.saveAs.replace.title=ICEsoft ICEpdf-\u4fdd\u5b58\u30a8\u30e9\u30fc
viewer.utilityPane.attachments.tab.title=\u30a2\u30bf\u30c3\u30c1\u30e1\u30f3\u30c8
viewer.utilityPane.bookmarks.tab.title=\u30d6\u30c3\u30af\u30de\u30fc\u30af
viewer.utilityPane.layers.tab.title=\u30ec\u30a4\u30e4\u30fc
viewer.utilityPane.search.caseSenstiveCheckbox.label=\u5927\u30fb\u5c0f\u6587\u5b57\u3092\u533a\u5225
viewer.utilityPane.search.clearSearchButton.label=\u7a7a\u767d
viewer.utilityPane.search.cumlitiveCheckbox.label=\u7d2f\u8a08
viewer.utilityPane.search.progress.moreMatch.msg={2}\u4ef6\u4e00\u81f4
viewer.utilityPane.search.progress.morePage.msg=\u30da\u30fc\u30b8
viewer.utilityPane.search.progress.msg=\u691c\u7d22{0} {1}\uff08{2}\uff09
viewer.utilityPane.search.progress.oneMatch.msg={2}\u4e00\u81f4
viewer.utilityPane.search.progress.onePage.msg=\u30da\u30fc\u30b8
viewer.utilityPane.search.result.moreFile.msg={2}\u4ef6\u306e\u7d50\u679c
viewer.utilityPane.search.result.msg={0}\u30da\u30fc\u30b8\uff08{1}\uff09
viewer.utilityPane.search.result.oneFile.msg={2}\u7d50\u679c
viewer.utilityPane.search.results.label=\u7d50\u679c\uff1a
viewer.utilityPane.search.searchButton.label=\u691c\u7d22
viewer.utilityPane.search.searchText.label=\u691c\u7d22\u30c6\u30ad\u30b9\u30c8\uff1a
viewer.utilityPane.search.searching.msg=\u691c\u7d22\u2026
viewer.utilityPane.search.searching1.moreFile.msg={2}\u30da\u30fc\u30b8
viewer.utilityPane.search.searching1.msg={1}\u4e2d{0}\u3092\u691c\u7d22
viewer.utilityPane.search.searching1.oneFile.msg={2}\u30da\u30fc\u30b8
viewer.utilityPane.search.showPagesCheckbox.label=\u30da\u30fc\u30b8\u3092\u8868\u793a
viewer.utilityPane.search.stopButton.label=\u505c\u6b62
viewer.utilityPane.search.tab.title=\u691c\u7d22
viewer.utilityPane.search.wholeWordCheckbox.label=\u5168\u6587\u306e\u307f
viewer.utilityPane.signatures.cert.dialog.closeButton.label=\u9589\u3058\u308b
viewer.utilityPane.signatures.cert.dialog.closeButton.mnemonic=C
viewer.utilityPane.signatures.cert.dialog.info.certificateInfo.label={0} - {1}
viewer.utilityPane.signatures.cert.dialog.info.column1.label=\u30d5\u30a3\u30fc\u30eb\u30c9
viewer.utilityPane.signatures.cert.dialog.info.column2.label=\u5024
viewer.utilityPane.signatures.cert.dialog.info.issuer.label=\u767a\u884c\u8005
viewer.utilityPane.signatures.cert.dialog.info.issuer.value=\u7d44\u7e54\uff1a{0}\n\u90e8\u9580\uff1a{1}\n\u4e00\u822c\u540d\uff1a{2}\n\u30ed\u30fc\u30ab\u30eb\uff1a{3}\n\u5dde\uff1a{4}\n\u56fd\uff1a{5}\n\u30e1\u30fc\u30eb\uff1a{6}
viewer.utilityPane.signatures.cert.dialog.info.md5.label=MD5\u30d5\u30a3\u30f3\u30ac\u30fc\u30d7\u30ea\u30f3\u30c8
viewer.utilityPane.signatures.cert.dialog.info.md5.value={0}
viewer.utilityPane.signatures.cert.dialog.info.notAvailable.label=\u5229\u7528\u4e0d\u53ef
viewer.utilityPane.signatures.cert.dialog.info.serialNumber.label=\u30b7\u30ea\u30a2\u30eb\u756a\u53f7
viewer.utilityPane.signatures.cert.dialog.info.serialNumber.value={0}
viewer.utilityPane.signatures.cert.dialog.info.sha1.label=SHA1\u30d5\u30a3\u30f3\u30ac\u30fc\u30d7\u30ea\u30f3\u30c8
viewer.utilityPane.signatures.cert.dialog.info.sha1.value={0}
viewer.utilityPane.signatures.cert.dialog.info.signature.label=\u7f72\u540d
viewer.utilityPane.signatures.cert.dialog.info.signatureAlgorithm.label=\u7f72\u540d\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0
viewer.utilityPane.signatures.cert.dialog.info.signatureAlgorithm.value={0}
viewer.utilityPane.signatures.cert.dialog.info.subject.label=\u4ef6\u540d
viewer.utilityPane.signatures.cert.dialog.info.subject.value=\u7d44\u7e54\uff1a{0}\n\u90e8\u9580\uff1a{1}\n\u4e00\u822c\u540d\uff1a{2}\n\u30ed\u30fc\u30ab\u30eb\uff1a{3}\n\u5dde\uff1a{4}\n\u56fd\uff1a{5}\n\u30e1\u30fc\u30eb\uff1a{6}
viewer.utilityPane.signatures.cert.dialog.info.unknownIssuer.label=\u767a\u884c\u8005\u4e0d\u660e
viewer.utilityPane.signatures.cert.dialog.info.unknownSubject.label=\u8a72\u5f53\u306a\u3057
viewer.utilityPane.signatures.cert.dialog.info.validity.label=\u6709\u52b9
viewer.utilityPane.signatures.cert.dialog.info.validity.value=\u5dee\u51fa\uff1a{0}\n\u5b9b\u5148\uff1a{1}
viewer.utilityPane.signatures.cert.dialog.info.version.label=\u30d0\u30fc\u30b8\u30e7\u30f3
viewer.utilityPane.signatures.cert.dialog.info.version.value=v{0}
viewer.utilityPane.signatures.cert.dialog.title=\u8a3c\u660e\u66f8\u306e\u8a73\u7d30
viewer.utilityPane.signatures.tab.certTree.cert.invalid.label=\u7f72\u540d\u304c\u7121\u52b9\u3067\u3059\uff1a
viewer.utilityPane.signatures.tab.certTree.cert.unknown.label=\u7f72\u540d\u306f\u6709\u52b9\u3067\u3059\uff1a
viewer.utilityPane.signatures.tab.certTree.cert.valid.label=\u7f72\u540d\u306e\u6709\u52b9\u6027\u306f\u4e0d\u660e\u3067\u3059\uff1a
viewer.utilityPane.signatures.tab.certTree.doc.major.label=\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306f\u7f72\u540d\u5f8c\u306b\u5909\u66f4\u307e\u305f\u306f\u7834\u640d\u3057\u3066\u3044\u307e\u3059
viewer.utilityPane.signatures.tab.certTree.doc.modified.label=\u3053\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u306f\u5909\u66f4\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u304c\u3001\u5909\u66f4\u304c\u52a0\u3048\u3089\u308c\u3066\u3044\u307e\u3059
viewer.utilityPane.signatures.tab.certTree.doc.unmodified.label=\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306f\u7f72\u540d\u3055\u308c\u3066\u304b\u3089\u5909\u66f4\u3055\u308c\u3066\u3044\u307e\u305b\u3093
viewer.utilityPane.signatures.tab.certTree.error.label=\u7f72\u540d\u7121\u3057\u7f72\u540d\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u7f72\u540d\u8005\u8a3c\u660e\u66f8\u3092\u691c\u8a3c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f{0} {1}
viewer.utilityPane.signatures.tab.certTree.rootSigned.label={0} {1}\u306b\u3088\u308b\u7f72\u540d
viewer.utilityPane.signatures.tab.certTree.rootValidating.label=\u7f72\u540d\u306e\u691c\u8a3c{0} {1}
viewer.utilityPane.signatures.tab.certTree.signature.details.full.label=\u8a3c\u660e\u66f8\u306e\u8a73\u7d30\u2026
viewer.utilityPane.signatures.tab.certTree.signature.details.label=\u7f72\u540d\u306e\u8a73\u7d30
viewer.utilityPane.signatures.tab.certTree.signature.details.location.label=\u5834\u6240\uff1a{0}
viewer.utilityPane.signatures.tab.certTree.signature.details.reason.label=\u7406\u7531\uff1a{0}
viewer.utilityPane.signatures.tab.certTree.signature.identity.unchecked.label=\u7f72\u540d\u306f\u6709\u52b9\u3067\u3059\u304c\u3001\u7f72\u540d\u8005\u306eID\u306e\u53d6\u308a\u6d88\u3057\u3092\u78ba\u8a8d\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
viewer.utilityPane.signatures.tab.certTree.signature.identity.unknown.label=keystore\u306b\u898b\u3064\u304b\u3089\u306a\u304b\u3063\u305f\u305f\u3081\u3001\u7f72\u540d\u8005\u306eID\u306f\u4e0d\u660e\u3067\u3059
viewer.utilityPane.signatures.tab.certTree.signature.identity.valid.label=\u7f72\u540d\u8005\u306eID\u306f\u6709\u52b9\u3067\u3059
viewer.utilityPane.signatures.tab.certTree.signature.lastChecked.label=\u6700\u7d42\u78ba\u8a8d\u65e5\uff1a{0}
viewer.utilityPane.signatures.tab.certTree.signature.time.embedded.label=\u7f72\u540d\u306b\u306f\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u304c\u57cb\u3081\u8fbc\u307e\u308c\u3066\u3044\u307e\u3057\u305f\u304c\u3001\u691c\u8a3c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
viewer.utilityPane.signatures.tab.certTree.signature.time.local.label=\u7f72\u540d\u6642\u523b\u306f\u3053\u306e\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u30fc\u306e\u6642\u8a08\u304b\u3089\u3067\u3059
viewer.utilityPane.signatures.tab.certTree.unsigned.label=\u7a7a\u767d\u306e\u7f72\u540d\u30d5\u30a3\u30fc\u30eb\u30c9
viewer.utilityPane.signatures.tab.title=\u7f72\u540d
viewer.utilityPane.signatures.verify.completeMessage.label=\u691c\u8a3c\u30d7\u30ed\u30bb\u30b9\u304c\u5b8c\u4e86\u3057\u307e\u3057\u305f
viewer.utilityPane.signatures.verify.initializingMessage.label={1}\u500b\u4e2d{0}\u500b\u306e\u7f72\u540d\u3092\u691c\u8a3c\u3057\u3066\u3044\u307e\u3059
viewer.utilityPane.signatures.verify.validating.label=\u7f72\u540d\u3092\u691c\u8a3c\u3057\u3066\u3044\u307e\u3059...
viewer.utilityPane.thumbs.tab.title=\u30b5\u30e0\u30cd\u30a4\u30eb
viewer.window.title.default=ICEpdf\u30d3\u30e5\u30fc\u30a2
viewer.window.title.open.default=ICEpdf\u30d3\u30e5\u30fc\u30a2-[{0}]

View File

@ -1,7 +1,7 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2011-2019 Basis Technology Corp.
* Copyright 2018-2020 Basis Technology Corp.
* Contact: carrier <at> sleuthkit <dot> org
*
* Licensed under the Apache License, Version 2.0 (the "License");
@ -97,68 +97,64 @@ import org.sleuthkit.datamodel.TskCoreException;
* Image viewer part of the Media View layered pane. Uses JavaFX to display the
* image.
*/
@NbBundle.Messages({"MediaViewImagePanel.externalViewerButton.text=Open in External Viewer Ctrl+E",
@NbBundle.Messages({
"MediaViewImagePanel.externalViewerButton.text=Open in External Viewer Ctrl+E",
"MediaViewImagePanel.errorLabel.text=Could not load file into Media View.",
"MediaViewImagePanel.errorLabel.OOMText=Could not load file into Media View: insufficent memory."})
"MediaViewImagePanel.errorLabel.OOMText=Could not load file into Media View: insufficent memory."
})
@SuppressWarnings("PMD.SingularField") // UI widgets cause lots of false positives
class MediaViewImagePanel extends JPanel implements MediaFileViewer.MediaViewPanel {
private static final Image EXTERNAL = new Image(MediaViewImagePanel.class.getResource("/org/sleuthkit/autopsy/images/external.png").toExternalForm());
private final static Logger LOGGER = Logger.getLogger(MediaViewImagePanel.class.getName());
private static final long serialVersionUID = 1L;
private static final Logger logger = Logger.getLogger(MediaViewImagePanel.class.getName());
private static final double[] ZOOM_STEPS = {
0.0625, 0.125, 0.25, 0.375, 0.5, 0.75,
1, 1.5, 2, 2.5, 3, 4, 5, 6, 8, 10};
private static final double MIN_ZOOM_RATIO = 0.0625; // 6.25%
private static final double MAX_ZOOM_RATIO = 10.0; // 1000%
private static final Image externalImage = new Image(MediaViewImagePanel.class.getResource("/org/sleuthkit/autopsy/images/external.png").toExternalForm());
private static final SortedSet<String> supportedMimes = ImageUtils.getSupportedImageMimeTypes();
private static final List<String> supportedExtensions = ImageUtils.getSupportedImageExtensions().stream()
.map("."::concat) //NOI18N
.collect(Collectors.toList());
private final boolean fxInited;
private JFXPanel fxPanel;
private AbstractFile file;
/*
* JFX components
*/
private final ProgressBar progressBar = new ProgressBar();
private final MaskerPane maskerPane = new MaskerPane();
private Group masterGroup;
private ImageTagsGroup tagsGroup;
private ImageTagCreator imageTagCreator;
private ImageView fxImageView;
private ScrollPane scrollPane;
private final ProgressBar progressBar = new ProgressBar();
private final MaskerPane maskerPane = new MaskerPane();
private Task<Image> readImageTask;
/*
* Swing components
*/
private final JPopupMenu imageTaggingOptions = new JPopupMenu();
private final JMenuItem createTagMenuItem;
private final JMenuItem deleteTagMenuItem;
private final JMenuItem hideTagsMenuItem;
private final JMenuItem exportTagsMenuItem;
private final JFileChooser exportChooser;
private final PropertyChangeSupport pcs = new PropertyChangeSupport(this);
private JFXPanel fxPanel;
/*
* State
*/
private final boolean fxInited;
private double zoomRatio;
private double rotation; // Can be 0, 90, 180, and 270.
private boolean autoResize = true; // Auto resize when the user changes the size
// of the content viewer unless the user has used the zoom buttons.
private static final double[] ZOOM_STEPS = {
0.0625, 0.125, 0.25, 0.375, 0.5, 0.75,
1, 1.5, 2, 2.5, 3, 4, 5, 6, 8, 10};
private static final double MIN_ZOOM_RATIO = 0.0625; // 6.25%
private static final double MAX_ZOOM_RATIO = 10.0; // 1000%
private boolean autoResize = true; // Auto resize when the user changes the size of the content viewer unless the user has used the zoom buttons.
private AbstractFile file;
static {
ImageIO.scanForPlugins();
}
/**
* mime types we should be able to display. if the mimetype is unknown we
* will fall back on extension and jpg/png header
*/
static private final SortedSet<String> supportedMimes = ImageUtils.getSupportedImageMimeTypes();
/**
* extensions we should be able to display
*/
static private final List<String> supportedExtensions = ImageUtils.getSupportedImageExtensions().stream()
.map("."::concat) //NOI18N
.collect(Collectors.toList());
private Task<Image> readImageTask;
/**
* Creates new form MediaViewImagePanel
*/
@ -168,7 +164,7 @@ class MediaViewImagePanel extends JPanel implements MediaFileViewer.MediaViewPan
"MediaViewImagePanel.hideTagOption=Hide",
"MediaViewImagePanel.exportTagOption=Export"
})
public MediaViewImagePanel() {
MediaViewImagePanel() {
initComponents();
fxInited = org.sleuthkit.autopsy.core.Installer.isJavaFxInited();
@ -354,14 +350,13 @@ class MediaViewImagePanel extends JPanel implements MediaFileViewer.MediaViewPan
}
private void showErrorNode(String errorMessage, AbstractFile file) {
final Button externalViewerButton = new Button(Bundle.MediaViewImagePanel_externalViewerButton_text(), new ImageView(EXTERNAL));
externalViewerButton.setOnAction(actionEvent
-> //fx ActionEvent
final Button externalViewerButton = new Button(Bundle.MediaViewImagePanel_externalViewerButton_text(), new ImageView(externalImage));
/*
* TODO: why is the name passed into the action constructor? it
* means we duplicate this string all over the place -jm
*/ new ExternalViewerAction(Bundle.MediaViewImagePanel_externalViewerButton_text(), new FileNode(file))
.actionPerformed(new ActionEvent(this, ActionEvent.ACTION_PERFORMED, "")) //Swing ActionEvent
* Tie a Swing action (ExternalViewerAction) to a JFX button action.
*/
externalViewerButton.setOnAction(actionEvent ->
new ExternalViewerAction(Bundle.MediaViewImagePanel_externalViewerButton_text(), new FileNode(file))
.actionPerformed(new ActionEvent(this, ActionEvent.ACTION_PERFORMED, ""))
);
final VBox errorNode = new VBox(10, new Label(errorMessage), externalViewerButton);
@ -420,7 +415,7 @@ class MediaViewImagePanel extends JPanel implements MediaFileViewer.MediaViewPan
"state", null, State.NONEMPTY));
}
} catch (TskCoreException | NoCurrentCaseException ex) {
LOGGER.log(Level.WARNING, "Could not retrieve image tags for file in case db", ex); //NON-NLS
logger.log(Level.WARNING, "Could not retrieve image tags for file in case db", ex); //NON-NLS
}
scrollPane.setContent(masterGroup);
} else {
@ -760,7 +755,7 @@ class MediaViewImagePanel extends JPanel implements MediaFileViewer.MediaViewPan
Case.getCurrentCase().getServices().getTagsManager().deleteContentTag(contentViewerTag.getContentTag());
tagsGroup.getChildren().remove(tagInFocus);
} catch (TskCoreException | NoCurrentCaseException ex) {
LOGGER.log(Level.WARNING, "Could not delete image tag in case db", ex); //NON-NLS
logger.log(Level.WARNING, "Could not delete image tag in case db", ex); //NON-NLS
}
scrollPane.setCursor(Cursor.DEFAULT);
@ -793,7 +788,7 @@ class MediaViewImagePanel extends JPanel implements MediaFileViewer.MediaViewPan
ImageTag imageTag = buildImageTag(contentViewerTag);
tagsGroup.getChildren().add(imageTag);
} catch (TskCoreException | SerializationException | NoCurrentCaseException ex) {
LOGGER.log(Level.WARNING, "Could not save new image tag in case db", ex); //NON-NLS
logger.log(Level.WARNING, "Could not save new image tag in case db", ex); //NON-NLS
}
scrollPane.setCursor(Cursor.DEFAULT);
@ -832,7 +827,7 @@ class MediaViewImagePanel extends JPanel implements MediaFileViewer.MediaViewPan
ImageTagRegion newRegion = (ImageTagRegion) edit.getNewValue();
ContentViewerTagManager.updateTag(contentViewerTag, newRegion);
} catch (SerializationException | TskCoreException | NoCurrentCaseException ex) {
LOGGER.log(Level.WARNING, "Could not save edit for image tag in case db", ex); //NON-NLS
logger.log(Level.WARNING, "Could not save edit for image tag in case db", ex); //NON-NLS
}
scrollPane.setCursor(Cursor.DEFAULT);
});
@ -916,7 +911,7 @@ class MediaViewImagePanel extends JPanel implements MediaFileViewer.MediaViewPan
JOptionPane.showMessageDialog(null, Bundle.MediaViewImagePanel_successfulExport());
} catch (Exception ex) { //Runtime exceptions may spill out of ImageTagsUtil from JavaFX.
//This ensures we (devs and users) have something when it doesn't work.
LOGGER.log(Level.WARNING, "Unable to export tagged image to disk", ex); //NON-NLS
logger.log(Level.WARNING, "Unable to export tagged image to disk", ex); //NON-NLS
JOptionPane.showMessageDialog(null, Bundle.MediaViewImagePanel_unsuccessfulExport());
}
return null;

View File

@ -26,7 +26,7 @@ CallLogArtifactViewer_label_from=From
CallLogArtifactViewer_label_to=To
CallLogArtifactViewer_suffix_local=(Local)
CallLogArtifactViewer_value_unknown=Unknown
#{0} - contact name
# {0} - contact name
CommunicationArtifactViewerHelper_contact_label=Contact: {0}
CommunicationArtifactViewerHelper_contact_label_unknown=Unknown
CommunicationArtifactViewerHelper_menuitem_copy=Copy
@ -54,7 +54,6 @@ ContactArtifactViewer_persona_no_match=No matches found
ContactArtifactViewer_persona_searching=Searching...
ContactArtifactViewer_persona_unknown=Unknown
ContactArtifactViewer_phones_header=Phone
ContactArtifactViewer_plural_suffix=s
DataContentViewerArtifact.failedToGetAttributes.message=Failed to get some or all attributes from case database
DataContentViewerArtifact.failedToGetSourcePath.message=Failed to get source file path from case database
DefaultArtifactContentViewer.attrsTableHeader.sources=Source(s)
@ -62,6 +61,7 @@ DefaultArtifactContentViewer.attrsTableHeader.type=Type
DefaultArtifactContentViewer.attrsTableHeader.value=Value
DefaultArtifactContentViewer.copyMenuItem.text=Copy
DefaultArtifactContentViewer.selectAllMenuItem.text=Select All
MessageAccountPanel.account.justification=Account found in Message artifact
MessageAccountPanel_button_create_label=Create
MessageAccountPanel_button_view_label=View
MessageAccountPanel_contact_label=Contact:
@ -86,5 +86,6 @@ MessageArtifactViewer.subjectLabel.text=Subject:
MessageArtifactViewer.attachmentsPanel.TabConstraints.tabTitle=Attachments
MessageArtifactViewer.ccText.text=cc list goes here
MessageArtifactViewer.textbodyScrollPane.TabConstraints.tabTitle=Text
PersonaAccountFetcher.account.justification=Account found in Call Log artifact
# {0} - Persona count
PersonaDisplayTask_persona_count_suffix=(1 of {0})

View File

@ -1,19 +1,69 @@
DefaultArtifactContentViewer.selectAllMenuItem.text=\u3059\u3079\u3066\u3092\u9078\u629e
#Tue Aug 18 18:09:20 UTC 2020
CallLogArtifactViewer_heading_Source=\u30bd\u30fc\u30b9
CallLogArtifactViewer_heading_metadata=\u30e1\u30bf\u30c7\u30fc\u30bf
CallLogArtifactViewer_heading_others=\u305d\u306e\u4ed6\u306e\u5c5e\u6027
CallLogArtifactViewer_heading_parties=\u96c6\u56e3
CallLogArtifactViewer_label_datasource=\u30c7\u30fc\u30bf\u30fb\u30bd\u30fc\u30b9
CallLogArtifactViewer_label_date=\u65e5\u4ed8
CallLogArtifactViewer_label_direction=\u65b9\u5411
CallLogArtifactViewer_label_duration=\u671f\u9593
CallLogArtifactViewer_label_from=\u5dee\u51fa\u4eba
CallLogArtifactViewer_label_to=\u5b9b\u5148
CallLogArtifactViewer_suffix_local=\uff08\u30ed\u30fc\u30ab\u30eb\uff09
CallLogArtifactViewer_value_unknown=\u4e0d\u660e
CalllogArtifactViewer_cr_disabled_message=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ea\u30dd\u30b8\u30c8\u30ea\u304c\u30da\u30eb\u30bd\u30ca\u3092\u8868\u793a\u3001\u4f5c\u6210\u3001\u7de8\u96c6\u53ef\u80fd\u306b\u3059\u308b\u3002
CommunicationArtifactViewerHelper_menuitem_copy=\u30b3\u30d4\u30fc
CommunicationArtifactViewerHelper_persona_button_create=\u4f5c\u6210
CommunicationArtifactViewerHelper_persona_button_view=\u8868\u793a
CommunicationArtifactViewerHelper_persona_label=\u30da\u30eb\u30bd\u30ca\uff1a
CommunicationArtifactViewerHelper_persona_searching=\u691c\u7d22\u4e2d...
CommunicationArtifactViewerHelper_persona_unknown=\u4e0d\u660e
ContactArtifactViewer_contactname_unknown=\u4e0d\u660e
ContactArtifactViewer_cr_disabled_message=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ea\u30dd\u30b8\u30c8\u30ea\u304c\u30da\u30eb\u30bd\u30ca\u3092\u8868\u793a\u3001\u4f5c\u6210\u3001\u7de8\u96c6\u53ef\u80fd\u306b\u3059\u308b\u3002
ContactArtifactViewer_emails_header=\u30e1\u30fc\u30eb
ContactArtifactViewer_found_all_accounts_label=\u5168\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f\u3002
ContactArtifactViewer_heading_Source=\u30bd\u30fc\u30b9
ContactArtifactViewer_label_datasource=\u30c7\u30fc\u30bf\u30fb\u30bd\u30fc\u30b9
ContactArtifactViewer_missing_account_label=\u9023\u7d61\u5148\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u3042\u308a\u307e\u305b\u3093
ContactArtifactViewer_others_header=\u305d\u306e\u4ed6
ContactArtifactViewer_persona_account_justification=\u9023\u7d61\u5148\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u306b\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f
ContactArtifactViewer_persona_button_new=\u4f5c\u6210
ContactArtifactViewer_persona_button_view=\u8868\u793a
ContactArtifactViewer_persona_header=\u30da\u30eb\u30bd\u30ca
ContactArtifactViewer_persona_label=\u30da\u30eb\u30bd\u30ca
ContactArtifactViewer_persona_match_num=\u4e00\u81f4
ContactArtifactViewer_persona_no_match=\u4e00\u81f4\u3059\u308b\u3082\u306e\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002
ContactArtifactViewer_persona_searching=\u691c\u7d22\u4e2d...
ContactArtifactViewer_persona_unknown=\u4e0d\u660e
ContactArtifactViewer_phones_header=\u96fb\u8a71
DataContentViewerArtifact.failedToGetAttributes.message=\u30b1\u30fc\u30b9\u30fb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304b\u3089\u5c5e\u6027\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
DataContentViewerArtifact.failedToGetSourcePath.message=\u30b1\u30fc\u30b9\u30fb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304b\u3089\u306e\u30bd\u30fc\u30b9\u30fb\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9\u306e\u53d6\u5f97\u306b\u5931\u6557\u3057\u307e\u3057\u305f
DefaultArtifactContentViewer.attrsTableHeader.sources=\u30bd\u30fc\u30b9
DefaultArtifactContentViewer.attrsTableHeader.type=\u30bf\u30a4\u30d7
DefaultArtifactContentViewer.attrsTableHeader.value=\u5024
DefaultArtifactContentViewer.copyMenuItem.text=\u30b3\u30d4\u30fc
MessageArtifactViewer.rtfbodyScrollPane.TabConstraints.tabTitle=RTF
MessageArtifactViewer.toText.text=\u5b9b\u5148\u306eTO\u30ea\u30b9\u30c8\u3092\u3053\u3053\u306b\u8868\u793a
MessageArtifactViewer.toLabel.text=\u5b9b\u5148:
MessageArtifactViewer.htmlPane.TabConstraints.tabTitle=HTML
MessageArtifactViewer.fromText.text=\u9001\u4fe1\u5143\u30a2\u30c9\u30ec\u30b9\u3092\u3053\u3053\u306b\u8868\u793a
MessageArtifactViewer.datetimeText.text=\u65e5\u4ed8\u3092\u3053\u3053\u306b\u8868\u793a
DefaultArtifactContentViewer.selectAllMenuItem.text=\u3059\u3079\u3066\u9078\u629e
MessageAccountPanel_button_create_label=\u4f5c\u6210
MessageAccountPanel_button_view_label=\u8868\u793a
MessageAccountPanel_no_matches=\u4e00\u81f4\u3059\u308b\u3082\u306e\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002
MessageAccountPanel_persona_label=\u30da\u30eb\u30bd\u30ca\uff1a
MessageAccountPanel_unknown_label=\u4e0d\u660e
MessageArtifactViewer.AttachmentPanel.title=\u4ed8\u5c5e\u54c1
MessageArtifactViewer.accountsTab.TabConstraints.tabTitle=\u30a2\u30ab\u30a6\u30f3\u30c8
MessageArtifactViewer.attachmentsPanel.TabConstraints.tabTitle=\u4ed8\u5c5e\u54c1
MessageArtifactViewer.ccLabel.text=CC\:
MessageArtifactViewer.ccText.text=cc\u30ea\u30b9\u30c8\u306f\u3053\u3053\u306b
MessageArtifactViewer.datetimeText.text=\u3053\u3053\u306b\u65e5\u4ed8\u3092\u8a18\u5165
MessageArtifactViewer.directionText.text=\u65b9\u5411
MessageArtifactViewer.fromLabel.text=\u5dee\u51fa\u4eba\uff1a
MessageArtifactViewer.fromText.text=\u5dee\u51fa\u4eba\u30a2\u30c9\u30ec\u30b9\u306f\u3053\u3053\u306b
MessageArtifactViewer.headersScrollPane.TabConstraints.tabTitle=\u30d8\u30c3\u30c0\u30fc
MessageArtifactViewer.fromLabel.text=\u5dee\u51fa\u4eba:
MessageArtifactViewer.directionText.text=\u9001\u53d7\u4fe1\u306e\u7a2e\u5225
MessageArtifactViewer.subjectText.text=\u4ef6\u540d\u3092\u3053\u3053\u306b\u8868\u793a
MessageArtifactViewer.htmlPane.TabConstraints.tabTitle=HTML
MessageArtifactViewer.rtfbodyScrollPane.TabConstraints.tabTitle=RTF
MessageArtifactViewer.subjectLabel.text=\u4ef6\u540d\uff1a
MessageArtifactViewer.subjectText.text=\u3053\u3053\u306b\u5065\u540d\u3092\u8a18\u5165
MessageArtifactViewer.textbodyScrollPane.TabConstraints.tabTitle=\u30c6\u30ad\u30b9\u30c8
MessageArtifactViewer.toLabel.text=\u5b9b\u5148\uff1a
MessageArtifactViewer.toText.text=\u3053\u3053\u306b\u5b9b\u5148\u30ea\u30b9\u30c8\u3092\u8a18\u5165
MessageArtifactViewer.viewInNewWindowButton.text=\u65b0\u3057\u3044\u30a6\u30a3\u30f3\u30c9\u30a6\u3067\u8868\u793a
MessageArtifactViewer.subjectLabel.text=\u4ef6\u540d:
MessageArtifactViewer.attachmentsPanel.TabConstraints.tabTitle=\u6dfb\u4ed8\u30d5\u30a1\u30a4\u30eb
MessageArtifactViewer.ccText.text=\u5b9b\u5148\u306eCC\u30ea\u30b9\u30c8\u3092\u3053\u3053\u306b\u8868\u793a
MessageArtifactViewer.ccLabel.text=CC:
PersonaDisplayTask_persona_count_suffix=\uff081/{0}\uff09

View File

@ -171,8 +171,7 @@ public class CallLogArtifactViewer extends javax.swing.JPanel implements Artifac
fromAccountAttr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PHONE_NUMBER_FROM));
localAccountAttr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PHONE_NUMBER_FROM));
}
}
} else {
// if direction isn't known, check all the usual attributes that may have the number/address
// in the absence of sufficent data, any number available will be displayed as a From address.
if (fromAccountAttr == null) {
@ -183,6 +182,7 @@ public class CallLogArtifactViewer extends javax.swing.JPanel implements Artifac
artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_ID))
);
}
}
// get the from account address
if (fromAccountAttr != null) {
@ -312,10 +312,10 @@ public class CallLogArtifactViewer extends javax.swing.JPanel implements Artifac
CommunicationArtifactViewerHelper.addHeader(this, m_gridBagLayout, this.m_constraints, Bundle.CallLogArtifactViewer_heading_parties());
List<AccountPersonaSearcherData> dataList = new ArrayList<>();
// Display From address
// Display "From" if we have non-local device accounts
if (callLogViewData.getFromAccount() != null) {
CommunicationArtifactViewerHelper.addKey(this, m_gridBagLayout, this.m_constraints, Bundle.CallLogArtifactViewer_label_from());
if (callLogViewData.getFromAccount() != null) {
// check if this is local account
String accountDisplayString = getAccountDisplayString(callLogViewData.getFromAccount(), callLogViewData);
CommunicationArtifactViewerHelper.addValue(this, m_gridBagLayout, this.m_constraints, accountDisplayString);
@ -327,13 +327,11 @@ public class CallLogArtifactViewer extends javax.swing.JPanel implements Artifac
// show persona
dataList.addAll(CommunicationArtifactViewerHelper.addPersonaRow(this, m_gridBagLayout, this.m_constraints, callLogViewData.getFromAccount()));
} else {
CommunicationArtifactViewerHelper.addValue(this, m_gridBagLayout, this.m_constraints, Bundle.CallLogArtifactViewer_value_unknown());
}
// Display To:
CommunicationArtifactViewerHelper.addKey(this, m_gridBagLayout, this.m_constraints, Bundle.CallLogArtifactViewer_label_to());
// Display "To" if we have non-local device accounts
if (callLogViewData.getToAccount() != null) {
CommunicationArtifactViewerHelper.addKey(this, m_gridBagLayout, this.m_constraints, Bundle.CallLogArtifactViewer_label_to());
String accountDisplayString = getAccountDisplayString(callLogViewData.getToAccount(), callLogViewData);
CommunicationArtifactViewerHelper.addValue(this, m_gridBagLayout, this.m_constraints, accountDisplayString);
@ -344,8 +342,6 @@ public class CallLogArtifactViewer extends javax.swing.JPanel implements Artifac
dataList.addAll(CommunicationArtifactViewerHelper.addPersonaRow(this, m_gridBagLayout, this.m_constraints, callLogViewData.getToAccount()));
} else {
CommunicationArtifactViewerHelper.addValue(this, m_gridBagLayout, this.m_constraints, Bundle.CallLogArtifactViewer_value_unknown());
}
// Display other parties

View File

@ -440,7 +440,7 @@ final class CommunicationArtifactViewerHelper {
* @return A JLabel with the contact information.
*/
@NbBundle.Messages({
"#{0} - contact name",
"# {0} - contact name",
"CommunicationArtifactViewerHelper_contact_label=Contact: {0}",
"CommunicationArtifactViewerHelper_contact_label_unknown=Unknown"
})

View File

@ -293,8 +293,6 @@ public class ContactArtifactViewer extends javax.swing.JPanel implements Artifac
* @param contactPanelConstraints Layout constraints.
*
*/
@NbBundle.Messages({
"ContactArtifactViewer_plural_suffix=s",})
private void updateContactMethodSection(List<BlackboardAttribute> sectionAttributesList, String sectionHeader, GridBagLayout contactPanelLayout, GridBagConstraints contactPanelConstraints) {
// If there are no attributes for this section, do nothing
@ -302,11 +300,7 @@ public class ContactArtifactViewer extends javax.swing.JPanel implements Artifac
return;
}
String sectionHeaderString = sectionHeader;
if (sectionAttributesList.size() > 1) {
sectionHeaderString = sectionHeaderString.concat(Bundle.ContactArtifactViewer_plural_suffix());
}
CommunicationArtifactViewerHelper.addHeader(this, contactPanelLayout, contactPanelConstraints, sectionHeaderString);
CommunicationArtifactViewerHelper.addHeader(this, contactPanelLayout, contactPanelConstraints, sectionHeader);
for (BlackboardAttribute bba : sectionAttributesList) {
CommunicationArtifactViewerHelper.addKey(this, contactPanelLayout, contactPanelConstraints, bba.getAttributeType().getDisplayName());
CommunicationArtifactViewerHelper.addValue(this, contactPanelLayout, contactPanelConstraints, bba.getDisplayString());

View File

@ -36,8 +36,11 @@ import javax.swing.JPanel;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.SwingUtilities;
import javax.swing.SwingWorker;
import org.openide.util.NbBundle;
import org.openide.util.NbBundle.Messages;
import org.sleuthkit.autopsy.casemodule.Case;
import org.sleuthkit.autopsy.centralrepository.datamodel.CentralRepoAccount;
import org.sleuthkit.autopsy.centralrepository.datamodel.CentralRepoException;
import org.sleuthkit.autopsy.centralrepository.datamodel.CentralRepository;
import org.sleuthkit.autopsy.centralrepository.datamodel.Persona;
import org.sleuthkit.autopsy.centralrepository.datamodel.PersonaAccount;
@ -51,6 +54,8 @@ import org.sleuthkit.datamodel.Account;
import org.sleuthkit.datamodel.BlackboardArtifact;
import org.sleuthkit.datamodel.BlackboardAttribute;
import org.sleuthkit.datamodel.CommunicationsManager;
import org.sleuthkit.datamodel.InvalidAccountIDException;
import org.sleuthkit.datamodel.DataSource;
import org.sleuthkit.datamodel.TskCoreException;
/**
@ -115,6 +120,7 @@ final class MessageAccountPanel extends JPanel {
return new ArrayList<>();
}
if ( !((DataSource)(artifact.getDataSource())).getDeviceId().equals(account.getTypeSpecificID())) {
List<BlackboardArtifact> contactList = ContactCache.getContacts(account);
BlackboardArtifact contact = null;
@ -135,6 +141,7 @@ final class MessageAccountPanel extends JPanel {
dataList.add(new AccountContainer(account, null, contact));
}
}
}
return dataList;
}
@ -450,6 +457,9 @@ final class MessageAccountPanel extends JPanel {
this.accountContainer = accountContainer;
}
@NbBundle.Messages({
"MessageAccountPanel.account.justification=Account found in Message artifact"
})
@Override
public void actionPerformed(ActionEvent e) {
Persona persona = accountContainer.getPersona();
@ -464,8 +474,28 @@ final class MessageAccountPanel extends JPanel {
// Pre populate the persona name and accounts if we have them.
PersonaDetailsPanel personaPanel = createPersonaDialog.getDetailsPanel();
// Set a default name
personaPanel.setPersonaName(accountContainer.getAccount().getTypeSpecificID());
// Set up each matching account. We don't know what type of account we have, so check all the types to
// find any matches.
try {
for (CentralRepoAccount.CentralRepoAccountType type : CentralRepository.getInstance().getAllAccountTypes()) {
try {
// Try to load any matching accounts of this type. Throws an InvalidAccountIDException if the account is the
// wrong format (i.e., when we try to load email accounts for a phone number-type string).
CentralRepoAccount account = CentralRepository.getInstance().getAccount(type, accountContainer.getAccount().getTypeSpecificID());
if (account != null) {
personaPanel.addAccount(account, Bundle.MessageAccountPanel_account_justification(), Persona.Confidence.HIGH);
}
} catch (InvalidAccountIDException ex2) {
// These are expected when the account identifier doesn't match the format of the account type.
}
}
} catch (CentralRepoException ex) {
logger.log(Level.SEVERE, "Error looking up account types in the central repository", ex);
}
// display the dialog now
createPersonaDialog.display();
} else {

View File

@ -30,17 +30,23 @@ import java.util.concurrent.ExecutionException;
import java.util.logging.Level;
import javax.swing.JButton;
import javax.swing.SwingWorker;
import org.openide.util.NbBundle;
import org.openide.util.NbBundle.Messages;
import org.sleuthkit.autopsy.casemodule.Case;
import org.sleuthkit.autopsy.centralrepository.datamodel.CentralRepoAccount;
import org.sleuthkit.autopsy.centralrepository.datamodel.CentralRepoException;
import org.sleuthkit.autopsy.centralrepository.datamodel.CentralRepository;
import org.sleuthkit.autopsy.centralrepository.datamodel.Persona;
import org.sleuthkit.autopsy.centralrepository.datamodel.PersonaAccount;
import org.sleuthkit.autopsy.centralrepository.persona.PersonaDetailsDialog;
import org.sleuthkit.autopsy.centralrepository.persona.PersonaDetailsDialogCallback;
import org.sleuthkit.autopsy.centralrepository.persona.PersonaDetailsMode;
import org.sleuthkit.autopsy.centralrepository.persona.PersonaDetailsPanel;
import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.datamodel.Account;
import org.sleuthkit.datamodel.BlackboardArtifact;
import org.sleuthkit.datamodel.CommunicationsManager;
import org.sleuthkit.datamodel.InvalidAccountIDException;
/**
* SwingWorker for fetching and updating Persona controls.
@ -173,11 +179,43 @@ class PersonaAccountFetcher extends SwingWorker<Map<String, Collection<Persona>>
this.personaSearcherData = personaSearcherData;
}
@NbBundle.Messages({
"PersonaAccountFetcher.account.justification=Account found in Call Log artifact"
})
@Override
public void actionPerformed(java.awt.event.ActionEvent evt) {
// Launch the Persona Create dialog
new PersonaDetailsDialog(parentComponent,
PersonaDetailsMode.CREATE, null, new PersonaCreateCallbackImpl(parentComponent, personaSearcherData));
PersonaDetailsDialog dialog = new PersonaDetailsDialog(parentComponent,
PersonaDetailsMode.CREATE, null, new PersonaCreateCallbackImpl(parentComponent, personaSearcherData), false);
// Pre populate the persona name and accounts if we have them.
PersonaDetailsPanel personaPanel = dialog.getDetailsPanel();
// Set a default name
personaPanel.setPersonaName(personaSearcherData.getAccountIdentifer());
// Set up each matching account. We don't know what type of account we have, so check all the types to
// find any matches.
try {
for (CentralRepoAccount.CentralRepoAccountType type : CentralRepository.getInstance().getAllAccountTypes()) {
try {
// Try to load any matching accounts of this type. Throws an InvalidAccountIDException if the account is the
// wrong format (i.e., when we try to load email accounts for a phone number-type string).
CentralRepoAccount account = CentralRepository.getInstance().getAccount(type, personaSearcherData.getAccountIdentifer());
if (account != null) {
personaPanel.addAccount(account, Bundle.PersonaAccountFetcher_account_justification(), Persona.Confidence.HIGH);
}
} catch (InvalidAccountIDException ex2) {
// These are expected when the account identifier doesn't match the format of the account type.
}
}
} catch (CentralRepoException ex) {
logger.log(Level.SEVERE, "Error looking up account types in the central repository", ex);
}
// display the dialog now
dialog.display();
}
}

View File

@ -0,0 +1,28 @@
#Tue Aug 18 18:09:20 UTC 2020
ContextSourcePanel.jSourceGoToResultButton.text=\u7d50\u679c\u306b\u79fb\u52d5
ContextSourcePanel.jSourceNameLabel.text=jSourceNameLabel
ContextSourcePanel.jSourceTextLabel.text=\u30e9\u30d9\u30eb2
ContextUsagePanel.jUsageGoToResultButton.text=\u7d50\u679c\u306b\u79fb\u52d5
ContextUsagePanel.jUsageNameLabel.text=jUsageLabel
ContextUsagePanel.jUsageTextLabel.text=\u30e9\u30d9\u30eb2
ContextViewer.attachmentSource=\u6dfb\u4ed8\uff1a
ContextViewer.downloadSource=\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u5143\uff1a
ContextViewer.downloadURL=URL
ContextViewer.downloadedOn=\u30aa\u30f3
ContextViewer.email=\u30e1\u30fc\u30eb
ContextViewer.jSourceLabel.text=\u4f7f\u7528\u6cd5
ContextViewer.jUnknownLabel.text=\u4e0d\u660e
ContextViewer.jUsageLabel.text=\u30bd\u30fc\u30b9
ContextViewer.message=\u30e1\u30c3\u30bb\u30fc\u30b8
ContextViewer.messageFrom=\u5dee\u51fa\u4eba
ContextViewer.messageOn=\u30aa\u30f3
ContextViewer.messageTo=\u5b9b\u5148
ContextViewer.on=\u958b\u3044\u305f\u306e\u306f
ContextViewer.programExecution=\u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u5b9f\u884c\uff1a
ContextViewer.recentDocs=\u6700\u8fd1\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\uff1a
ContextViewer.runOn=\u30d7\u30ed\u30b0\u30e9\u30e0\u5b9f\u884c
ContextViewer.runUnknown=\u4e0d\u7279\u5b9a\u6642\u9593\u306b\u5b9f\u884c\u3055\u308c\u308b\u30d7\u30ed\u30b0\u30e9\u30e0
ContextViewer.title=\u74b0\u5883
ContextViewer.toolTip=\u9078\u629e\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u306e\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u3092\u8868\u793a\u3057\u307e\u3059\u3002
ContextViewer.unknown=\u4e0d\u7279\u5b9a\u6642\u9593\u306b\u958b\u304d\u307e\u3057\u305f
ContextViewer.unknownSource=\u4e0d\u660e

View File

@ -55,12 +55,12 @@ public final class ContextViewer extends javax.swing.JPanel implements DataConte
private static final int ATTRIBUTE_STR_MAX_LEN = 200;
// defines a list of artifacts that provide context for a file
private static final List<BlackboardArtifact.ARTIFACT_TYPE> SOURCE_CONTEXT_ARTIFACTS = new ArrayList<>();
private static final List<BlackboardArtifact.ARTIFACT_TYPE> CONTEXT_ARTIFACTS = new ArrayList<>();
private final List<javax.swing.JPanel> contextSourcePanels = new ArrayList<>();
private final List<javax.swing.JPanel> contextUsagePanels = new ArrayList<>();
static {
SOURCE_CONTEXT_ARTIFACTS.add(TSK_ASSOCIATED_OBJECT);
CONTEXT_ARTIFACTS.add(TSK_ASSOCIATED_OBJECT);
}
/**
@ -180,7 +180,7 @@ public final class ContextViewer extends javax.swing.JPanel implements DataConte
AbstractFile file = selectedNode.getLookup().lookup(AbstractFile.class);
try {
populateSourceContextData(file);
populatePanels(file);
} catch (NoCurrentCaseException | TskCoreException ex) {
logger.log(Level.SEVERE, String.format("Exception displaying context for file %s", file.getName()), ex); //NON-NLS
}
@ -223,7 +223,7 @@ public final class ContextViewer extends javax.swing.JPanel implements DataConte
// check if the node has an abstract file and the file has any context defining artifacts.
if (node.getLookup().lookup(AbstractFile.class) != null) {
AbstractFile abstractFile = node.getLookup().lookup(AbstractFile.class);
for (BlackboardArtifact.ARTIFACT_TYPE artifactType : SOURCE_CONTEXT_ARTIFACTS) {
for (BlackboardArtifact.ARTIFACT_TYPE artifactType : CONTEXT_ARTIFACTS) {
List<BlackboardArtifact> artifactsList;
try {
artifactsList = abstractFile.getArtifacts(artifactType);
@ -258,18 +258,18 @@ public final class ContextViewer extends javax.swing.JPanel implements DataConte
* @throws NoCurrentCaseException
* @throws TskCoreException
*/
private void populateSourceContextData(AbstractFile sourceFile) throws NoCurrentCaseException, TskCoreException {
private void populatePanels(AbstractFile sourceFile) throws NoCurrentCaseException, TskCoreException {
SleuthkitCase tskCase = Case.getCurrentCaseThrows().getSleuthkitCase();
// Check for all context artifacts
boolean foundASource = false;
for (BlackboardArtifact.ARTIFACT_TYPE artifactType : SOURCE_CONTEXT_ARTIFACTS) {
for (BlackboardArtifact.ARTIFACT_TYPE artifactType : CONTEXT_ARTIFACTS) {
List<BlackboardArtifact> artifactsList = tskCase.getBlackboardArtifacts(artifactType, sourceFile.getId());
foundASource = !artifactsList.isEmpty();
for (BlackboardArtifact contextArtifact : artifactsList) {
addSourceEntry(contextArtifact);
addAssociatedArtifactToPanel(contextArtifact);
}
}
javax.swing.JPanel contextContainer = new javax.swing.JPanel();
@ -304,15 +304,14 @@ public final class ContextViewer extends javax.swing.JPanel implements DataConte
}
/**
* Adds a source context entry for the selected file based on the given
* context providing artifact.
* Resolves an TSK_ASSOCIATED_OBJECT artifact and adds it to the appropriate panel
*
* @param artifact Artifact that may provide context.
*
* @throws NoCurrentCaseException
* @throws TskCoreException
*/
private void addSourceEntry(BlackboardArtifact artifact) throws TskCoreException {
private void addAssociatedArtifactToPanel(BlackboardArtifact artifact) throws TskCoreException {
if (BlackboardArtifact.ARTIFACT_TYPE.TSK_ASSOCIATED_OBJECT.getTypeID() == artifact.getArtifactTypeID()) {
BlackboardAttribute associatedArtifactAttribute = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_ASSOCIATED_ARTIFACT));
@ -320,14 +319,13 @@ public final class ContextViewer extends javax.swing.JPanel implements DataConte
long artifactId = associatedArtifactAttribute.getValueLong();
BlackboardArtifact associatedArtifact = artifact.getSleuthkitCase().getBlackboardArtifact(artifactId);
setSourceFields(associatedArtifact);
addArtifactToPanels(associatedArtifact);
}
}
}
/**
* Sets the source label and text fields based on the given associated
* artifact.
* Adds th passed in artifact to the appropriate source or usage panel
*
* @param associatedArtifact - associated artifact
*
@ -339,7 +337,7 @@ public final class ContextViewer extends javax.swing.JPanel implements DataConte
"ContextViewer.recentDocs=Recent Documents: ",
"ContextViewer.programExecution=Program Execution: "
})
private void setSourceFields(BlackboardArtifact associatedArtifact) throws TskCoreException {
private void addArtifactToPanels(BlackboardArtifact associatedArtifact) throws TskCoreException {
if (BlackboardArtifact.ARTIFACT_TYPE.TSK_MESSAGE.getTypeID() == associatedArtifact.getArtifactTypeID()
|| BlackboardArtifact.ARTIFACT_TYPE.TSK_EMAIL_MSG.getTypeID() == associatedArtifact.getArtifactTypeID()) {
String sourceName = Bundle.ContextViewer_attachmentSource();

View File

@ -165,49 +165,22 @@ public class Installer extends ModuleInstall {
logger.log(Level.SEVERE, "Error loading VHDI library, ", e); //NON-NLS
}
/*
* PostgreSQL
*/
// Only attempt to load OpenSSL if we're in 64 bit mode
if(System.getProperty("sun.arch.data.model").contains("64")) {
// libcrypto must be loaded before libssl to make sure it's the correct version
try {
System.loadLibrary("msvcr120"); //NON-NLS
logger.log(Level.INFO, "MSVCR 120 library loaded"); //NON-NLS
System.loadLibrary("libcrypto-1_1-x64"); //NON-NLS
logger.log(Level.INFO, "Crypto library loaded"); //NON-NLS
} catch (UnsatisfiedLinkError e) {
logger.log(Level.SEVERE, "Error loading MSVCR120 library, ", e); //NON-NLS
logger.log(Level.SEVERE, "Error loading Crypto library, ", e); //NON-NLS
}
try {
System.loadLibrary("libeay32"); //NON-NLS
logger.log(Level.INFO, "LIBEAY32 library loaded"); //NON-NLS
System.loadLibrary("libssl-1_1-x64"); //NON-NLS
logger.log(Level.INFO, "OpenSSL library loaded"); //NON-NLS
} catch (UnsatisfiedLinkError e) {
logger.log(Level.SEVERE, "Error loading LIBEAY32 library, ", e); //NON-NLS
logger.log(Level.SEVERE, "Error loading OpenSSL library, ", e); //NON-NLS
}
try {
System.loadLibrary("ssleay32"); //NON-NLS
logger.log(Level.INFO, "SSLEAY32 library loaded"); //NON-NLS
} catch (UnsatisfiedLinkError e) {
logger.log(Level.SEVERE, "Error loading SSLEAY32 library, ", e); //NON-NLS
}
try {
System.loadLibrary("libiconv-2"); //NON-NLS
logger.log(Level.INFO, "libiconv-2 library loaded"); //NON-NLS
} catch (UnsatisfiedLinkError e) {
logger.log(Level.SEVERE, "Error loading libiconv-2 library, ", e); //NON-NLS
}
try {
System.loadLibrary("libintl-8"); //NON-NLS
logger.log(Level.INFO, "libintl-8 library loaded"); //NON-NLS
} catch (UnsatisfiedLinkError e) {
logger.log(Level.SEVERE, "Error loading libintl-8 library, ", e); //NON-NLS
}
try {
System.loadLibrary("libpq"); //NON-NLS
logger.log(Level.INFO, "LIBPQ library loaded"); //NON-NLS
} catch (UnsatisfiedLinkError e) {
logger.log(Level.SEVERE, "Error loading LIBPQ library, ", e); //NON-NLS
}
}
}
@ -230,6 +203,7 @@ public class Installer extends ModuleInstall {
packageInstallers.add(org.sleuthkit.autopsy.ingest.Installer.getDefault());
packageInstallers.add(org.sleuthkit.autopsy.centralrepository.eventlisteners.Installer.getDefault());
packageInstallers.add(org.sleuthkit.autopsy.healthmonitor.Installer.getDefault());
packageInstallers.add(org.sleuthkit.autopsy.casemodule.Installer.getDefault());
/**
* This is a temporary workaround for the following bug in Tika that

View File

@ -26,6 +26,7 @@ import java.util.prefs.PreferenceChangeListener;
import java.util.prefs.Preferences;
import org.openide.util.NbPreferences;
import org.python.icu.util.TimeZone;
import org.sleuthkit.autopsy.machinesettings.UserMachinePreferences;
import org.sleuthkit.autopsy.coreutils.ModuleSettings;
import org.sleuthkit.autopsy.coreutils.TextConverterException;
import org.sleuthkit.autopsy.coreutils.Version;
@ -612,4 +613,14 @@ public final class UserPreferences {
public static String getGeolocationMBTilesFilePath() {
return preferences.get(GEO_MBTILES_FILE_PATH, "");
}
/**
* Retrieves the root application temp directory.
*
* @return The absolute path to the application temp directory.
*/
public static String getAppTempDirectory() {
return Paths.get(UserMachinePreferences.getBaseTempDirectory(), getAppName())
.toAbsolutePath().toString();
}
}

View File

@ -11,7 +11,7 @@
</NonVisualComponents>
<Properties>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[1022, 488]"/>
<Dimension value="null"/>
</Property>
</Properties>
<AuxValues>
@ -29,15 +29,12 @@
<Layout>
<DimensionLayout dim="0">
<Group type="103" groupAlignment="0" attributes="0">
<Component id="jScrollPane1" alignment="0" max="32767" attributes="0"/>
<Component id="jScrollPane1" alignment="0" pref="648" max="32767" attributes="0"/>
</Group>
</DimensionLayout>
<DimensionLayout dim="1">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="0" attributes="0">
<Component id="jScrollPane1" max="32767" attributes="0"/>
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
</Group>
<Component id="jScrollPane1" alignment="0" pref="382" max="32767" attributes="0"/>
</Group>
</DimensionLayout>
</Layout>
@ -48,7 +45,7 @@
<Border info="null"/>
</Property>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[1022, 407]"/>
<Dimension value="null"/>
</Property>
</Properties>
@ -56,21 +53,24 @@
<SubComponents>
<Container class="javax.swing.JPanel" name="jPanel1">
<Properties>
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[648, 382]"/>
</Property>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[1022, 407]"/>
<Dimension value="null"/>
</Property>
</Properties>
<Layout>
<DimensionLayout dim="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"/>
<Group type="103" groupAlignment="0" attributes="0">
<Component id="runtimePanel" max="32767" attributes="0"/>
<Component id="logoPanel" alignment="0" pref="1002" max="32767" attributes="0"/>
<Group type="103" groupAlignment="1" max="-2" attributes="0">
<Component id="logoPanel" max="32767" attributes="0"/>
<Component id="tempDirectoryPanel" alignment="0" max="32767" attributes="0"/>
<Component id="runtimePanel" min="-2" pref="631" max="-2" attributes="0"/>
</Group>
<EmptySpace max="-2" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
@ -79,9 +79,11 @@
<Group type="102" alignment="0" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<Component id="runtimePanel" min="-2" max="-2" attributes="0"/>
<EmptySpace type="unrelated" max="-2" attributes="0"/>
<EmptySpace min="-2" pref="3" max="-2" attributes="0"/>
<Component id="tempDirectoryPanel" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="logoPanel" min="-2" max="-2" attributes="0"/>
<EmptySpace pref="171" max="32767" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
@ -96,9 +98,6 @@
</TitledBorder>
</Border>
</Property>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[533, 87]"/>
</Property>
</Properties>
<Layout>
@ -112,16 +111,16 @@
</Group>
<EmptySpace type="unrelated" max="-2" attributes="0"/>
<Group type="103" groupAlignment="0" attributes="0">
<Component id="agencyLogoPathFieldValidationLabel" min="-2" max="-2" attributes="0"/>
<Group type="102" attributes="0">
<Component id="agencyLogoPathField" min="-2" pref="259" max="-2" attributes="0"/>
<Component id="agencyLogoPathField" min="-2" pref="270" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="browseLogosButton" min="-2" max="-2" attributes="0"/>
</Group>
<Component id="agencyLogoPathFieldValidationLabel" min="-2" max="-2" attributes="0"/>
</Group>
<EmptySpace type="unrelated" max="-2" attributes="0"/>
<Component id="agencyLogoPreview" min="-2" max="-2" attributes="0"/>
<EmptySpace pref="456" max="32767" attributes="0"/>
<EmptySpace max="32767" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
@ -142,7 +141,7 @@
</Group>
<Group type="102" alignment="1" attributes="0">
<Component id="agencyLogoPreview" min="-2" max="-2" attributes="0"/>
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
<EmptySpace min="0" pref="12" max="32767" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
@ -266,18 +265,18 @@
<Group type="102" alignment="0" attributes="0">
<EmptySpace min="-2" pref="23" max="-2" attributes="0"/>
<Component id="memFieldValidationLabel" min="-2" pref="478" max="-2" attributes="0"/>
<EmptySpace pref="246" max="32767" attributes="0"/>
<EmptySpace max="32767" attributes="0"/>
</Group>
<Group type="102" alignment="0" attributes="0">
<EmptySpace min="-2" pref="18" max="-2" attributes="0"/>
<Component id="solrJVMHeapWarning" pref="717" max="32767" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="solrJVMHeapWarning" min="-2" pref="331" max="-2" attributes="0"/>
<EmptySpace min="-2" pref="44" max="-2" attributes="0"/>
<Component id="logNumAlert" max="32767" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
</Group>
</Group>
</Group>
<Component id="restartNecessaryWarning" alignment="0" pref="994" max="32767" attributes="0"/>
<Component id="restartNecessaryWarning" alignment="0" min="-2" pref="615" max="-2" attributes="0"/>
</Group>
</Group>
</Group>
@ -317,7 +316,7 @@
</Group>
<EmptySpace type="unrelated" max="-2" attributes="0"/>
<Component id="restartNecessaryWarning" min="-2" max="-2" attributes="0"/>
<EmptySpace max="32767" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
@ -438,6 +437,87 @@
</Component>
</SubComponents>
</Container>
<Container class="javax.swing.JPanel" name="tempDirectoryPanel">
<Properties>
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
<Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
<TitledBorder title="Temp Directory">
<ResourceString PropertyName="titleX" bundle="org/sleuthkit/autopsy/corecomponents/Bundle.properties" key="AutopsyOptionsPanel.tempDirectoryPanel.border.title" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</TitledBorder>
</Border>
</Property>
<Property name="name" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/corecomponents/Bundle.properties" key="AutopsyOptionsPanel.tempDirectoryPanel.name" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<AccessibilityProperties>
<Property name="AccessibleContext.accessibleName" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/corecomponents/Bundle.properties" key="AutopsyOptionsPanel.tempDirectoryPanel.AccessibleContext.accessibleName" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</AccessibilityProperties>
<Layout>
<DimensionLayout dim="0">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<Group type="103" groupAlignment="0" attributes="0">
<Component id="tempDirectoryWarningLabel" min="-2" pref="615" max="-2" attributes="0"/>
<Group type="102" attributes="0">
<Component id="tempDirectoryField" min="-2" pref="367" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="tempDirectoryBrowseButton" min="-2" max="-2" attributes="0"/>
</Group>
</Group>
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
<DimensionLayout dim="1">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="0" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<Group type="103" groupAlignment="3" attributes="0">
<Component id="tempDirectoryField" alignment="3" max="32767" attributes="0"/>
<Component id="tempDirectoryBrowseButton" alignment="3" min="-2" max="-2" attributes="0"/>
</Group>
<EmptySpace type="separate" max="-2" attributes="0"/>
<Component id="tempDirectoryWarningLabel" min="-2" max="-2" attributes="0"/>
<EmptySpace min="-2" max="-2" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
</Layout>
<SubComponents>
<Component class="javax.swing.JTextField" name="tempDirectoryField">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/corecomponents/Bundle.properties" key="AutopsyOptionsPanel.tempDirectoryField.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
</Component>
<Component class="javax.swing.JButton" name="tempDirectoryBrowseButton">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/corecomponents/Bundle.properties" key="AutopsyOptionsPanel.tempDirectoryBrowseButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="tempDirectoryBrowseButtonActionPerformed"/>
</Events>
</Component>
<Component class="javax.swing.JLabel" name="tempDirectoryWarningLabel">
<Properties>
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
<Image iconType="3" name="/org/sleuthkit/autopsy/corecomponents/warning16.png"/>
</Property>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/corecomponents/Bundle.properties" key="AutopsyOptionsPanel.tempDirectoryWarningLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
</Component>
</SubComponents>
</Container>
</SubComponents>
</Container>
</SubComponents>

View File

@ -24,6 +24,7 @@ import java.io.IOException;
import java.lang.management.ManagementFactory;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.InvalidPathException;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
@ -34,13 +35,17 @@ import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import org.netbeans.spi.options.OptionsPanelController;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.coreutils.Logger;
import org.openide.util.NbBundle.Messages;
import org.sleuthkit.autopsy.casemodule.Case;
import org.sleuthkit.autopsy.casemodule.GeneralFilter;
import org.sleuthkit.autopsy.machinesettings.UserMachinePreferences;
import org.sleuthkit.autopsy.machinesettings.UserMachinePreferencesException;
import org.sleuthkit.autopsy.core.UserPreferences;
import org.sleuthkit.autopsy.coreutils.ModuleSettings;
import org.sleuthkit.autopsy.coreutils.PlatformUtil;
@ -70,7 +75,8 @@ import org.sleuthkit.autopsy.report.ReportBranding;
final class AutopsyOptionsPanel extends javax.swing.JPanel {
private static final long serialVersionUID = 1L;
private final JFileChooser fileChooser;
private final JFileChooser logoFileChooser;
private final JFileChooser tempDirChooser;
private final TextFieldListener textFieldListener;
private static final String ETC_FOLDER_NAME = "etc";
private static final String CONFIG_FILE_EXTENSION = ".conf";
@ -85,11 +91,16 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel {
*/
AutopsyOptionsPanel() {
initComponents();
fileChooser = new JFileChooser();
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
fileChooser.setMultiSelectionEnabled(false);
fileChooser.setAcceptAllFileFilterUsed(false);
fileChooser.setFileFilter(new GeneralFilter(GeneralFilter.GRAPHIC_IMAGE_EXTS, GeneralFilter.GRAPHIC_IMG_DECR));
logoFileChooser = new JFileChooser();
logoFileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
logoFileChooser.setMultiSelectionEnabled(false);
logoFileChooser.setAcceptAllFileFilterUsed(false);
logoFileChooser.setFileFilter(new GeneralFilter(GeneralFilter.GRAPHIC_IMAGE_EXTS, GeneralFilter.GRAPHIC_IMG_DECR));
tempDirChooser = new JFileChooser();
tempDirChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
tempDirChooser.setMultiSelectionEnabled(false);
if (!PlatformUtil.is64BitJVM() || Version.getBuildType() == Version.Type.DEVELOPMENT) {
//32 bit JVM has a max heap size of 1.4 gb to 4 gb depending on OS
//So disabling the setting of heap size when the JVM is not 64 bit
@ -102,10 +113,11 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel {
// The cast to int in the following is to ensure that the correct SpinnerNumberModel
// constructor is called.
solrMaxHeapSpinner.setModel(new javax.swing.SpinnerNumberModel(UserPreferences.getMaxSolrVMSize(),
512, ((int)getSystemMemoryInGB()) * MEGA_IN_GIGA, 512));
512, ((int) getSystemMemoryInGB()) * MEGA_IN_GIGA, 512));
textFieldListener = new TextFieldListener();
agencyLogoPathField.getDocument().addDocumentListener(textFieldListener);
tempDirectoryField.getDocument().addDocumentListener(textFieldListener);
logFileCount.setText(String.valueOf(UserPreferences.getLogFileCount()));
}
@ -296,8 +308,10 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel {
specifyLogoRB.setSelected(!useDefault);
agencyLogoPathField.setEnabled(!useDefault);
browseLogosButton.setEnabled(!useDefault);
tempDirectoryField.setText(UserMachinePreferences.getBaseTempDirectory());
logFileCount.setText(String.valueOf(UserPreferences.getLogFileCount()));
solrMaxHeapSpinner.setValue(UserPreferences.getMaxSolrVMSize());
tempDirectoryField.setText(UserMachinePreferences.getBaseTempDirectory());
try {
updateAgencyLogo(path);
} catch (IOException ex) {
@ -312,10 +326,17 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel {
}
memField.setText(initialMemValue);
}
setTempDirEnabled();
valid(); //ensure the error messages are up to date
}
private void setTempDirEnabled() {
boolean enabled = !Case.isCaseOpen();
this.tempDirectoryBrowseButton.setEnabled(enabled);
this.tempDirectoryField.setEnabled(enabled);
this.tempDirectoryWarningLabel.setVisible(!enabled);
}
/**
* Update the agency logo with the image specified by the path.
*
@ -342,11 +363,34 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel {
agencyLogoPreview.repaint();
}
@Messages({
"AutopsyOptionsPanel_storeTempDir_onError_title=Error Saving Temporary Directory",
"# {0} - path",
"AutopsyOptionsPanel_storeTempDir_onError_description=There was an error creating the temporary directory on the filesystem at: {0}.",})
private void storeTempDir() {
String tempDirectoryPath = tempDirectoryField.getText();
if (!UserMachinePreferences.getBaseTempDirectory().equals(tempDirectoryPath)) {
try {
UserMachinePreferences.setBaseTempDirectory(tempDirectoryPath);
} catch (UserMachinePreferencesException ex) {
logger.log(Level.WARNING, "There was an error creating the temporary directory defined by the user: " + tempDirectoryPath, ex);
SwingUtilities.invokeLater(() -> {
JOptionPane.showMessageDialog(this,
String.format("<html>%s</html>", Bundle.AutopsyOptionsPanel_storeTempDir_onError_description(tempDirectoryPath)),
Bundle.AutopsyOptionsPanel_storeTempDir_onError_title(),
JOptionPane.ERROR_MESSAGE);
});
}
}
}
/**
* Store the current user preferences.
*/
void store() {
UserPreferences.setLogFileCount(Integer.parseInt(logFileCount.getText()));
storeTempDir();
if (!agencyLogoPathField.getText().isEmpty()) {
File file = new File(agencyLogoPathField.getText());
if (file.exists()) {
@ -355,7 +399,7 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel {
} else {
ModuleSettings.setConfigSetting(ReportBranding.MODULE_NAME, ReportBranding.AGENCY_LOGO_PATH_PROP, "");
}
UserPreferences.setMaxSolrVMSize((int)solrMaxHeapSpinner.getValue());
UserPreferences.setMaxSolrVMSize((int) solrMaxHeapSpinner.getValue());
if (memField.isEnabled()) { //if the field could of been changed we need to try and save it
try {
writeEtcConfFile();
@ -372,7 +416,6 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel {
*/
boolean valid() {
boolean valid = true;
if (!isAgencyLogoPathValid()) {
valid = false;
}
@ -484,6 +527,7 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel {
}
return true;
}
/**
* Listens for registered text fields that have changed and fires a
* PropertyChangeEvent accordingly.
@ -542,16 +586,20 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel {
maxMemoryUnitsLabel2 = new javax.swing.JLabel();
solrMaxHeapSpinner = new javax.swing.JSpinner();
solrJVMHeapWarning = new javax.swing.JLabel();
tempDirectoryPanel = new javax.swing.JPanel();
tempDirectoryField = new javax.swing.JTextField();
tempDirectoryBrowseButton = new javax.swing.JButton();
tempDirectoryWarningLabel = new javax.swing.JLabel();
setPreferredSize(new java.awt.Dimension(1022, 488));
setPreferredSize(null);
jScrollPane1.setBorder(null);
jScrollPane1.setPreferredSize(new java.awt.Dimension(1022, 407));
jScrollPane1.setPreferredSize(null);
jPanel1.setPreferredSize(new java.awt.Dimension(1022, 407));
jPanel1.setMinimumSize(new java.awt.Dimension(648, 382));
jPanel1.setPreferredSize(null);
logoPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.logoPanel.border.title"))); // NOI18N
logoPanel.setPreferredSize(new java.awt.Dimension(533, 87));
agencyLogoPathField.setText(org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.agencyLogoPathField.text")); // NOI18N
@ -599,14 +647,14 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel {
.addComponent(defaultLogoRB))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(logoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(agencyLogoPathFieldValidationLabel)
.addGroup(logoPanelLayout.createSequentialGroup()
.addComponent(agencyLogoPathField, javax.swing.GroupLayout.PREFERRED_SIZE, 259, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(agencyLogoPathField, javax.swing.GroupLayout.PREFERRED_SIZE, 270, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(browseLogosButton))
.addComponent(agencyLogoPathFieldValidationLabel))
.addComponent(browseLogosButton)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(agencyLogoPreview, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(456, Short.MAX_VALUE))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
logoPanelLayout.setVerticalGroup(
logoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
@ -622,7 +670,7 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel {
.addComponent(browseLogosButton)))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, logoPanelLayout.createSequentialGroup()
.addComponent(agencyLogoPreview, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(0, 0, Short.MAX_VALUE))
.addGap(0, 12, Short.MAX_VALUE))
);
runtimePanel.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.runtimePanel.border.title"))); // NOI18N
@ -703,14 +751,14 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel {
.addGroup(runtimePanelLayout.createSequentialGroup()
.addGap(23, 23, 23)
.addComponent(memFieldValidationLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 478, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(246, Short.MAX_VALUE))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGroup(runtimePanelLayout.createSequentialGroup()
.addGap(18, 18, 18)
.addComponent(solrJVMHeapWarning, javax.swing.GroupLayout.DEFAULT_SIZE, 717, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(solrJVMHeapWarning, javax.swing.GroupLayout.PREFERRED_SIZE, 331, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(44, 44, 44)
.addComponent(logNumAlert)
.addContainerGap())))
.addComponent(restartNecessaryWarning, javax.swing.GroupLayout.DEFAULT_SIZE, 994, Short.MAX_VALUE)))
.addComponent(restartNecessaryWarning, javax.swing.GroupLayout.PREFERRED_SIZE, 615, javax.swing.GroupLayout.PREFERRED_SIZE)))
);
runtimePanelLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {maxLogFileCount, maxMemoryLabel, totalMemoryLabel});
@ -746,7 +794,48 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel {
.addComponent(logFileCount, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(restartNecessaryWarning)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap())
);
tempDirectoryPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.tempDirectoryPanel.border.title"))); // NOI18N
tempDirectoryPanel.setName(org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.tempDirectoryPanel.name")); // NOI18N
tempDirectoryField.setText(org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.tempDirectoryField.text")); // NOI18N
org.openide.awt.Mnemonics.setLocalizedText(tempDirectoryBrowseButton, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.tempDirectoryBrowseButton.text")); // NOI18N
tempDirectoryBrowseButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
tempDirectoryBrowseButtonActionPerformed(evt);
}
});
tempDirectoryWarningLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/corecomponents/warning16.png"))); // NOI18N
org.openide.awt.Mnemonics.setLocalizedText(tempDirectoryWarningLabel, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.tempDirectoryWarningLabel.text")); // NOI18N
javax.swing.GroupLayout tempDirectoryPanelLayout = new javax.swing.GroupLayout(tempDirectoryPanel);
tempDirectoryPanel.setLayout(tempDirectoryPanelLayout);
tempDirectoryPanelLayout.setHorizontalGroup(
tempDirectoryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(tempDirectoryPanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(tempDirectoryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(tempDirectoryWarningLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 615, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(tempDirectoryPanelLayout.createSequentialGroup()
.addComponent(tempDirectoryField, javax.swing.GroupLayout.PREFERRED_SIZE, 367, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(tempDirectoryBrowseButton)))
.addGap(0, 0, Short.MAX_VALUE))
);
tempDirectoryPanelLayout.setVerticalGroup(
tempDirectoryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(tempDirectoryPanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(tempDirectoryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(tempDirectoryField)
.addComponent(tempDirectoryBrowseButton))
.addGap(18, 18, 18)
.addComponent(tempDirectoryWarningLabel)
.addContainerGap())
);
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
@ -755,54 +844,63 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel {
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(runtimePanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(logoPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 1002, Short.MAX_VALUE))
.addContainerGap())
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addComponent(logoPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(tempDirectoryPanel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(runtimePanel, javax.swing.GroupLayout.PREFERRED_SIZE, 631, javax.swing.GroupLayout.PREFERRED_SIZE)))
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addComponent(runtimePanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGap(3, 3, 3)
.addComponent(tempDirectoryPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(logoPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(171, Short.MAX_VALUE))
.addContainerGap())
);
tempDirectoryPanel.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.tempDirectoryPanel.AccessibleContext.accessibleName")); // NOI18N
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.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 648, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGap(0, 0, Short.MAX_VALUE))
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 382, Short.MAX_VALUE)
);
}// </editor-fold>//GEN-END:initComponents
private void logFileCountKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_logFileCountKeyReleased
String count = logFileCount.getText();
if (count.equals(String.valueOf(UserPreferences.getDefaultLogFileCount()))) {
//if it is still the default value don't fire change
return;
@Messages({
"AutopsyOptionsPanel_tempDirectoryBrowseButtonActionPerformed_onInvalidPath_title=Path cannot be used",
"# {0} - path",
"AutopsyOptionsPanel_tempDirectoryBrowseButtonActionPerformed_onInvalidPath_description=Unable to create temporary directory within specified path: {0}",})
private void tempDirectoryBrowseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tempDirectoryBrowseButtonActionPerformed
int returnState = tempDirChooser.showOpenDialog(this);
if (returnState == JFileChooser.APPROVE_OPTION) {
String specifiedPath = tempDirChooser.getSelectedFile().getPath();
try {
File f = new File(specifiedPath);
if (!f.exists() && !f.mkdirs()) {
throw new InvalidPathException(specifiedPath, "Unable to create parent directories leading to " + specifiedPath);
}
tempDirectoryField.setText(specifiedPath);
firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
}//GEN-LAST:event_logFileCountKeyReleased
private void memFieldKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_memFieldKeyReleased
String memText = memField.getText();
if (memText.equals(initialMemValue)) {
//if it is still the initial value don't fire change
return;
} catch (InvalidPathException ex) {
logger.log(Level.WARNING, "Unable to create temporary directory in " + specifiedPath, ex);
JOptionPane.showMessageDialog(this,
Bundle.AutopsyOptionsPanel_tempDirectoryBrowseButtonActionPerformed_onInvalidPath_description(specifiedPath),
Bundle.AutopsyOptionsPanel_tempDirectoryBrowseButtonActionPerformed_onInvalidPath_title(),
JOptionPane.ERROR_MESSAGE);
}
firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
}//GEN-LAST:event_memFieldKeyReleased
}
}//GEN-LAST:event_tempDirectoryBrowseButtonActionPerformed
private void specifyLogoRBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_specifyLogoRBActionPerformed
agencyLogoPathField.setEnabled(true);
@ -834,9 +932,9 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel {
private void browseLogosButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_browseLogosButtonActionPerformed
String oldLogoPath = agencyLogoPathField.getText();
int returnState = fileChooser.showOpenDialog(this);
int returnState = logoFileChooser.showOpenDialog(this);
if (returnState == JFileChooser.APPROVE_OPTION) {
String path = fileChooser.getSelectedFile().getPath();
String path = logoFileChooser.getSelectedFile().getPath();
try {
updateAgencyLogo(path);
firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
@ -856,7 +954,7 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel {
}//GEN-LAST:event_browseLogosButtonActionPerformed
private void solrMaxHeapSpinnerStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_solrMaxHeapSpinnerStateChanged
int value = (int)solrMaxHeapSpinner.getValue();
int value = (int) solrMaxHeapSpinner.getValue();
if (value == UserPreferences.getMaxSolrVMSize()) {
// if the value hasn't changed there's nothing to do.
return;
@ -864,6 +962,24 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel {
firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
}//GEN-LAST:event_solrMaxHeapSpinnerStateChanged
private void logFileCountKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_logFileCountKeyReleased
String count = logFileCount.getText();
if (count.equals(String.valueOf(UserPreferences.getDefaultLogFileCount()))) {
//if it is still the default value don't fire change
return;
}
firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
}//GEN-LAST:event_logFileCountKeyReleased
private void memFieldKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_memFieldKeyReleased
String memText = memField.getText();
if (memText.equals(initialMemValue)) {
//if it is still the initial value don't fire change
return;
}
firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
}//GEN-LAST:event_memFieldKeyReleased
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JTextField agencyLogoPathField;
private javax.swing.JLabel agencyLogoPathFieldValidationLabel;
@ -892,6 +1008,10 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel {
private javax.swing.JSpinner solrMaxHeapSpinner;
private javax.swing.JRadioButton specifyLogoRB;
private javax.swing.JLabel systemMemoryTotal;
private javax.swing.JButton tempDirectoryBrowseButton;
private javax.swing.JTextField tempDirectoryField;
private javax.swing.JPanel tempDirectoryPanel;
private javax.swing.JLabel tempDirectoryWarningLabel;
private javax.swing.JLabel totalMemoryLabel;
// End of variables declaration//GEN-END:variables

View File

@ -120,26 +120,12 @@ MultiUserSettingsPanel.lbTestDbWarning.text=
MultiUserSettingsPanel.KeywordSearchNull=Cannot find keyword search service
MultiUserSettingsPanel.InvalidPortNumber=Invalid port number
AutopsyOptionsPanel.agencyLogoImageLabel.toolTipText=
AutopsyOptionsPanel.agencyLogoPathField.text=
SortChooserDialog.label=remove
SortChooser.addCriteriaButton.text=Add Sort Criteria
DataResultViewerThumbnail.sortButton.text=Sort
CriterionChooser.ascendingRadio.text=\u25b2 Ascending\n
CriterionChooser.removeButton.text=Remove
CriterionChooser.descendingRadio.text=\u25bc Descending
AutopsyOptionsPanel.agencyLogoPathFieldValidationLabel.text=
AutopsyOptionsPanel.logNumAlert.text=
AutopsyOptionsPanel.totalMemoryLabel.text=Total System Memory:
AutopsyOptionsPanel.maxMemoryLabel.text=Maximum JVM Memory:
AutopsyOptionsPanel.maxLogFileCount.text=Maximum Log Files:
AutopsyOptionsPanel.maxMemoryUnitsLabel.text=GB
AutopsyOptionsPanel.restartNecessaryWarning.text=A restart is necessary for any memory changes to take effect.
AutopsyOptionsPanel.browseLogosButton.text=Browse
AutopsyOptionsPanel.defaultLogoRB.text=Use default
AutopsyOptionsPanel.specifyLogoRB.text=Specify a logo
AutopsyOptionsPanel.agencyLogoPreview.text=<html><div style='text-align: center;'>No logo<br>selected</div></html>
AutopsyOptionsPanel.logoPanel.border.title=Logo
AutopsyOptionsPanel.runtimePanel.border.title=Runtime
DataResultPanel.matchLabel.text=Results
DataResultPanel.numberOfChildNodesLabel.text=0
DataResultPanel.descriptionLabel.text=directoryPath
@ -199,9 +185,6 @@ ExternalViewerGlobalSettingsPanel.deleteRuleButton.text_1=Delete Rule
ExternalViewerGlobalSettingsPanel.externalViewerTitleLabel.text_1=Set aplication viewer to use for files with specific mime types/extensions:
ExternalViewerGlobalSettingsPanel.jTable1.columnModel.title1_1=Application
ExternalViewerGlobalSettingsPanel.jTable1.columnModel.title0_1=Mime type/Extension
AutopsyOptionsPanel.maxSolrMemoryLabel.text=Maximum Solr JVM Memory:
AutopsyOptionsPanel.maxMemoryUnitsLabel2.text=MB
AutopsyOptionsPanel.solrJVMHeapWarning.text=NOTE: Setting this too large may impact overall performance.
DataResultViewerTable.gotoPageTextField.text=
DataResultViewerTable.gotoPageLabel.AccessibleContext.accessibleName=
DataResultViewerTable.gotoPageLabel.text=Go to Page:
@ -216,3 +199,27 @@ DataResultViewerTable.exportCSVButton.text=Save Table as CSV
ViewPreferencesPanel.scoColumnsCheckbox.text=S(core), C(omments), and O(ccurences)
ViewPreferencesPanel.scoColumnsWrapAroundText.text=to reduce loading times
ViewPreferencesPanel.scoColumnsLabel.text=Do not add columns for:
AutopsyOptionsPanel.logoPanel.border.title=Logo
AutopsyOptionsPanel.agencyLogoPathFieldValidationLabel.text=
AutopsyOptionsPanel.specifyLogoRB.text=Specify a logo
AutopsyOptionsPanel.defaultLogoRB.text=Use default
AutopsyOptionsPanel.agencyLogoPreview.text=<html><div style='text-align: center;'>No logo<br>selected</div></html>
AutopsyOptionsPanel.browseLogosButton.text=Browse
AutopsyOptionsPanel.agencyLogoPathField.text=
AutopsyOptionsPanel.tempDirectoryField.text=
AutopsyOptionsPanel.tempDirectoryBrowseButton.text=Browse
AutopsyOptionsPanel.a.AccessibleContext.accessibleName=Temp Directory
AutopsyOptionsPanel.tempDirectoryPanel.AccessibleContext.accessibleName=Temp Directory
AutopsyOptionsPanel.tempDirectoryPanel.name=Temp Directory
AutopsyOptionsPanel.tempDirectoryPanel.border.title=Temp Directory
AutopsyOptionsPanel.tempDirectoryWarningLabel.text=Close the current case to change the temporary directory.
AutopsyOptionsPanel.solrJVMHeapWarning.text=NOTE: Setting this too large may impact overall performance.
AutopsyOptionsPanel.maxMemoryUnitsLabel2.text=MB
AutopsyOptionsPanel.maxSolrMemoryLabel.text=Maximum Solr JVM Memory:
AutopsyOptionsPanel.logNumAlert.text=
AutopsyOptionsPanel.maxLogFileCount.text=Maximum Log Files:
AutopsyOptionsPanel.restartNecessaryWarning.text=A restart is necessary for any memory changes to take effect.
AutopsyOptionsPanel.totalMemoryLabel.text=Total System Memory:
AutopsyOptionsPanel.maxMemoryUnitsLabel.text=GB
AutopsyOptionsPanel.maxMemoryLabel.text=Maximum JVM Memory:
AutopsyOptionsPanel.runtimePanel.border.title=Runtime

View File

@ -12,6 +12,12 @@ AutopsyOptionsPanel.memFieldValidationLabel.noValueEntered.text=No value entered
AutopsyOptionsPanel.memFieldValidationLabel.overMaxMemory.text=Value must be less than the total system memory of {0}GB
# {0} - minimumMemory
AutopsyOptionsPanel.memFieldValidationLabel.underMinMemory.text=Value must be at least {0}GB
# {0} - path
AutopsyOptionsPanel_storeTempDir_onError_description=There was an error creating the temporary directory on the filesystem at: {0}.
AutopsyOptionsPanel_storeTempDir_onError_title=Error Saving Temporary Directory
# {0} - path
AutopsyOptionsPanel_tempDirectoryBrowseButtonActionPerformed_onInvalidPath_description=Unable to create temporary directory within specified path: {0}
AutopsyOptionsPanel_tempDirectoryBrowseButtonActionPerformed_onInvalidPath_title=Path cannot be used
CTL_DataContentAction=DataContent
CTL_DataContentTopComponent=Data Content
CTL_CustomAboutAction=About
@ -169,26 +175,12 @@ MultiUserSettingsPanel.lbTestDbWarning.text=
MultiUserSettingsPanel.KeywordSearchNull=Cannot find keyword search service
MultiUserSettingsPanel.InvalidPortNumber=Invalid port number
AutopsyOptionsPanel.agencyLogoImageLabel.toolTipText=
AutopsyOptionsPanel.agencyLogoPathField.text=
SortChooserDialog.label=remove
SortChooser.addCriteriaButton.text=Add Sort Criteria
DataResultViewerThumbnail.sortButton.text=Sort
CriterionChooser.ascendingRadio.text=\u25b2 Ascending\n
CriterionChooser.removeButton.text=Remove
CriterionChooser.descendingRadio.text=\u25bc Descending
AutopsyOptionsPanel.agencyLogoPathFieldValidationLabel.text=
AutopsyOptionsPanel.logNumAlert.text=
AutopsyOptionsPanel.totalMemoryLabel.text=Total System Memory:
AutopsyOptionsPanel.maxMemoryLabel.text=Maximum JVM Memory:
AutopsyOptionsPanel.maxLogFileCount.text=Maximum Log Files:
AutopsyOptionsPanel.maxMemoryUnitsLabel.text=GB
AutopsyOptionsPanel.restartNecessaryWarning.text=A restart is necessary for any memory changes to take effect.
AutopsyOptionsPanel.browseLogosButton.text=Browse
AutopsyOptionsPanel.defaultLogoRB.text=Use default
AutopsyOptionsPanel.specifyLogoRB.text=Specify a logo
AutopsyOptionsPanel.agencyLogoPreview.text=<html><div style='text-align: center;'>No logo<br>selected</div></html>
AutopsyOptionsPanel.logoPanel.border.title=Logo
AutopsyOptionsPanel.runtimePanel.border.title=Runtime
DataResultPanel.matchLabel.text=Results
DataResultPanel.numberOfChildNodesLabel.text=0
DataResultPanel.descriptionLabel.text=directoryPath
@ -250,9 +242,6 @@ ExternalViewerGlobalSettingsPanel.deleteRuleButton.text_1=Delete Rule
ExternalViewerGlobalSettingsPanel.externalViewerTitleLabel.text_1=Set aplication viewer to use for files with specific mime types/extensions:
ExternalViewerGlobalSettingsPanel.jTable1.columnModel.title1_1=Application
ExternalViewerGlobalSettingsPanel.jTable1.columnModel.title0_1=Mime type/Extension
AutopsyOptionsPanel.maxSolrMemoryLabel.text=Maximum Solr JVM Memory:
AutopsyOptionsPanel.maxMemoryUnitsLabel2.text=MB
AutopsyOptionsPanel.solrJVMHeapWarning.text=NOTE: Setting this too large may impact overall performance.
DataResultViewerTable.gotoPageTextField.text=
DataResultViewerTable.gotoPageLabel.AccessibleContext.accessibleName=
DataResultViewerTable.gotoPageLabel.text=Go to Page:
@ -267,3 +256,27 @@ DataResultViewerTable.exportCSVButton.text=Save Table as CSV
ViewPreferencesPanel.scoColumnsCheckbox.text=S(core), C(omments), and O(ccurences)
ViewPreferencesPanel.scoColumnsWrapAroundText.text=to reduce loading times
ViewPreferencesPanel.scoColumnsLabel.text=Do not add columns for:
AutopsyOptionsPanel.logoPanel.border.title=Logo
AutopsyOptionsPanel.agencyLogoPathFieldValidationLabel.text=
AutopsyOptionsPanel.specifyLogoRB.text=Specify a logo
AutopsyOptionsPanel.defaultLogoRB.text=Use default
AutopsyOptionsPanel.agencyLogoPreview.text=<html><div style='text-align: center;'>No logo<br>selected</div></html>
AutopsyOptionsPanel.browseLogosButton.text=Browse
AutopsyOptionsPanel.agencyLogoPathField.text=
AutopsyOptionsPanel.tempDirectoryField.text=
AutopsyOptionsPanel.tempDirectoryBrowseButton.text=Browse
AutopsyOptionsPanel.a.AccessibleContext.accessibleName=Temp Directory
AutopsyOptionsPanel.tempDirectoryPanel.AccessibleContext.accessibleName=Temp Directory
AutopsyOptionsPanel.tempDirectoryPanel.name=Temp Directory
AutopsyOptionsPanel.tempDirectoryPanel.border.title=Temp Directory
AutopsyOptionsPanel.tempDirectoryWarningLabel.text=Close the current case to change the temporary directory.
AutopsyOptionsPanel.solrJVMHeapWarning.text=NOTE: Setting this too large may impact overall performance.
AutopsyOptionsPanel.maxMemoryUnitsLabel2.text=MB
AutopsyOptionsPanel.maxSolrMemoryLabel.text=Maximum Solr JVM Memory:
AutopsyOptionsPanel.logNumAlert.text=
AutopsyOptionsPanel.maxLogFileCount.text=Maximum Log Files:
AutopsyOptionsPanel.restartNecessaryWarning.text=A restart is necessary for any memory changes to take effect.
AutopsyOptionsPanel.totalMemoryLabel.text=Total System Memory:
AutopsyOptionsPanel.maxMemoryUnitsLabel.text=GB
AutopsyOptionsPanel.maxMemoryLabel.text=Maximum JVM Memory:
AutopsyOptionsPanel.runtimePanel.border.title=Runtime

View File

@ -1,29 +1,92 @@
#Tue Aug 18 18:09:21 UTC 2020
AboutWindowPanel.actVerboseLogging.text=\u8a73\u7d30\u30ed\u30ae\u30f3\u30b0\u3092\u30a2\u30af\u30c6\u30a3\u30d6\u5316
AddExternalViewerRulePanel.browseButton.text=\u53c2\u7167
AddExternalViewerRulePanel.exePathLabel.text=\u3053\u306e\u30bf\u30a4\u30d7\u307e\u305f\u306f\u62e1\u5f35\u5b50\u306e\u30d5\u30a1\u30a4\u30eb\u306b\u4f7f\u7528\u3059\u308b\u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u30d1\u30b9
AddExternalViewerRulePanel.exePathTextField.text=
AddExternalViewerRulePanel.extRadioButton.text=\u62e1\u5f35\u5b50
AddExternalViewerRulePanel.mimeRadioButton.text=MIME\u30bf\u30a4\u30d7
AddExternalViewerRulePanel.nameLabel.text=MIME\u30bf\u30a4\u30d7\u307e\u305f\u306f\u62e1\u5f35\u5b50
AddExternalViewerRulePanel.nameTextField.text=
AdvancedConfigurationDialog.applyButton.text=OK
AdvancedConfigurationDialog.cancelButton.text=\u53d6\u308a\u6d88\u3057
AutopsyOptionsPanel.agencyLogoImageLabel.toolTipText=
AutopsyOptionsPanel.agencyLogoPathField.text=
AutopsyOptionsPanel.agencyLogoPathFieldValidationLabel.invalidImageSpecified.text=\u7121\u52b9\u306e\u30a4\u30e1\u30fc\u30b8\u30d5\u30a1\u30a4\u30eb\u304c\u6307\u5b9a\u3055\u308c\u307e\u3057\u305f\u3002
AutopsyOptionsPanel.agencyLogoPathFieldValidationLabel.invalidPath.text=\u30d1\u30b9\u306f\u6709\u52b9\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002
AutopsyOptionsPanel.agencyLogoPathFieldValidationLabel.pathNotSet.text=\u30a8\u30fc\u30b8\u30a7\u30f3\u30b7\u30fc\u30ed\u30b4\u30d1\u30b9\u3092\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
AutopsyOptionsPanel.agencyLogoPathFieldValidationLabel.text=
AutopsyOptionsPanel.agencyLogoPreview.text=<html><div style\='text-align\: center;'>\u30ed\u30b4\u304c\u3042\u308a\u307e\u305b\u3093<br>selected</div></html>
AutopsyOptionsPanel.browseLogosButton.text=\u53c2\u7167
AutopsyOptionsPanel.defaultLogoRB.text=\u30c7\u30d5\u30a9\u30eb\u30c8\u3092\u4f7f\u7528
AutopsyOptionsPanel.invalidImageFile.msg=\u9078\u629e\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u3092\u30a8\u30fc\u30b8\u30a7\u30f3\u30b7\u30fc\u30ed\u30b4\u3068\u3057\u3066\u4f7f\u7528\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
AutopsyOptionsPanel.invalidImageFile.title=\u7121\u52b9\u306a\u30a4\u30e1\u30fc\u30b8\u30d5\u30a1\u30a4\u30eb\u3067\u3059
AutopsyOptionsPanel.logNumAlert.invalidInput.text=\u3053\u3053\u3067\u306f\u6b63\u306e\u6574\u6570\u304c\u5fc5\u8981\u3067\u3059\u3002
AutopsyOptionsPanel.logNumAlert.text=
AutopsyOptionsPanel.logoPanel.border.title=\u30ed\u30b4
AutopsyOptionsPanel.maxLogFileCount.text=\u6700\u5927\u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u6570\:
AutopsyOptionsPanel.maxMemoryLabel.text=\u6700\u5927JVM\u30e1\u30e2\u30ea\u30fc\:
AutopsyOptionsPanel.maxMemoryUnitsLabel.text=GB
AutopsyOptionsPanel.maxMemoryUnitsLabel2.text=MB
AutopsyOptionsPanel.maxSolrMemoryLabel.text=\u6700\u5927SolrJVM\u30e1\u30e2\u30ea\u30fc\:
AutopsyOptionsPanel.memFieldValidationLabel.developerMode.text=\u958b\u767a\u8005\u30e2\u30fc\u30c9\u3067\u5b9f\u884c\u4e2d\u306f\u30e1\u30e2\u30ea\u30fc\u8a2d\u5b9a\u304c\u5229\u7528\u3067\u304d\u307e\u305b\u3093
AutopsyOptionsPanel.memFieldValidationLabel.invalidCharacters.text=\u7121\u52b9\u306a\u6587\u5b57\u3067\u3059\u3002\u5024\u306f\u6b63\u306e\u6574\u6570\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093
AutopsyOptionsPanel.memFieldValidationLabel.not64BitInstall.text=JVM\u30e1\u30e2\u30ea\u30fc\u8a2d\u5b9a\u306f64\u30d3\u30c3\u30c8\u7248\u306b\u306e\u307f\u6709\u52b9\u3067\u3059
AutopsyOptionsPanel.memFieldValidationLabel.noValueEntered.text=\u5024\u304c\u5165\u529b\u3055\u308c\u3066\u3044\u307e\u305b\u3093
# {0} - systemMemory
AutopsyOptionsPanel.memFieldValidationLabel.not64BitInstall.text=JVM\u30e1\u30e2\u30ea\u30fc\u8a2d\u5b9a\u306f64\u30d3\u30c3\u30c8\u7248\u306b\u306e\u307f\u6709\u52b9\u3067\u3059
AutopsyOptionsPanel.memFieldValidationLabel.overMaxMemory.text=\u5024\u306f\u5408\u8a08\u30b7\u30b9\u30c6\u30e0\u30e1\u30e2\u30ea\u30fc\u306e {0}GB\u4ee5\u4e0b\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093
# {0} - minimumMemory
AutopsyOptionsPanel.memFieldValidationLabel.underMinMemory.text=\u5024\u306f\u5c11\u306a\u304f\u3068\u3082 {0}GB\u3067\u3042\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059
AutopsyOptionsPanel.restartNecessaryWarning.text=\u30e1\u30e2\u30ea\u30fc\u5909\u66f4\u3092\u6709\u52b9\u306b\u3059\u308b\u306b\u306f\u518d\u8d77\u52d5\u304c\u5fc5\u8981\u3067\u3059\u3002
AutopsyOptionsPanel.runtimePanel.border.title=\u30e9\u30f3\u30bf\u30a4\u30e0
AutopsyOptionsPanel.solrJVMHeapWarning.text=\u6ce8\: \u3053\u308c\u3092\u3042\u307e\u308a\u306b\u3082\u5927\u304d\u304f\u8a2d\u5b9a\u3059\u308b\u3068\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u5168\u4f53\u306b\u5f71\u97ff\u3059\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002
AutopsyOptionsPanel.specifyLogoRB.text=\u30ed\u30b4\u3092\u6307\u5b9a
AutopsyOptionsPanel.totalMemoryLabel.text=\u5408\u8a08\u30b7\u30b9\u30c6\u30e0\u30e1\u30e2\u30ea\u30fc\:
CTL_CustomAboutAction=\u6982\u8981
CTL_DataContentAction=DataContent
CTL_DataContentTopComponent=\u30c7\u30fc\u30bf\u30b3\u30f3\u30c6\u30f3\u30c4
CTL_CustomAboutAction=\u6982\u8981
CTL_OfflineHelpAction=Autopsy\u30aa\u30d5\u30e9\u30a4\u30f3\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8
CTL_OnlineHelpAction=Autopsy\u30aa\u30f3\u30e9\u30a4\u30f3\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8
DataContentViewerArtifact.attrsTableHeader.sources=\u30bd\u30fc\u30b9
DataContentViewerArtifact.attrsTableHeader.type=\u30bf\u30a4\u30d7
DataContentViewerArtifact.attrsTableHeader.value=\u5024
CriterionChooser.ascendingRadio.text=\u25b2 \u6607\u9806\n
CriterionChooser.descendingRadio.text=\u25bc \u964d\u9806
CriterionChooser.removeButton.text=\u524a\u9664
DataContentViewerArtifact.currentPageLabel.text=1
DataContentViewerArtifact.errorText=\u7d50\u679c\u306e\u691c\u7d22\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f
DataContentViewerArtifact.failedToGetAttributes.message=\u30b1\u30fc\u30b9\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304b\u3089\u4e00\u90e8\u307e\u305f\u306f\u3059\u3079\u3066\u306e\u5c5e\u6027\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
DataContentViewerArtifact.failedToGetSourcePath.message=\u30b1\u30fc\u30b9\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304b\u3089\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
DataContentViewerArtifact.nextPageButton.text=
DataContentViewerArtifact.ofLabel.text=/
DataContentViewerArtifact.pageLabel.text=\u7d50\u679c\:
DataContentViewerArtifact.pageLabel2.text=\u7d50\u679c
DataContentViewerArtifact.prevPageButton.text=
DataContentViewerArtifact.title=\u7d50\u679c
DataContentViewerArtifact.toolTip=\u30d5\u30a1\u30a4\u30eb\u3068\u95a2\u9023\u4ed8\u3051\u3089\u308c\u3066\u3044\u308b\u7d50\u679c\u3092\u8868\u793a
DataContentViewerArtifact.totalPageLabel.text=100
DataContentViewerArtifact.waitText=\u30c7\u30fc\u30bf\u3092\u691c\u7d22\u3057\u3066\u6e96\u5099\u4e2d\u3067\u3059\u3002\u304a\u5f85\u3061\u304f\u3060\u3055\u3044...
DataContentViewerHex.copyMenuItem.text=\u30b3\u30d4\u30fc
DataContentViewerHex.copyingFile=HxD\u3067\u958b\u304f\u30d5\u30a1\u30a4\u30eb\u3092\u30b3\u30d4\u30fc\u4e2d\u3067\u3059...
DataContentViewerHex.currentPageLabel.text_1=1
DataContentViewerHex.goToOffsetLabel.text=\u30aa\u30d5\u30bb\u30c3\u30c8\u306b\u30b8\u30e3\u30f3\u30d7
DataContentViewerHex.goToOffsetTextField.msgDlg=\u7121\u52b9\u306a\u30aa\u30d5\u30bb\u30c3\u30c8\: {0}
DataContentViewerHex.goToOffsetTextField.text=
DataContentViewerHex.goToPageLabel.text=\u30da\u30fc\u30b8\u306b\u79fb\u52d5\:
DataContentViewerHex.goToPageTextField.err=\u7121\u52b9\u306a\u30da\u30fc\u30b8\u756a\u53f7\u3067\u3059
DataContentViewerHex.goToPageTextField.msgDlg=1 \u304b\u3089 {0} \u307e\u3067\u306e\u6709\u52b9\u306a\u30da\u30fc\u30b8\u756a\u53f7\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044
DataContentViewerHex.goToPageTextField.text=
DataContentViewerHex.launchError=HxD\u30a8\u30c7\u30a3\u30bf\u30fc\u3092\u8d77\u52d5\u3067\u304d\u307e\u305b\u3093\u3002[\u30c4\u30fc\u30eb] -> [\u30aa\u30d7\u30b7\u30e7\u30f3] -> [\u5916\u90e8\u30d3\u30e5\u30fc\u30ef\u30fc] \u3067HxD\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u5834\u6240\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044
DataContentViewerHex.launchHxDButton.text=HxD\u3067\u8d77\u52d5
DataContentViewerHex.nextPageButton.text=
DataContentViewerHex.ofLabel.text_1=/
DataContentViewerHex.pageLabel.text_1=\u30da\u30fc\u30b8\:
DataContentViewerHex.pageLabel2.text=\u30da\u30fc\u30b8
DataContentViewerHex.prevPageButton.text=
DataContentViewerHex.selectAllMenuItem.text=\u3059\u3079\u3066\u3092\u9078\u629e
DataContentViewerHex.setDataView.errorText=(\u30aa\u30d5\u30bb\u30c3\u30c8 {0}-{1} \u3092\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\u3067\u3057\u305f)
DataContentViewerHex.setDataView.invalidOffset.negativeOffsetValue=\u7d50\u679c\u3068\u3057\u3066\u751f\u3058\u305f\u30aa\u30d5\u30bb\u30c3\u30c8\u306b\u30b8\u30e3\u30f3\u30d7\u3067\u304d\u307e\u305b\u3093
DataContentViewerHex.title=16\u9032\u6570
DataContentViewerHex.toolTip=\u30d5\u30a1\u30a4\u30eb\u306e\u30d0\u30a4\u30ca\u30ea\u30fc\u30b3\u30f3\u30c6\u30f3\u30c4\u309216\u9032\u6570\u3068\u3057\u3066\u8868\u793a\u3057\u307e\u3059\u3002\u53f3\u5074\u306bASCII\u6587\u5b57\u3068\u3057\u3066\u8868\u793a\u53ef\u80fd\u306a\u30d0\u30a4\u30c8\u304c\u793a\u3055\u308c\u307e\u3059\u3002
DataContentViewerHex.totalPageLabel.text_1=100
DataResultPanel.descriptionLabel.text=directoryPath
DataResultPanel.matchLabel.text=\u7d50\u679c
DataResultPanel.numberOfChildNodesLabel.text=0
DataResultPanel.pleasewaitNodeDisplayName=\u304a\u5f85\u3061\u304f\u3060\u3055\u3044...
DataResultViewerTable.commentRender.name=C
DataResultViewerTable.commentRender.toolTip=C(\u30b3\u30e1\u30f3\u30c8)\u306f\u9805\u76ee\u306b\u30b3\u30e1\u30f3\u30c8\u304c\u3042\u308b\u304b\u3069\u3046\u304b\u3092\u793a\u3057\u3066\u3044\u307e\u3059
DataResultViewerTable.commentRenderer.crAndTagComment.toolTip=\u30b3\u30e1\u30f3\u30c8\u304c\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u3068\u95a2\u9023\u4ed8\u3051\u3089\u308c\u3066\u3044\u308b\u30bf\u30b0\u306e\u4e21\u65b9\u306b\u5b58\u5728\u3057\u307e\u3059
@ -32,241 +95,167 @@ DataResultViewerTable.commentRenderer.noComment.toolTip=\u30b3\u30e1\u30f3\u30c8
DataResultViewerTable.commentRenderer.tagComment.toolTip=\u30b3\u30e1\u30f3\u30c8\u304c\u95a2\u9023\u4ed8\u3051\u3089\u308c\u3066\u3044\u308b\u30bf\u30b0\u306b\u5b58\u5728\u3057\u307e\u3059
DataResultViewerTable.countRender.name=O
DataResultViewerTable.countRender.toolTip=O(\u767a\u751f)\u306f\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u306e\u9805\u76ee\u3092\u542b\u3080\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u306e\u6570\u3092\u793a\u3057\u3066\u3044\u307e\u3059
DataResultViewerTable.exportCSVButton.text=\u30c6\u30fc\u30d6\u30eb\u3092CSV\u3068\u3057\u3066\u4fdd\u5b58
DataResultViewerTable.exportCSVButtonActionPerformed.empty=\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u3059\u308b\u30c7\u30fc\u30bf\u306f\u3042\u308a\u307e\u305b\u3093
DataResultViewerTable.firstColLbl=\u540d\u524d
DataResultViewerTable.goToPageTextField.err=\u7121\u52b9\u306a\u30da\u30fc\u30b8\u756a\u53f7\u3067\u3059
# {0} - totalPages
DataResultViewerTable.goToPageTextField.msgDlg=1 \u304b\u3089 {0} \u307e\u3067\u306e\u6709\u52b9\u306a\u30da\u30fc\u30b8\u756a\u53f7\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044
# {0} - currentPage
# {1} - totalPages
DataResultViewerTable.gotoPageLabel.AccessibleContext.accessibleName=
DataResultViewerTable.gotoPageLabel.text=\u30da\u30fc\u30b8\u306b\u79fb\u52d5\:
DataResultViewerTable.gotoPageTextField.text=
DataResultViewerTable.illegalArgExc.childWithoutPropertySet=\u5b50\u30ce\u30fc\u30c9\u306b\u306f\u6b63\u898f\u306ePropertySet\u304c\u3042\u308a\u307e\u305b\u3093\u3002
DataResultViewerTable.illegalArgExc.noChildFromParent=\u6307\u5b9a\u3057\u305f\u89aa\u304b\u3089\u5b50\u30ce\u30fc\u30c9\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
DataResultViewerTable.pageLabel.text=\u30da\u30fc\u30b8\:
DataResultViewerTable.pageNextButton.text=
DataResultViewerTable.pageNumLabel.text=
DataResultViewerTable.pageNumbers.curOfTotal={0} / {1}
DataResultViewerTable.pagePrevButton.text=
DataResultViewerTable.pagesLabel.text=\u30da\u30fc\u30b8\:
DataResultViewerTable.scoreRender.name=S
DataResultViewerTable.scoreRender.toolTip=S(\u30b9\u30b3\u30a2)\u306f\u9805\u76ee\u304c\u8208\u5473\u6df1\u3044\u304b\u9855\u8457\u306a\u3082\u306e\u3067\u3042\u308b\u304b\u3069\u3046\u304b\u3092\u793a\u3057\u3066\u3044\u307e\u3059
DataResultViewerTable.title=\u30c6\u30fc\u30d6\u30eb
DataResultViewerThumbnail.sortLabel.text=\u6b21\u3067\u30bd\u30fc\u30c8: ---
# {0} - \u30bd\u30fc\u30c8\u6761\u4ef6
DataResultViewerThumbnail.sortLabel.textTemplate=\u6b21\u3067\u30bd\u30fc\u30c8: {0}
DataResultViewerThumbnail.comboBox.largeThumbnails=\u5927\u30b5\u30a4\u30ba\u306e\u30b5\u30e0\u30cd\u30a4\u30eb
DataResultViewerThumbnail.comboBox.mediumThumbnails=\u4e2d\u30b5\u30a4\u30ba\u306e\u30b5\u30e0\u30cd\u30a4\u30eb
DataResultViewerThumbnail.comboBox.smallThumbnails=\u5c0f\u30b5\u30a4\u30ba\u306e\u30b5\u30e0\u30cd\u30a4\u30eb
DataResultViewerThumbnail.filePathLabel.text=\
DataResultViewerThumbnail.genThumbs=\u30b5\u30e0\u30cd\u30a4\u30eb\u3092\u4f5c\u6210\u4e2d\u3067\u3059...
DataResultViewerThumbnail.goToPageField.text=
DataResultViewerThumbnail.goToPageLabel.text=\u30da\u30fc\u30b8\u306b\u79fb\u52d5\:
DataResultViewerThumbnail.goToPageTextField.err=\u7121\u52b9\u306a\u30da\u30fc\u30b8\u756a\u53f7\u3067\u3059
DataResultViewerThumbnail.goToPageTextField.msgDlg=1 \u304b\u3089 {0} \u307e\u3067\u306e\u6709\u52b9\u306a\u30da\u30fc\u30b8\u756a\u53f7\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044
DataResultViewerThumbnail.imagesLabel.text=\u30a4\u30e1\u30fc\u30b8\:
DataResultViewerThumbnail.imagesRangeLabel.text=-
DataResultViewerThumbnail.pageLabel.text=\u30da\u30fc\u30b8\:
DataResultViewerThumbnail.pageNextButton.text=
DataResultViewerThumbnail.pageNumLabel.text=-
DataResultViewerThumbnail.pageNumbers.curOfTotal={0} / {1}
DataResultViewerThumbnail.pagePrevButton.text=
DataResultViewerThumbnail.pagesLabel.text=\u30da\u30fc\u30b8\:
DataResultViewerThumbnail.sortButton.text=\u30bd\u30fc\u30c8
DataResultViewerThumbnail.sortLabel.text=\u6b21\u3067\u30bd\u30fc\u30c8\: ---
DataResultViewerThumbnail.sortLabel.textTemplate=\u6b21\u3067\u30bd\u30fc\u30c8\: {0}
DataResultViewerThumbnail.switchPage.done.errMsg=\u6b21\u306e\u30b5\u30e0\u30cd\u30a4\u30eb\u3092\u4f5c\u6210\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\: {0}
DataResultViewerThumbnail.thumbnailSizeComboBox.large=\u5927\u30b5\u30a4\u30ba\u306e\u30b5\u30e0\u30cd\u30a4\u30eb
DataResultViewerThumbnail.thumbnailSizeComboBox.medium=\u4e2d\u30b5\u30a4\u30ba\u306e\u30b5\u30e0\u30cd\u30a4\u30eb
DataResultViewerThumbnail.thumbnailSizeComboBox.small=\u5c0f\u30b5\u30a4\u30ba\u306e\u30b5\u30e0\u30cd\u30a4\u30eb
OptionsCategory_Name_General=\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3
OptionsCategory_Keywords_General=Autopsy\u30aa\u30d7\u30b7\u30e7\u30f3
HINT_DataContentTopComponent=\u3053\u308c\u306fDataContent\u30a6\u30a3\u30f3\u30c9\u30a6\u3067\u3059
HINT_NodeTableTopComponent=\u3053\u308c\u306fDataResult\u30a6\u30a3\u30f3\u30c9\u30a6\u3067\u3059
OpenIDE-Module-Name=CoreComponents
DataContentViewerHex.prevPageButton.text=
DataContentViewerHex.nextPageButton.text=
DataContentViewerHex.pageLabel.text_1=\u30da\u30fc\u30b8:
DataContentViewerHex.currentPageLabel.text_1=1
DataContentViewerHex.ofLabel.text_1=/
DataContentViewerHex.totalPageLabel.text_1=100
DataContentViewerHex.pageLabel2.text=\u30da\u30fc\u30b8
# \u88fd\u54c1\u60c5\u5831\u30d1\u30cd\u30eb
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:</b> {0} ({9}) <br><b>Sleuth Kit\u30d0\u30fc\u30b8\u30e7\u30f3:</b> {7} <br><b>Netbeans RCP\u30d3\u30eb\u30c9:</b> {8} <br> <b>Java:</b> {1}; {2}<br> <b>\u30b7\u30b9\u30c6\u30e0:</b> {3}; {4}; {5}<br><b>Userdir:</b> {6}</div>
Format_OperatingSystem_Value={2} \u4e0a\u3067 {0} \u30d0\u30fc\u30b8\u30e7\u30f3 {1} \u304c\u5b9f\u884c\u4e2d\u3067\u3059
LBL_Copyright=<div style\="font-size: 12pt; font-family: Verdana, 'Verdana CE', Arial, 'Arial CE', 'Lucida Grande CE', lucida, 'Helvetica CE', sans-serif; ">Autopsy&trade; \u306fSleuth Kit&trade\u3068\u305d\u306e\u4ed6\u30c4\u30fc\u30eb\u3092\u30d9\u30fc\u30b9\u3068\u3057\u305f\u30c7\u30b8\u30bf\u30eb\u30d5\u30a9\u30ec\u30f3\u30b8\u30c3\u30af\u30fb\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067\u3059\u3002<br><ul><li>\u5168\u822c\u60c5\u5831: <a style\="color: \#1E2A60;" href\="http://www.sleuthkit.org">http://www.sleuthkit.org</a>.</li><li>\u30c8\u30ec\u30fc\u30cb\u30f3\u30b0: <a style\="color: \#1E2A60;" https://www.autopsy.com/support/training/">https://www.autopsy.com/support/training/</a></li><li>\u30b5\u30dd\u30fc\u30c8: <a style\="color: \#1E2A60;" href\="https://www.sleuthkit.org/support.php">https://www.sleuthkit.org/support.php</a></li></ul>\u8457\u4f5c\u6a29 &copy; 2003-2020.</div>
SortChooser.dialogTitle=\u30bd\u30fc\u30c8\u6761\u4ef6\u3092\u9078\u629e
ThumbnailViewChildren.progress.cancelling=(\u53d6\u308a\u6d88\u3057\u4e2d)
# {0} - \u30d5\u30a1\u30a4\u30eb\u540d
ThumbnailViewNode.progressHandle.text={0} \u306e\u30b5\u30e0\u30cd\u30a4\u30eb\u3092\u4f5c\u6210\u4e2d\u3067\u3059
URL_ON_IMG=http://www.sleuthkit.org/
FILE_FOR_LOCAL_HELP=file:///
INDEX_FOR_LOCAL_HELP=/docs/index.html
LBL_Close=\u9589\u3058\u308b
DataContentViewerHex.copyMenuItem.text=\u30b3\u30d4\u30fc
DataContentViewerHex.selectAllMenuItem.text=\u3059\u3079\u3066\u3092\u9078\u629e
DataContentViewerArtifact.totalPageLabel.text=100
DataContentViewerArtifact.prevPageButton.text=
DataContentViewerArtifact.pageLabel2.text=\u7d50\u679c
DataContentViewerArtifact.nextPageButton.text=
DataContentViewerArtifact.currentPageLabel.text=1
DataContentViewerArtifact.ofLabel.text=/
DataContentViewerArtifact.pageLabel.text=\u7d50\u679c:
AdvancedConfigurationDialog.applyButton.text=OK
DataContentViewerHex.goToPageTextField.text=
DataContentViewerHex.goToPageLabel.text=\u30da\u30fc\u30b8\u306b\u79fb\u52d5:
DataResultViewerThumbnail.pageLabel.text=\u30da\u30fc\u30b8:
DataResultViewerThumbnail.pagesLabel.text=\u30da\u30fc\u30b8:
DataResultViewerThumbnail.pagePrevButton.text=
DataResultViewerThumbnail.pageNextButton.text=
DataResultViewerThumbnail.imagesLabel.text=\u30a4\u30e1\u30fc\u30b8:
DataResultViewerThumbnail.imagesRangeLabel.text=-
DataResultViewerThumbnail.pageNumLabel.text=-
DataResultViewerThumbnail.filePathLabel.text=\ \ \
DataResultViewerThumbnail.goToPageLabel.text=\u30da\u30fc\u30b8\u306b\u79fb\u52d5:
DataResultViewerThumbnail.goToPageField.text=
AdvancedConfigurationDialog.cancelButton.text=\u53d6\u308a\u6d88\u3057
DataContentViewerArtifact.waitText=\u30c7\u30fc\u30bf\u3092\u691c\u7d22\u3057\u3066\u6e96\u5099\u4e2d\u3067\u3059\u3002\u304a\u5f85\u3061\u304f\u3060\u3055\u3044...
DataContentViewerArtifact.errorText=\u7d50\u679c\u306e\u691c\u7d22\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f
DataContentViewerArtifact.title=\u7d50\u679c
DataContentViewerArtifact.toolTip=\u30d5\u30a1\u30a4\u30eb\u3068\u95a2\u9023\u4ed8\u3051\u3089\u308c\u3066\u3044\u308b\u7d50\u679c\u3092\u8868\u793a
DataContentViewerHex.goToPageTextField.msgDlg=1 \u304b\u3089 {0} \u307e\u3067\u306e\u6709\u52b9\u306a\u30da\u30fc\u30b8\u756a\u53f7\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044
DataContentViewerHex.goToPageTextField.err=\u7121\u52b9\u306a\u30da\u30fc\u30b8\u756a\u53f7\u3067\u3059
DataContentViewerHex.setDataView.errorText=(\u30aa\u30d5\u30bb\u30c3\u30c8 {0}-{1} \u3092\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\u3067\u3057\u305f)
DataContentViewerHex.title=16\u9032\u6570
DataContentViewerHex.toolTip=\u30d5\u30a1\u30a4\u30eb\u306e\u30d0\u30a4\u30ca\u30ea\u30fc\u30b3\u30f3\u30c6\u30f3\u30c4\u309216\u9032\u6570\u3068\u3057\u3066\u8868\u793a\u3057\u307e\u3059\u3002\u53f3\u5074\u306bASCII\u6587\u5b57\u3068\u3057\u3066\u8868\u793a\u53ef\u80fd\u306a\u30d0\u30a4\u30c8\u304c\u793a\u3055\u308c\u307e\u3059\u3002
DataResultPanel.pleasewaitNodeDisplayName=\u304a\u5f85\u3061\u304f\u3060\u3055\u3044...
DataResultViewerTable.illegalArgExc.noChildFromParent=\u6307\u5b9a\u3057\u305f\u89aa\u304b\u3089\u5b50\u30ce\u30fc\u30c9\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
DataResultViewerTable.illegalArgExc.childWithoutPropertySet=\u5b50\u30ce\u30fc\u30c9\u306b\u306f\u6b63\u898f\u306ePropertySet\u304c\u3042\u308a\u307e\u305b\u3093\u3002
DataResultViewerThumbnail.title=\u30b5\u30e0\u30cd\u30a4\u30eb
DataResultViewerThumbnail.goToPageTextField.msgDlg=1 \u304b\u3089 {0} \u307e\u3067\u306e\u6709\u52b9\u306a\u30da\u30fc\u30b8\u756a\u53f7\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044
DataResultViewerThumbnail.goToPageTextField.err=\u7121\u52b9\u306a\u30da\u30fc\u30b8\u756a\u53f7\u3067\u3059
DataResultViewerThumbnail.genThumbs=\u30b5\u30e0\u30cd\u30a4\u30eb\u3092\u4f5c\u6210\u4e2d\u3067\u3059...
DataResultViewerThumbnail.pageNumbers.curOfTotal={0} / {1}
ExternalViewerGlobalSettingsPanel.HxDPath.text=C\:/Program Files/HxD/HxD.exe
ExternalViewerGlobalSettingsPanel.browseHxDDirectory.text=\u53c2\u7167
ExternalViewerGlobalSettingsPanel.browseHxDDirectory.text_1=\u53c2\u7167
ExternalViewerGlobalSettingsPanel.deleteRuleButton.text=\u30eb\u30fc\u30eb\u3092\u524a\u9664
ExternalViewerGlobalSettingsPanel.deleteRuleButton.text_1=\u30eb\u30fc\u30eb\u3092\u524a\u9664
ExternalViewerGlobalSettingsPanel.editRuleButton.text=\u30eb\u30fc\u30eb\u3092\u7de8\u96c6
ExternalViewerGlobalSettingsPanel.editRuleButton.text_1=\u30eb\u30fc\u30eb\u3092\u7de8\u96c6
ExternalViewerGlobalSettingsPanel.externalViewerTitleLabel.text=\u7279\u5b9a\u306eMIME\u30bf\u30a4\u30d7/\u62e1\u5f35\u5b50\u3092\u3082\u3064\u30d5\u30a1\u30a4\u30eb\u306b\u4f7f\u7528\u3059\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30d3\u30e5\u30fc\u30ef\u30fc\u3092\u8a2d\u5b9a\:
ExternalViewerGlobalSettingsPanel.externalViewerTitleLabel.text_1=\u7279\u5b9a\u306eMIME\u30bf\u30a4\u30d7/\u62e1\u5f35\u5b50\u3092\u3082\u3064\u30d5\u30a1\u30a4\u30eb\u306b\u4f7f\u7528\u3059\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30d3\u30e5\u30fc\u30ef\u30fc\u3092\u8a2d\u5b9a\:
ExternalViewerGlobalSettingsPanel.jButton2.text=jButton2
ExternalViewerGlobalSettingsPanel.jButton2.text_1=jButton2
ExternalViewerGlobalSettingsPanel.jLabel1.text=HxD\u30a8\u30c7\u30a3\u30bf\u30fc\u30d1\u30b9\:
ExternalViewerGlobalSettingsPanel.jLabel1.text_1=HxD\u30a8\u30c7\u30a3\u30bf\u30fc\u30d1\u30b9\:
ExternalViewerGlobalSettingsPanel.jLabel2.text=\u8d77\u52d5\u53ef\u80fd\u306a\u30b3\u30f3\u30c6\u30f3\u30c4\u30d3\u30e5\u30fc\u30ef\u30fc\u306e\u62e1\u5f35\u5b50\u3092\u8a2d\u5b9a
ExternalViewerGlobalSettingsPanel.jLabel2.text_1=\u8d77\u52d5\u53ef\u80fd\u306a\u30b3\u30f3\u30c6\u30f3\u30c4\u30d3\u30e5\u30fc\u30ef\u30fc\u306e\u62e1\u5f35\u5b50\u3092\u8a2d\u5b9a
ExternalViewerGlobalSettingsPanel.jTable1.columnModel.title0=MIME\u30bf\u30a4\u30d7/\u62e1\u5f35\u5b50
ExternalViewerGlobalSettingsPanel.jTable1.columnModel.title0_1=MIME\u30bf\u30a4\u30d7/\u62e1\u5f35\u5b50
ExternalViewerGlobalSettingsPanel.jTable1.columnModel.title1=\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3
ExternalViewerGlobalSettingsPanel.jTable1.columnModel.title1_1=\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3
ExternalViewerGlobalSettingsPanel.newRuleButton.text=\u65b0\u898f\u30eb\u30fc\u30eb
ExternalViewerGlobalSettingsPanel.newRuleButton.text_1=\u65b0\u898f\u30eb\u30fc\u30eb
ExternalViewerGlobalSettingsPanel.newRuleButton1.text=\u65b0\u898f\u30eb\u30fc\u30eb
ExternalViewerGlobalSettingsPanel.newRuleButton1.text_1=\u65b0\u898f\u30eb\u30fc\u30eb
FILE_FOR_LOCAL_HELP=file\:///
Format_OperatingSystem_Value={2} \u4e0a\u3067 {0} \u30d0\u30fc\u30b8\u30e7\u30f3 {1} \u304c\u5b9f\u884c\u4e2d\u3067\u3059
GeneralOptionsPanelController.moduleErr=\u30e2\u30b8\u30e5\u30fc\u30eb\u30a8\u30e9\u30fc
GeneralOptionsPanelController.moduleErr.msg=GeneralOptionsPanelController\u66f4\u65b0\u306e\u30ea\u30c3\u30b9\u30f3\u4e2d\u306b\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u30a8\u30e9\u30fc\u3092\u767a\u751f\u3055\u305b\u307e\u3057\u305f\u3002\u30ed\u30b0\u3092\u78ba\u8a8d\u3057\u3066\u3069\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u5224\u65ad\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u4e00\u90e8\u306e\u30c7\u30fc\u30bf\u304c\u4e0d\u5b8c\u5168\u3067\u3042\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002
ProductInformationPanel.verbLoggingEnabled.text=\u8a73\u7d30\u30ed\u30ae\u30f3\u30b0\u304c\u6709\u52b9\u306b\u306a\u3063\u3066\u3044\u307e\u3059
ProductInformationPanel.propertyUnknown.text=\u4e0d\u660e
ProductInformationPanel.getVMValue.text={0} {1}
TableFilterNode.displayName.text=\u540d\u524d
DataResultViewerThumbnail.comboBox.smallThumbnails=\u5c0f\u30b5\u30a4\u30ba\u306e\u30b5\u30e0\u30cd\u30a4\u30eb
DataResultViewerThumbnail.comboBox.mediumThumbnails=\u4e2d\u30b5\u30a4\u30ba\u306e\u30b5\u30e0\u30cd\u30a4\u30eb
DataResultViewerThumbnail.comboBox.largeThumbnails=\u5927\u30b5\u30a4\u30ba\u306e\u30b5\u30e0\u30cd\u30a4\u30eb
DataResultViewerThumbnail.switchPage.done.errMsg=\u6b21\u306e\u30b5\u30e0\u30cd\u30a4\u30eb\u3092\u4f5c\u6210\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: {0}
AboutWindowPanel.actVerboseLogging.text=\u8a73\u7d30\u30ed\u30ae\u30f3\u30b0\u3092\u30a2\u30af\u30c6\u30a3\u30d6\u5316
OptionsCategory_Name_Multi_User_Settings=\u30de\u30eb\u30c1\u30e6\u30fc\u30b6\u30fc
OptionsCategory_Keywords_Multi_User_Options=\u30de\u30eb\u30c1\u30e6\u30fc\u30b6\u30fc\u8a2d\u5b9a
MultiUserSettingsPanel.lbSolrSettings.text=Solr\u8a2d\u5b9a
MultiUserSettingsPanel.cbEnableMultiUser.text=\u30de\u30eb\u30c1\u30e6\u30fc\u30b6\u30fc\u30b1\u30fc\u30b9\u3092\u6709\u52b9\u5316
MultiUserSettingsPanel.lbDatabaseSettings.text=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u8a2d\u5b9a
MultiUserSettingsPanel.validationErrMsg.incomplete=\u3059\u3079\u3066\u306e\u5024\u3092\u5165\u529b
MultiUserSettingsPanel.nonWindowsOs.msg=\u30de\u30eb\u30c1\u30e6\u30fc\u30b6\u30fc\u30b1\u30fc\u30b9\u306fWindows\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u4e0a\u3067\u306e\u307f\u5229\u7528\u3067\u304d\u307e\u3059
MultiUserSettingsPanel.validationErrMsg.invalidDatabasePort=\u7121\u52b9\u306a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30dd\u30fc\u30c8\u756a\u53f7\u3067\u3059
MultiUserSettingsPanel.validationErrMsg.invalidMessageServicePort=\u7121\u52b9\u306a\u30e1\u30c3\u30bb\u30fc\u30b8\u30b5\u30fc\u30d3\u30b9\u306e\u30dd\u30fc\u30c8\u756a\u53f7\u3067\u3059
MultiUserSettingsPanel.validationErrMsg.invalidIndexingServerPort=\u7121\u52b9\u306aSolr \u30b5\u30fc\u30d0\u30fc\u306e\u30dd\u30fc\u30c8\u756a\u53f7\u3067\u3059
MultiUserSettingsPanel.validationErrMsg.invalidMessgeServiceURI=\u6709\u52b9\u3067\u306f\u306a\u3044\u30e1\u30c3\u30bb\u30fc\u30b8\u30b5\u30fc\u30d3\u30b9\u30db\u30b9\u30c8\u304a\u3088\u3073/\u307e\u305f\u306f\u30dd\u30fc\u30c8\u3067\u3059
DataContentViewerHex.goToOffsetLabel.text=\u30aa\u30d5\u30bb\u30c3\u30c8\u306b\u30b8\u30e3\u30f3\u30d7
DataContentViewerHex.goToOffsetTextField.text=
DataContentViewerHex.goToOffsetTextField.msgDlg=\u7121\u52b9\u306a\u30aa\u30d5\u30bb\u30c3\u30c8: {0}
DataContentViewerHex.setDataView.invalidOffset.negativeOffsetValue=\u7d50\u679c\u3068\u3057\u3066\u751f\u3058\u305f\u30aa\u30d5\u30bb\u30c3\u30c8\u306b\u30b8\u30e3\u30f3\u30d7\u3067\u304d\u307e\u305b\u3093
MultiUserSettingsPanel.tbOops.text=
MultiUserSettingsPanel.lbTestDatabase.text=
HINT_DataContentTopComponent=\u3053\u308c\u306fDataContent\u30a6\u30a3\u30f3\u30c9\u30a6\u3067\u3059
HINT_NodeTableTopComponent=\u3053\u308c\u306fDataResult\u30a6\u30a3\u30f3\u30c9\u30a6\u3067\u3059
INDEX_FOR_LOCAL_HELP=/docs/index.html
LBL_Close=\u9589\u3058\u308b
LBL_Copyright=<div style \= "font-size\uff1a12pt; font-family\uff1aVerdana\u3001 'Verdana CE'\u3001Arial\u3001 'Arial CE'\u3001 'Lucida Grande CE'\u3001lucida\u3001 'Helvetica CE'\u3001sans-serif;">Autopsy&trade; \u306f The Sleuth Kit&trade; \u304a\u3088\u3073\u305d\u306e\u4ed6\u306e\u30c4\u30fc\u30eb\u306b\u57fa\u3065\u304f\u30c7\u30b8\u30bf\u30eb\u79d1\u5b66\u635c\u67fb\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3002 <br> <ul> <li>\u60c5\u5831\uff1a<a style \= "color\uff1a\uff031E2A60;" href \= "http\://www.sleuthkit.org"> http\://www.sleuthkit.org </a>\u3002</ li> <li>\u30c8\u30ec\u30fc\u30cb\u30f3\u30b0\uff1a<a style \= "color\uff1a\uff031E2A60;" href \= "https\://www.autopsy.com/support/training/"> https\://www.autopsy.com/support/training/ </a> </ li> <li>\u30b5\u30dd\u30fc\u30c8\uff1a<a style\="color\: \#1E2A60;" href\="https\://www.sleuthkit.org/support.php">https\://www.sleuthkit.org/support.php</a></li></ul>Copyright &copy; 2003-2020. </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\:</b> {0} ({9}) <br><b>Sleuth Kit\u30d0\u30fc\u30b8\u30e7\u30f3\:</b> {7} <br><b>Netbeans RCP\u30d3\u30eb\u30c9\:</b> {8} <br> <b>Java\:</b> {1}; {2}<br> <b>\u30b7\u30b9\u30c6\u30e0\:</b> {3}; {4}; {5}<br><b>Userdir\:</b> {6}</div>
MultiUserSettingsPanel.InvalidPortNumber=\u7121\u52b9\u306a\u30dd\u30fc\u30c8\u756a\u53f7\u3067\u3059
MultiUserSettingsPanel.KeywordSearchNull=\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u30b5\u30fc\u30d3\u30b9\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093
MultiUserSettingsPanel.bnTestDatabase.text=\u30c6\u30b9\u30c8
MultiUserSettingsPanel.tbDbHostname.toolTipText=\u30db\u30b9\u30c8\u540d\u307e\u305f\u306fIP\u30a2\u30c9\u30ec\u30b9
MultiUserSettingsPanel.tbDbHostname.text=
MultiUserSettingsPanel.tbDbPort.toolTipText=\u30dd\u30fc\u30c8\u756a\u53f7
MultiUserSettingsPanel.tbDbPort.text=
MultiUserSettingsPanel.tbDbUsername.toolTipText=\u30e6\u30fc\u30b6\u30fc\u540d
MultiUserSettingsPanel.tbDbUsername.text=
MultiUserSettingsPanel.tbDbPassword.toolTipText=\u30d1\u30b9\u30ef\u30fc\u30c9
MultiUserSettingsPanel.tbDbPassword.text=
MultiUserSettingsPanel.lbTestSolr.text=
MultiUserSettingsPanel.bnTestMessageService.text=\u30c6\u30b9\u30c8
MultiUserSettingsPanel.bnTestSolr.text=\u30c6\u30b9\u30c8
MultiUserSettingsPanel.cbEnableMultiUser.text=\u30de\u30eb\u30c1\u30e6\u30fc\u30b6\u30fc\u30b1\u30fc\u30b9\u3092\u6709\u52b9\u5316
MultiUserSettingsPanel.lbDatabaseSettings.text=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30fb\u30b5\u30fc\u30d0\u30fc\u8a2d\u5b9a
MultiUserSettingsPanel.lbMessageServiceSettings.text=ActiveMQ\u30e1\u30c3\u30bb\u30fc\u30b8\u30b5\u30fc\u30d0\u30fc\u306e\u8a2d\u5b9a
MultiUserSettingsPanel.lbSolrSettings.text=Solr\u30b5\u30fc\u30d0\u30fc\u8a2d\u5b9a
MultiUserSettingsPanel.lbTestDatabase.text=
MultiUserSettingsPanel.lbTestDbWarning.text=
MultiUserSettingsPanel.lbTestMessageService.text=
MultiUserSettingsPanel.lbTestMessageWarning.text=
MultiUserSettingsPanel.lbTestSolr.text=
MultiUserSettingsPanel.lbTestSolrWarning.text=
MultiUserSettingsPanel.nonWindowsOs.msg=\u30de\u30eb\u30c1\u30e6\u30fc\u30b6\u30fc\u30b1\u30fc\u30b9\u306fWindows\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u4e0a\u3067\u306e\u307f\u5229\u7528\u3067\u304d\u307e\u3059
MultiUserSettingsPanel.tbDbHostname.text=
MultiUserSettingsPanel.tbDbHostname.toolTipText=\u30db\u30b9\u30c8\u540d\u307e\u305f\u306fIP\u30a2\u30c9\u30ec\u30b9
MultiUserSettingsPanel.tbDbPassword.text=
MultiUserSettingsPanel.tbDbPassword.toolTipText=\u30d1\u30b9\u30ef\u30fc\u30c9
MultiUserSettingsPanel.tbDbPort.text=
MultiUserSettingsPanel.tbDbPort.toolTipText=\u30dd\u30fc\u30c8\u756a\u53f7
MultiUserSettingsPanel.tbDbUsername.text=
MultiUserSettingsPanel.tbDbUsername.toolTipText=\u30e6\u30fc\u30b6\u30fc\u540d
MultiUserSettingsPanel.tbMsgHostname.text=
MultiUserSettingsPanel.tbMsgHostname.toolTipText=\u30db\u30b9\u30c8\u540d\u307e\u305f\u306fIP\u30a2\u30c9\u30ec\u30b9
MultiUserSettingsPanel.tbMsgPassword.text=
MultiUserSettingsPanel.tbMsgPassword.toolTipText=\u30d1\u30b9\u30ef\u30fc\u30c9(\u4efb\u610f)
MultiUserSettingsPanel.tbMsgPort.text=
MultiUserSettingsPanel.tbMsgPort.toolTipText=\u30dd\u30fc\u30c8\u756a\u53f7
MultiUserSettingsPanel.tbMsgUsername.text=
MultiUserSettingsPanel.tbMsgUsername.toolTipText=\u30e6\u30fc\u30b6\u30fc\u540d(\u4efb\u610f)
MultiUserSettingsPanel.tbOops.text=
MultiUserSettingsPanel.tbSolrHostname.toolTipText=\u30db\u30b9\u30c8\u540d\u307e\u305f\u306fIP\u30a2\u30c9\u30ec\u30b9
MultiUserSettingsPanel.tbSolrPort.toolTipText=\u30dd\u30fc\u30c8\u756a\u53f7
MultiUserSettingsPanel.lbTestMessageService.text=
MultiUserSettingsPanel.bnTestMessageService.text=\u30c6\u30b9\u30c8
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.text=
MultiUserSettingsPanel.tbMsgUsername.toolTipText=\u30e6\u30fc\u30b6\u30fc\u540d(\u4efb\u610f)
MultiUserSettingsPanel.tbMsgUsername.text=
MultiUserSettingsPanel.tbMsgPassword.toolTipText=\u30d1\u30b9\u30ef\u30fc\u30c9(\u4efb\u610f)
MultiUserSettingsPanel.tbMsgPassword.text=
MultiUserSettingsPanel.tbMsgHostname.toolTipText=\u30db\u30b9\u30c8\u540d\u307e\u305f\u306fIP\u30a2\u30c9\u30ec\u30b9
MultiUserSettingsPanel.tbMsgHostname.text=
MultiUserSettingsPanel.lbTestMessageWarning.text=
MultiUserSettingsPanel.lbTestSolrWarning.text=
MultiUserSettingsPanel.lbTestDbWarning.text=
MultiUserSettingsPanel.KeywordSearchNull=\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u30b5\u30fc\u30d3\u30b9\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093
MultiUserSettingsPanel.InvalidPortNumber=\u7121\u52b9\u306a\u30dd\u30fc\u30c8\u756a\u53f7\u3067\u3059
AutopsyOptionsPanel.agencyLogoImageLabel.toolTipText=
AutopsyOptionsPanel.agencyLogoPathField.text=
SortChooserDialog.label=\u524a\u9664
MultiUserSettingsPanel.validationErrMsg.incomplete=\u3059\u3079\u3066\u306e\u5024\u3092\u5165\u529b
MultiUserSettingsPanel.validationErrMsg.invalidDatabasePort=\u7121\u52b9\u306a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30dd\u30fc\u30c8\u756a\u53f7\u3067\u3059
MultiUserSettingsPanel.validationErrMsg.invalidIndexingServerPort=\u7121\u52b9\u306aSolr \u30b5\u30fc\u30d0\u30fc\u306e\u30dd\u30fc\u30c8\u756a\u53f7\u3067\u3059
MultiUserSettingsPanel.validationErrMsg.invalidMessageServicePort=\u7121\u52b9\u306a\u30e1\u30c3\u30bb\u30fc\u30b8\u30b5\u30fc\u30d3\u30b9\u306e\u30dd\u30fc\u30c8\u756a\u53f7\u3067\u3059
MultiUserSettingsPanel.validationErrMsg.invalidMessgeServiceURI=\u6709\u52b9\u3067\u306f\u306a\u3044\u30e1\u30c3\u30bb\u30fc\u30b8\u30b5\u30fc\u30d3\u30b9\u30db\u30b9\u30c8\u304a\u3088\u3073/\u307e\u305f\u306f\u30dd\u30fc\u30c8\u3067\u3059
OpenIDE-Module-Name=CoreComponents
OptionsCategory_Keywords_General=Autopsy\u30aa\u30d7\u30b7\u30e7\u30f3
OptionsCategory_Keywords_Multi_User_Options=\u30de\u30eb\u30c1\u30e6\u30fc\u30b6\u30fc\u8a2d\u5b9a
OptionsCategory_Keywords_View=\u8868\u793a
OptionsCategory_Name_General=\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3
OptionsCategory_Name_Multi_User_Settings=\u30de\u30eb\u30c1\u30e6\u30fc\u30b6\u30fc
OptionsCategory_Name_View=\u8868\u793a
ProductInformationPanel.getVMValue.text={0} {1}
ProductInformationPanel.propertyUnknown.text=\u4e0d\u660e
ProductInformationPanel.verbLoggingEnabled.text=\u8a73\u7d30\u30ed\u30ae\u30f3\u30b0\u304c\u6709\u52b9\u306b\u306a\u3063\u3066\u3044\u307e\u3059
SortChooser.addCriteriaButton.text=\u30bd\u30fc\u30c8\u6761\u4ef6\u3092\u8ffd\u52a0
DataResultViewerThumbnail.sortButton.text=\u30bd\u30fc\u30c8
CriterionChooser.ascendingRadio.text=\u25b2 \u6607\u9806\n
CriterionChooser.removeButton.text=\u524a\u9664
CriterionChooser.descendingRadio.text=\u25bc \u964d\u9806
AutopsyOptionsPanel.agencyLogoPathFieldValidationLabel.text=
AutopsyOptionsPanel.logNumAlert.text=
AutopsyOptionsPanel.totalMemoryLabel.text=\u5408\u8a08\u30b7\u30b9\u30c6\u30e0\u30e1\u30e2\u30ea\u30fc:
AutopsyOptionsPanel.maxMemoryLabel.text=\u6700\u5927JVM\u30e1\u30e2\u30ea\u30fc:
AutopsyOptionsPanel.maxLogFileCount.text=\u6700\u5927\u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u6570:
AutopsyOptionsPanel.maxMemoryUnitsLabel.text=GB
AutopsyOptionsPanel.restartNecessaryWarning.text=\u30e1\u30e2\u30ea\u30fc\u5909\u66f4\u3092\u6709\u52b9\u306b\u3059\u308b\u306b\u306f\u518d\u8d77\u52d5\u304c\u5fc5\u8981\u3067\u3059\u3002
AutopsyOptionsPanel.browseLogosButton.text=\u53c2\u7167
AutopsyOptionsPanel.defaultLogoRB.text=\u30c7\u30d5\u30a9\u30eb\u30c8\u3092\u4f7f\u7528
AutopsyOptionsPanel.specifyLogoRB.text=\u30ed\u30b4\u3092\u6307\u5b9a
AutopsyOptionsPanel.agencyLogoPreview.text=<html><div style='text-align: center;'>\u30ed\u30b4\u304c\u3042\u308a\u307e\u305b\u3093<br>selected</div></html>
AutopsyOptionsPanel.logoPanel.border.title=\u30ed\u30b4
AutopsyOptionsPanel.runtimePanel.border.title=\u30e9\u30f3\u30bf\u30a4\u30e0
DataResultPanel.matchLabel.text=\u7d50\u679c
DataResultPanel.numberOfChildNodesLabel.text=0
DataResultPanel.descriptionLabel.text=directoryPath
SortChooser.dialogTitle=\u30bd\u30fc\u30c8\u6761\u4ef6\u3092\u9078\u629e
SortChooserDialog.label=\u524a\u9664
TableFilterNode.displayName.text=\u540d\u524d
ThumbnailViewChildren.progress.cancelling=(\u53d6\u308a\u6d88\u3057\u4e2d)
ThumbnailViewNode.progressHandle.text={0} \u306e\u30b5\u30e0\u30cd\u30a4\u30eb\u3092\u4f5c\u6210\u4e2d\u3067\u3059
URL_ON_IMG=http\://www.sleuthkit.org/
ViewOptionsController.moduleErr=\u5024\u306e\u5909\u66f4\u3092\u51e6\u7406\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
ViewOptionsController.moduleErr.msg=\u5024\u306e\u5909\u66f4\u306e\u51e6\u7406\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002
ViewPreferencesPanel.groupByDataSourceCheckbox.text=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u5225\u306b\u30b0\u30eb\u30fc\u30d7\u5316
ViewPreferencesPanel.currentCaseSettingsPanel.border.title=\u73fe\u5728\u306e\u30b1\u30fc\u30b9\u8a2d\u5b9a
OptionsCategory_Name_View=\u8868\u793a
OptionsCategory_Keywords_View=\u8868\u793a
ViewPreferencesPanel.currentSessionSettingsPanel.border.title=\u73fe\u5728\u306e\u30bb\u30c3\u30b7\u30e7\u30f3\u8a2d\u5b9a
ViewPreferencesPanel.hideRejectedResultsCheckbox.text=\u62d2\u5426\u3055\u308c\u305f\u7d50\u679c\u3092\u975e\u8868\u793a\u306b\u3059\u308b
ViewPreferencesPanel.selectFileLabel.text=\u30d5\u30a1\u30a4\u30eb\u9078\u629e\u6642:
ViewPreferencesPanel.globalSettingsPanel.border.title=\u30b0\u30ed\u30fc\u30d0\u30eb\u8a2d\u5b9a
ViewPreferencesPanel.translateTextLabel.text=\u30c6\u30ad\u30b9\u30c8\u3092\u7ffb\u8a33:
ViewPreferencesPanel.hideOtherUsersTagsLabel.text=\u6b21\u306e\u305d\u306e\u4ed6\u306e\u30e6\u30fc\u30b6\u30fc\u306e\u30bf\u30b0\u3092\u975e\u8868\u793a\u306b\u3059\u308b:
ViewPreferencesPanel.hideOtherUsersTagsCheckbox.text=\u30c4\u30ea\u30fc\u5185\u306e\u30bf\u30b0\u9818\u57df
ViewPreferencesPanel.useAnotherTimeRadioButton.text=\u5225\u306e\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u4f7f\u7528
ViewPreferencesPanel.useLocalTimeRadioButton.text=\u30ed\u30fc\u30ab\u30eb\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u4f7f\u7528
ViewPreferencesPanel.displayTimeLabel.text=\u6642\u523b\u8868\u793a\u6642:
ViewPreferencesPanel.viewsHideSlackCheckbox.text=\u30d3\u30e5\u30fc\u9818\u57df
ViewPreferencesPanel.dataSourcesHideSlackCheckbox.text=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u9818\u57df(\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u968e\u5c64)
ViewPreferencesPanel.hideSlackFilesLabel.text=\u6b21\u306e\u30b9\u30e9\u30c3\u30af\u30d5\u30a1\u30a4\u30eb\u3092\u975e\u8868\u793a\u306b\u3059\u308b:
ViewPreferencesPanel.viewsHideKnownCheckbox.text=\u30d3\u30e5\u30fc\u9818\u57df
ViewPreferencesPanel.dataSourcesHideKnownCheckbox.text=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u9818\u57df(\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u968e\u5c64)
ViewPreferencesPanel.hideKnownFilesLabel.text=\u6b21\u306e\u65e2\u77e5\u306e\u30d5\u30a1\u30a4\u30eb(NIST NSRL\u5185\u306e\u30d5\u30a1\u30a4\u30eb)\u3092\u975e\u8868\u793a\u306b\u3059\u308b:
ViewPreferencesPanel.keepCurrentViewerRadioButton.toolTipText=\u305f\u3068\u3048\u3070\u3001JPEG\u9078\u629e\u6642\u306f16\u9032\u30d3\u30e5\u30fc\u306e\u307e\u307e\u306b\u3057\u307e\u3059\u3002
ViewPreferencesPanel.keepCurrentViewerRadioButton.text=\u540c\u3058\u30d5\u30a1\u30a4\u30eb\u30d3\u30e5\u30fc\u306e\u307e\u307e\u306b\u3059\u308b
ViewPreferencesPanel.useBestViewerRadioButton.toolTipText=\u305f\u3068\u3048\u3070\u3001JPEG\u9078\u629e\u6642\u306f16\u9032\u304b\u3089\u30e1\u30c7\u30a3\u30a2\u306b\u5207\u308a\u66ff\u3048\u307e\u3059\u3002
ViewPreferencesPanel.useBestViewerRadioButton.text=\u6700\u3082\u56fa\u6709\u306e\u30d5\u30a1\u30a4\u30eb\u30d3\u30e5\u30fc\u306b\u5207\u308a\u66ff\u3048\u308b
ViewPreferencesPanel.dataSourcesHideSlackCheckbox.text=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u9818\u57df(\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u968e\u5c64)
ViewPreferencesPanel.displayTimeLabel.text=\u6642\u523b\u8868\u793a\u6642\:
ViewPreferencesPanel.fileNameTranslationColumnCheckbox.text=\u7d50\u679c\u30d3\u30e5\u30fc\u30ef\u30fc\u306b\u30d5\u30a1\u30a4\u30eb\u540d\u7ffb\u8a33\u7528\u5217\u3092\u8ffd\u52a0
DataContentViewerHex.launchHxDButton.text=HxD\u3067\u8d77\u52d5
ExternalViewerGlobalSettingsPanel.jButton2.text=jButton2
ExternalViewerGlobalSettingsPanel.newRuleButton1.text=\u65b0\u898f\u30eb\u30fc\u30eb
ExternalViewerGlobalSettingsPanel.newRuleButton.text=\u65b0\u898f\u30eb\u30fc\u30eb
ExternalViewerGlobalSettingsPanel.browseHxDDirectory.text=\u53c2\u7167
ExternalViewerGlobalSettingsPanel.jLabel2.text=\u8d77\u52d5\u53ef\u80fd\u306a\u30b3\u30f3\u30c6\u30f3\u30c4\u30d3\u30e5\u30fc\u30ef\u30fc\u306e\u62e1\u5f35\u5b50\u3092\u8a2d\u5b9a
ExternalViewerGlobalSettingsPanel.jLabel1.text=HxD\u30a8\u30c7\u30a3\u30bf\u30fc\u30d1\u30b9:
ExternalViewerGlobalSettingsPanel.editRuleButton.text=\u30eb\u30fc\u30eb\u3092\u7de8\u96c6
ExternalViewerGlobalSettingsPanel.deleteRuleButton.text=\u30eb\u30fc\u30eb\u3092\u524a\u9664
ExternalViewerGlobalSettingsPanel.externalViewerTitleLabel.text=\u7279\u5b9a\u306eMIME\u30bf\u30a4\u30d7/\u62e1\u5f35\u5b50\u3092\u3082\u3064\u30d5\u30a1\u30a4\u30eb\u306b\u4f7f\u7528\u3059\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30d3\u30e5\u30fc\u30ef\u30fc\u3092\u8a2d\u5b9a:
ExternalViewerGlobalSettingsPanel.jTable1.columnModel.title1=\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3
ExternalViewerGlobalSettingsPanel.jTable1.columnModel.title0=MIME\u30bf\u30a4\u30d7/\u62e1\u5f35\u5b50
AddExternalViewerRulePanel.nameLabel.text=MIME\u30bf\u30a4\u30d7\u307e\u305f\u306f\u62e1\u5f35\u5b50
AddExternalViewerRulePanel.browseButton.text=\u53c2\u7167
AddExternalViewerRulePanel.exePathTextField.text=
AddExternalViewerRulePanel.exePathLabel.text=\u3053\u306e\u30bf\u30a4\u30d7\u307e\u305f\u306f\u62e1\u5f35\u5b50\u306e\u30d5\u30a1\u30a4\u30eb\u306b\u4f7f\u7528\u3059\u308b\u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u30d1\u30b9
AddExternalViewerRulePanel.extRadioButton.text=\u62e1\u5f35\u5b50
AddExternalViewerRulePanel.mimeRadioButton.text=MIME\u30bf\u30a4\u30d7
AddExternalViewerRulePanel.nameTextField.text=
ExternalViewerGlobalSettingsPanel.jButton2.text_1=jButton2
ExternalViewerGlobalSettingsPanel.newRuleButton1.text_1=\u65b0\u898f\u30eb\u30fc\u30eb
ExternalViewerGlobalSettingsPanel.newRuleButton.text_1=\u65b0\u898f\u30eb\u30fc\u30eb
ExternalViewerGlobalSettingsPanel.browseHxDDirectory.text_1=\u53c2\u7167
ExternalViewerGlobalSettingsPanel.jLabel2.text_1=\u8d77\u52d5\u53ef\u80fd\u306a\u30b3\u30f3\u30c6\u30f3\u30c4\u30d3\u30e5\u30fc\u30ef\u30fc\u306e\u62e1\u5f35\u5b50\u3092\u8a2d\u5b9a
ExternalViewerGlobalSettingsPanel.jLabel1.text_1=HxD\u30a8\u30c7\u30a3\u30bf\u30fc\u30d1\u30b9:
ExternalViewerGlobalSettingsPanel.HxDPath.text=C:/Program Files/HxD/HxD.exe
ExternalViewerGlobalSettingsPanel.editRuleButton.text_1=\u30eb\u30fc\u30eb\u3092\u7de8\u96c6
ExternalViewerGlobalSettingsPanel.deleteRuleButton.text_1=\u30eb\u30fc\u30eb\u3092\u524a\u9664
ExternalViewerGlobalSettingsPanel.externalViewerTitleLabel.text_1=\u7279\u5b9a\u306eMIME\u30bf\u30a4\u30d7/\u62e1\u5f35\u5b50\u3092\u3082\u3064\u30d5\u30a1\u30a4\u30eb\u306b\u4f7f\u7528\u3059\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30d3\u30e5\u30fc\u30ef\u30fc\u3092\u8a2d\u5b9a:
ExternalViewerGlobalSettingsPanel.jTable1.columnModel.title1_1=\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3
ExternalViewerGlobalSettingsPanel.jTable1.columnModel.title0_1=MIME\u30bf\u30a4\u30d7/\u62e1\u5f35\u5b50
AutopsyOptionsPanel.maxSolrMemoryLabel.text=\u6700\u5927SolrJVM\u30e1\u30e2\u30ea\u30fc:
AutopsyOptionsPanel.maxMemoryUnitsLabel2.text=MB
AutopsyOptionsPanel.solrJVMHeapWarning.text=\u6ce8: \u3053\u308c\u3092\u3042\u307e\u308a\u306b\u3082\u5927\u304d\u304f\u8a2d\u5b9a\u3059\u308b\u3068\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u5168\u4f53\u306b\u5f71\u97ff\u3059\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002
DataResultViewerTable.gotoPageTextField.text=
DataResultViewerTable.gotoPageLabel.AccessibleContext.accessibleName=
DataResultViewerTable.gotoPageLabel.text=\u30da\u30fc\u30b8\u306b\u79fb\u52d5:
DataResultViewerTable.pageNextButton.text=
DataResultViewerTable.pagePrevButton.text=
DataResultViewerTable.pagesLabel.text=\u30da\u30fc\u30b8:
DataResultViewerTable.pageNumLabel.text=
DataResultViewerTable.pageLabel.text=\u30da\u30fc\u30b8:
ViewPreferencesPanel.maxResultsLabel.text=\u30c6\u30fc\u30d6\u30eb\u3067\u8868\u793a\u3059\u308b\u6700\u5927\u7d50\u679c\u6570:
ViewPreferencesPanel.globalSettingsPanel.border.title=\u30b0\u30ed\u30fc\u30d0\u30eb\u8a2d\u5b9a
ViewPreferencesPanel.groupByDataSourceCheckbox.text=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u5225\u306b\u30b0\u30eb\u30fc\u30d7\u5316
ViewPreferencesPanel.hideKnownFilesLabel.text=\u6b21\u306e\u65e2\u77e5\u306e\u30d5\u30a1\u30a4\u30eb(NIST NSRL\u5185\u306e\u30d5\u30a1\u30a4\u30eb)\u3092\u975e\u8868\u793a\u306b\u3059\u308b\:
ViewPreferencesPanel.hideOtherUsersTagsCheckbox.text=\u30c4\u30ea\u30fc\u5185\u306e\u30bf\u30b0\u9818\u57df
ViewPreferencesPanel.hideOtherUsersTagsLabel.text=\u6b21\u306e\u305d\u306e\u4ed6\u306e\u30e6\u30fc\u30b6\u30fc\u306e\u30bf\u30b0\u3092\u975e\u8868\u793a\u306b\u3059\u308b\:
ViewPreferencesPanel.hideRejectedResultsCheckbox.text=\u62d2\u5426\u3055\u308c\u305f\u7d50\u679c\u3092\u975e\u8868\u793a\u306b\u3059\u308b
ViewPreferencesPanel.hideSlackFilesLabel.text=\u6b21\u306e\u30b9\u30e9\u30c3\u30af\u30d5\u30a1\u30a4\u30eb\u3092\u975e\u8868\u793a\u306b\u3059\u308b\:
ViewPreferencesPanel.keepCurrentViewerRadioButton.text=\u540c\u3058\u30d5\u30a1\u30a4\u30eb\u30d3\u30e5\u30fc\u306e\u307e\u307e\u306b\u3059\u308b
ViewPreferencesPanel.keepCurrentViewerRadioButton.toolTipText=\u305f\u3068\u3048\u3070\u3001JPEG\u9078\u629e\u6642\u306f16\u9032\u30d3\u30e5\u30fc\u306e\u307e\u307e\u306b\u3057\u307e\u3059\u3002
ViewPreferencesPanel.maxResultsLabel.text=\u30c6\u30fc\u30d6\u30eb\u3067\u8868\u793a\u3059\u308b\u6700\u5927\u7d50\u679c\u6570\:
ViewPreferencesPanel.maxResultsLabel.toolTipText=<html>\n\u3053\u306e\u5024\u30920 \u306b\u8a2d\u5b9a\u3059\u308b\u3068\u3001\u3059\u3079\u3066\u306e\u7d50\u679c\u304c\u7d50\u679c\u30c6\u30fc\u30d6\u30eb\u306b\u8868\u793a\u3055\u308c\u307e\u3059\u3002\n<br>\u3053\u306e\u5024\u30920 \u306b\u8a2d\u5b9a\u3059\u308b\u3068\u3001\u7d50\u679c\u6570\u304c\u591a\u3044\u5834\u5408UI\u306e\u5fdc\u7b54\u6027\u304c\u60aa\u304f\u306a\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059 \u3002\n</html>
DataResultViewerTable.exportCSVButton.text=\u30c6\u30fc\u30d6\u30eb\u3092CSV\u3068\u3057\u3066\u4fdd\u5b58
ViewPreferencesPanel.scoColumnsCheckbox.text=S(\u30b9\u30b3\u30a2)\u3001C(\u30b3\u30e1\u30f3\u30c8)\u3001O(\u767a\u751f)
ViewPreferencesPanel.scoColumnsLabel.text=\u6b21\u306e\u305f\u3081\u306e\u5217\u3092\u8ffd\u52a0\u3057\u306a\u3044\:
ViewPreferencesPanel.scoColumnsWrapAroundText.text=\u975e\u8868\u793a\u306b\u3059\u308b\u3068\u8aad\u8fbc\u307f\u304c\u65e9\u304f\u306a\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002
ViewPreferencesPanel.scoColumnsLabel.text=\u6b21\u306e\u305f\u3081\u306e\u5217\u3092\u8ffd\u52a0\u3057\u306a\u3044:
ViewPreferencesPanel.selectFileLabel.text=\u30d5\u30a1\u30a4\u30eb\u9078\u629e\u6642\:
ViewPreferencesPanel.translateTextLabel.text=\u30c6\u30ad\u30b9\u30c8\u3092\u7ffb\u8a33\:
ViewPreferencesPanel.useAnotherTimeRadioButton.text=\u5225\u306e\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u4f7f\u7528
ViewPreferencesPanel.useBestViewerRadioButton.text=\u6700\u3082\u56fa\u6709\u306e\u30d5\u30a1\u30a4\u30eb\u30d3\u30e5\u30fc\u306b\u5207\u308a\u66ff\u3048\u308b
ViewPreferencesPanel.useBestViewerRadioButton.toolTipText=\u305f\u3068\u3048\u3070\u3001JPEG\u9078\u629e\u6642\u306f16\u9032\u304b\u3089\u30e1\u30c7\u30a3\u30a2\u306b\u5207\u308a\u66ff\u3048\u307e\u3059\u3002
ViewPreferencesPanel.useLocalTimeRadioButton.text=\u30ed\u30fc\u30ab\u30eb\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u4f7f\u7528
ViewPreferencesPanel.viewsHideKnownCheckbox.text=\u30d3\u30e5\u30fc\u9818\u57df
ViewPreferencesPanel.viewsHideSlackCheckbox.text=\u30d3\u30e5\u30fc\u9818\u57df

View File

@ -1,7 +1,7 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2019 Basis Technology Corp.
* Copyright 2019-2020 Basis Technology Corp.
* Contact: carrier <at> sleuthkit <dot> org
*
* Licensed under the Apache License, Version 2.0 (the "License");
@ -390,14 +390,17 @@ public final class AppSQLiteDB {
private static void findAndCopySQLiteMetaFile(AbstractFile sqliteFile,
String metaFileName) throws NoCurrentCaseException, TskCoreException, IOException {
// Do not look for metaFile if this is a carved directory
if(sqliteFile.getParentPath().equalsIgnoreCase("/$carvedfiles/")) {
return;
}
Case openCase = Case.getCurrentCaseThrows();
SleuthkitCase sleuthkitCase = openCase.getSleuthkitCase();
Services services = new Services(sleuthkitCase);
FileManager fileManager = services.getFileManager();
List<AbstractFile> metaFiles = fileManager.findFiles(
sqliteFile.getDataSource(), metaFileName,
sqliteFile.getParent().getName());
List<AbstractFile> metaFiles = fileManager.findFilesExactName(sqliteFile.getParent().getId(), metaFileName);
if (metaFiles != null) {
for (AbstractFile metaFile : metaFiles) {

View File

@ -1,7 +1,7 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2013-2019 Basis Technology Corp.
* Copyright 2013-2020 Basis Technology Corp.
* Contact: carrier <at> sleuthkit <dot> org
*
* Licensed under the Apache License, Version 2.0 (the "License");
@ -31,28 +31,31 @@ import java.util.logging.Level;
import org.sleuthkit.autopsy.core.UserPreferences;
/**
* Executes a command line using an operating system process with a configurable
* timeout and pluggable logic to kill or continue the process on timeout.
* Executes a command line using an operating system process with pluggable
* logic to terminate the process under certain conditions.
*/
public final class ExecUtil {
private static final Logger logger = Logger.getLogger(ExecUtil.class.getName());
private static final long DEFAULT_CHECK_INTERVAL = 5;
private static final TimeUnit DEFAULT_CHECK_INTERVAL_UNITS = TimeUnit.SECONDS;
private static final long DEFAULT_TERMINATION_CHECK_INTERVAL = 5;
private static final TimeUnit DEFAULT_TERMINATION_CHECK_INTERVAL_UNITS = TimeUnit.SECONDS;
private static final long MAX_WAIT_FOR_TERMINATION = 1;
private static final TimeUnit MAX_WAIT_FOR_TERMINATION_UNITS = TimeUnit.MINUTES;
/**
* The execute() methods do a wait() with a timeout on the executing process
* and query a process terminator each time the timeout expires to determine
* whether or not to kill the process. See
* An interface for defining the conditions under which an operating system
* process spawned by an ExecUtil method should be terminated.
*
* Some existing implementations: TimedProcessTerminator,
* InterruptedThreadProcessTerminator,
* DataSourceIngestModuleProcessTerminator and
* FileIngestModuleProcessTerminator as examples of ProcessTerminator
* implementations.
* FileIngestModuleProcessTerminator.
*/
public interface ProcessTerminator {
/**
* Decides whether or not to terminate a process being run by a
* ExcUtil.execute() methods.
* Decides whether or not to terminate a process being run by an
* ExecUtil method.
*
* @return True or false.
*/
@ -78,11 +81,11 @@ public final class ExecUtil {
public static class TimedProcessTerminator implements ProcessTerminator {
private final long startTimeInSeconds;
private final long maxRunTimeInSeconds;
private final Long maxRunTimeInSeconds;
/**
* Creates a process terminator that can be used to kill a process after
* it has run for a given period of time.
* it exceeds a maximum allowable run time.
*
* @param maxRunTimeInSeconds The maximum allowable run time in seconds.
*/
@ -93,32 +96,41 @@ public final class ExecUtil {
/**
* Creates a process terminator that can be used to kill a process after
* it has run for a given period of time. Maximum allowable run time is
* set via Autopsy Options panel. If the process termination
* functionality is disabled then the maximum allowable time is set to
* MAX_INT seconds.
* it exceeds a global maximum allowable run time specified as a user
* preference. If the user preference is not set, this terminator has no
* effect.
*/
public TimedProcessTerminator() {
if (UserPreferences.getIsTimeOutEnabled() && UserPreferences.getProcessTimeOutHrs() > 0) {
// user specified time out
this.maxRunTimeInSeconds = UserPreferences.getProcessTimeOutHrs() * 3600;
this.maxRunTimeInSeconds = (long) UserPreferences.getProcessTimeOutHrs() * 3600;
} else {
// never time out
this.maxRunTimeInSeconds = Long.MAX_VALUE;
this.maxRunTimeInSeconds = null;
}
this.startTimeInSeconds = (new Date().getTime()) / 1000;
}
@Override
public boolean shouldTerminateProcess() {
if (maxRunTimeInSeconds != null) {
long currentTimeInSeconds = (new Date().getTime()) / 1000;
return (currentTimeInSeconds - this.startTimeInSeconds) > this.maxRunTimeInSeconds;
} else {
return false;
}
}
}
/**
* Runs a process without a termination check interval or process
* terminator.
* Runs a process without a process terminator. This method should be used
* with caution because there is nothing to stop the process from running
* forever.
*
* IMPORTANT: This method blocks while the process is running. For legacy
* API reasons, if there is an interrupt the InterruptedException is wrapped
* in an IOException instead of being thrown. Callers that need to know
* about interrupts to detect backgound task cancellation can call
* Thread.isInterrupted() or, if the thread's interrupt flag should be
* cleared, Thread.interrupted().
*
* @param processBuilder A process builder used to configure and construct
* the process to be run.
@ -127,7 +139,8 @@ public final class ExecUtil {
*
* @throws SecurityException If a security manager exists and vetoes any
* aspect of running the process.
* @throws IOException If an I/O error occurs.
* @throws IOException If an error occurs while executing or
* terminating the process.
*/
public static int execute(ProcessBuilder processBuilder) throws SecurityException, IOException {
return ExecUtil.execute(processBuilder, 30, TimeUnit.DAYS, new ProcessTerminator() {
@ -142,6 +155,13 @@ public final class ExecUtil {
* Runs a process using the default termination check interval and a process
* terminator.
*
* IMPORTANT: This method blocks while the process is running. For legacy
* API reasons, if there is an interrupt the InterruptedException is wrapped
* in an IOException instead of being thrown. Callers that need to know
* about interrupts to detect backgound task cancellation can call
* Thread.isInterrupted() or, if the thread's interrupt flag should be
* cleared, Thread.interrupted().
*
* @param processBuilder A process builder used to configure and construct
* the process to be run.
* @param terminator The terminator.
@ -150,16 +170,24 @@ public final class ExecUtil {
*
* @throws SecurityException If a security manager exists and vetoes any
* aspect of running the process.
* @throws IOException If an I/O error occurs.
* @throws IOException If an error occurs while executing or
* terminating the process.
*/
public static int execute(ProcessBuilder processBuilder, ProcessTerminator terminator) throws SecurityException, IOException {
return ExecUtil.execute(processBuilder, ExecUtil.DEFAULT_CHECK_INTERVAL, ExecUtil.DEFAULT_CHECK_INTERVAL_UNITS, terminator);
return ExecUtil.execute(processBuilder, ExecUtil.DEFAULT_TERMINATION_CHECK_INTERVAL, ExecUtil.DEFAULT_TERMINATION_CHECK_INTERVAL_UNITS, terminator);
}
/**
* Runs a process using a custom termination check interval and a process
* terminator.
*
* IMPORTANT: This method blocks while the process is running. For legacy
* API reasons, if there is an interrupt the InterruptedException is wrapped
* in an IOException instead of being thrown. Callers that need to know
* about interrupts to detect backgound task cancellation can call
* Thread.isInterrupted() or, if the thread's interrupt flag should be
* cleared, Thread.interrupted().
*
* @param processBuilder A process builder used to configure and
* construct the process to be run.
* @param terminationCheckInterval The interval at which to query the
@ -173,12 +201,52 @@ public final class ExecUtil {
*
* @throws SecurityException If a security manager exists and vetoes any
* aspect of running the process.
* @throws IOException If an I/O error occurs.
* @throws IOException If an error occurs while executing or
* terminating the process.
*/
public static int execute(ProcessBuilder processBuilder, long terminationCheckInterval, TimeUnit units, ProcessTerminator terminator) throws SecurityException, IOException {
return waitForTermination(processBuilder.command().get(0), processBuilder.start(), terminationCheckInterval, units, terminator);
}
/**
* Waits for an existing process to finish, using a custom termination check
* interval and a process terminator.
*
* IMPORTANT: This method blocks while the process is running. For legacy
* API reasons, if there is an interrupt the InterruptedException is wrapped
* in an IOException instead of being thrown. Callers that need to know
* about interrupts to detect backgound task cancellation can call
* Thread.isInterrupted() or, if the thread's interrupt flag should be
* cleared, Thread.interrupted().
*
* @param processName The name of the process, for logging
* purposes.
* @param process The process.
* @param terminationCheckInterval The interval at which to query the
* process terminator to see if the process
* should be killed.
* @param units The units for the termination check
* interval.
* @param terminator The process terminator.
*
* @return The exit value of the process.
*
* @throws IOException If an error occurs while executing or terminating the
* process.
*/
public static int waitForTermination(String processName, Process process, long terminationCheckInterval, TimeUnit units, ProcessTerminator terminator) throws IOException {
try {
return waitForProcess(processName, process, terminationCheckInterval, units, terminator);
} catch (InterruptedException ex) {
/*
* Reset the interrupted flag and wrap the exception in an
* IOException for backwards compatibility.
*/
Thread.currentThread().interrupt();
throw new IOException(String.format("Interrupted executing %s", processName), ex); //NON-NLS
}
}
/**
* Waits for an existing process to finish, using a custom termination check
* interval and a process terminator.
@ -195,67 +263,114 @@ public final class ExecUtil {
*
* @return The exit value of the process.
*
* @throws SecurityException If a security manager exists and vetoes any
* aspect of running the process.
* @throws IOException If an I/O error occurs.
* @throws IOException If an error occurs while executing or
* terminating the process.
* @throws InterruptedException If the thread running this code is
* interrupted while the process is running.
*/
public static int waitForTermination(String processName, Process process, long terminationCheckInterval, TimeUnit units, ProcessTerminator terminator) throws SecurityException, IOException {
try {
private static int waitForProcess(String processName, Process process, long terminationCheckInterval, TimeUnit units, ProcessTerminator terminator) throws IOException, InterruptedException {
do {
process.waitFor(terminationCheckInterval, units);
if (process.isAlive() && terminator.shouldTerminateProcess()) {
killProcess(process);
try {
process.waitFor();
process.waitFor(terminationCheckInterval, units);
} catch (InterruptedException ex) {
logger.log(Level.WARNING, String.format("Thread running %s was interrupted before the process completed", processName), ex);
logger.log(Level.WARNING, String.format("Interrupted executing %s", processName), ex); //NON-NLS
Thread.currentThread().interrupt();
terminateProcess(processName, process);
/*
* Note that if the preceding call to terminateProcess() throws
* an IOException, the caller will get that exception instead of
* this InterruptedException, which is arguably preferable. If
* terminateProcess() does not throw an IOException, then its
* call to waitFor() will throw a fresh InterruptedException,
* which is fine.
*/
throw ex;
}
if (process.isAlive() && terminator.shouldTerminateProcess()) {
terminateProcess(processName, process);
}
} while (process.isAlive());
} catch (InterruptedException ex) {
if (process.isAlive()) {
killProcess(process);
}
try {
process.waitFor(); //waiting to help ensure process is shutdown before calling interrupt() or returning
} catch (InterruptedException exx) {
logger.log(Level.WARNING, String.format("Thread running %s was interrupted before the process completed", processName), exx);
}
logger.log(Level.WARNING, String.format("Thread running %s was interrupted before the process completed", processName), ex);
Thread.currentThread().interrupt();
}
/*
* Careful: Process.exitValue() throws an IllegalStateException if the
* process is still alive when the method is called. This code is set up
* so that the only way Process.exitValue() can be called is when it has
* not been bypassed by an exception and the preceding loop has
* terminated with Process.isAlive == false.
*/
return process.exitValue();
}
/**
* Kills a process and its children
* Terminates a process and its children, waiting with a time out to try to
* ensure the process is no longer alive before returning.
*
* @param process The parent process to kill
* IMPORTANT: This method blocks while the process is running. For legacy
* API reasons, if there is an interrupt (or any other exception) the
* exception is logged instead of being thrown. Callers that need to know
* about interrupts to detect backgound task cancellation can call
* Thread.isInterrupted() or, if the thread's interrupt flag should be
* cleared, Thread.interrupted().
*
* @param process The process.
*/
public static void killProcess(Process process) {
if (process == null) {
String processName = process.toString();
try {
terminateProcess(processName, process);
} catch (IOException ex) {
logger.log(Level.WARNING, String.format("Error occured executing %s", processName), ex); //NON-NLS
} catch (InterruptedException ex) {
logger.log(Level.WARNING, String.format("Interrupted executing %s", processName), ex); //NON-NLS
Thread.currentThread().interrupt();
}
}
/**
* Terminates a process and its children, waiting with a time out to try to
* ensure the process is no longer alive before returning.
*
* @param processName The name of the process, for logging purposes.
* @param process The process.
*
* @throws IOException If an error occurs while trying to terminate
* the process.
* @throws InterruptedException If the thread running this code is
* interrupted while waiting for the process to
* terminate.
*/
private static void terminateProcess(String processName, Process process) throws IOException, InterruptedException {
if (process == null || !process.isAlive()) {
return;
}
try {
if (PlatformUtil.isWindows()) {
try {
Win32Process parentProcess = new Win32Process(process);
List<Win32Process> children = parentProcess.getChildren();
children.stream().forEach((child) -> {
child.terminate();
});
parentProcess.terminate();
} catch (Exception ex) {
/*
* Wrap whatever exception was thrown from Windows in an
* exception that is appropriate for this API.
*/
throw new IOException(String.format("Error occured terminating %s", processName), ex); //NON-NLS
}
} else {
process.destroyForcibly();
}
} catch (Exception ex) {
logger.log(Level.WARNING, "Error occurred when attempting to kill process: {0}", ex.getMessage()); // NON-NLS
if (!process.waitFor(MAX_WAIT_FOR_TERMINATION, MAX_WAIT_FOR_TERMINATION_UNITS)) {
throw new IOException(String.format("Failed to terminate %s after %d %s", processName, MAX_WAIT_FOR_TERMINATION, MAX_WAIT_FOR_TERMINATION_UNITS)); //NON-NLS
}
}
/*
* Used by deprecated methods.
* Fields used by deprecated methods that require instantiation of an
* ExecUtil object.
*/
private Process proc = null;
private ExecUtil.StreamToStringRedirect errorStringRedirect = null;

View File

@ -426,14 +426,17 @@ public class SQLiteTableReader implements AutoCloseable {
private void findAndCopySQLiteMetaFile(AbstractFile sqliteFile,
String metaFileName) throws NoCurrentCaseException, TskCoreException, IOException {
// Do not look for metaFile if this is a carved directory
if(sqliteFile.getParentPath().equalsIgnoreCase("/$carvedfiles/")) {
return;
}
Case openCase = Case.getCurrentCaseThrows();
SleuthkitCase sleuthkitCase = openCase.getSleuthkitCase();
Services services = new Services(sleuthkitCase);
FileManager fileManager = services.getFileManager();
List<AbstractFile> metaFiles = fileManager.findFiles(
sqliteFile.getDataSource(), metaFileName,
sqliteFile.getParent().getName());
List<AbstractFile> metaFiles = fileManager.findFilesExactName(sqliteFile.getParent().getId(), metaFileName);
if (metaFiles != null) {
for (AbstractFile metaFile : metaFiles) {

View File

@ -1,10 +1,9 @@
#Tue Aug 18 18:09:20 UTC 2020
AbstractAbstractFileNode.accessTimeColLbl=\u30a2\u30af\u30bb\u30b9\u65e5\u6642
AbstractAbstractFileNode.attrAddrColLbl=\u5c5e\u6027\u30a2\u30c9\u30ec\u30b9
AbstractAbstractFileNode.changeTimeColLbl=\u30a8\u30f3\u30c8\u30ea\u66f4\u65b0\u65e5\u6642
AbstractAbstractFileNode.createdTimeColLbl=\u4f5c\u6210\u65e5\u6642
AbstractAbstractFileNode.createSheet.comment.displayName=C
AbstractAbstractFileNode.createSheet.comment.name=C
# {0} - occurrenceCount
AbstractAbstractFileNode.createSheet.count.description=MD5\u76f8\u95a2\u5024\u304c\u767a\u751f\u3057\u305f {0} \u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f
AbstractAbstractFileNode.createSheet.count.displayName=O
AbstractAbstractFileNode.createSheet.count.hashLookupNotRun.description=\u5217\u304c\u5165\u529b\u3055\u308c\u305f\u3068\u304d\u306b\u3001\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u4e0a\u3067\u30cf\u30c3\u30b7\u30e5\u30eb\u30c3\u30af\u30a2\u30c3\u30d7\u304c\u5b9f\u884c\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f
@ -16,6 +15,7 @@ AbstractAbstractFileNode.createSheet.notableTaggedFile.description=\u9855\u8457\
AbstractAbstractFileNode.createSheet.score.displayName=S
AbstractAbstractFileNode.createSheet.score.name=S
AbstractAbstractFileNode.createSheet.taggedFile.description=\u30d5\u30a1\u30a4\u30eb\u304c\u30bf\u30b0\u4ed8\u3051\u3055\u308c\u307e\u3057\u305f\u3002
AbstractAbstractFileNode.createdTimeColLbl=\u4f5c\u6210\u65e5\u6642
AbstractAbstractFileNode.extensionColLbl=\u62e1\u5f35\u5b50
AbstractAbstractFileNode.flagsDirColLbl=\u30d5\u30e9\u30b0(\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc)
AbstractAbstractFileNode.flagsMetaColLbl=\u30d5\u30e9\u30b0(\u30e1\u30bf)
@ -35,6 +35,9 @@ AbstractAbstractFileNode.tagsProperty.displayName=\u30bf\u30b0
AbstractAbstractFileNode.typeDirColLbl=\u30bf\u30a4\u30d7(\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc)
AbstractAbstractFileNode.typeMetaColLbl=\u30bf\u30a4\u30d7(\u30e1\u30bf)
AbstractAbstractFileNode.useridColLbl=\u30e6\u30fc\u30b6\u30fcID
AbstractContentChildren.CreateTSKNodeVisitor.exception.noNodeMsg=\u6307\u5b9a\u3057\u305fSleuthkitItem\u306b\u5b9a\u7fa9\u3055\u308c\u305f\u30ce\u30fc\u30c9\u306f\u3042\u308a\u307e\u305b\u3093
AbstractContentChildren.createAutopsyNodeVisitor.exception.noNodeMsg=\u6307\u5b9a\u3057\u305fDisplayableItem\u306b\u5b9a\u7fa9\u3055\u308c\u305f\u30ce\u30fc\u30c9\u306f\u3042\u308a\u307e\u305b\u3093
AbstractContentNode.exception.cannotChangeSysName.msg=\u30b7\u30b9\u30c6\u30e0\u540d\u3092\u5909\u66f4\u3067\u304d\u307e\u305b\u3093\u3002
AbstractContentNode.nodescription=\u8aac\u660e\u306a\u3057
AbstractContentNode.valueLoading=\u5024\u306e\u8aad\u307f\u8fbc\u307f\u4e2d
AbstractFsContentNode.noDesc.text=\u8aac\u660e\u306a\u3057
@ -43,8 +46,16 @@ ArtifactStringContent.attrsTableHeader.type=\u30bf\u30a4\u30d7
ArtifactStringContent.attrsTableHeader.value=\u5024
ArtifactStringContent.failedToGetAttributes.message=\u30b1\u30fc\u30b9\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304b\u3089\u4e00\u90e8\u307e\u305f\u306f\u3059\u3079\u3066\u306e\u5c5e\u6027\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
ArtifactStringContent.failedToGetSourcePath.messagee=\u30b1\u30fc\u30b9\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304b\u3089\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
# {0} - \u30e2\u30fc\u30c9\u540d
BaseChildFactory.NoSuchEventBusException.message=\u6b21\u306e\u30ce\u30fc\u30c9\u306e\u30a4\u30d9\u30f3\u30c8\u30d0\u30b9\u306f\u3042\u308a\u307e\u305b\u3093: {0}
ArtifactStringContent.getStr.artifactId.text=\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8ID
ArtifactStringContent.getStr.err=\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f
ArtifactStringContent.getStr.srcFilePath.text=\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9
ArtifactTypeNode.createSheet.artType.desc=\u8aac\u660e\u306a\u3057
ArtifactTypeNode.createSheet.artType.displayNamee=\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u30bf\u30a4\u30d7
ArtifactTypeNode.createSheet.artType.name=\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u30bf\u30a4\u30d7
ArtifactTypeNode.createSheet.childCnt.desc=\u8aac\u660e\u306a\u3057
ArtifactTypeNode.createSheet.childCnt.displayName=\u5b50\u306e\u30ab\u30a6\u30f3\u30c8
ArtifactTypeNode.createSheet.childCnt.name=\u5b50\u306e\u30ab\u30a6\u30f3\u30c8
BaseChildFactory.NoSuchEventBusException.message=\u6b21\u306e\u30ce\u30fc\u30c9\u306e\u30a4\u30d9\u30f3\u30c8\u30d0\u30b9\u306f\u3042\u308a\u307e\u305b\u3093\: {0}
BlackboardArtifactNode.createSheet.artifactDetails.displayName=\u7d50\u679c\u8a73\u7d30
BlackboardArtifactNode.createSheet.artifactDetails.name=\u7d50\u679c\u8a73\u7d30
BlackboardArtifactNode.createSheet.artifactMD5.displayName=MD5\u30cf\u30c3\u30b7\u30e5
@ -53,41 +64,93 @@ BlackboardArtifactNode.createSheet.artifactType.displayName=\u7d50\u679c\u30bf\u
BlackboardArtifactNode.createSheet.artifactType.name=\u7d50\u679c\u30bf\u30a4\u30d7
BlackboardArtifactNode.createSheet.comment.displayName=C
BlackboardArtifactNode.createSheet.comment.name=C
# {0} - occurrenceCount
# {1} - attributeType
BlackboardArtifactNode.createSheet.count.description=\u30bf\u30a4\u30d7 {1} \u306e\u76f8\u95a2\u5024\u304c\u767a\u751f\u3057\u305f {0} \u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f
BlackboardArtifactNode.createSheet.count.displayName=O
BlackboardArtifactNode.createSheet.count.name=O
BlackboardArtifactNode.createSheet.count.noCorrelationAttributes.description=\u76f8\u95a2\u30d7\u30ed\u30d1\u30c6\u30a3\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f
BlackboardArtifactNode.createSheet.count.noCorrelationValues.description=\u5229\u7528\u53ef\u80fd\u306a\u76f8\u95a2\u30d7\u30ed\u30d1\u30c6\u30a3\u306e\u5024\u304c\u5b58\u5728\u3057\u306a\u3044\u305f\u3081\u3001\u305d\u306e\u4ed6\u306e\u767a\u751f\u3092\u691c\u51fa\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
BlackboardArtifactNode.createSheet.dataSrc.displayName=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9
BlackboardArtifactNode.createSheet.dataSrc.name=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9
BlackboardArtifactNode.createSheet.ext.displayName=\u62e1\u5f35\u5b50
BlackboardArtifactNode.createSheet.ext.name=\u62e1\u5f35\u5b50
BlackboardArtifactNode.createSheet.filePath.displayName=\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9
BlackboardArtifactNode.createSheet.filePath.name=\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9
BlackboardArtifactNode.createSheet.fileSize.displayName=\u30b5\u30a4\u30ba
BlackboardArtifactNode.createSheet.fileSize.name=\u30b5\u30a4\u30ba
BlackboardArtifactNode.createSheet.interestingResult.description=\u7d50\u679c\u306b\u95a2\u9023\u4ed8\u3051\u3089\u308c\u3066\u3044\u308b\u8208\u5473\u6df1\u3044\u7d50\u679c\u304c\u3042\u308a\u307e\u3059\u3002
BlackboardArtifactNode.createSheet.mimeType.displayName=MIME\u30bf\u30a4\u30d7
BlackboardArtifactNode.createSheet.mimeType.name=MIME\u30bf\u30a4\u30d7
BlackboardArtifactNode.createSheet.noScore.description=\u30b9\u30b3\u30a2\u306a\u3057
BlackboardArtifactNode.createSheet.notableTaggedItem.description=\u9855\u8457\u3068\u8a8d\u8b58\u3055\u308c\u305f\u95a2\u9023\u4ed8\u3051\u3089\u308c\u3066\u3044\u308b\u30d5\u30a1\u30a4\u30eb\u3067\u3059\u3002
BlackboardArtifactNode.createSheet.notableTaggedItem.description=\u7d50\u679c\u307e\u305f\u306f\u9855\u8457\u3068\u30bf\u30b0\u4ed8\u3051\u3055\u308c\u305f\u95a2\u9023\u4ed8\u3051\u3089\u308c\u3066\u3044\u308b\u30d5\u30a1\u30a4\u30eb\u3067\u3059\u3002
BlackboardArtifactNode.createSheet.path.displayName=\u30d1\u30b9
BlackboardArtifactNode.createSheet.path.name=\u30d1\u30b9
BlackboardArtifactNode.createSheet.score.displayName=S
BlackboardArtifactNode.createSheet.score.name=S
BlackboardArtifactNode.createSheet.srcFile.displayName=\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb
BlackboardArtifactNode.createSheet.srcFile.name=\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb
BlackboardArtifactNode.createSheet.srcFile.origDisplayName=\u672c\u540d
BlackboardArtifactNode.createSheet.srcFile.origName=\u672c\u540d
BlackboardArtifactNode.createSheet.taggedItem.description=\u7d50\u679c\u307e\u305f\u306f\u95a2\u9023\u4ed8\u3051\u3089\u308c\u3066\u3044\u308b\u30d5\u30a1\u30a4\u30eb\u304c\u30bf\u30b0\u4ed8\u3051\u307e\u3057\u305f\u3002
BlackboardArtifactNode.createSheet.tags.displayName=\u30bf\u30b0
# {0} - artifactDisplayName
BlackboardArtifactNode.displayName.artifact={0} \u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8
BlackboardArtifactNode.getAction.errorTitle=\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f
BlackboardArtifactNode.getAction.linkedFileMessage=\u9078\u629e\u3057\u305f\u7d50\u679c\u306e\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u53d6\u5f97\u4e2d\u306b\u554f\u984c\u304c\u3042\u308a\u307e\u3057\u305f\u3002 [\u30bf\u30a4\u30e0\u30e9\u30a4\u30f3\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u8868\u793a] \u30a2\u30af\u30b7\u30e7\u30f3\u3092\u5229\u7528\u3067\u304d\u307e\u305b\u3093\u3002
BlackboardArtifactNode.getAction.resultErrorMessage=\u9078\u629e\u3057\u305f\u7d50\u679c\u306e\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u53d6\u5f97\u4e2d\u306b\u554f\u984c\u304c\u3042\u308a\u307e\u3057\u305f\u3002 [\u30bf\u30a4\u30e0\u30e9\u30a4\u30f3\u306b\u7d50\u679c\u3092\u8868\u793a] \u30a2\u30af\u30b7\u30e7\u30f3\u3092\u5229\u7528\u3067\u304d\u307e\u305b\u3093\u3002
BlackboardArtifactNode.noDesc.text=\u8aac\u660e\u306a\u3057
BlackboardArtifactTagNode.createSheet.comment.text=\u30b3\u30e1\u30f3\u30c8
BlackboardArtifactTagNode.createSheet.resultType.text=\u7d50\u679c\u30bf\u30a4\u30d7
BlackboardArtifactTagNode.createSheet.srcFile.text=\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb
BlackboardArtifactTagNode.createSheet.srcFilePath.text=\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9
BlackboardArtifactTagNode.createSheet.unavail.text=\u5229\u7528\u3067\u304d\u307e\u305b\u3093
BlackboardArtifactTagNode.createSheet.userName.text=\u30e6\u30fc\u30b6\u30fc\u540d
BlackboardArtifactTagNode.viewSourceArtifact.text=\u30bd\u30fc\u30b9\u7d50\u679c\u3092\u8868\u793a
Category.five=CAT-5: \u95a2\u9023\u6027\u306a\u3057
Category.four=CAT-4: \u4e8b\u4f8b/\u6bd4\u8f03(\u793e\u5185\u4f7f\u7528\u9650\u5b9a)
Category.one=CAT-1: \u5150\u7ae5\u52b4\u50cd(\u9055\u6cd5)
Category.three=CAT-3: CGI/\u30a2\u30cb\u30e1\u30fc\u30b7\u30e7\u30f3(\u5150\u7ae5\u52b4\u50cd)
Category.two=CAT-2: \u5150\u7ae5\u52b4\u50cd(\u9055\u6cd5\u3067\u306f\u306a\u3044/\u96e3\u3057\u3044\u5e74\u9f62)
Category.zero=CAT-0: \u672a\u5206\u985e
BlackboardArtifactTagTypeNode.createSheet.name.displayName=\u540d\u524d
BlackboardArtifactTagTypeNode.createSheet.name.name=\u540d\u524d
BlackboardArtifactTagTypeNode.displayName.text=\u7d50\u679c\u30bf\u30b0
Category.five=CAT-5\: \u95a2\u9023\u6027\u306a\u3057
Category.four=CAT-4\: \u4e8b\u4f8b/\u6bd4\u8f03(\u793e\u5185\u4f7f\u7528\u9650\u5b9a)
Category.one=CAT-1\: \u5150\u7ae5\u52b4\u50cd(\u9055\u6cd5)
Category.three=CAT-3\: CGI/\u30a2\u30cb\u30e1\u30fc\u30b7\u30e7\u30f3(\u5150\u7ae5\u52b4\u50cd)
Category.two=CAT-2\: \u5150\u7ae5\u52b4\u50cd(\u9055\u6cd5\u3067\u306f\u306a\u3044/\u96e3\u3057\u3044\u5e74\u9f62)
Category.zero=CAT-0\: \u672a\u5206\u985e
ContentTagNode.createSheet.artifactMD5.displayName=MD5\u30cf\u30c3\u30b7\u30e5
ContentTagNode.createSheet.artifactMD5.name=MD5\u30cf\u30c3\u30b7\u30e5
ContentTagNode.createSheet.comment.displayName=\u30b3\u30e1\u30f3\u30c8
ContentTagNode.createSheet.comment.name=\u30b3\u30e1\u30f3\u30c8
ContentTagNode.createSheet.file.displayName=\u30d5\u30a1\u30a4\u30eb
ContentTagNode.createSheet.file.name=\u30d5\u30a1\u30a4\u30eb
ContentTagNode.createSheet.fileAccessedTime.displayName=\u30a2\u30af\u30bb\u30b9\u65e5\u6642
ContentTagNode.createSheet.fileAccessedTime.name=\u30a2\u30af\u30bb\u30b9\u65e5\u6642
ContentTagNode.createSheet.fileChangedTime.displayName=\u30a8\u30f3\u30c8\u30ea\u66f4\u65b0\u65e5\u6642
ContentTagNode.createSheet.fileChangedTime.name=\u30a8\u30f3\u30c8\u30ea\u66f4\u65b0\u65e5\u6642
ContentTagNode.createSheet.fileCreatedTime.displayName=\u4f5c\u6210\u65e5\u6642
ContentTagNode.createSheet.fileCreatedTime.name=\u4f5c\u6210\u65e5\u6642
ContentTagNode.createSheet.fileModifiedTime.displayName=\u66f4\u65b0\u65e5\u6642
ContentTagNode.createSheet.fileModifiedTime.name=\u66f4\u65b0\u65e5\u6642
ContentTagNode.createSheet.filePath.displayName=\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9
ContentTagNode.createSheet.filePath.name=\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9
ContentTagNode.createSheet.fileSize.displayName=\u30b5\u30a4\u30ba
ContentTagNode.createSheet.fileSize.name=\u30b5\u30a4\u30ba
ContentTagNode.createSheet.origFileName=\u672c\u540d
ContentTagNode.createSheet.unavail.path=\u5229\u7528\u3067\u304d\u307e\u305b\u3093
ContentTagNode.createSheet.userName.text=\u30e6\u30fc\u30b6\u30fc\u540d
ContentTagTypeNode.createSheet.name.displayName=\u540d\u524d
ContentTagTypeNode.createSheet.name.name=\u540d\u524d
ContentTagTypeNode.displayName.text=\u30d5\u30a1\u30a4\u30eb\u30bf\u30b0
ContentUtils.exception.msg={0} \u3092\u62bd\u51fa\u3067\u304d\u307e\u305b\u3093
DataModelActionsFactory.fileInDir.text=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u5185\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u8868\u793a
DataModelActionsFactory.openExtViewer.text=\u5916\u90e8\u30d3\u30e5\u30fc\u30ef\u30fc\u3067\u958b\u304f Ctrl+E
DataModelActionsFactory.srcFileInDir.text=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u5185\u306e\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u3092\u8868\u793a
DataModelActionsFactory.viewNewWin.text=\u65b0\u3057\u3044\u30a6\u30a3\u30f3\u30c9\u30a6\u3067\u8868\u793a
DataSourcesNode.createSheet.name.desc=\u8aac\u660e\u306a\u3057
DataSourcesNode.createSheet.name.displayName=\u540d\u524d
DataSourcesNode.createSheet.name.name=\u540d\u524d
DataSourcesNode.group_by_datasource.name=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb
DataSourcesNode.name=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9
DeleteReportAction.actionDisplayName.multipleReports=\u30ec\u30dd\u30fc\u30c8\u3092\u524a\u9664
DeleteReportAction.actionDisplayName.singleReport=\u30ec\u30dd\u30fc\u30c8\u3092\u524a\u9664
DeleteReportAction.actionPerformed.showConfirmDialog.multiple.msg=\u30b1\u30fc\u30b9\u304b\u3089\u30ec\u30dd\u30fc\u30c8\u3092 {0} \u4ef6\u524a\u9664\u3057\u307e\u3059\u304b?
DeleteReportAction.actionPerformed.showConfirmDialog.single.msg=\u30b1\u30fc\u30b9\u304b\u3089\u30ec\u30dd\u30fc\u30c8\u30921\u4ef6\u524a\u9664\u3057\u307e\u3059\u304b?
DeleteReportAction.actionPerformed.showConfirmDialog.title=\u524a\u9664\u3092\u78ba\u5b9a
DeleteReportAction.showConfirmDialog.errorMsg=\u30ec\u30dd\u30fc\u30c8\u306e\u524a\u9664\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
DeleteReportAction.showConfirmDialog.multiple.explanation=\u30c7\u30a3\u30b9\u30af\u4e0a\u306b\u30ec\u30dd\u30fc\u30c8\u304c\u6b8b\u308a\u307e\u3059\u3002
DeleteReportAction.showConfirmDialog.single.explanation=\u30c7\u30a3\u30b9\u30af\u4e0a\u306b\u30ec\u30dd\u30fc\u30c8\u304c\u6b8b\u308a\u307e\u3059\u3002
DeletedContent.allDelFilter.text=\u3059\u3079\u3066
DeletedContent.createSheet.filterType.desc=\u8aac\u660e\u306a\u3057
DeletedContent.createSheet.filterType.displayName=\u30bf\u30a4\u30d7
@ -95,19 +158,61 @@ DeletedContent.createSheet.name.desc=\u8aac\u660e\u306a\u3057
DeletedContent.createSheet.name.displayName=\u540d\u524d
DeletedContent.deletedContentsNode.name=\u524a\u9664\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb
DeletedContent.fsDelFilter.text=\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0
DeleteReportAction.showConfirmDialog.errorMsg=\u30ec\u30dd\u30fc\u30c8\u306e\u524a\u9664\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
DeleteReportAction.showConfirmDialog.multiple.explanation=\u30c7\u30a3\u30b9\u30af\u4e0a\u306b\u30ec\u30dd\u30fc\u30c8\u304c\u6b8b\u308a\u307e\u3059\u3002
DeleteReportAction.showConfirmDialog.single.explanation=\u30c7\u30a3\u30b9\u30af\u4e0a\u306b\u30ec\u30dd\u30fc\u30c8\u304c\u6b8b\u308a\u307e\u3059\u3002
DirectoryNode.curFolder.text=[\u73fe\u5728\u306e\u30d5\u30a9\u30eb\u30c0\u30fc]
DirectoryNode.getActions.viewFileInDir.text=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u5185\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u8868\u793a
DirectoryNode.parFolder.text=[\u89aa\u30d5\u30a9\u30eb\u30c0\u30fc]
DirectoryNode.viewInNewWin.text=\u65b0\u3057\u3044\u30a6\u30a3\u30f3\u30c9\u30a6\u3067\u8868\u793a
EmailExtracted.createSheet.name.desc=\u8aac\u660e\u306a\u3057
EmailExtracted.createSheet.name.displayName=\u540d\u524d
EmailExtracted.createSheet.name.name=\u540d\u524d
EmailExtracted.defaultAcct.text=\u30c7\u30d5\u30a9\u30eb\u30c8
EmailExtracted.defaultFolder.text=\u30c7\u30d5\u30a9\u30eb\u30c8
EmailExtracted.mailAccount.text=\u30a2\u30ab\u30a6\u30f3\u30c8
EmailExtracted.mailFolder.text=\u30d5\u30a9\u30eb\u30c0\u30fc
ExtractedContentNode.createSheet.name.desc=\u8aac\u660e\u306a\u3057
ExtractedContentNode.createSheet.name.displayName=\u540d\u524d
ExtractedContentNode.createSheet.name.name=\u540d\u524d
ExtractedContentNode.name.text=\u62bd\u51fa\u3055\u308c\u305f\u30b3\u30f3\u30c6\u30f3\u30c4
FileNode.getActions.openInExtViewer.text=\u5916\u90e8\u30d3\u30e5\u30fc\u30ef\u30fc\u3067\u958b\u304f Ctrl+E
FileNode.getActions.searchFilesSameMD5.text=\u540c\u3058MD5\u30cf\u30c3\u30b7\u30e5\u3067\u30d5\u30a1\u30a4\u30eb\u3092\u691c\u7d22
FileNode.getActions.viewFileInDir.text=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u5185\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u8868\u793a
FileNode.getActions.viewInNewWin.text=\u65b0\u3057\u3044\u30a6\u30a3\u30f3\u30c9\u30a6\u3067\u8868\u793a
FileSize.createSheet.filterType.desc=\u8aac\u660e\u306a\u3057
FileSize.createSheet.filterType.displayName=\u30b5\u30a4\u30ba\u7bc4\u56f2
FileSize.createSheet.filterType.name=\u30b5\u30a4\u30ba\u7bc4\u56f2
FileSize.createSheet.name.desc=\u8aac\u660e\u306a\u3057
FileSize.createSheet.name.displayName=\u540d\u524d
FileSize.createSheet.name.name=\u540d\u524d
FileSize.exception.notSupported.msg=\u3053\u306e\u30bf\u30a4\u30d7\u306e\u8868\u793a\u53ef\u80fd\u306a\u9805\u76ee\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\: {0}
FileSize.fileSizeRootNode.name=\u30d5\u30a1\u30a4\u30eb\u30b5\u30a4\u30ba
FileTypeChildren.exception.notSupported.msg=\u3053\u306e\u30bf\u30a4\u30d7\u306e\u8868\u793a\u53ef\u80fd\u306a\u9805\u76ee\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\: {0}
FileTypeExtensionFilters.autDocHtmlFilter.text=HTML
FileTypeExtensionFilters.autDocOfficeFilter.text=Office
FileTypeExtensionFilters.autDocRtfFilter.text=\u30ea\u30c3\u30c1\u30c6\u30ad\u30b9\u30c8
FileTypeExtensionFilters.autDocTxtFilter.text=\u30d7\u30ec\u30fc\u30f3\u30c6\u30ad\u30b9\u30c8
FileTypeExtensionFilters.autoDocPdfFilter.text=PDF
FileTypeExtensionFilters.tskArchiveFilter.text=\u30a2\u30fc\u30ab\u30a4\u30d6
FileTypeExtensionFilters.tskAudioFilter.text=\u30aa\u30fc\u30c7\u30a3\u30aa
FileTypeExtensionFilters.tskDatabaseFilter.text=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9
FileTypeExtensionFilters.tskDocumentFilter.text=\u6587\u66f8
FileTypeExtensionFilters.tskExecFilter.text=\u5b9f\u884c\u30d5\u30a1\u30a4\u30eb
FileTypeExtensionFilters.tskImgFilter.text=\u30a4\u30e1\u30fc\u30b8
FileTypeExtensionFilters.tskVideoFilter.text=\u52d5\u753b
FileTypes.bgCounting.placeholder=\ (\u30ab\u30a6\u30f3\u30c8\u4e2d...)
FileTypes.createSheet.name.desc=\u8aac\u660e\u306a\u3057
FileTypes.createSheet.name.displayName=\u540d\u524d
FileTypes.createSheet.name.name=\u540d\u524d
FileTypes.name.text=\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7
FileTypesByExtNode.createSheet.fileExt.desc=\u8aac\u660e\u306a\u3057
FileTypesByExtNode.createSheet.fileExt.displayName=\u30d5\u30a1\u30a4\u30eb\u62e1\u5f35\u5b50
FileTypesByExtNode.createSheet.fileExt.name=\u30d5\u30a1\u30a4\u30eb\u62e1\u5f35\u5b50
FileTypesByExtNode.createSheet.filterType.desc=\u8aac\u660e\u306a\u3057
FileTypesByExtNode.createSheet.filterType.displayName=\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7
FileTypesByExtNode.createSheet.filterType.name=\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7
FileTypesByExtNode.createSheet.name.desc=\u8aac\u660e\u306a\u3057
FileTypesByExtNode.createSheet.name.displayName=\u540d\u524d
FileTypesByExtNode.createSheet.name.name=\u540d\u524d
FileTypesByExtNode.fname.text=\u62e1\u5f35\u5b50\u5225
FileTypesByMimeType.name.text=MIME\u30bf\u30a4\u30d7\u5225
FileTypesByMimeTypeNode.createSheet.mediaSubtype.desc=\u8aac\u660e\u306a\u3057
FileTypesByMimeTypeNode.createSheet.mediaSubtype.displayName=\u30b5\u30d6\u30bf\u30a4\u30d7
@ -117,10 +222,16 @@ FileTypesByMimeTypeNode.createSheet.mediaType.displayName=\u30bf\u30a4\u30d7
FileTypesByMimeTypeNode.createSheet.mediaType.name=\u30bf\u30a4\u30d7
GetSCOTask.occurrences.defaultDescription=\u76f8\u95a2\u30d7\u30ed\u30d1\u30c6\u30a3\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f
GetSCOTask.occurrences.multipleProperties=\u3053\u306e\u7d50\u679c\u306b\u8907\u6570\u306e\u7570\u306a\u308b\u76f8\u95a2\u30d7\u30ed\u30d1\u30c6\u30a3\u304c\u5b58\u5728\u3057\u307e\u3059
HashsetHits.createSheet.name.desc=\u8aac\u660e\u306a\u3057
HashsetHits.createSheet.name.displayName=\u540d\u524d
HashsetHits.createSheet.name.name=\u540d\u524d
ImageNode.action.runIngestMods.text=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u5b9f\u884c
ImageNode.createSheet.deviceId.desc=\u30a4\u30e1\u30fc\u30b8\u306e\u30c7\u30d0\u30a4\u30b9ID
ImageNode.createSheet.deviceId.displayName=\u30c7\u30d0\u30a4\u30b9ID
ImageNode.createSheet.deviceId.name=\u30c7\u30d0\u30a4\u30b9ID
ImageNode.createSheet.name.desc=\u8aac\u660e\u306a\u3057
ImageNode.createSheet.name.displayName=\u540d\u524d
ImageNode.createSheet.name.name=\u540d\u524d
ImageNode.createSheet.sectorSize.desc=\u30a4\u30e1\u30fc\u30b8\u306e\u30bb\u30af\u30bf\u30fc\u30b5\u30a4\u30b9(\u30d0\u30a4\u30c8)\u3067\u3059\u3002
ImageNode.createSheet.sectorSize.displayName=\u30bb\u30af\u30bf\u30fc\u30b5\u30a4\u30b9(\u30d0\u30a4\u30c8)
ImageNode.createSheet.sectorSize.name=\u30bb\u30af\u30bf\u30fc\u30b5\u30a4\u30b9(\u30d0\u30a4\u30c8)
@ -135,6 +246,20 @@ ImageNode.createSheet.type.displayName=\u30bf\u30a4\u30d7
ImageNode.createSheet.type.name=\u30bf\u30a4\u30d7
ImageNode.createSheet.type.text=\u30a4\u30e1\u30fc\u30b8
ImageNode.getActions.openFileSearchByAttr.text=\u5c5e\u6027\u5225\u306b\u30d5\u30a1\u30a4\u30eb\u691c\u7d22\u3092\u958b\u304f
ImageNode.getActions.viewInNewWin.text=\u65b0\u3057\u3044\u30a6\u30a3\u30f3\u30c9\u30a6\u3067\u8868\u793a
Installer.exception.taskVerStringBang.msg=Sleuth Kit\u306eJNI\u30c6\u30b9\u30c8\u30b3\u30fc\u30eb\u304c\u30a8\u30e9\u30fc\u306a\u3057\u3067\u8fd4\u3055\u308c\u307e\u3057\u305f\u304c\u3001\u30d0\u30fc\u30b8\u30e7\u30f3\u6587\u5b57\u5217\u304c""\u3067\u3057\u305f\!
Installer.exception.tskVerStringNull.msg=Sleuth Kit\u306eJNI\u30c6\u30b9\u30c8\u30b3\u30fc\u30eb\u304c\u30a8\u30e9\u30fc\u306a\u3057\u3067\u8fd4\u3055\u308c\u307e\u3057\u305f\u304c\u3001\u30d0\u30fc\u30b8\u30e7\u30f3\u6587\u5b57\u5217\u304cnull\u3067\u3057\u305f\!
Installer.tskLibErr.err=\u81f4\u547d\u7684\u306a\u30a8\u30e9\u30fc\u3067\u3059\!
Installer.tskLibErr.msg=Problem with Sleuth Kit\u306eJNI\u3067\u3059\u3002 Test call failed\!\n\nDetails\: {0}
InterestingHits.createSheet.name.desc=\u8aac\u660e\u306a\u3057
InterestingHits.createSheet.name.displayName=\u540d\u524d
InterestingHits.createSheet.name.name=\u540d\u524d
InterestingHits.displayName.text=\u8208\u5473\u6df1\u3044\u9805\u76ee
InterestingHits.interestingItems.text=\u8208\u5473\u6df1\u3044\u9805\u76ee
KeyValueNode.createSheet.map.desc=n/a
KeyValueNode.createSheet.name.desc=n/a
KeyValueNode.createSheet.name.displayName=\u540d\u524d
KeyValueNode.createSheet.name.name=\u540d\u524d
KeyValueNode.menuItemText.viewFileInDir=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u5185\u306e\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u3092\u8868\u793a
KeywordHits.createNodeForKey.accessTime.desc=\u30a2\u30af\u30bb\u30b9\u65e5\u6642
KeywordHits.createNodeForKey.accessTime.displayName=\u30a2\u30af\u30bb\u30b9\u65e5\u6642
@ -160,143 +285,35 @@ KeywordHits.createSheet.numChildren.name=\u5b50\u306e\u6570
KeywordHits.kwHits.text=\u30ad\u30fc\u30ef\u30fc\u30c9\u30d2\u30c3\u30c8
KeywordHits.simpleLiteralSearch.text=\u5358\u72ec\u30ea\u30c6\u30e9\u30eb\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22
KeywordHits.singleRegexSearch.text=\u5358\u72ec\u6b63\u898f\u8868\u73fe\u691c\u7d22
LayoutFileNode.getActions.viewFileInDir.text=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u5185\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u8868\u793a
OpenIDE-Module-Name=DataModel
AbstractContentChildren.CreateTSKNodeVisitor.exception.noNodeMsg=\u6307\u5b9a\u3057\u305fSleuthkitItem\u306b\u5b9a\u7fa9\u3055\u308c\u305f\u30ce\u30fc\u30c9\u306f\u3042\u308a\u307e\u305b\u3093
AbstractContentChildren.createAutopsyNodeVisitor.exception.noNodeMsg=\u6307\u5b9a\u3057\u305fDisplayableItem\u306b\u5b9a\u7fa9\u3055\u308c\u305f\u30ce\u30fc\u30c9\u306f\u3042\u308a\u307e\u305b\u3093
AbstractContentNode.exception.cannotChangeSysName.msg=\u30b7\u30b9\u30c6\u30e0\u540d\u3092\u5909\u66f4\u3067\u304d\u307e\u305b\u3093\u3002
ArtifactStringContent.getStr.srcFilePath.text=\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9
ArtifactStringContent.getStr.err=\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f
ArtifactTypeNode.createSheet.artType.name=\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u30bf\u30a4\u30d7
ArtifactTypeNode.createSheet.artType.displayNamee=\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u30bf\u30a4\u30d7
ArtifactTypeNode.createSheet.artType.desc=\u8aac\u660e\u306a\u3057
ArtifactTypeNode.createSheet.childCnt.name=\u5b50\u306e\u30ab\u30a6\u30f3\u30c8
ArtifactTypeNode.createSheet.childCnt.displayName=\u5b50\u306e\u30ab\u30a6\u30f3\u30c8
ArtifactTypeNode.createSheet.childCnt.desc=\u8aac\u660e\u306a\u3057
BlackboardArtifactNode.noDesc.text=\u8aac\u660e\u306a\u3057
BlackboardArtifactNode.createSheet.srcFile.name=\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb
BlackboardArtifactNode.createSheet.srcFile.displayName=\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb
BlackboardArtifactNode.createSheet.ext.name=\u62e1\u5f35\u5b50
BlackboardArtifactNode.createSheet.ext.displayName=\u62e1\u5f35\u5b50
BlackboardArtifactNode.createSheet.mimeType.name=MIME\u30bf\u30a4\u30d7
BlackboardArtifactNode.createSheet.mimeType.displayName=MIME\u30bf\u30a4\u30d7
BlackboardArtifactNode.createSheet.filePath.name=\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9
BlackboardArtifactNode.createSheet.filePath.displayName=\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9
BlackboardArtifactNode.createSheet.dataSrc.name=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9
BlackboardArtifactNode.createSheet.dataSrc.displayName=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9
BlackboardArtifactTagNode.createSheet.srcFile.text=\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb
BlackboardArtifactTagNode.createSheet.unavail.text=\u5229\u7528\u3067\u304d\u307e\u305b\u3093
BlackboardArtifactTagNode.createSheet.srcFilePath.text=\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9
BlackboardArtifactTagNode.createSheet.resultType.text=\u7d50\u679c\u30bf\u30a4\u30d7
BlackboardArtifactTagNode.createSheet.comment.text=\u30b3\u30e1\u30f3\u30c8
BlackboardArtifactTagTypeNode.displayName.text=\u7d50\u679c\u30bf\u30b0
BlackboardArtifactTagTypeNode.createSheet.name.name=\u540d\u524d
BlackboardArtifactTagTypeNode.createSheet.name.displayName=\u540d\u524d
ContentTagNode.createSheet.file.name=\u30d5\u30a1\u30a4\u30eb
ContentTagNode.createSheet.file.displayName=\u30d5\u30a1\u30a4\u30eb
ContentTagNode.createSheet.unavail.path=\u5229\u7528\u3067\u304d\u307e\u305b\u3093
ContentTagNode.createSheet.filePath.name=\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9
ContentTagNode.createSheet.filePath.displayName=\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9
ContentTagNode.createSheet.comment.name=\u30b3\u30e1\u30f3\u30c8
ContentTagNode.createSheet.comment.displayName=\u30b3\u30e1\u30f3\u30c8
ContentTagNode.createSheet.fileModifiedTime.name=\u66f4\u65b0\u65e5\u6642
ContentTagNode.createSheet.fileModifiedTime.displayName=\u66f4\u65b0\u65e5\u6642
ContentTagNode.createSheet.fileChangedTime.name=\u30a8\u30f3\u30c8\u30ea\u66f4\u65b0\u65e5\u6642
ContentTagNode.createSheet.fileChangedTime.displayName=\u30a8\u30f3\u30c8\u30ea\u66f4\u65b0\u65e5\u6642
ContentTagNode.createSheet.fileAccessedTime.name=\u30a2\u30af\u30bb\u30b9\u65e5\u6642
ContentTagNode.createSheet.fileAccessedTime.displayName=\u30a2\u30af\u30bb\u30b9\u65e5\u6642
ContentTagNode.createSheet.fileCreatedTime.name=\u4f5c\u6210\u65e5\u6642
ContentTagNode.createSheet.fileCreatedTime.displayName=\u4f5c\u6210\u65e5\u6642
ContentTagNode.createSheet.fileSize.name=\u30b5\u30a4\u30ba
ContentTagNode.createSheet.fileSize.displayName=\u30b5\u30a4\u30ba
ContentTagTypeNode.displayName.text=\u30d5\u30a1\u30a4\u30eb\u30bf\u30b0
ContentTagTypeNode.createSheet.name.name=\u540d\u524d
ContentTagTypeNode.createSheet.name.displayName=\u540d\u524d
ContentUtils.exception.msg={0} \u3092\u62bd\u51fa\u3067\u304d\u307e\u305b\u3093
DataModelActionsFactory.srcFileInDir.text=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u5185\u306e\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u3092\u8868\u793a
DataModelActionsFactory.fileInDir.text=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u5185\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u8868\u793a
DataModelActionsFactory.viewNewWin.text=\u65b0\u3057\u3044\u30a6\u30a3\u30f3\u30c9\u30a6\u3067\u8868\u793a
DataModelActionsFactory.openExtViewer.text=\u5916\u90e8\u30d3\u30e5\u30fc\u30ef\u30fc\u3067\u958b\u304f Ctrl+E
DataSourcesNode.name=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9
DataSourcesNode.group_by_datasource.name=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb
DataSourcesNode.createSheet.name.name=\u540d\u524d
DataSourcesNode.createSheet.name.displayName=\u540d\u524d
DataSourcesNode.createSheet.name.desc=\u8aac\u660e\u306a\u3057
DirectoryNode.parFolder.text=[\u89aa\u30d5\u30a9\u30eb\u30c0\u30fc]
DirectoryNode.curFolder.text=[\u73fe\u5728\u306e\u30d5\u30a9\u30eb\u30c0\u30fc]
DirectoryNode.getActions.viewFileInDir.text=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u5185\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u8868\u793a
DirectoryNode.viewInNewWin.text=\u65b0\u3057\u3044\u30a6\u30a3\u30f3\u30c9\u30a6\u3067\u8868\u793a
EmailExtracted.mailAccount.text=\u30a2\u30ab\u30a6\u30f3\u30c8
EmailExtracted.mailFolder.text=\u30d5\u30a9\u30eb\u30c0\u30fc
EmailExtracted.defaultAcct.text=\u30c7\u30d5\u30a9\u30eb\u30c8
EmailExtracted.defaultFolder.text=\u30c7\u30d5\u30a9\u30eb\u30c8
EmailExtracted.createSheet.name.name=\u540d\u524d
EmailExtracted.createSheet.name.displayName=\u540d\u524d
EmailExtracted.createSheet.name.desc=\u8aac\u660e\u306a\u3057
ExtractedContentNode.name.text=\u62bd\u51fa\u3055\u308c\u305f\u30b3\u30f3\u30c6\u30f3\u30c4
ExtractedContentNode.createSheet.name.name=\u540d\u524d
ExtractedContentNode.createSheet.name.displayName=\u540d\u524d
ExtractedContentNode.createSheet.name.desc=\u8aac\u660e\u306a\u3057
LocalFileNode.viewFileInDir.text=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u5185\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u8868\u793a
FileSize.fileSizeRootNode.name=\u30d5\u30a1\u30a4\u30eb\u30b5\u30a4\u30ba
FileSize.createSheet.name.name=\u540d\u524d
FileSize.createSheet.name.displayName=\u540d\u524d
FileSize.createSheet.name.desc=\u8aac\u660e\u306a\u3057
FileSize.createSheet.filterType.name=\u30b5\u30a4\u30ba\u7bc4\u56f2
FileSize.createSheet.filterType.displayName=\u30b5\u30a4\u30ba\u7bc4\u56f2
FileSize.createSheet.filterType.desc=\u8aac\u660e\u306a\u3057
FileSize.exception.notSupported.msg=\u3053\u306e\u30bf\u30a4\u30d7\u306e\u8868\u793a\u53ef\u80fd\u306a\u9805\u76ee\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093: {0}
FileTypeChildren.exception.notSupported.msg=\u3053\u306e\u30bf\u30a4\u30d7\u306e\u8868\u793a\u53ef\u80fd\u306a\u9805\u76ee\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093: {0}
FileTypesByExtNode.createSheet.filterType.name=\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7
FileTypesByExtNode.createSheet.filterType.displayName=\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7
FileTypesByExtNode.createSheet.filterType.desc=\u8aac\u660e\u306a\u3057
FileTypesByExtNode.createSheet.fileExt.name=\u30d5\u30a1\u30a4\u30eb\u62e1\u5f35\u5b50
FileTypesByExtNode.createSheet.fileExt.displayName=\u30d5\u30a1\u30a4\u30eb\u62e1\u5f35\u5b50
FileTypesByExtNode.createSheet.fileExt.desc=\u8aac\u660e\u306a\u3057
FileTypesByExtNode.fname.text=\u62e1\u5f35\u5b50\u5225
FileTypesByExtNode.createSheet.name.name=\u540d\u524d
FileTypesByExtNode.createSheet.name.displayName=\u540d\u524d
FileTypesByExtNode.createSheet.name.desc=\u8aac\u660e\u306a\u3057
HashsetHits.createSheet.name.name=\u540d\u524d
HashsetHits.createSheet.name.displayName=\u540d\u524d
HashsetHits.createSheet.name.desc=\u8aac\u660e\u306a\u3057
ImageNode.getActions.viewInNewWin.text=\u65b0\u3057\u3044\u30a6\u30a3\u30f3\u30c9\u30a6\u3067\u8868\u793a
ImageNode.createSheet.name.name=\u540d\u524d
ImageNode.createSheet.name.displayName=\u540d\u524d
ImageNode.createSheet.name.desc=\u8aac\u660e\u306a\u3057
Installer.exception.tskVerStringNull.msg=Sleuth Kit\u306eJNI\u30c6\u30b9\u30c8\u30b3\u30fc\u30eb\u304c\u30a8\u30e9\u30fc\u306a\u3057\u3067\u8fd4\u3055\u308c\u307e\u3057\u305f\u304c\u3001\u30d0\u30fc\u30b8\u30e7\u30f3\u6587\u5b57\u5217\u304cnull\u3067\u3057\u305f\!
Installer.exception.taskVerStringBang.msg=Sleuth Kit\u306eJNI\u30c6\u30b9\u30c8\u30b3\u30fc\u30eb\u304c\u30a8\u30e9\u30fc\u306a\u3057\u3067\u8fd4\u3055\u308c\u307e\u3057\u305f\u304c\u3001\u30d0\u30fc\u30b8\u30e7\u30f3\u6587\u5b57\u5217\u304c""\u3067\u3057\u305f\!
Installer.tskLibErr.msg=Problem with Sleuth Kit\u306eJNI\u3067\u3059\u3002 Test call failed\!\n\nDetails: {0}
Installer.tskLibErr.err=\u81f4\u547d\u7684\u306a\u30a8\u30e9\u30fc\u3067\u3059\!
InterestingHits.interestingItems.text=\u8208\u5473\u6df1\u3044\u9805\u76ee
InterestingHits.displayName.text=\u8208\u5473\u6df1\u3044\u9805\u76ee
InterestingHits.createSheet.name.name=\u540d\u524d
InterestingHits.createSheet.name.displayName=\u540d\u524d
InterestingHits.createSheet.name.desc=\u8aac\u660e\u306a\u3057
KeyValueNode.createSheet.name.name=\u540d\u524d
KeyValueNode.createSheet.name.displayName=\u540d\u524d
KeyValueNode.createSheet.name.desc=n/a
KeyValueNode.createSheet.map.desc=n/a
LayoutFileNode.propertyType.parts=\u30d1\u30fc\u30c4
LayoutFileNode.createSheet.name.name=\u540d\u524d
LayoutFileNode.createSheet.name.displayName=\u540d\u524d
LayoutFileNode.createSheet.name.desc=\u8aac\u660e\u306a\u3057
LayoutFileNode.createSheet.name.displayName=\u540d\u524d
LayoutFileNode.createSheet.name.name=\u540d\u524d
LayoutFileNode.createSheet.noDescr.text=\u8aac\u660e\u306a\u3057
LayoutFileNode.getActions.viewInNewWin.text=\u65b0\u3057\u3044\u30a6\u30a3\u30f3\u30c9\u30a6\u3067\u8868\u793a
LayoutFileNode.getActions.openInExtViewer.text=\u5916\u90e8\u30d3\u30e5\u30fc\u30ef\u30fc\u3067\u958b\u304f Ctrl+E
LocalFileNode.createSheet.name.name=\u540d\u524d
LocalFileNode.createSheet.name.displayName=\u540d\u524d
LayoutFileNode.getActions.viewFileInDir.text=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u5185\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u8868\u793a
LayoutFileNode.getActions.viewInNewWin.text=\u65b0\u3057\u3044\u30a6\u30a3\u30f3\u30c9\u30a6\u3067\u8868\u793a
LayoutFileNode.propertyType.parts=\u30d1\u30fc\u30c4
LocalFileNode.createSheet.name.desc=\u8aac\u660e\u306a\u3057
LocalFileNode.createSheet.name.displayName=\u540d\u524d
LocalFileNode.createSheet.name.name=\u540d\u524d
LocalFileNode.createSheet.noDescr.text=\u8aac\u660e\u306a\u3057
LocalFileNode.getActions.viewInNewWin.text=\u65b0\u3057\u3044\u30a6\u30a3\u30f3\u30c9\u30a6\u3067\u8868\u793a
LocalFileNode.getActions.openInExtViewer.text=\u5916\u90e8\u30d3\u30e5\u30fc\u30ef\u30fc\u3067\u958b\u304f Ctrl+E
LocalFileNode.getActions.searchFilesSameMd5.text=\u540c\u3058MD5\u30cf\u30c3\u30b7\u30e5\u3067\u30d5\u30a1\u30a4\u30eb\u3092\u691c\u7d22
LocalFileNode.getActions.viewInNewWin.text=\u65b0\u3057\u3044\u30a6\u30a3\u30f3\u30c9\u30a6\u3067\u8868\u793a
LocalFileNode.viewFileInDir.text=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u5185\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u8868\u793a
OpenIDE-Module-Name=DataModel
OpenReportAction.actionDisplayName=\u30ec\u30dd\u30fc\u30c8\u3092\u958b\u304f
OpenReportAction.actionPerformed.MessageBoxTitle=\u30ec\u30dd\u30fc\u30c8\u30aa\u30fc\u30d7\u30f3\u5931\u6557
OpenReportAction.actionPerformed.MissingReportFileMessage=\u30ec\u30dd\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u306f\u3059\u3067\u306b\u5b58\u5728\u3057\u307e\u305b\u3093\u3002
OpenReportAction.actionPerformed.NoAssociatedEditorMessage=\u3053\u306e\u30bf\u30a4\u30d7\u306e\u30ec\u30dd\u30fc\u30c8\u306b\u95a2\u9023\u4ed8\u3051\u3089\u308c\u3066\u3044\u308b\u30a8\u30c7\u30a3\u30bf\u30fc\u304c\u306a\u3044\u304b\u3001\u95a2\u9023\u4ed8\u3051\u3089\u308c\u3066\u3044\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u8d77\u52d5\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
OpenReportAction.actionPerformed.NoOpenInEditorSupportMessage=\u3053\u306e\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0(\u30aa\u30da\u30ec\u30fc\u30c6\u30a3\u30f3\u30b0\u30b7\u30b9\u30c6\u30e0)\u306f\u3053\u306e\u65b9\u6cd5\u3067\u30a8\u30c7\u30a3\u30bf\u30fc\u3067\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304f\u3053\u3068\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u305b\u3093\u3002
OpenReportAction.actionPerformed.MissingReportFileMessage=\u30ec\u30dd\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u306f\u3059\u3067\u306b\u5b58\u5728\u3057\u307e\u305b\u3093\u3002
OpenReportAction.actionPerformed.ReportFileOpenPermissionDeniedMessage=\u30ec\u30dd\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304f\u8a31\u53ef\u304c\u62d2\u5426\u3055\u308c\u307e\u3057\u305f\u3002
PoolNode.createSheet.name.desc=\u8aac\u660e\u306a\u3057
PoolNode.createSheet.name.displayName=\u540d\u524d
PoolNode.createSheet.name.name=\u540d\u524d
PoolNode.createSheet.type.desc=\u8aac\u660e\u306a\u3057
PoolNode.createSheet.type.displayName=\u540d\u524d
PoolNode.createSheet.type.name=\u30bf\u30a4\u30d7
RecentFiles.aut0DayFilter.displayName.text=\u6700\u7d42\u65e5
RecentFiles.aut1dayFilter.displayName.text=\u6700\u7d42\u65e5 - 1
RecentFiles.aut2dayFilter.displayName.text=\u6700\u7d42\u65e5 - 2
@ -304,98 +321,81 @@ RecentFiles.aut3dayFilter.displayName.text=\u6700\u7d42\u65e5 - 3
RecentFiles.aut4dayFilter.displayName.text=\u6700\u7d42\u65e5 - 4
RecentFiles.aut5dayFilter.displayName.text=\u6700\u7d42\u65e5 - 5
RecentFiles.aut6dayFilter.displayName.text=\u6700\u7d42\u65e5 - 6
RecentFilesFilterChildren.exception.defaultVisit.msg=\u3053\u306e\u30bf\u30a4\u30d7\u306e\u8868\u793a\u53ef\u80fd\u306a\u9805\u76ee\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093: {0}
RecentFilesFilterNode.createSheet.filterType.name=\u30d5\u30a3\u30eb\u30bf\u30fc\u30bf\u30a4\u30d7
RecentFilesFilterNode.createSheet.filterType.displayName=\u30d5\u30a3\u30eb\u30bf\u30fc\u30bf\u30a4\u30d7
RecentFilesFilterChildren.exception.defaultVisit.msg=\u3053\u306e\u30bf\u30a4\u30d7\u306e\u8868\u793a\u53ef\u80fd\u306a\u9805\u76ee\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\: {0}
RecentFilesFilterNode.createSheet.filterType.desc=\u8aac\u660e\u306a\u3057
RecentFilesNode.createSheet.name.name=\u540d\u524d
RecentFilesNode.createSheet.name.displayName=\u540d\u524d
RecentFilesFilterNode.createSheet.filterType.displayName=\u30d5\u30a3\u30eb\u30bf\u30fc\u30bf\u30a4\u30d7
RecentFilesFilterNode.createSheet.filterType.name=\u30d5\u30a3\u30eb\u30bf\u30fc\u30bf\u30a4\u30d7
RecentFilesNode.createSheet.name.desc=\u8aac\u660e\u306a\u3057
RecentFilesNode.createSheet.name.displayName=\u540d\u524d
RecentFilesNode.createSheet.name.name=\u540d\u524d
RecentFilesNode.name.text=\u6700\u8fd1\u306e\u30d5\u30a1\u30a4\u30eb
ReportNode.sourceModuleNameProperty.name=\u30bd\u30fc\u30b9\u30e2\u30b8\u30e5\u30fc\u30eb\u540d
ReportNode.sourceModuleNameProperty.displayName=\u30bd\u30fc\u30b9\u30e2\u30b8\u30e5\u30fc\u30eb\u540d
ReportNode.sourceModuleNameProperty.desc=\u30ec\u30dd\u30fc\u30c8\u3092\u4f5c\u6210\u3057\u305f\u30e2\u30b8\u30e5\u30fc\u30eb\u540d
ReportNode.createdTimeProperty.name=\u4f5c\u6210\u3057\u305f\u6642\u523b
ReportNode.createdTimeProperty.displayName=\u4f5c\u6210\u3057\u305f\u6642\u523b
ReportNode.createdTimeProperty.desc=\u30ec\u30dd\u30fc\u30c8\u304c\u4f5c\u6210\u3055\u308c\u305f\u6642\u523b
ReportNode.pathProperty.name= \u30ec\u30dd\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9
ReportNode.pathProperty.displayName= \u30ec\u30dd\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9
ReportNode.createdTimeProperty.displayName=\u4f5c\u6210\u3057\u305f\u6642\u523b
ReportNode.createdTimeProperty.name=\u4f5c\u6210\u3057\u305f\u6642\u523b
ReportNode.pathProperty.desc=\u30ec\u30dd\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u306e\u30ed\u30fc\u30ab\u30eb\u30d1\u30b9
ReportNode.reportNameProperty.name=\u30ec\u30dd\u30fc\u30c8\u540d
ReportNode.reportNameProperty.displayName=\u30ec\u30dd\u30fc\u30c8\u540d
ReportNode.pathProperty.displayName=\u30ec\u30dd\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9
ReportNode.pathProperty.name=\u30ec\u30dd\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9
ReportNode.reportNameProperty.desc=\u30ec\u30dd\u30fc\u30c8\u540d
ReportNode.reportNameProperty.displayName=\u30ec\u30dd\u30fc\u30c8\u540d
ReportNode.reportNameProperty.name=\u30ec\u30dd\u30fc\u30c8\u540d
ReportNode.sourceModuleNameProperty.desc=\u30ec\u30dd\u30fc\u30c8\u3092\u4f5c\u6210\u3057\u305f\u30e2\u30b8\u30e5\u30fc\u30eb\u540d
ReportNode.sourceModuleNameProperty.displayName=\u30bd\u30fc\u30b9\u30e2\u30b8\u30e5\u30fc\u30eb\u540d
ReportNode.sourceModuleNameProperty.name=\u30bd\u30fc\u30b9\u30e2\u30b8\u30e5\u30fc\u30eb\u540d
ReportsListNode.displayName=\u30ec\u30dd\u30fc\u30c8
ResultsNode.createSheet.name.desc=\u8aac\u660e\u306a\u3057
ResultsNode.createSheet.name.displayName=\u540d\u524d
ResultsNode.createSheet.name.name=\u540d\u524d
ResultsNode.name.text=\u7d50\u679c
SlackFileNode.getActions.viewInNewWin.text=\u65b0\u3057\u3044\u30a6\u30a3\u30f3\u30c9\u30a6\u3067\u8868\u793a
SlackFileNode.getActions.viewFileInDir.text=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u5185\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u8868\u793a
SlackFileNode.getActions.viewInNewWin.text=\u65b0\u3057\u3044\u30a6\u30a3\u30f3\u30c9\u30a6\u3067\u8868\u793a
SpecialDirectoryNode.getActions.viewInNewWin.text=\u65b0\u3057\u3044\u30a6\u30a3\u30f3\u30c9\u30a6\u3067\u8868\u793a
TagNameNode.namePlusTags.text={0} \u30bf\u30b0
TagNameNode.contentTagTypeNodeKey.text=\u30b3\u30f3\u30c6\u30f3\u30c4\u30bf\u30b0
TagNameNode.bbArtTagTypeNodeKey.text=\u7d50\u679c\u30bf\u30b0
TagNameNode.bookmark.text=\u30d6\u30c3\u30af\u30de\u30fc\u30af
TagNameNode.createSheet.name.name=\u540d\u524d
TagNameNode.contentTagTypeNodeKey.text=\u30b3\u30f3\u30c6\u30f3\u30c4\u30bf\u30b0
TagNameNode.createSheet.name.displayName=\u540d\u524d
TagsNode.displayName.text=\u30bf\u30b0
TagsNode.createSheet.name.name=\u540d\u524d
TagNameNode.createSheet.name.name=\u540d\u524d
TagNameNode.namePlusTags.text={0} \u30bf\u30b0
TagNode.propertySheet.origName=\u672c\u540d
TagNode.propertySheet.origNameDisplayName=\u672c\u540d
TagsNode.createSheet.name.displayName=\u540d\u524d
ViewsNode.name.text=\u30d3\u30e5\u30fc
ViewsNode.createSheet.name.name=\u540d\u524d
ViewsNode.createSheet.name.displayName=\u540d\u524d
TagsNode.createSheet.name.name=\u540d\u524d
TagsNode.displayName.text=\u30bf\u30b0
ViewsNode.createSheet.name.desc=\u8aac\u660e\u306a\u3057
ImageNode.createSheet.deviceId.desc=\u30a4\u30e1\u30fc\u30b8\u306e\u30c7\u30d0\u30a4\u30b9ID
ViewsNode.createSheet.name.displayName=\u540d\u524d
ViewsNode.createSheet.name.name=\u540d\u524d
ViewsNode.name.text=\u30d3\u30e5\u30fc
VirtualDirectoryNode.createSheet.deviceId.displayName=\u30c7\u30d0\u30a4\u30b9ID
VirtualDirectoryNode.createSheet.deviceId.name=\u30c7\u30d0\u30a4\u30b9ID
VirtualDirectoryNode.createSheet.name.desc=\u8aac\u660e\u306a\u3057
VirtualDirectoryNode.createSheet.name.displayName=\u540d\u524d
VirtualDirectoryNode.createSheet.name.name=\u540d\u524d
VirtualDirectoryNode.createSheet.noDesc=\u8aac\u660e\u306a\u3057
VirtualDirectoryNode.createSheet.size.desc=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u306e\u30b5\u30a4\u30ba(\u30d0\u30a4\u30c8)\u3067\u3059\u3002
VirtualDirectoryNode.createSheet.size.displayName=\u30b5\u30a4\u30ba(\u30d0\u30a4\u30c8)
VirtualDirectoryNode.createSheet.size.name=\u30b5\u30a4\u30ba(\u30d0\u30a4\u30c8)
VirtualDirectoryNode.createSheet.timezone.desc=\u30a4\u30e1\u30fc\u30b8\u306e\u30bf\u30a4\u30e0\u30be\u30fc\u30f3
VirtualDirectoryNode.createSheet.timezone.displayName=\u30bf\u30a4\u30e0\u30be\u30fc\u30f3
VirtualDirectoryNode.createSheet.timezone.name=\u30bf\u30a4\u30e0\u30be\u30fc\u30f3
ImageNode.createSheet.type.desc=\u30a4\u30e1\u30fc\u30b8\u306e\u30bf\u30a4\u30d7\u3067\u3059\u3002
VirtualDirectoryNode.createSheet.type.displayName=\u30bf\u30a4\u30d7
VirtualDirectoryNode.createSheet.type.name=\u30bf\u30a4\u30d7
VirtualDirectoryNode.createSheet.type.text=\u8ad6\u7406\u30d5\u30a1\u30a4\u30eb\u30bb\u30c3\u30c8
VirtualDirectoryNode.getActions.viewInNewWin.text=\u65b0\u3057\u3044\u30a6\u30a3\u30f3\u30c9\u30a6\u3067\u8868\u793a
VirtualDirectoryNode.createSheet.name.name=\u540d\u524d
VirtualDirectoryNode.createSheet.name.displayName=\u540d\u524d
VirtualDirectoryNode.createSheet.name.desc=\u8aac\u660e\u306a\u3057
VirtualDirectoryNode.createSheet.noDesc=\u8aac\u660e\u306a\u3057
VolumeNode.getActions.viewInNewWin.text=\u65b0\u3057\u3044\u30a6\u30a3\u30f3\u30c9\u30a6\u3067\u8868\u793a
VolumeNode.createSheet.name.name=\u540d\u524d
VolumeNode.createSheet.name.displayName=\u540d\u524d
VolumeNode.createSheet.name.desc=\u8aac\u660e\u306a\u3057
VolumeNode.createSheet.id.name=ID
VolumeNode.createSheet.id.displayName=ID
VolumeNode.createSheet.id.desc=\u8aac\u660e\u306a\u3057
VolumeNode.createSheet.startSector.name=\u30bb\u30af\u30bf\u30fc\u3092\u958b\u59cb\u4e2d\u3067\u3059
VolumeNode.createSheet.startSector.displayName=\u30bb\u30af\u30bf\u30fc\u3092\u958b\u59cb\u4e2d\u3067\u3059
VolumeNode.createSheet.startSector.desc=\u8aac\u660e\u306a\u3057
VolumeNode.createSheet.lenSectors.name=\u30bb\u30af\u30bf\u30fc\u306e\u9577\u3055:
VolumeNode.createSheet.lenSectors.displayName=\u30bb\u30af\u30bf\u30fc\u306e\u9577\u3055:
VolumeNode.createSheet.lenSectors.desc=\u8aac\u660e\u306a\u3057
VolumeNode.createSheet.description.name=\u8aac\u660e
VolumeNode.createSheet.description.displayName=\u8aac\u660e
VolumeNode.createSheet.description.desc=\u8aac\u660e\u306a\u3057
VolumeNode.createSheet.flags.name=\u30d5\u30e9\u30b0
VolumeNode.createSheet.flags.displayName=\u30d5\u30e9\u30b0
VolumeNode.createSheet.description.displayName=\u8aac\u660e
VolumeNode.createSheet.description.name=\u8aac\u660e
VolumeNode.createSheet.flags.desc=\u8aac\u660e\u306a\u3057
ArtifactStringContent.getStr.artifactId.text=\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8ID
DeleteReportAction.actionDisplayName.singleReport=\u30ec\u30dd\u30fc\u30c8\u3092\u524a\u9664
DeleteReportAction.actionDisplayName.multipleReports=\u30ec\u30dd\u30fc\u30c8\u3092\u524a\u9664
DeleteReportAction.actionPerformed.showConfirmDialog.title=\u524a\u9664\u3092\u78ba\u5b9a
DeleteReportAction.actionPerformed.showConfirmDialog.single.msg=\u30b1\u30fc\u30b9\u304b\u3089\u30ec\u30dd\u30fc\u30c8\u30921\u4ef6\u524a\u9664\u3057\u307e\u3059\u304b?
DeleteReportAction.actionPerformed.showConfirmDialog.multiple.msg=\u30b1\u30fc\u30b9\u304b\u3089\u30ec\u30dd\u30fc\u30c8\u3092 {0} \u4ef6\u524a\u9664\u3057\u307e\u3059\u304b?
FileTypeExtensionFilters.tskImgFilter.text=\u30a4\u30e1\u30fc\u30b8
FileTypeExtensionFilters.tskVideoFilter.text=\u52d5\u753b
FileTypeExtensionFilters.tskAudioFilter.text=\u30aa\u30fc\u30c7\u30a3\u30aa
FileTypeExtensionFilters.tskArchiveFilter.text=\u30a2\u30fc\u30ab\u30a4\u30d6
FileTypeExtensionFilters.tskDocumentFilter.text=\u6587\u66f8
FileTypeExtensionFilters.tskExecFilter.text=\u5b9f\u884c\u30d5\u30a1\u30a4\u30eb
FileTypeExtensionFilters.autDocHtmlFilter.text=HTML
FileTypeExtensionFilters.autDocOfficeFilter.text=Office
FileTypeExtensionFilters.autoDocPdfFilter.text=PDF
FileTypeExtensionFilters.autDocTxtFilter.text=\u30d7\u30ec\u30fc\u30f3\u30c6\u30ad\u30b9\u30c8
FileTypeExtensionFilters.autDocRtfFilter.text=\u30ea\u30c3\u30c1\u30c6\u30ad\u30b9\u30c8
VolumeNode.createSheet.flags.displayName=\u30d5\u30e9\u30b0
VolumeNode.createSheet.flags.name=\u30d5\u30e9\u30b0
VolumeNode.createSheet.id.desc=\u8aac\u660e\u306a\u3057
VolumeNode.createSheet.id.displayName=ID
VolumeNode.createSheet.id.name=ID
VolumeNode.createSheet.lenSectors.desc=\u8aac\u660e\u306a\u3057
VolumeNode.createSheet.lenSectors.displayName=\u30bb\u30af\u30bf\u30fc\u306e\u9577\u3055\:
VolumeNode.createSheet.lenSectors.name=\u30bb\u30af\u30bf\u30fc\u306e\u9577\u3055\:
VolumeNode.createSheet.name.desc=\u8aac\u660e\u306a\u3057
VolumeNode.createSheet.name.displayName=\u540d\u524d
VolumeNode.createSheet.name.name=\u540d\u524d
VolumeNode.createSheet.startSector.desc=\u8aac\u660e\u306a\u3057
VolumeNode.createSheet.startSector.displayName=\u30bb\u30af\u30bf\u30fc\u3092\u958b\u59cb\u4e2d\u3067\u3059
VolumeNode.createSheet.startSector.name=\u30bb\u30af\u30bf\u30fc\u3092\u958b\u59cb\u4e2d\u3067\u3059
VolumeNode.getActions.viewInNewWin.text=\u65b0\u3057\u3044\u30a6\u30a3\u30f3\u30c9\u30a6\u3067\u8868\u793a

View File

@ -36,7 +36,7 @@ import org.openide.util.NbBundle.Messages;
import org.sleuthkit.autopsy.casemodule.Case;
import org.sleuthkit.autopsy.casemodule.DeleteDataSourceAction;
import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException;
import org.sleuthkit.autopsy.casemodule.datasourcesummary.ViewSummaryInformationAction;
import org.sleuthkit.autopsy.datasourcesummary.ui.ViewSummaryInformationAction;
import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttributeInstance;
import org.sleuthkit.autopsy.corecomponents.DataResultViewerTable;
import org.sleuthkit.autopsy.coreutils.Logger;

View File

@ -24,7 +24,7 @@ import java.util.List;
import javax.swing.Action;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.casemodule.DeleteDataSourceAction;
import org.sleuthkit.autopsy.casemodule.datasourcesummary.ViewSummaryInformationAction;
import org.sleuthkit.autopsy.datasourcesummary.ui.ViewSummaryInformationAction;
import org.sleuthkit.autopsy.coreutils.ContextMenuExtensionPoint;
import org.sleuthkit.autopsy.directorytree.ExportCSVAction;
import org.sleuthkit.autopsy.directorytree.ExtractAction;

View File

@ -22,6 +22,8 @@ import java.nio.file.Path;
import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessor;
import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorCallback;
import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorProgressMonitor;
import org.sleuthkit.autopsy.ingest.IngestJobSettings;
import org.sleuthkit.autopsy.ingest.IngestStream;
/**
* Interface implemented by DataSourceProcessors in order to be supported by
@ -66,6 +68,31 @@ public interface AutoIngestDataSourceProcessor extends DataSourceProcessor {
*/
void process(String deviceId, Path dataSourcePath, DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callBack);
/**
* Adds a data source to the case database using a background task in a
* separate thread by calling DataSourceProcessor.run() method. Returns as
* soon as the background task is started. The background task uses a
* callback object to signal task completion and return results. Method can
* throw an exception for a system level problem. The exception should not
* be thrown for an issue related to bad input data.
*
* @param deviceId An ASCII-printable identifier for the device
* associated with the data source that is intended
* to be unique across multiple cases (e.g., a UUID).
* @param dataSourcePath Path to the data source.
* @param settings The ingest job settings.
* @param progressMonitor Progress monitor that will be used by the
* background task to report progress.
* @param callBack Callback that will be used by the background task
* to return results.
*
* @return The new ingest stream or null if an error occurred. Errors will be handled by the callback.
*/
default IngestStream processWithIngestStream(String deviceId, Path dataSourcePath, IngestJobSettings settings, DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callBack) {
throw new UnsupportedOperationException("Streaming ingest not supported for this data source processor");
}
/**
* A custom exception for the use of AutomatedIngestDataSourceProcessor.
*/

View File

@ -0,0 +1,2 @@
DataSourceUserActivitySummary_getRecentAccounts_calllogMessage=Call Log
DataSourceUserActivitySummary_getRecentAccounts_emailMessage=Email Message

View File

@ -0,0 +1,168 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2020 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.datasourcesummary.datamodel;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import org.sleuthkit.autopsy.casemodule.Case;
import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException;
import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.datamodel.BlackboardArtifact;
import org.sleuthkit.datamodel.BlackboardAttribute;
import org.sleuthkit.datamodel.SleuthkitCase;
import org.sleuthkit.datamodel.TskCoreException;
import org.sleuthkit.datamodel.TskData;
/**
* Provides methods to query for information for all datasources in a case.
*/
public class CaseDataSourcesSummary {
private static final Logger logger = Logger.getLogger(CaseDataSourcesSummary.class.getName());
/**
* Get a map containing the TSK_DATA_SOURCE_USAGE description attributes
* associated with each data source in the current case.
*
* @return Collection which maps datasource id to a String which displays a
* comma seperated list of values of data source usage types
* expected to be in the datasource
*/
public static Map<Long, String> getDataSourceTypes() {
try {
SleuthkitCase skCase = Case.getCurrentCaseThrows().getSleuthkitCase();
List<BlackboardArtifact> listOfArtifacts = skCase.getBlackboardArtifacts(BlackboardArtifact.ARTIFACT_TYPE.TSK_DATA_SOURCE_USAGE);
Map<Long, String> typeMap = new HashMap<>();
for (BlackboardArtifact typeArtifact : listOfArtifacts) {
BlackboardAttribute descriptionAttr = typeArtifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DESCRIPTION));
if (typeArtifact.getDataSource() != null && descriptionAttr != null) {
long dsId = typeArtifact.getDataSource().getId();
String type = typeMap.get(typeArtifact.getDataSource().getId());
if (type == null) {
type = descriptionAttr.getValueString();
} else {
type = type + ", " + descriptionAttr.getValueString();
}
typeMap.put(dsId, type);
}
}
return typeMap;
} catch (TskCoreException | NoCurrentCaseException ex) {
logger.log(Level.WARNING, "Unable to get types of files for all datasources, providing empty results", ex);
return Collections.emptyMap();
}
}
/**
* Get a map containing the number of files in each data source in the
* current case.
*
* @return Collection which maps datasource id to a count for the number of
* files in the datasource, will only contain entries for
* datasources which have at least 1 file
*/
public static Map<Long, Long> getCountsOfFiles() {
try {
final String countFilesQuery = "data_source_obj_id, COUNT(*) AS value FROM tsk_files"
+ " WHERE meta_type=" + TskData.TSK_FS_META_TYPE_ENUM.TSK_FS_META_TYPE_REG.getValue()
+ " AND type<>" + TskData.TSK_DB_FILES_TYPE_ENUM.VIRTUAL_DIR.getFileType()
+ " AND dir_type<>" + TskData.TSK_FS_NAME_TYPE_ENUM.VIRT_DIR.getValue()
+ " AND name<>''"
+ " GROUP BY data_source_obj_id"; //NON-NLS
return getValuesMap(countFilesQuery);
} catch (TskCoreException | NoCurrentCaseException ex) {
logger.log(Level.WARNING, "Unable to get counts of files for all datasources, providing empty results", ex);
return Collections.emptyMap();
}
}
/**
* Get a map containing the number of artifacts in each data source in the
* current case.
*
* @return Collection which maps datasource id to a count for the number of
* artifacts in the datasource, will only contain entries for
* datasources which have at least 1 artifact
*/
public static Map<Long, Long> getCountsOfArtifacts() {
try {
final String countArtifactsQuery = "data_source_obj_id, COUNT(*) AS value"
+ " FROM blackboard_artifacts WHERE review_status_id !=" + BlackboardArtifact.ReviewStatus.REJECTED.getID()
+ " GROUP BY data_source_obj_id"; //NON-NLS
return getValuesMap(countArtifactsQuery);
} catch (TskCoreException | NoCurrentCaseException ex) {
logger.log(Level.WARNING, "Unable to get counts of artifacts for all datasources, providing empty results", ex);
return Collections.emptyMap();
}
}
/**
* Get a map containing the number of tags which have been applied in each
* data source in the current case. Not necessarily the same as the number
* of items tagged, as an item can have any number of tags.
*
* @return Collection which maps datasource id to a count for the number of
* tags which have been applied in the datasource, will only contain
* entries for datasources which have at least 1 item tagged.
*/
public static Map<Long, Long> getCountsOfTags() {
try {
final String countFileTagsQuery = "data_source_obj_id, COUNT(*) AS value"
+ " FROM content_tags as content_tags, tsk_files as tsk_files"
+ " WHERE content_tags.obj_id = tsk_files.obj_id"
+ " GROUP BY data_source_obj_id"; //NON-NLS
//new hashmap so it can be modifiable
Map<Long, Long> tagCountMap = new HashMap<>(getValuesMap(countFileTagsQuery));
final String countArtifactTagsQuery = "data_source_obj_id, COUNT(*) AS value"
+ " FROM blackboard_artifact_tags as artifact_tags, blackboard_artifacts AS arts"
+ " WHERE artifact_tags.artifact_id = arts.artifact_id"
+ " GROUP BY data_source_obj_id"; //NON-NLS
//combine the results from the count artifact tags query into the copy of the mapped results from the count file tags query
getValuesMap(countArtifactTagsQuery).forEach((key, value) -> tagCountMap.merge(key, value, (value1, value2) -> value1 + value2));
return tagCountMap;
} catch (TskCoreException | NoCurrentCaseException ex) {
logger.log(Level.WARNING, "Unable to get counts of tags for all datasources, providing empty results", ex);
return Collections.emptyMap();
}
}
/**
* Helper method to execute a select query with a
* DataSourceSingleValueCallback.
*
* @param query the portion of the query which should follow the SELECT
*
* @return a map of datasource object ID to a value of type Long
*
* @throws TskCoreException
* @throws NoCurrentCaseException
*/
private static Map<Long, Long> getValuesMap(String query) throws TskCoreException, NoCurrentCaseException {
SleuthkitCase skCase = Case.getCurrentCaseThrows().getSleuthkitCase();
DataSourceSingleValueCallback callback = new DataSourceSingleValueCallback();
skCase.getCaseDbAccessManager().select(query, callback);
return callback.getMapOfValues();
}
private CaseDataSourcesSummary() {
}
}

View File

@ -0,0 +1,159 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2020 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.datasourcesummary.datamodel;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair;
import org.sleuthkit.autopsy.datasourcesummary.datamodel.SleuthkitCaseProvider.SleuthkitCaseProviderException;
import org.sleuthkit.datamodel.BlackboardArtifact;
import org.sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE;
import org.sleuthkit.datamodel.BlackboardAttribute;
import org.sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE;
import org.sleuthkit.datamodel.DataSource;
import org.sleuthkit.datamodel.SleuthkitCase;
import org.sleuthkit.datamodel.TskCoreException;
/**
* Providing data for the data source analysis tab.
*/
public class DataSourceAnalysisSummary {
private static final BlackboardAttribute.Type TYPE_SET_NAME = new BlackboardAttribute.Type(ATTRIBUTE_TYPE.TSK_SET_NAME);
private static final Set<String> EXCLUDED_KEYWORD_SEARCH_ITEMS = new HashSet<>(Arrays.asList(
"PHONE NUMBERS",
"IP ADDRESSES",
"EMAIL ADDRESSES",
"URLS",
"CREDIT CARD NUMBERS"
));
private final SleuthkitCaseProvider provider;
/**
* Main constructor.
*/
public DataSourceAnalysisSummary() {
this(SleuthkitCaseProvider.DEFAULT);
}
/**
* Main constructor.
*
* @param provider The means of obtaining a sleuthkit case.
*/
public DataSourceAnalysisSummary(SleuthkitCaseProvider provider) {
this.provider = provider;
}
/**
* Gets counts for hashset hits.
*
* @param dataSource The datasource for which to identify hashset hits.
*
* @return The hashset set name with the number of hits in descending order.
*
* @throws SleuthkitCaseProviderException
* @throws TskCoreException
*/
public List<Pair<String, Long>> getHashsetCounts(DataSource dataSource) throws SleuthkitCaseProviderException, TskCoreException {
return getCountsData(dataSource, TYPE_SET_NAME, ARTIFACT_TYPE.TSK_HASHSET_HIT);
}
/**
* Gets counts for keyword hits.
*
* @param dataSource The datasource for which to identify keyword hits.
*
* @return The keyword set name with the number of hits in descending order.
*
* @throws SleuthkitCaseProviderException
* @throws TskCoreException
*/
public List<Pair<String, Long>> getKeywordCounts(DataSource dataSource) throws SleuthkitCaseProviderException, TskCoreException {
return getCountsData(dataSource, TYPE_SET_NAME, ARTIFACT_TYPE.TSK_KEYWORD_HIT).stream()
// make sure we have a valid set and that that set does not belong to the set of excluded items
.filter((pair) -> pair != null && pair.getKey() != null && !EXCLUDED_KEYWORD_SEARCH_ITEMS.contains(pair.getKey().toUpperCase().trim()))
.collect(Collectors.toList());
}
/**
* Gets counts for interesting item hits.
*
* @param dataSource The datasource for which to identify interesting item
* hits.
*
* @return The interesting item set name with the number of hits in
* descending order.
*
* @throws SleuthkitCaseProviderException
* @throws TskCoreException
*/
public List<Pair<String, Long>> getInterestingItemCounts(DataSource dataSource) throws SleuthkitCaseProviderException, TskCoreException {
return getCountsData(dataSource, TYPE_SET_NAME, ARTIFACT_TYPE.TSK_INTERESTING_FILE_HIT, ARTIFACT_TYPE.TSK_INTERESTING_ARTIFACT_HIT);
}
/**
* Get counts for the artifact of the specified type.
*
* @param dataSource The datasource.
* @param keyType The attribute to use as the key type.
* @param artifactTypes The types of artifacts for which to query.
*
* @return A list of key value pairs where the key is the attribute type
* value and the value is the count of items found. This list is
* sorted by the count descending max to min.
*
* @throws SleuthkitCaseProviderException
* @throws TskCoreException
*/
private List<Pair<String, Long>> getCountsData(DataSource dataSource, BlackboardAttribute.Type keyType, ARTIFACT_TYPE... artifactTypes)
throws SleuthkitCaseProviderException, TskCoreException {
List<BlackboardArtifact> artifacts = new ArrayList<>();
SleuthkitCase skCase = provider.get();
// get all artifacts in one list for each artifact type
for (ARTIFACT_TYPE type : artifactTypes) {
artifacts.addAll(skCase.getBlackboard().getArtifacts(type.getTypeID(), dataSource.getId()));
}
// group those based on the value of the attribute type that should serve as a key
Map<String, Long> countedKeys = artifacts.stream()
.map((art) -> {
String key = DataSourceInfoUtilities.getStringOrNull(art, keyType);
return (StringUtils.isBlank(key)) ? null : key;
})
.filter((key) -> key != null)
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
// sort from max to min counts
return countedKeys.entrySet().stream()
.map((e) -> Pair.of(e.getKey(), e.getValue()))
.sorted((a, b) -> -a.getValue().compareTo(b.getValue()))
.collect(Collectors.toList());
}
}

View File

@ -0,0 +1,160 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2019 - 2020 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.datasourcesummary.datamodel;
import java.sql.SQLException;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.logging.Level;
import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.autopsy.datasourcesummary.datamodel.DataSourceInfoUtilities.ResultSetHandler;
import org.sleuthkit.datamodel.DataSource;
import org.sleuthkit.datamodel.TskData;
/**
* Provides information for the DataSourceSummaryCountsPanel.
*/
public class DataSourceCountsSummary {
private static final Logger logger = Logger.getLogger(DataSourceCountsSummary.class.getName());
/**
* Get count of regular files (not directories) in a data source.
*
* @param currentDataSource The data source.
*
* @return The count.
*/
public static Long getCountOfFiles(DataSource currentDataSource) {
return DataSourceInfoUtilities.getCountOfRegularFiles(currentDataSource, null,
"Unable to get count of files, providing empty results");
}
/**
* Get count of allocated files in a data source.
*
* @param currentDataSource The data source.
*
* @return The count.
*/
public static Long getCountOfAllocatedFiles(DataSource currentDataSource) {
return DataSourceInfoUtilities.getCountOfRegularFiles(currentDataSource,
DataSourceInfoUtilities.getMetaFlagsContainsStatement(TskData.TSK_FS_META_FLAG_ENUM.ALLOC),
"Unable to get counts of unallocated files for datasource, providing empty results");
}
/**
* Get count of unallocated files in a data source.
*
* @param currentDataSource The data source.
*
* @return The count.
*/
public static Long getCountOfUnallocatedFiles(DataSource currentDataSource) {
return DataSourceInfoUtilities.getCountOfRegularFiles(currentDataSource,
DataSourceInfoUtilities.getMetaFlagsContainsStatement(TskData.TSK_FS_META_FLAG_ENUM.UNALLOC)
+ " AND type<>" + TskData.TSK_DB_FILES_TYPE_ENUM.SLACK.getFileType(),
"Unable to get counts of unallocated files for datasource, providing empty results");
}
/**
* Get count of directories in a data source.
*
* @param currentDataSource The data source.
*
* @return The count.
*/
public static Long getCountOfDirectories(DataSource currentDataSource) {
return DataSourceInfoUtilities.getCountOfTskFiles(currentDataSource,
"meta_type=" + TskData.TSK_FS_META_TYPE_ENUM.TSK_FS_META_TYPE_DIR.getValue()
+ " AND type<>" + TskData.TSK_DB_FILES_TYPE_ENUM.VIRTUAL_DIR.getFileType(),
"Unable to get count of directories for datasource, providing empty results");
}
/**
* Get count of slack files in a data source.
*
* @param currentDataSource The data source.
*
* @return The count.
*/
public static Long getCountOfSlackFiles(DataSource currentDataSource) {
return DataSourceInfoUtilities.getCountOfRegularFiles(currentDataSource,
DataSourceInfoUtilities.getMetaFlagsContainsStatement(TskData.TSK_FS_META_FLAG_ENUM.UNALLOC)
+ " AND type=" + TskData.TSK_DB_FILES_TYPE_ENUM.SLACK.getFileType(),
"Unable to get count of slack files for datasources, providing empty results");
}
/**
* Retrieves counts for each artifact type in a data source.
*
* @param selectedDataSource The data source.
*
* @return A mapping of artifact type name to the counts or null if there
* was an error executing the query.
*/
public static Map<String, Long> getCountsOfArtifactsByType(DataSource selectedDataSource) {
if (selectedDataSource == null) {
return Collections.emptyMap();
}
final String nameParam = "name";
final String valueParam = "value";
String query
= "SELECT bbt.display_name AS " + nameParam + ", COUNT(*) AS " + valueParam
+ " FROM blackboard_artifacts bba "
+ " INNER JOIN blackboard_artifact_types bbt ON bba.artifact_type_id = bbt.artifact_type_id"
+ " WHERE bba.data_source_obj_id =" + selectedDataSource.getId()
+ " GROUP BY bbt.display_name";
String errorMessage = "Unable to get artifact type counts; returning null.";
return DataSourceInfoUtilities.getBaseQueryResult(query,
getStringLongResultSetHandler(nameParam, valueParam),
errorMessage);
}
/**
* Generates a result set handler that will return a map of string to long.
*
* @param keyParam The named parameter in the result set representing the
* key.
* @param valueParam The named parameter in the result set representing the
* value.
*
* @return The result set handler to generate the map of string to long.
*/
private static ResultSetHandler<LinkedHashMap<String, Long>> getStringLongResultSetHandler(String keyParam, String valueParam) {
return (resultSet) -> {
LinkedHashMap<String, Long> toRet = new LinkedHashMap<>();
while (resultSet.next()) {
try {
toRet.put(resultSet.getString(keyParam), resultSet.getLong(valueParam));
} catch (SQLException ex) {
logger.log(Level.WARNING, "Failed to get a result pair from the result set.", ex);
}
}
return toRet;
};
}
private DataSourceCountsSummary() {
}
}

View File

@ -0,0 +1,178 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2020 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.datasourcesummary.datamodel;
import java.sql.SQLException;
import java.util.logging.Level;
import org.sleuthkit.autopsy.coreutils.Logger;
import static org.sleuthkit.autopsy.datasourcesummary.datamodel.DataSourceInfoUtilities.getBaseQueryResult;
import org.sleuthkit.datamodel.BlackboardArtifact;
import org.sleuthkit.datamodel.BlackboardAttribute;
import org.sleuthkit.datamodel.DataSource;
import org.sleuthkit.datamodel.TskData;
/**
* Provides methods to query for data source overview details.
*/
public class DataSourceDetailsSummary {
private static final Logger logger = Logger.getLogger(DataSourceDetailsSummary.class.getName());
/**
* Gets the size of unallocated files in a particular datasource.
*
* @param currentDataSource The data source.
*
* @return The size or null if the query could not be executed.
*/
public static Long getSizeOfUnallocatedFiles(DataSource currentDataSource) {
if (currentDataSource == null) {
return null;
}
final String valueParam = "value";
final String countParam = "count";
String query = "SELECT SUM(size) AS " + valueParam + ", COUNT(*) AS " + countParam
+ " FROM tsk_files"
+ " WHERE " + DataSourceInfoUtilities.getMetaFlagsContainsStatement(TskData.TSK_FS_META_FLAG_ENUM.UNALLOC)
+ " AND type<>" + TskData.TSK_DB_FILES_TYPE_ENUM.SLACK.getFileType()
+ " AND type<>" + TskData.TSK_DB_FILES_TYPE_ENUM.VIRTUAL_DIR.getFileType()
+ " AND dir_type<>" + TskData.TSK_FS_NAME_TYPE_ENUM.VIRT_DIR.getValue()
+ " AND name<>''"
+ " AND data_source_obj_id=" + currentDataSource.getId();
DataSourceInfoUtilities.ResultSetHandler<Long> handler = (resultSet) -> {
if (resultSet.next()) {
// ensure that there is an unallocated count result that is attached to this data source
long resultCount = resultSet.getLong(valueParam);
return (resultCount > 0) ? resultSet.getLong(valueParam) : null;
} else {
return null;
}
};
String errorMessage = "Unable to get size of unallocated files; returning null.";
return DataSourceInfoUtilities.getBaseQueryResult(query, handler, errorMessage);
}
/**
* Retrieves the concatenation of operating system attributes for a
* particular data source.
*
* @param dataSource The data source.
*
* @return The concatenated value or null if the query could not be
* executed.
*/
public static String getOperatingSystems(DataSource dataSource) {
if (dataSource == null) {
return null;
}
return getConcattedAttrValue(dataSource.getId(),
BlackboardArtifact.ARTIFACT_TYPE.TSK_OS_INFO.getTypeID(),
BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PROG_NAME.getTypeID());
}
/**
* Retrieves the concatenation of data source usage for a particular data
* source.
*
* @param dataSource The data source.
*
* @return The concatenated value or null if the query could not be
* executed.
*/
public static String getDataSourceType(DataSource dataSource) {
if (dataSource == null) {
return null;
}
return getConcattedAttrValue(dataSource.getId(),
BlackboardArtifact.ARTIFACT_TYPE.TSK_DATA_SOURCE_USAGE.getTypeID(),
BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DESCRIPTION.getTypeID());
}
/**
* Generates a string which is a concatenation of the value received from
* the result set.
*
* @param query The query.
* @param valueParam The parameter for the value in the result set.
* @param separator The string separator used in concatenation.
* @param errorMessage The error message if the result set could not
* be received.
* @param singleErrorMessage The error message if a single result could not
* be obtained.
*
* @return The concatenated string or null if the query could not be
* executed.
*/
private static String getConcattedStringsResult(String query, String valueParam, String separator, String errorMessage, String singleErrorMessage) {
DataSourceInfoUtilities.ResultSetHandler<String> handler = (resultSet) -> {
String toRet = "";
boolean first = true;
while (resultSet.next()) {
try {
if (first) {
first = false;
} else {
toRet += separator;
}
toRet += resultSet.getString(valueParam);
} catch (SQLException ex) {
logger.log(Level.WARNING, singleErrorMessage, ex);
}
}
return toRet;
};
return getBaseQueryResult(query, handler, errorMessage);
}
/**
* Generates a concatenated string value based on the text value of a
* particular attribute in a particular artifact for a specific data source.
*
* @param dataSourceId The data source id.
* @param artifactTypeId The artifact type id.
* @param attributeTypeId The attribute type id.
*
* @return The concatenated value or null if the query could not be
* executed.
*/
private static String getConcattedAttrValue(long dataSourceId, int artifactTypeId, int attributeTypeId) {
final String valueParam = "concatted_attribute_value";
String query = "SELECT attr.value_text AS " + valueParam
+ " FROM blackboard_artifacts bba "
+ " INNER JOIN blackboard_attributes attr ON bba.artifact_id = attr.artifact_id "
+ " WHERE bba.data_source_obj_id = " + dataSourceId
+ " AND bba.artifact_type_id = " + artifactTypeId
+ " AND attr.attribute_type_id = " + attributeTypeId;
String errorMessage = "Unable to execute query to retrieve concatted attribute values.";
String singleErrorMessage = "There was an error retrieving one of the results. That result will be omitted from concatted value.";
String separator = ", ";
return getConcattedStringsResult(query, valueParam, separator, errorMessage, singleErrorMessage);
}
private DataSourceDetailsSummary() {
}
}

View File

@ -0,0 +1,422 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2019 - 2020 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.datasourcesummary.datamodel;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.SortedMap;
import java.util.TreeMap;
import java.util.logging.Level;
import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.datamodel.SleuthkitCase;
import org.sleuthkit.datamodel.TskCoreException;
import org.apache.commons.lang.StringUtils;
import org.sleuthkit.autopsy.casemodule.Case;
import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException;
import org.sleuthkit.datamodel.BlackboardArtifact;
import org.sleuthkit.datamodel.BlackboardAttribute;
import org.sleuthkit.autopsy.datasourcesummary.datamodel.SleuthkitCaseProvider.SleuthkitCaseProviderException;
import org.sleuthkit.datamodel.BlackboardAttribute.Type;
import org.sleuthkit.datamodel.TskData;
import org.sleuthkit.datamodel.DataSource;
import org.sleuthkit.datamodel.TskData.TSK_FS_META_FLAG_ENUM;
import org.sleuthkit.datamodel.TskData.TSK_FS_META_TYPE_ENUM;
/**
* Utilities for getting information about a data source or all data sources
* from the case database.
*/
final class DataSourceInfoUtilities {
private static final Logger logger = Logger.getLogger(DataSourceInfoUtilities.class.getName());
/**
* Gets a count of tsk_files for a particular datasource where dir_type is
* not a virtual directory and has a name.
*
* @param currentDataSource The datasource.
* @param additionalWhere Additional sql where clauses.
* @param onError The message to log on error.
*
* @return The count of files or null on error.
*/
static Long getCountOfTskFiles(DataSource currentDataSource, String additionalWhere, String onError) {
if (currentDataSource != null) {
try {
SleuthkitCase skCase = Case.getCurrentCaseThrows().getSleuthkitCase();
return skCase.countFilesWhere(
"data_source_obj_id=" + currentDataSource.getId()
+ " AND dir_type<>" + TskData.TSK_FS_NAME_TYPE_ENUM.VIRT_DIR.getValue()
+ " AND name<>''"
+ (StringUtils.isBlank(additionalWhere) ? "" : (" AND " + additionalWhere)));
} catch (TskCoreException | NoCurrentCaseException ex) {
logger.log(Level.WARNING, onError, ex);
//unable to get count of files for the specified types cell will be displayed as empty
}
}
return null;
}
/**
* Gets a count of regular files for a particular datasource where the
* dir_type and type are not a virtual directory and has a name.
*
* @param currentDataSource The datasource.
* @param additionalWhere Additional sql where clauses.
* @param onError The message to log on error.
*
* @return The count of files or null on error.
*/
static Long getCountOfRegularFiles(DataSource currentDataSource, String additionalWhere, String onError) {
String whereClause = "meta_type=" + TSK_FS_META_TYPE_ENUM.TSK_FS_META_TYPE_REG.getValue()
+ " AND type<>" + TskData.TSK_DB_FILES_TYPE_ENUM.VIRTUAL_DIR.getFileType();
if (StringUtils.isNotBlank(additionalWhere)) {
whereClause += " AND " + additionalWhere;
}
return getCountOfTskFiles(currentDataSource, whereClause, onError);
}
/**
* An interface for handling a result set and returning a value.
*/
interface ResultSetHandler<T> {
T process(ResultSet resultset) throws SQLException;
}
/**
* Retrieves a result based on the provided query.
*
* @param query The query.
* @param processor The result set handler.
* @param errorMessage The error message to display if there is an error
* retrieving the resultset.
*
* @return The ResultSetHandler value or null if no ResultSet could be
* obtained.
*/
static <T> T getBaseQueryResult(String query, ResultSetHandler<T> processor, String errorMessage) {
return getBaseQueryResult(SleuthkitCaseProvider.DEFAULT, query, processor, errorMessage);
}
/**
* Retrieves a result based on the provided query.
*
* @param provider The means of obtaining a SleuthkitCase.
* @param query The query.
* @param processor The result set handler.
* @param errorMessage The error message to display if there is an error
* retrieving the resultset.
*
* @return The ResultSetHandler value or null if no ResultSet could be
* obtained.
*/
static <T> T getBaseQueryResult(SleuthkitCaseProvider provider, String query, ResultSetHandler<T> processor, String errorMessage) {
try (SleuthkitCase.CaseDbQuery dbQuery = provider.get().executeQuery(query)) {
ResultSet resultSet = dbQuery.getResultSet();
try {
return processor.process(resultSet);
} catch (SQLException ex) {
logger.log(Level.WARNING, errorMessage, ex);
}
} catch (TskCoreException | SleuthkitCaseProviderException ex) {
logger.log(Level.WARNING, errorMessage, ex);
}
return null;
}
/**
* Creates sql where clause that does a bitwise check to see if flag is
* present.
*
* @param flag The flag for which to check.
*
* @return The clause.
*/
static String getMetaFlagsContainsStatement(TSK_FS_META_FLAG_ENUM flag) {
return "meta_flags & " + flag.getValue() + " > 0";
}
/**
* Enum for specifying the sort order for getAttributes.
*/
enum SortOrder {
DESCENDING,
ASCENDING
}
/**
* Returns a list of all artifacts of the given type that have an attribute
* of the given type sorted by given attribute type value. Artifacts that do
* not have the given attribute will not be included in the list.
*
* Sorting on attributes of type byte[] and JSON is not currently supported.
*
* @param skCase SleuthkitCase instance.
* @param artifactType Type of artifacts to sort.
* @param dataSource Data Source that the artifact belongs to.
* @param attributeType Attribute type to sort by.
* @param sortOrder Sort order of the attributes, either ascending or
* descending.
*
* @return A list of artifacts of type artifactType sorted by the attribute
* of attributeType in the given sortOrder. If no artifacts are
* found an empty list will be returned.
*
* @throws TskCoreException
*/
static List<BlackboardArtifact> getArtifacts(SleuthkitCase skCase, BlackboardArtifact.Type artifactType, DataSource dataSource, BlackboardAttribute.Type attributeType, SortOrder sortOrder) throws TskCoreException {
return getArtifacts(skCase, artifactType, dataSource, attributeType, sortOrder, 0);
}
/**
* Return a list of artifacts that have been sorted by their attribute of
* attributeType. If an artifact of the given type does not have the given
* attribute it will not be included in the returned list.
*
* Sorting on attributes of type byte[] and JSON is not currently supported.
*
* @param skCase SleuthkitCase instance.
* @param artifactType Type of artifacts to sort.
* @param dataSource Data Source that the artifact belongs to.
* @param attributeType Attribute type to sort by.
* @param sortOrder Sort order of the attributes, either ascending or
* descending.
* @param maxCount Maximum number of results to return. To return all
* values maxCount should be 0.
*
* @return A list of artifacts of type artifactType sorted by the attribute
* of attributeType in the given sortOrder. If no artifacts are
* found an empty list will be returned.
*
* @throws TskCoreException
*/
static List<BlackboardArtifact> getArtifacts(SleuthkitCase skCase, BlackboardArtifact.Type artifactType, DataSource dataSource, BlackboardAttribute.Type attributeType, SortOrder sortOrder, int maxCount) throws TskCoreException {
if (maxCount < 0) {
throw new IllegalArgumentException("Invalid maxCount passed to getArtifacts, value must be equal to or greater than 0");
}
return createListFromMap(getArtifactMap(skCase, artifactType, dataSource, attributeType, sortOrder), maxCount);
}
/**
* Empty private constructor
*/
private DataSourceInfoUtilities() {
}
/**
* Create a Map of lists of artifacts sorted by the given attribute.
*
* @param skCase SleuthkitCase instance.
* @param artifactType Type of artifacts to sort.
* @param dataSource Data Source that the artifact belongs to.
* @param attributeType Attribute type to sort by.
* @param sortOrder Sort order of the attributes, either ascending or
* descending.
*
* @return A Map of lists of artifacts sorted by the value of attribute
* given type. Artifacts that do not have an attribute of the given
* type will not be included.
*
* @throws TskCoreException
*/
static private SortedMap<BlackboardAttribute, List<BlackboardArtifact>> getArtifactMap(SleuthkitCase skCase, BlackboardArtifact.Type artifactType, DataSource dataSource, BlackboardAttribute.Type attributeType, SortOrder sortOrder) throws TskCoreException {
SortedMap<BlackboardAttribute, List<BlackboardArtifact>> sortedMap = new TreeMap<>(new AttributeComparator(sortOrder));
List<BlackboardArtifact> artifactList = skCase.getBlackboard().getArtifacts(artifactType.getTypeID(), dataSource.getId());
for (BlackboardArtifact artifact : artifactList) {
BlackboardAttribute attribute = artifact.getAttribute(attributeType);
if (attribute == null) {
continue;
}
List<BlackboardArtifact> mapArtifactList = sortedMap.get(attribute);
if (mapArtifactList == null) {
mapArtifactList = new ArrayList<>();
sortedMap.put(attribute, mapArtifactList);
}
mapArtifactList.add(artifact);
}
return sortedMap;
}
/**
* Creates the list of artifacts from the sorted map and the given count.
*
* @param sortedMap Sorted map of artifact lists.
* @param maxCount Maximum number of artifacts to return.
*
* @return List of artifacts, list will be empty if none were found.
*/
static private List<BlackboardArtifact> createListFromMap(SortedMap<BlackboardAttribute, List<BlackboardArtifact>> sortedMap, int maxCount) {
List<BlackboardArtifact> artifactList = new ArrayList<>();
for (List<BlackboardArtifact> mapArtifactList : sortedMap.values()) {
if (maxCount == 0 || (artifactList.size() + mapArtifactList.size()) <= maxCount) {
artifactList.addAll(mapArtifactList);
continue;
}
if (maxCount == artifactList.size()) {
break;
}
for (BlackboardArtifact artifact : mapArtifactList) {
if (artifactList.size() < maxCount) {
artifactList.add(artifact);
} else {
break;
}
}
}
return artifactList;
}
/**
* Compares the value of two BlackboardAttributes that are of the same type.
* This comparator is specialized for data source summary and only supports
* the basic attribute types of string, integer, long, datetime (long), and
* double.
*
* Note: A runtime exception will be thrown from the compare if the
* attributes are not of the same type or if their type is not supported.
*/
private static class AttributeComparator implements Comparator<BlackboardAttribute> {
private final SortOrder direction;
AttributeComparator(SortOrder direction) {
this.direction = direction;
}
@Override
public int compare(BlackboardAttribute attribute1, BlackboardAttribute attribute2) {
if (attribute1.getAttributeType() != attribute2.getAttributeType()) {
throw new IllegalArgumentException("Unable to compare attributes of different types");
}
int result = compare(attribute1.getAttributeType(), attribute1, attribute2);
if (direction == SortOrder.DESCENDING) {
result *= -1;
}
return result;
}
/**
* Compared two attributes of the given type. Note, that not all
* attribute types are supported. A runtime exception will be thrown if
* an unsupported attribute is supplied.
*
* @param type Attribute type.
* @param attribute1 First attribute to compare.
* @param attribute2 Second attribute to compare.
*
* @return Compare result.
*/
private int compare(BlackboardAttribute.Type type, BlackboardAttribute attribute1, BlackboardAttribute attribute2) {
switch (type.getValueType()) {
case STRING:
return attribute1.getValueString().compareTo(attribute2.getValueString());
case INTEGER:
return Integer.compare(attribute1.getValueInt(), attribute2.getValueInt());
case LONG:
case DATETIME:
return Long.compare(attribute1.getValueLong(), attribute2.getValueLong());
case DOUBLE:
return Double.compare(attribute1.getValueDouble(), attribute2.getValueDouble());
case BYTE:
case JSON:
default:
throw new IllegalArgumentException("Unable to compare attributes of type " + attribute1.getAttributeType().getTypeName());
}
}
}
/**
* Retrieves attribute from artifact if exists. Returns null if attribute is
* null or underlying call throws exception.
*
* @param artifact The artifact.
* @param attributeType The attribute type to retrieve from the artifact.
*
* @return The attribute or null if could not be received.
*/
private static BlackboardAttribute getAttributeOrNull(BlackboardArtifact artifact, Type attributeType) {
try {
return artifact.getAttribute(attributeType);
} catch (TskCoreException ex) {
return null;
}
}
/**
* Retrieves the string value of a certain attribute type from an artifact.
*
* @param artifact The artifact.
* @param attributeType The attribute type.
*
* @return The 'getValueString()' value or null if the attribute or String
* could not be retrieved.
*/
static String getStringOrNull(BlackboardArtifact artifact, Type attributeType) {
BlackboardAttribute attr = getAttributeOrNull(artifact, attributeType);
return (attr == null) ? null : attr.getValueString();
}
/**
* Retrieves the long value of a certain attribute type from an artifact.
*
* @param artifact The artifact.
* @param attributeType The attribute type.
*
* @return The 'getValueLong()' value or null if the attribute could not be
* retrieved.
*/
static Long getLongOrNull(BlackboardArtifact artifact, Type attributeType) {
BlackboardAttribute attr = getAttributeOrNull(artifact, attributeType);
return (attr == null) ? null : attr.getValueLong();
}
/**
* Retrieves the long value of a certain attribute type from an artifact and
* converts to date (seconds since epoch).
*
* @param artifact The artifact.
* @param attributeType The attribute type.
*
* @return The date determined from the 'getValueLong()' as seconds from
* epoch or null if the attribute could not be retrieved or is 0.
*/
static Date getDateOrNull(BlackboardArtifact artifact, Type attributeType) {
Long longVal = getLongOrNull(artifact, attributeType);
return (longVal == null || longVal == 0) ? null : new Date(longVal * 1000);
}
}

View File

@ -16,7 +16,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.sleuthkit.autopsy.casemodule.datasourcesummary;
package org.sleuthkit.autopsy.datasourcesummary.datamodel;
import java.sql.ResultSet;
import java.sql.SQLException;

View File

@ -0,0 +1,107 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2020 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.datasourcesummary.datamodel;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import org.sleuthkit.datamodel.DataSource;
/**
* Provides methods to query for datasource files by mime type.
*/
public class DataSourceMimeTypeSummary {
/**
* Get the number of files in the case database for the current data source
* which have the specified mimetypes.
*
* @param currentDataSource the data source which we are finding a file
* count
*
* @param setOfMimeTypes the set of mime types which we are finding the
* number of occurences of
*
* @return a Long value which represents the number of occurrences of the
* specified mime types in the current case for the specified data
* source, null if no count was retrieved
*/
public static Long getCountOfFilesForMimeTypes(DataSource currentDataSource, Set<String> setOfMimeTypes) {
return DataSourceInfoUtilities.getCountOfRegularFiles(currentDataSource,
"mime_type IN " + getSqlSet(setOfMimeTypes),
"Unable to get count of files for specified mime types");
}
/**
* Get the number of files in the case database for the current data source
* which do not have the specified mimetypes.
*
* @param currentDataSource the data source which we are finding a file
* count
*
* @param setOfMimeTypes the set of mime types that should be excluded.
*
* @return a Long value which represents the number of files that do not
* have the specific mime type, but do have a mime type.
*/
public static Long getCountOfFilesNotInMimeTypes(DataSource currentDataSource, Set<String> setOfMimeTypes) {
return DataSourceInfoUtilities.getCountOfRegularFiles(currentDataSource,
"mime_type NOT IN " + getSqlSet(setOfMimeTypes)
+ " AND mime_type IS NOT NULL AND mime_type <> '' ",
"Unable to get count of files without specified mime types");
}
/**
* Gets the number of files in the data source with no assigned mime type.
*
* @param currentDataSource The data source.
*
* @return The number of files with no mime type or null if there is an
* issue searching the data source.
*
*/
public static Long getCountOfFilesWithNoMimeType(DataSource currentDataSource) {
return DataSourceInfoUtilities.getCountOfRegularFiles(currentDataSource,
"(mime_type IS NULL OR mime_type = '') ",
"Unable to get count of files without a mime type");
}
/**
* Derives a sql set string (i.e. "('val1', 'val2', 'val3')"). A naive
* attempt is made to sanitize the strings by removing single quotes from
* values.
*
* @param setValues The values that should be present in the set. Single
* quotes are removed.
*
* @return The sql set string.
*/
private static String getSqlSet(Set<String> setValues) {
List<String> quotedValues = setValues
.stream()
.map(str -> String.format("'%s'", str.replace("'", "")))
.collect(Collectors.toList());
String commaSeparatedQuoted = String.join(", ", quotedValues);
return String.format("(%s) ", commaSeparatedQuoted);
}
private DataSourceMimeTypeSummary() {
}
}

View File

@ -16,7 +16,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.sleuthkit.autopsy.casemodule.datasourcesummary;
package org.sleuthkit.autopsy.datasourcesummary.datamodel;
import java.sql.ResultSet;
import java.sql.SQLException;

View File

@ -0,0 +1,304 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2020 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.datasourcesummary.datamodel;
import java.io.File;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.function.Function;
import java.util.logging.Level;
import java.util.stream.Collectors;
import org.apache.commons.lang.StringUtils;
import org.sleuthkit.autopsy.coreutils.Logger;
import static org.sleuthkit.autopsy.datasourcesummary.datamodel.DataSourceInfoUtilities.getBaseQueryResult;
import org.sleuthkit.datamodel.BlackboardArtifact;
import org.sleuthkit.datamodel.BlackboardAttribute;
import org.sleuthkit.datamodel.DataSource;
/**
* Provides information to populate Top Programs Summary queries.
*/
public class DataSourceTopProgramsSummary {
private static final Logger logger = Logger.getLogger(DataSourceTopProgramsSummary.class.getName());
/**
* A SQL join type.
*/
private enum JoinType {
LEFT,
RIGHT,
INNER,
OUTER
}
/**
* A blackboard attribute value column.
*/
private enum AttributeColumn {
value_text,
value_int32,
value_int64
}
/**
* The suffix joined to a key name for use as an identifier of a query.
*/
private static final String QUERY_SUFFIX = "_query";
/**
* Functions that determine the folder name of a list of path elements. If
* not matched, function returns null.
*/
private static final List<Function<List<String>, String>> SHORT_FOLDER_MATCHERS = Arrays.asList(
// handle Program Files and Program Files (x86) - if true, return the next folder
(pathList) -> {
if (pathList.size() < 2) {
return null;
}
String rootParent = pathList.get(0).toUpperCase();
if ("PROGRAM FILES".equals(rootParent) || "PROGRAM FILES (X86)".equals(rootParent)) {
return pathList.get(1);
} else {
return null;
}
},
// if there is a folder named "APPLICATION DATA" or "APPDATA"
(pathList) -> {
for (String pathEl : pathList) {
String uppered = pathEl.toUpperCase();
if ("APPLICATION DATA".equals(uppered) || "APPDATA".equals(uppered)) {
return "AppData";
}
}
return null;
}
);
/**
* Creates a sql statement querying the blackboard attributes table for a
* particular attribute type and returning a specified value. That query
* also joins with the blackboard artifact table.
*
* @param joinType The type of join statement to create.
* @param attributeColumn The blackboard attribute column that should be
* returned.
* @param attrType The attribute type to query for.
* @param keyName The aliased name of the attribute to return. This
* is also used to calculate the alias of the query
* same as getFullKey.
* @param bbaName The blackboard artifact table alias.
*
* @return The generated sql statement.
*/
private static String getAttributeJoin(JoinType joinType, AttributeColumn attributeColumn, BlackboardAttribute.ATTRIBUTE_TYPE attrType, String keyName, String bbaName) {
String queryName = keyName + QUERY_SUFFIX;
String innerQueryName = "inner_attribute_" + queryName;
return "\n" + joinType + " JOIN (\n"
+ " SELECT \n"
+ " " + innerQueryName + ".artifact_id,\n"
+ " " + innerQueryName + "." + attributeColumn + " AS " + keyName + "\n"
+ " FROM blackboard_attributes " + innerQueryName + "\n"
+ " WHERE " + innerQueryName + ".attribute_type_id = " + attrType.getTypeID() + " -- " + attrType.name() + "\n"
+ ") " + queryName + " ON " + queryName + ".artifact_id = " + bbaName + ".artifact_id\n";
}
/**
* Given a column key, creates the full name for the column key.
*
* @param key The column key.
*
* @return The full identifier for the column key.
*/
private static String getFullKey(String key) {
return key + QUERY_SUFFIX + "." + key;
}
/**
* Constructs a SQL 'where' statement from a list of clauses and puts
* parenthesis around each clause.
*
* @param clauses The clauses
*
* @return The generated 'where' statement.
*/
private static String getWhereString(List<String> clauses) {
if (clauses.isEmpty()) {
return "";
}
List<String> parenthesized = clauses.stream()
.map(c -> "(" + c + ")")
.collect(Collectors.toList());
return "\nWHERE " + String.join("\n AND ", parenthesized) + "\n";
}
/**
* Generates a [column] LIKE sql clause.
*
* @param column The column identifier.
* @param likeString The string that will be used as column comparison.
* @param isLike if false, the statement becomes NOT LIKE.
*
* @return The generated statement.
*/
private static String getLikeClause(String column, String likeString, boolean isLike) {
return column + (isLike ? "" : " NOT") + " LIKE '" + likeString + "'";
}
private final SleuthkitCaseProvider provider;
public DataSourceTopProgramsSummary() {
this(SleuthkitCaseProvider.DEFAULT);
}
public DataSourceTopProgramsSummary(SleuthkitCaseProvider provider) {
this.provider = provider;
}
/**
* Retrieves a list of the top programs used on the data source. Currently
* determines this based off of which prefetch results return the highest
* count.
*
* @param dataSource The data source.
* @param count The number of programs to return.
*
* @return
*/
public List<TopProgramsResult> getTopPrograms(DataSource dataSource, int count) {
if (dataSource == null || count <= 0) {
return Collections.emptyList();
}
// ntosboot should be ignored
final String ntosBootIdentifier = "NTOSBOOT";
// programs in windows directory to be ignored
final String windowsDir = "/WINDOWS%";
final String nameParam = "name";
final String pathParam = "path";
final String runCountParam = "run_count";
final String lastRunParam = "last_run";
String bbaQuery = "bba";
final String query = "SELECT\n"
+ " " + getFullKey(nameParam) + " AS " + nameParam + ",\n"
+ " " + getFullKey(pathParam) + " AS " + pathParam + ",\n"
+ " MAX(" + getFullKey(runCountParam) + ") AS " + runCountParam + ",\n"
+ " MAX(" + getFullKey(lastRunParam) + ") AS " + lastRunParam + "\n"
+ "FROM blackboard_artifacts " + bbaQuery + "\n"
+ getAttributeJoin(JoinType.INNER, AttributeColumn.value_text, BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PROG_NAME, nameParam, bbaQuery)
+ getAttributeJoin(JoinType.LEFT, AttributeColumn.value_text, BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PATH, pathParam, bbaQuery)
+ getAttributeJoin(JoinType.LEFT, AttributeColumn.value_int32, BlackboardAttribute.ATTRIBUTE_TYPE.TSK_COUNT, runCountParam, bbaQuery)
+ getAttributeJoin(JoinType.LEFT, AttributeColumn.value_int64, BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DATETIME, lastRunParam, bbaQuery)
+ getWhereString(Arrays.asList(
bbaQuery + ".artifact_type_id = " + BlackboardArtifact.ARTIFACT_TYPE.TSK_PROG_RUN.getTypeID(),
bbaQuery + ".data_source_obj_id = " + dataSource.getId(),
// exclude ntosBootIdentifier from results
getLikeClause(getFullKey(nameParam), ntosBootIdentifier, false),
// exclude windows directory items from results
getFullKey(pathParam) + " IS NULL OR " + getLikeClause(getFullKey(pathParam), windowsDir, false)
))
+ "GROUP BY " + getFullKey(nameParam) + ", " + getFullKey(pathParam) + "\n"
+ "ORDER BY \n"
+ " MAX(" + getFullKey(runCountParam) + ") DESC,\n"
+ " MAX(" + getFullKey(lastRunParam) + ") DESC,\n"
+ " " + getFullKey(nameParam) + " ASC";
final String errorMessage = "Unable to get top program results; returning null.";
DataSourceInfoUtilities.ResultSetHandler<List<TopProgramsResult>> handler = (resultSet) -> {
List<TopProgramsResult> progResults = new ArrayList<>();
boolean quitAtCount = false;
while (resultSet.next() && (!quitAtCount || progResults.size() < count)) {
try {
long lastRunEpoch = resultSet.getLong(lastRunParam);
Date lastRun = (resultSet.wasNull()) ? null : new Date(lastRunEpoch * 1000);
Long runCount = resultSet.getLong(runCountParam);
if (resultSet.wasNull()) {
runCount = null;
}
if (lastRun != null || runCount != null) {
quitAtCount = true;
}
progResults.add(new TopProgramsResult(
resultSet.getString(nameParam),
resultSet.getString(pathParam),
runCount,
lastRun));
} catch (SQLException ex) {
logger.log(Level.WARNING, "Failed to get a top program result from the result set.", ex);
}
}
return progResults;
};
return getBaseQueryResult(provider, query, handler, errorMessage);
}
/**
* Determines a short folder name if any. Otherwise, returns empty string.
*
* @param strPath The string path.
*
* @return The short folder name or empty string if not found.
*/
public String getShortFolderName(String strPath, String applicationName) {
if (strPath == null) {
return "";
}
List<String> pathEls = new ArrayList<>(Arrays.asList(applicationName));
File file = new File(strPath);
while (file != null && StringUtils.isNotBlank(file.getName())) {
pathEls.add(file.getName());
file = file.getParentFile();
}
Collections.reverse(pathEls);
for (Function<List<String>, String> matchEntry : SHORT_FOLDER_MATCHERS) {
String result = matchEntry.apply(pathEls);
if (StringUtils.isNotBlank(result)) {
return result;
}
}
return "";
}
}

View File

@ -0,0 +1,533 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2020 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.datasourcesummary.datamodel;
import java.util.Collection;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;
import org.apache.commons.lang3.StringUtils;
import org.openide.util.NbBundle.Messages;
import org.sleuthkit.autopsy.datasourcesummary.datamodel.SleuthkitCaseProvider.SleuthkitCaseProviderException;
import org.sleuthkit.datamodel.BlackboardArtifact;
import org.sleuthkit.datamodel.BlackboardAttribute;
import org.sleuthkit.datamodel.DataSource;
import org.sleuthkit.datamodel.TskCoreException;
import org.sleuthkit.autopsy.texttranslation.NoServiceProviderException;
import org.sleuthkit.autopsy.texttranslation.TextTranslationService;
import org.sleuthkit.autopsy.texttranslation.TranslationException;
import static org.sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE;
import static org.sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE;
/**
* Provides summary information about user activity in a datasource. At this
* time, the data being provided for domains is fictitious and is done as a
* placeholder.
*/
public class DataSourceUserActivitySummary {
private static final BlackboardArtifact.Type TYPE_DEVICE_ATTACHED = new BlackboardArtifact.Type(ARTIFACT_TYPE.TSK_DEVICE_ATTACHED);
private static final BlackboardAttribute.Type TYPE_DATETIME = new BlackboardAttribute.Type(ATTRIBUTE_TYPE.TSK_DATETIME);
private static final BlackboardAttribute.Type TYPE_DATETIME_ACCESSED = new BlackboardAttribute.Type(ATTRIBUTE_TYPE.TSK_DATETIME_ACCESSED);
private static final BlackboardAttribute.Type TYPE_DEVICE_ID = new BlackboardAttribute.Type(ATTRIBUTE_TYPE.TSK_DEVICE_ID);
private static final BlackboardAttribute.Type TYPE_DEVICE_MAKE = new BlackboardAttribute.Type(ATTRIBUTE_TYPE.TSK_DEVICE_MAKE);
private static final BlackboardAttribute.Type TYPE_DEVICE_MODEL = new BlackboardAttribute.Type(ATTRIBUTE_TYPE.TSK_DEVICE_MODEL);
private static final BlackboardAttribute.Type TYPE_MESSAGE_TYPE = new BlackboardAttribute.Type(ATTRIBUTE_TYPE.TSK_MESSAGE_TYPE);
private static final BlackboardAttribute.Type TYPE_TEXT = new BlackboardAttribute.Type(ATTRIBUTE_TYPE.TSK_TEXT);
private static final BlackboardAttribute.Type TYPE_DATETIME_RCVD = new BlackboardAttribute.Type(ATTRIBUTE_TYPE.TSK_DATETIME_RCVD);
private static final BlackboardAttribute.Type TYPE_DATETIME_SENT = new BlackboardAttribute.Type(ATTRIBUTE_TYPE.TSK_DATETIME_SENT);
private static final BlackboardAttribute.Type TYPE_DATETIME_START = new BlackboardAttribute.Type(ATTRIBUTE_TYPE.TSK_DATETIME_START);
private static final BlackboardAttribute.Type TYPE_DATETIME_END = new BlackboardAttribute.Type(ATTRIBUTE_TYPE.TSK_DATETIME_END);
private static final Comparator<TopAccountResult> TOP_ACCOUNT_RESULT_DATE_COMPARE = (a, b) -> a.getLastAccess().compareTo(b.getLastAccess());
private static final Comparator<TopWebSearchResult> TOP_WEBSEARCH_RESULT_DATE_COMPARE = (a, b) -> a.getDateAccessed().compareTo(b.getDateAccessed());
private static final String ROOT_HUB_IDENTIFIER = "ROOT_HUB";
private static final long SLEEP_TIME = 5000;
/**
* A function to calculate a result from 2 parameters.
*/
interface Function2<A1, A2, O> {
O apply(A1 a1, A2 a2);
}
/**
* Gets a list of recent domains based on the datasource.
*
* @param dataSource The datasource to query for recent domains.
* @param count The max count of items to return.
*
* @return The list of items retrieved from the database.
*
* @throws InterruptedException
*/
public List<TopDomainsResult> getRecentDomains(DataSource dataSource, int count) throws InterruptedException {
Thread.sleep(SLEEP_TIME);
final String dId = Long.toString(dataSource.getId());
final Function2<String, Integer, String> getId = (s, idx) -> String.format("d:%s, f:%s, i:%d", dId, s, idx);
return IntStream.range(0, count)
.mapToObj(num -> new TopDomainsResult(
getId.apply("domain", num),
getId.apply("url", num),
(long) num,
new Date(((long) num) * 1000 * 60 * 60 * 24)
))
.collect(Collectors.toList());
}
private final SleuthkitCaseProvider caseProvider;
private final TextTranslationService translationService;
private final java.util.logging.Logger logger;
/**
* Main constructor.
*/
public DataSourceUserActivitySummary() {
this(SleuthkitCaseProvider.DEFAULT, TextTranslationService.getInstance(),
org.sleuthkit.autopsy.coreutils.Logger.getLogger(DataSourceUserActivitySummary.class.getName()));
}
/**
* Main constructor with external dependencies specified. This constructor
* is designed with unit testing in mind since mocked dependencies can be
* utilized.
*
* @param provider The object providing the current SleuthkitCase.
* @param translationService The translation service.
* @param logger The logger to use.
*/
public DataSourceUserActivitySummary(
SleuthkitCaseProvider provider,
TextTranslationService translationService,
java.util.logging.Logger logger) {
this.caseProvider = provider;
this.translationService = translationService;
this.logger = logger;
}
/**
* Throws an IllegalArgumentException if count <= 0.
*
* @param count The count being checked.
*/
private void assertValidCount(int count) {
if (count <= 0) {
throw new IllegalArgumentException("Count must be greater than 0");
}
}
/**
* Attempts to obtain a web search result record from a blackboard artifact.
*
* @param artifact The artifact.
*
* @return The TopWebSearchResult or null if the search string or date
* accessed cannot be determined.
*/
private static TopWebSearchResult getWebSearchResult(BlackboardArtifact artifact) {
String searchString = DataSourceInfoUtilities.getStringOrNull(artifact, TYPE_TEXT);
Date dateAccessed = DataSourceInfoUtilities.getDateOrNull(artifact, TYPE_DATETIME_ACCESSED);
return (StringUtils.isNotBlank(searchString) && dateAccessed != null)
? new TopWebSearchResult(searchString, dateAccessed)
: null;
}
/**
* Retrieves most recent web searches by most recent date grouped by search
* term.
*
* @param dataSource The data source.
* @param count The maximum number of records to be shown (must be >
* 0).
*
* @return The list of most recent web searches where most recent search
* appears first.
*
* @throws
* org.sleuthkit.autopsy.datasourcesummary.datamodel.SleuthkitCaseProvider.SleuthkitCaseProviderException
* @throws TskCoreException
*/
public List<TopWebSearchResult> getMostRecentWebSearches(DataSource dataSource, int count) throws SleuthkitCaseProviderException, TskCoreException {
assertValidCount(count);
// get the artifacts
List<BlackboardArtifact> webSearchArtifacts = caseProvider.get().getBlackboard()
.getArtifacts(ARTIFACT_TYPE.TSK_WEB_SEARCH_QUERY.getTypeID(), dataSource.getId());
// group by search string (case insensitive)
Collection<List<TopWebSearchResult>> resultGroups = webSearchArtifacts
.stream()
// get items where search string and date is not null
.map(DataSourceUserActivitySummary::getWebSearchResult)
// remove null records
.filter(result -> result != null)
// get these messages grouped by search to string
.collect(Collectors.groupingBy((result) -> result.getSearchString().toUpperCase()))
.values();
// get the most recent date for each search term
List<TopWebSearchResult> results = resultGroups
.stream()
// get the most recent access per search type
.map((list) -> list.stream().max(TOP_WEBSEARCH_RESULT_DATE_COMPARE).get())
// get most recent searches first
.sorted(TOP_WEBSEARCH_RESULT_DATE_COMPARE.reversed())
.limit(count)
// get as list
.collect(Collectors.toList());
// get translation if possible
if (translationService.hasProvider()) {
for (TopWebSearchResult result : results) {
result.setTranslatedResult(getTranslationOrNull(result.getSearchString()));
}
}
return results;
}
/**
* Return the translation of the original text if possible and differs from
* the original. Otherwise, return null.
*
* @param original The original text.
*
* @return The translated text or null if no translation can be determined
* or exists.
*/
private String getTranslationOrNull(String original) {
if (!translationService.hasProvider() || StringUtils.isBlank(original)) {
return null;
}
String translated = null;
try {
translated = translationService.translate(original);
} catch (NoServiceProviderException | TranslationException ex) {
logger.log(Level.WARNING, String.format("There was an error translating text: '%s'", original), ex);
}
// if there is no translation or the translation is the same as the original, return null.
if (StringUtils.isBlank(translated)
|| translated.toUpperCase().trim().equals(original.toUpperCase().trim())) {
return null;
}
return translated;
}
/**
* Retrieves most recent devices used by most recent date attached.
*
* @param dataSource The data source.
* @param count The maximum number of records to be shown (must be >
* 0).
*
* @return The list of most recent devices attached where most recent device
* attached appears first.
*
* @throws
* org.sleuthkit.autopsy.datasourcesummary.datamodel.SleuthkitCaseProvider.SleuthkitCaseProviderException
* @throws TskCoreException
*/
public List<TopDeviceAttachedResult> getRecentDevices(DataSource dataSource, int count) throws SleuthkitCaseProviderException, TskCoreException {
assertValidCount(count);
return DataSourceInfoUtilities.getArtifacts(caseProvider.get(), TYPE_DEVICE_ATTACHED,
dataSource, TYPE_DATETIME, DataSourceInfoUtilities.SortOrder.DESCENDING, 0)
.stream()
.map(artifact -> {
return new TopDeviceAttachedResult(
DataSourceInfoUtilities.getStringOrNull(artifact, TYPE_DEVICE_ID),
DataSourceInfoUtilities.getDateOrNull(artifact, TYPE_DATETIME),
DataSourceInfoUtilities.getStringOrNull(artifact, TYPE_DEVICE_MAKE),
DataSourceInfoUtilities.getStringOrNull(artifact, TYPE_DEVICE_MODEL)
);
})
// remove Root Hub identifier
.filter(result -> {
return result.getDeviceModel() == null
|| !result.getDeviceModel().trim().toUpperCase().equals(ROOT_HUB_IDENTIFIER);
})
.limit(count)
.collect(Collectors.toList());
}
/**
* Obtains a TopAccountResult from a TSK_MESSAGE blackboard artifact.
*
* @param artifact The artifact.
*
* @return The TopAccountResult or null if the account type or message date
* cannot be determined.
*/
private static TopAccountResult getMessageAccountResult(BlackboardArtifact artifact) {
String type = DataSourceInfoUtilities.getStringOrNull(artifact, TYPE_MESSAGE_TYPE);
Date date = DataSourceInfoUtilities.getDateOrNull(artifact, TYPE_DATETIME);
return (StringUtils.isNotBlank(type) && date != null)
? new TopAccountResult(type, date)
: null;
}
/**
* Obtains a TopAccountResult from a blackboard artifact. The date is
* maximum of any found dates for attribute types provided.
*
* @param artifact The artifact.
* @param messageType The type of message this is.
* @param dateAttrs The date attribute types.
*
* @return The TopAccountResult or null if the account type or max date are
* not provided.
*/
private static TopAccountResult getAccountResult(BlackboardArtifact artifact, String messageType, BlackboardAttribute.Type... dateAttrs) {
String type = messageType;
Date latestDate = null;
if (dateAttrs != null) {
latestDate = Stream.of(dateAttrs)
.map((attr) -> DataSourceInfoUtilities.getDateOrNull(artifact, attr))
.filter((date) -> date != null)
.max((a, b) -> a.compareTo(b))
.orElse(null);
}
return (StringUtils.isNotBlank(type) && latestDate != null)
? new TopAccountResult(type, latestDate)
: null;
}
/**
* Retrieves most recent account used by most recent date for a message
* sent.
*
* @param dataSource The data source.
* @param count The maximum number of records to be shown (must be >
* 0).
*
* @return The list of most recent accounts used where the most recent
* account by last message sent occurs first.
*
* @throws
* org.sleuthkit.autopsy.datasourcesummary.datamodel.SleuthkitCaseProvider.SleuthkitCaseProviderException
* @throws TskCoreException
*/
@Messages({
"DataSourceUserActivitySummary_getRecentAccounts_emailMessage=Email Message",
"DataSourceUserActivitySummary_getRecentAccounts_calllogMessage=Call Log",})
public List<TopAccountResult> getRecentAccounts(DataSource dataSource, int count) throws SleuthkitCaseProviderException, TskCoreException {
assertValidCount(count);
Stream<TopAccountResult> messageResults = caseProvider.get().getBlackboard().getArtifacts(ARTIFACT_TYPE.TSK_MESSAGE.getTypeID(), dataSource.getId())
.stream()
.map((art) -> getMessageAccountResult(art));
Stream<TopAccountResult> emailResults = caseProvider.get().getBlackboard().getArtifacts(ARTIFACT_TYPE.TSK_EMAIL_MSG.getTypeID(), dataSource.getId())
.stream()
.map((art) -> {
return getAccountResult(
art,
Bundle.DataSourceUserActivitySummary_getRecentAccounts_emailMessage(),
TYPE_DATETIME_RCVD,
TYPE_DATETIME_SENT);
});
Stream<TopAccountResult> calllogResults = caseProvider.get().getBlackboard().getArtifacts(ARTIFACT_TYPE.TSK_CALLLOG.getTypeID(), dataSource.getId())
.stream()
.map((art) -> {
return getAccountResult(
art,
Bundle.DataSourceUserActivitySummary_getRecentAccounts_calllogMessage(),
TYPE_DATETIME_START,
TYPE_DATETIME_END);
});
Stream<TopAccountResult> allResults = Stream.concat(messageResults, Stream.concat(emailResults, calllogResults));
// get them grouped by account type
Collection<List<TopAccountResult>> groupedResults = allResults
// remove null records
.filter(result -> result != null)
// get these messages grouped by account type
.collect(Collectors.groupingBy(TopAccountResult::getAccountType))
.values();
// get account type sorted by most recent date
return groupedResults
.stream()
// get the most recent access per account type
.map((accountGroup) -> accountGroup.stream().max(TOP_ACCOUNT_RESULT_DATE_COMPARE).get())
// get most recent accounts accessed
.sorted(TOP_ACCOUNT_RESULT_DATE_COMPARE.reversed())
// limit to count
.limit(count)
// get as list
.collect(Collectors.toList());
}
/**
* Object containing information about a web search artifact.
*/
public static class TopWebSearchResult {
private final String searchString;
private final Date dateAccessed;
private String translatedResult;
/**
* Main constructor.
*
* @param searchString The search string.
* @param dateAccessed The latest date searched.
*/
public TopWebSearchResult(String searchString, Date dateAccessed) {
this.searchString = searchString;
this.dateAccessed = dateAccessed;
}
/**
* @return The translated result if one was determined.
*/
public String getTranslatedResult() {
return translatedResult;
}
/**
* Sets the translated result for this web search.
*
* @param translatedResult The translated result.
*/
public void setTranslatedResult(String translatedResult) {
this.translatedResult = translatedResult;
}
/**
* @return The search string.
*/
public String getSearchString() {
return searchString;
}
/**
* @return The date for the search.
*/
public Date getDateAccessed() {
return dateAccessed;
}
}
/**
* A record of a device attached.
*/
public static class TopDeviceAttachedResult {
private final String deviceId;
private final Date dateAccessed;
private final String deviceMake;
private final String deviceModel;
/**
* Main constructor.
*
* @param deviceId The device id.
* @param dateAccessed The date last attached.
* @param deviceMake The device make.
* @param deviceModel The device model.
*/
public TopDeviceAttachedResult(String deviceId, Date dateAccessed, String deviceMake, String deviceModel) {
this.deviceId = deviceId;
this.dateAccessed = dateAccessed;
this.deviceMake = deviceMake;
this.deviceModel = deviceModel;
}
/**
* @return The device id.
*/
public String getDeviceId() {
return deviceId;
}
/**
* @return The date last attached.
*/
public Date getDateAccessed() {
return dateAccessed;
}
/**
* @return The device make.
*/
public String getDeviceMake() {
return deviceMake;
}
/**
* @return The device model.
*/
public String getDeviceModel() {
return deviceModel;
}
}
/**
* A record of an account and the last time it was used determined by
* messages.
*/
public static class TopAccountResult {
private final String accountType;
private final Date lastAccess;
/**
* Main constructor.
*
* @param accountType The account type.
* @param lastAccess The date the account was last accessed.
*/
public TopAccountResult(String accountType, Date lastAccess) {
this.accountType = accountType;
this.lastAccess = lastAccess;
}
/**
* @return The account type.
*/
public String getAccountType() {
return accountType;
}
/**
* @return The date the account was last accessed.
*/
public Date getLastAccess() {
return lastAccess;
}
}
}

View File

@ -0,0 +1,438 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2020 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.datasourcesummary.datamodel;
import java.nio.file.Paths;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.Objects;
import java.util.SortedMap;
import java.util.TreeMap;
import org.sleuthkit.datamodel.AbstractFile;
import org.sleuthkit.datamodel.BlackboardArtifact;
import static org.sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE.TSK_EMAIL_MSG;
import static org.sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE.TSK_MESSAGE;
import static org.sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE.TSK_RECENT_OBJECT;
import static org.sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE.TSK_WEB_DOWNLOAD;
import org.sleuthkit.datamodel.BlackboardAttribute;
import org.sleuthkit.datamodel.Content;
import org.sleuthkit.datamodel.DataSource;
import org.sleuthkit.datamodel.SleuthkitCase;
import org.sleuthkit.datamodel.TskCoreException;
import org.sleuthkit.autopsy.datasourcesummary.datamodel.SleuthkitCaseProvider.SleuthkitCaseProviderException;
/**
* Helper class for getting data for the Recent Files Data Summary tab.
*/
public class RecentFilesSummary {
private final static BlackboardAttribute.Type DATETIME_ACCESSED_ATT = new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DATETIME_ACCESSED);
private final static BlackboardAttribute.Type DOMAIN_ATT = new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DOMAIN);
private final static BlackboardAttribute.Type PATH_ATT = new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PATH);
private final static BlackboardAttribute.Type DATETIME_ATT = new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DATETIME);
private final static BlackboardAttribute.Type ASSOCATED_ATT = new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_ASSOCIATED_ARTIFACT);
private final static BlackboardAttribute.Type EMAIL_FROM_ATT = new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_EMAIL_FROM);
private final static BlackboardAttribute.Type MSG_DATEIME_SENT_ATT = new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DATETIME_SENT);
private final static BlackboardArtifact.Type ASSOCATED_OBJ_ART = new BlackboardArtifact.Type(BlackboardArtifact.ARTIFACT_TYPE.TSK_ASSOCIATED_OBJECT);
private static final DateFormat DATETIME_FORMAT = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss", Locale.getDefault());
private final SleuthkitCaseProvider provider;
/**
* Default constructor.
*/
public RecentFilesSummary() {
this(SleuthkitCaseProvider.DEFAULT);
}
/**
* Construct object with given SleuthkitCaseProvider
*
* @param provider SleuthkitCaseProvider provider, cannot be null.
*/
public RecentFilesSummary(SleuthkitCaseProvider provider) {
if (provider == null) {
throw new IllegalArgumentException("Unable to construct RecentFileSummary object. SleuthkitCaseProvider cannot be null");
}
this.provider = provider;
}
/**
* Return a list of the most recently opened documents based on the
* TSK_RECENT_OBJECT artifact.
*
* @param dataSource The data source to query.
* @param maxCount The maximum number of results to return, pass 0 to get
* a list of all results.
*
* @return A list RecentFileDetails representing the most recently opened
* documents or an empty list if none were found.
*
* @throws SleuthkitCaseProviderException
* @throws TskCoreException
*/
public List<RecentFileDetails> getRecentlyOpenedDocuments(DataSource dataSource, int maxCount) throws SleuthkitCaseProviderException, TskCoreException {
if (dataSource == null) {
throw new IllegalArgumentException("Failed to get recently opened documents given data source was null");
}
List<BlackboardArtifact> artifactList
= DataSourceInfoUtilities.getArtifacts(provider.get(),
new BlackboardArtifact.Type(TSK_RECENT_OBJECT),
dataSource,
DATETIME_ATT,
DataSourceInfoUtilities.SortOrder.DESCENDING,
10);
List<RecentFileDetails> fileDetails = new ArrayList<>();
for (BlackboardArtifact artifact : artifactList) {
Long accessedTime = null;
String path = "";
// Get all the attributes in one call.
List<BlackboardAttribute> attributeList = artifact.getAttributes();
for (BlackboardAttribute attribute : attributeList) {
if (attribute.getAttributeType().equals(DATETIME_ATT)) {
accessedTime = attribute.getValueLong();
} else if (attribute.getAttributeType().equals(PATH_ATT)) {
path = attribute.getValueString();
}
if (accessedTime != null) {
fileDetails.add(new RecentFileDetails(path, accessedTime));
}
}
}
return fileDetails;
}
/**
* Return a list of the most recent downloads based on the value of the the
* artifact TSK_DATETIME_ACCESSED attribute.
*
* @param dataSource Data source to query.
* @param maxCount Maximum number of results to return, passing 0 will
* return all results.
*
* @return A list of RecentFileDetails objects or empty list if none were
* found.
*
* @throws TskCoreException
* @throws SleuthkitCaseProviderException
*/
public List<RecentDownloadDetails> getRecentDownloads(DataSource dataSource, int maxCount) throws TskCoreException, SleuthkitCaseProviderException {
List<BlackboardArtifact> artifactList
= DataSourceInfoUtilities.getArtifacts(provider.get(),
new BlackboardArtifact.Type(TSK_WEB_DOWNLOAD),
dataSource,
DATETIME_ACCESSED_ATT,
DataSourceInfoUtilities.SortOrder.DESCENDING,
maxCount);
List<RecentDownloadDetails> fileDetails = new ArrayList<>();
for (BlackboardArtifact artifact : artifactList) {
// Get all the attributes in one call.
Long accessedTime = null;
String domain = "";
String path = "";
List<BlackboardAttribute> attributeList = artifact.getAttributes();
for (BlackboardAttribute attribute : attributeList) {
if (attribute.getAttributeType().equals(DATETIME_ACCESSED_ATT)) {
accessedTime = attribute.getValueLong();
} else if (attribute.getAttributeType().equals(DOMAIN_ATT)) {
domain = attribute.getValueString();
} else if (attribute.getAttributeType().equals(PATH_ATT)) {
path = attribute.getValueString();
}
}
if (accessedTime != null) {
fileDetails.add(new RecentDownloadDetails(path, accessedTime, domain));
}
}
return fileDetails;
}
/**
* Returns a list of the most recent message attachments.
*
* @param dataSource Data source to query.
* @param maxCount Maximum number of results to return, passing 0 will
* return all results.
*
* @return A list of RecentFileDetails of the most recent attachments.
*
* @throws SleuthkitCaseProviderException
* @throws TskCoreException
*/
public List<RecentAttachmentDetails> getRecentAttachments(DataSource dataSource, int maxCount) throws SleuthkitCaseProviderException, TskCoreException {
return createListFromMap(buildAttachmentMap(dataSource), maxCount);
}
/**
* Build a map of all of the message attachment sorted in date order.
*
* @param dataSource Data source to query.
*
* @return Returns a SortedMap of details objects returned in descending
* order.
*
* @throws SleuthkitCaseProviderException
* @throws TskCoreException
*/
private SortedMap<Long, List<RecentAttachmentDetails>> buildAttachmentMap(DataSource dataSource) throws SleuthkitCaseProviderException, TskCoreException {
SleuthkitCase skCase = provider.get();
TreeMap<Long, List<RecentAttachmentDetails>> sortedMap = new TreeMap<>();
List<BlackboardArtifact> associatedArtifacts = skCase.getBlackboard().getArtifacts(ASSOCATED_OBJ_ART.getTypeID(), dataSource.getId());
for (BlackboardArtifact artifact : associatedArtifacts) {
BlackboardAttribute attribute = artifact.getAttribute(ASSOCATED_ATT);
if (attribute == null) {
continue;
}
BlackboardArtifact messageArtifact = skCase.getBlackboardArtifact(attribute.getValueLong());
if (isMessageArtifact(messageArtifact)) {
Content content = artifact.getParent();
if (content instanceof AbstractFile) {
String sender;
Long date = null;
String path;
BlackboardAttribute senderAttribute = messageArtifact.getAttribute(EMAIL_FROM_ATT);
if (senderAttribute != null) {
sender = senderAttribute.getValueString();
} else {
sender = "";
}
senderAttribute = messageArtifact.getAttribute(MSG_DATEIME_SENT_ATT);
if (senderAttribute != null) {
date = senderAttribute.getValueLong();
}
AbstractFile abstractFile = (AbstractFile) content;
path = Paths.get(abstractFile.getParentPath(), abstractFile.getName()).toString();
if (date != null && date != 0) {
List<RecentAttachmentDetails> list = sortedMap.get(date);
if (list == null) {
list = new ArrayList<>();
sortedMap.put(date, list);
}
RecentAttachmentDetails details = new RecentAttachmentDetails(path, date, sender);
if(!list.contains(details)) {
list.add(details);
}
}
}
}
}
return sortedMap.descendingMap();
}
/**
* Create a list of detail objects from the given sorted map of the max
* size.
*
* @param sortedMap A Map of attachment details sorted by date.
* @param maxCount Maximum number of values to return.
*
* @return A list of the details of the most recent attachments or empty
* list if none where found.
*/
private List<RecentAttachmentDetails> createListFromMap(SortedMap<Long, List<RecentAttachmentDetails>> sortedMap, int maxCount) {
List<RecentAttachmentDetails> fileList = new ArrayList<>();
for (List<RecentAttachmentDetails> mapList : sortedMap.values()) {
if (maxCount == 0 || fileList.size() + mapList.size() <= maxCount) {
fileList.addAll(mapList);
continue;
}
if (maxCount == fileList.size()) {
break;
}
for (RecentAttachmentDetails details : mapList) {
if (fileList.size() < maxCount) {
fileList.add(details);
} else {
break;
}
}
}
return fileList;
}
/**
* Is the given artifact a message.
*
* @param nodeArtifact An artifact that might be a message. Must not be
* null.
*
* @return True if the given artifact is a message artifact
*/
private boolean isMessageArtifact(BlackboardArtifact nodeArtifact) {
final int artifactTypeID = nodeArtifact.getArtifactTypeID();
return artifactTypeID == TSK_EMAIL_MSG.getTypeID()
|| artifactTypeID == TSK_MESSAGE.getTypeID();
}
/**
* General data model object for files object.
*/
public static class RecentFileDetails {
private final String path;
private final long date;
/**
* Constructor for files with just a path and date.
*
* @param path File path.
* @param date File access date\time in seconds with java epoch
*/
RecentFileDetails(String path, long date) {
this.path = path;
this.date = date;
}
/**
* Returns the formatted date because the JTablePanel render assumes
* only string data.
*
* @return Formatted date time.
*/
public String getDateAsString() {
return DATETIME_FORMAT.format(date * 1000);
}
/**
* Returns the date as the seconds from java epoch.
*
* @return Seconds from java epoch.
*/
Long getDateAsLong() {
return date;
}
/**
* Returns the file path.
*
* @return The file path.
*/
public String getPath() {
return path;
}
}
/**
* Data model for recently downloaded files.
*/
public static class RecentDownloadDetails extends RecentFileDetails {
private final String webDomain;
/**
* Constructor for files with just a path and date.
*
* @param path File path.
* @param date File access date\time in seconds with java epoch.
* @param webDomain The webdomain from which the file was downloaded.
*/
RecentDownloadDetails(String path, long date, String webDomain) {
super(path, date);
this.webDomain = webDomain;
}
/**
* Returns the web domain.
*
* @return The web domain or empty string if not available or
* applicable.
*/
public String getWebDomain() {
return webDomain;
}
}
/**
* Data model for recently attachments.
*/
public static class RecentAttachmentDetails extends RecentFileDetails {
private final String sender;
/**
* Constructor for recent download files which have a path, date and
* domain value.
*
* @param path File path.
* @param date File crtime.
* @param sender The sender of the message from which the file was
* attached.
*/
RecentAttachmentDetails(String path, long date, String sender) {
super(path, date);
this.sender = sender;
}
/**
* Return the sender of the attached file.
*
* @return The sender of the attached file or empty string if not
* available.
*/
public String getSender() {
return sender;
}
@Override
public boolean equals(Object obj) {
if(!(obj instanceof RecentAttachmentDetails)) {
return false;
}
RecentAttachmentDetails compareObj = (RecentAttachmentDetails)obj;
return compareObj.getSender().equals(this.sender) &&
compareObj.getPath().equals(this.getPath()) &&
compareObj.getDateAsLong().equals(this.getDateAsLong());
}
@Override
public int hashCode() {
int hash = 5;
hash = 73 * hash + Objects.hashCode(this.sender);
return hash;
}
}
}

View File

@ -0,0 +1,81 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2020 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.datasourcesummary.datamodel;
import org.sleuthkit.autopsy.casemodule.Case;
import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException;
import org.sleuthkit.datamodel.SleuthkitCase;
/**
* An interface to provide the current SleuthkitCase object. This is to allow
* for SleuthkitCase objects to be created and injected in a testing scenario
* outside of the context of Case.
*
* By default, this uses Case.getCurrentCaseThrows().getSleuthkitCase().
*/
public interface SleuthkitCaseProvider {
/**
* Exception thrown in the event that the SleuthkitCase object cannot be
* provided.
*/
class SleuthkitCaseProviderException extends Exception {
private static final long serialVersionUID = 1L;
/**
* Main constructor.
*
* @param string The message for the exception.
*/
public SleuthkitCaseProviderException(String string) {
super(string);
}
/**
* Main constructor.
*
* @param string The message for the exception.
* @param thrwbl The inner exception.
*/
public SleuthkitCaseProviderException(String string, Throwable thrwbl) {
super(string, thrwbl);
}
}
/**
* The default SleuthkitCaseProvider. This uses
* Case.getCurrentCaseThrows().getSleuthkitCase().
*/
SleuthkitCaseProvider DEFAULT = () -> {
try {
return Case.getCurrentCaseThrows().getSleuthkitCase();
} catch (NoCurrentCaseException e) {
throw new SleuthkitCaseProviderException("No currently open case.", e);
}
};
/**
* @return Returns the current SleuthkitCase object.
*
* @throws SleuthkitCaseProviderException Thrown if there is an error
* providing the case.
*/
SleuthkitCase get() throws SleuthkitCaseProviderException;
}

View File

@ -0,0 +1,76 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2020 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.datasourcesummary.datamodel;
import java.util.Date;
/**
* Describes a result of a program run on a datasource.
*/
public class TopDomainsResult {
private final String domain;
private final String url;
private final Long visitTimes;
private final Date lastVisit;
/**
* Describes a top domain result.
*
* @param domain The domain.
* @param url The url.
* @param visitTimes The number of times it was visited.
* @param lastVisit The date of the last visit.
*/
public TopDomainsResult(String domain, String url, Long visitTimes, Date lastVisit) {
this.domain = domain;
this.url = url;
this.visitTimes = visitTimes;
this.lastVisit = lastVisit;
}
/**
* @return The domain for the result.
*/
public String getDomain() {
return domain;
}
/**
* @return The url for the result.
*/
public String getUrl() {
return url;
}
/**
* @return The number of times this site is visited.
*/
public Long getVisitTimes() {
return visitTimes;
}
/**
* @return The date of the last visit.
*/
public Date getLastVisit() {
return lastVisit;
}
}

View File

@ -0,0 +1,74 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2020 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.datasourcesummary.datamodel;
import java.util.Date;
/**
* Describes a result of a program run on a datasource.
*/
public class TopProgramsResult {
private final String programName;
private final String programPath;
private final Long runTimes;
private final Date lastRun;
/**
* Main constructor.
*
* @param programName The name of the program.
* @param programPath The path of the program.
* @param runTimes The number of runs.
*/
TopProgramsResult(String programName, String programPath, Long runTimes, Date lastRun) {
this.programName = programName;
this.programPath = programPath;
this.runTimes = runTimes;
this.lastRun = lastRun;
}
/**
* @return The name of the program
*/
public String getProgramName() {
return programName;
}
/**
* @return The path of the program.
*/
public String getProgramPath() {
return programPath;
}
/**
* @return The number of run times or null if not present.
*/
public Long getRunTimes() {
return runTimes;
}
/**
* @return The last time the program was run or null if not present.
*/
public Date getLastRun() {
return lastRun;
}
}

View File

@ -0,0 +1,263 @@
<?xml version="1.0" encoding="UTF-8" ?>
<Form version="1.4" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
<AuxValues>
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="true"/>
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/>
<AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
</AuxValues>
<Layout>
<DimensionLayout dim="0">
<Group type="103" groupAlignment="0" attributes="0">
<Component id="mainScrollPane" alignment="0" pref="756" max="32767" attributes="0"/>
</Group>
</DimensionLayout>
<DimensionLayout dim="1">
<Group type="103" groupAlignment="0" attributes="0">
<Component id="mainScrollPane" alignment="0" pref="300" max="32767" attributes="0"/>
</Group>
</DimensionLayout>
</Layout>
<SubComponents>
<Container class="javax.swing.JScrollPane" name="mainScrollPane">
<AuxValues>
<AuxValue name="JavaCodeGenerator_VariableLocal" type="java.lang.Boolean" value="true"/>
<AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="0"/>
</AuxValues>
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
<SubComponents>
<Container class="javax.swing.JPanel" name="mainContentPanel">
<Properties>
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
<Border info="org.netbeans.modules.form.compat2.border.EmptyBorderInfo">
<EmptyBorder bottom="10" left="10" right="10" top="10"/>
</Border>
</Property>
<Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[32767, 452]"/>
</Property>
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[200, 452]"/>
</Property>
</Properties>
<AuxValues>
<AuxValue name="JavaCodeGenerator_VariableLocal" type="java.lang.Boolean" value="true"/>
<AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="0"/>
</AuxValues>
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignBoxLayout">
<Property name="axis" type="int" value="3"/>
</Layout>
<SubComponents>
<Component class="javax.swing.JLabel" name="hashsetHitsLabel">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/datasourcesummary/ui/Bundle.properties" key="AnalysisPanel.hashsetHitsLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<AuxValues>
<AuxValue name="JavaCodeGenerator_VariableLocal" type="java.lang.Boolean" value="true"/>
<AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="0"/>
</AuxValues>
</Component>
<Component class="javax.swing.Box$Filler" name="filler1">
<Properties>
<Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[32767, 2]"/>
</Property>
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[0, 2]"/>
</Property>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[0, 2]"/>
</Property>
</Properties>
<AuxValues>
<AuxValue name="JavaCodeGenerator_VariableLocal" type="java.lang.Boolean" value="true"/>
<AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="0"/>
<AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.VerticalStrut"/>
</AuxValues>
</Component>
<Container class="javax.swing.JPanel" name="hashSetHitsPanel">
<Properties>
<Property name="alignmentX" type="float" value="0.0"/>
<Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[32767, 106]"/>
</Property>
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[10, 106]"/>
</Property>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[10, 106]"/>
</Property>
</Properties>
<AuxValues>
<AuxValue name="JavaCodeGenerator_CreateCodeCustom" type="java.lang.String" value="hashsetHitsTable"/>
<AuxValue name="JavaCodeGenerator_VariableLocal" type="java.lang.Boolean" value="true"/>
<AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="0"/>
</AuxValues>
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignFlowLayout"/>
</Container>
<Component class="javax.swing.Box$Filler" name="filler2">
<Properties>
<Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[32767, 20]"/>
</Property>
<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="[0, 20]"/>
</Property>
</Properties>
<AuxValues>
<AuxValue name="JavaCodeGenerator_VariableLocal" type="java.lang.Boolean" value="true"/>
<AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="0"/>
<AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.VerticalStrut"/>
</AuxValues>
</Component>
<Component class="javax.swing.JLabel" name="keywordHitsLabel">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/datasourcesummary/ui/Bundle.properties" key="AnalysisPanel.keywordHitsLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<AuxValues>
<AuxValue name="JavaCodeGenerator_VariableLocal" type="java.lang.Boolean" value="true"/>
<AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="0"/>
</AuxValues>
</Component>
<Component class="javax.swing.Box$Filler" name="filler4">
<Properties>
<Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[32767, 2]"/>
</Property>
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[0, 2]"/>
</Property>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[0, 2]"/>
</Property>
</Properties>
<AuxValues>
<AuxValue name="JavaCodeGenerator_VariableLocal" type="java.lang.Boolean" value="true"/>
<AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="0"/>
<AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.VerticalStrut"/>
</AuxValues>
</Component>
<Container class="javax.swing.JPanel" name="keywordHitsPanel">
<Properties>
<Property name="alignmentX" type="float" value="0.0"/>
<Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[32767, 106]"/>
</Property>
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[10, 106]"/>
</Property>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[10, 106]"/>
</Property>
</Properties>
<AuxValues>
<AuxValue name="JavaCodeGenerator_CreateCodeCustom" type="java.lang.String" value="keywordHitsTable"/>
<AuxValue name="JavaCodeGenerator_VariableLocal" type="java.lang.Boolean" value="true"/>
<AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="0"/>
</AuxValues>
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignFlowLayout"/>
</Container>
<Component class="javax.swing.Box$Filler" name="filler5">
<Properties>
<Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[32767, 20]"/>
</Property>
<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="[0, 20]"/>
</Property>
</Properties>
<AuxValues>
<AuxValue name="JavaCodeGenerator_VariableLocal" type="java.lang.Boolean" value="true"/>
<AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="0"/>
<AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.VerticalStrut"/>
</AuxValues>
</Component>
<Component class="javax.swing.JLabel" name="interestingItemLabel">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/datasourcesummary/ui/Bundle.properties" key="AnalysisPanel.interestingItemLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<AuxValues>
<AuxValue name="JavaCodeGenerator_VariableLocal" type="java.lang.Boolean" value="true"/>
<AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="0"/>
</AuxValues>
</Component>
<Component class="javax.swing.Box$Filler" name="filler6">
<Properties>
<Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[32767, 2]"/>
</Property>
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[0, 2]"/>
</Property>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[0, 2]"/>
</Property>
</Properties>
<AuxValues>
<AuxValue name="JavaCodeGenerator_VariableLocal" type="java.lang.Boolean" value="true"/>
<AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="0"/>
<AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.VerticalStrut"/>
</AuxValues>
</Component>
<Container class="javax.swing.JPanel" name="interestingItemPanel">
<Properties>
<Property name="alignmentX" type="float" value="0.0"/>
<Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[32767, 106]"/>
</Property>
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[10, 106]"/>
</Property>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[10, 106]"/>
</Property>
</Properties>
<AuxValues>
<AuxValue name="JavaCodeGenerator_CreateCodeCustom" type="java.lang.String" value="interestingItemsTable"/>
<AuxValue name="JavaCodeGenerator_VariableLocal" type="java.lang.Boolean" value="true"/>
<AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="0"/>
</AuxValues>
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignFlowLayout"/>
</Container>
<Component class="javax.swing.Box$Filler" name="filler3">
<Properties>
<Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[0, 32767]"/>
</Property>
</Properties>
<AuxValues>
<AuxValue name="JavaCodeGenerator_VariableLocal" type="java.lang.Boolean" value="true"/>
<AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="0"/>
<AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.VerticalGlue"/>
</AuxValues>
</Component>
</SubComponents>
</Container>
</SubComponents>
</Container>
</SubComponents>
</Form>

View File

@ -0,0 +1,209 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2020 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.datasourcesummary.ui;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import org.apache.commons.lang3.tuple.Pair;
import org.openide.util.NbBundle.Messages;
import org.sleuthkit.autopsy.casemodule.Case;
import org.sleuthkit.autopsy.datasourcesummary.datamodel.DataSourceAnalysisSummary;
import org.sleuthkit.autopsy.datasourcesummary.uiutils.CellModelTableCellRenderer.DefaultCellModel;
import org.sleuthkit.autopsy.datasourcesummary.uiutils.DataFetchResult;
import org.sleuthkit.autopsy.datasourcesummary.uiutils.DataFetchWorker;
import org.sleuthkit.autopsy.datasourcesummary.uiutils.JTablePanel;
import org.sleuthkit.autopsy.datasourcesummary.uiutils.JTablePanel.ColumnModel;
import org.sleuthkit.datamodel.DataSource;
/**
* A tab shown in data source summary displaying hash set hits, keyword hits,
* and interesting item hits within a datasource.
*/
@Messages({
"AnalysisPanel_keyColumn_title=Name",
"AnalysisPanel_countColumn_title=Count"
})
public class AnalysisPanel extends BaseDataSourceSummaryPanel {
private static final long serialVersionUID = 1L;
/**
* Default Column definitions for each table
*/
private static final List<ColumnModel<Pair<String, Long>>> DEFAULT_COLUMNS = Arrays.asList(
new ColumnModel<>(
Bundle.AnalysisPanel_keyColumn_title(),
(pair) -> new DefaultCellModel(pair.getKey()),
300
),
new ColumnModel<>(
Bundle.AnalysisPanel_countColumn_title(),
(pair) -> new DefaultCellModel(String.valueOf(pair.getValue())),
100
)
);
private final JTablePanel<Pair<String, Long>> hashsetHitsTable = JTablePanel.getJTablePanel(DEFAULT_COLUMNS);
private final JTablePanel<Pair<String, Long>> keywordHitsTable = JTablePanel.getJTablePanel(DEFAULT_COLUMNS);
private final JTablePanel<Pair<String, Long>> interestingItemsTable = JTablePanel.getJTablePanel(DEFAULT_COLUMNS);
private final List<JTablePanel<?>> tables = Arrays.asList(
hashsetHitsTable,
keywordHitsTable,
interestingItemsTable
);
/**
* All of the components necessary for data fetch swing workers to load data
* for each table.
*/
private final List<DataFetchWorker.DataFetchComponents<DataSource, ?>> dataFetchComponents;
/**
* Creates a new DataSourceUserActivityPanel.
*/
public AnalysisPanel() {
this(new DataSourceAnalysisSummary());
}
public AnalysisPanel(DataSourceAnalysisSummary analysisData) {
// set up data acquisition methods
dataFetchComponents = Arrays.asList(
// hashset hits loading components
new DataFetchWorker.DataFetchComponents<>(
(dataSource) -> analysisData.getHashsetCounts(dataSource),
(result) -> hashsetHitsTable.showDataFetchResult(result)),
// keyword hits loading components
new DataFetchWorker.DataFetchComponents<>(
(dataSource) -> analysisData.getKeywordCounts(dataSource),
(result) -> keywordHitsTable.showDataFetchResult(result)),
// interesting item hits loading components
new DataFetchWorker.DataFetchComponents<>(
(dataSource) -> analysisData.getInterestingItemCounts(dataSource),
(result) -> interestingItemsTable.showDataFetchResult(result))
);
initComponents();
}
@Override
protected void onNewDataSource(DataSource dataSource) {
// if no data source is present or the case is not open,
// set results for tables to null.
if (dataSource == null || !Case.isCaseOpen()) {
this.dataFetchComponents.forEach((item) -> item.getResultHandler()
.accept(DataFetchResult.getSuccessResult(null)));
} else {
// set tables to display loading screen
this.tables.forEach((table) -> table.showDefaultLoadingMessage());
// create swing workers to run for each table
List<DataFetchWorker<?, ?>> workers = dataFetchComponents
.stream()
.map((components) -> new DataFetchWorker<>(components, dataSource))
.collect(Collectors.toList());
// submit swing workers to run
submit(workers);
}
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
javax.swing.JScrollPane mainScrollPane = new javax.swing.JScrollPane();
javax.swing.JPanel mainContentPanel = new javax.swing.JPanel();
javax.swing.JLabel hashsetHitsLabel = new javax.swing.JLabel();
javax.swing.Box.Filler filler1 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 2), new java.awt.Dimension(0, 2), new java.awt.Dimension(32767, 2));
javax.swing.JPanel hashSetHitsPanel = hashsetHitsTable;
javax.swing.Box.Filler filler2 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 20), new java.awt.Dimension(0, 20), new java.awt.Dimension(32767, 20));
javax.swing.JLabel keywordHitsLabel = new javax.swing.JLabel();
javax.swing.Box.Filler filler4 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 2), new java.awt.Dimension(0, 2), new java.awt.Dimension(32767, 2));
javax.swing.JPanel keywordHitsPanel = keywordHitsTable;
javax.swing.Box.Filler filler5 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 20), new java.awt.Dimension(0, 20), new java.awt.Dimension(32767, 20));
javax.swing.JLabel interestingItemLabel = new javax.swing.JLabel();
javax.swing.Box.Filler filler6 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 2), new java.awt.Dimension(0, 2), new java.awt.Dimension(32767, 2));
javax.swing.JPanel interestingItemPanel = interestingItemsTable;
javax.swing.Box.Filler filler3 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 32767));
mainContentPanel.setBorder(javax.swing.BorderFactory.createEmptyBorder(10, 10, 10, 10));
mainContentPanel.setMaximumSize(new java.awt.Dimension(32767, 452));
mainContentPanel.setMinimumSize(new java.awt.Dimension(200, 452));
mainContentPanel.setLayout(new javax.swing.BoxLayout(mainContentPanel, javax.swing.BoxLayout.PAGE_AXIS));
org.openide.awt.Mnemonics.setLocalizedText(hashsetHitsLabel, org.openide.util.NbBundle.getMessage(AnalysisPanel.class, "AnalysisPanel.hashsetHitsLabel.text")); // NOI18N
mainContentPanel.add(hashsetHitsLabel);
mainContentPanel.add(filler1);
hashSetHitsPanel.setAlignmentX(0.0F);
hashSetHitsPanel.setMaximumSize(new java.awt.Dimension(32767, 106));
hashSetHitsPanel.setMinimumSize(new java.awt.Dimension(10, 106));
hashSetHitsPanel.setPreferredSize(new java.awt.Dimension(10, 106));
mainContentPanel.add(hashSetHitsPanel);
mainContentPanel.add(filler2);
org.openide.awt.Mnemonics.setLocalizedText(keywordHitsLabel, org.openide.util.NbBundle.getMessage(AnalysisPanel.class, "AnalysisPanel.keywordHitsLabel.text")); // NOI18N
mainContentPanel.add(keywordHitsLabel);
mainContentPanel.add(filler4);
keywordHitsPanel.setAlignmentX(0.0F);
keywordHitsPanel.setMaximumSize(new java.awt.Dimension(32767, 106));
keywordHitsPanel.setMinimumSize(new java.awt.Dimension(10, 106));
keywordHitsPanel.setPreferredSize(new java.awt.Dimension(10, 106));
mainContentPanel.add(keywordHitsPanel);
mainContentPanel.add(filler5);
org.openide.awt.Mnemonics.setLocalizedText(interestingItemLabel, org.openide.util.NbBundle.getMessage(AnalysisPanel.class, "AnalysisPanel.interestingItemLabel.text")); // NOI18N
mainContentPanel.add(interestingItemLabel);
mainContentPanel.add(filler6);
interestingItemPanel.setAlignmentX(0.0F);
interestingItemPanel.setMaximumSize(new java.awt.Dimension(32767, 106));
interestingItemPanel.setMinimumSize(new java.awt.Dimension(10, 106));
interestingItemPanel.setPreferredSize(new java.awt.Dimension(10, 106));
mainContentPanel.add(interestingItemPanel);
mainContentPanel.add(filler3);
mainScrollPane.setViewportView(mainContentPanel);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(mainScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 756, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(mainScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 300, Short.MAX_VALUE)
);
}// </editor-fold>//GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables
// End of variables declaration//GEN-END:variables
}

View File

@ -0,0 +1,64 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2020 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.datasourcesummary.ui;
import java.util.List;
import javax.swing.JPanel;
import javax.swing.SwingWorker;
import org.sleuthkit.autopsy.datasourcesummary.uiutils.SwingWorkerSequentialExecutor;
import org.sleuthkit.datamodel.DataSource;
/**
* Base class from which other tabs in data source summary derive.
*/
abstract class BaseDataSourceSummaryPanel extends JPanel {
private static final long serialVersionUID = 1L;
private final SwingWorkerSequentialExecutor executor = new SwingWorkerSequentialExecutor();
private DataSource dataSource;
/**
* Sets datasource to visualize in the panel.
*
* @param dataSource The datasource to use in this panel.
*/
synchronized void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
this.executor.cancelRunning();
onNewDataSource(this.dataSource);
}
/**
* Submits the following swing workers for execution in sequential order. If
* there are any previous workers, those workers are cancelled.
*
* @param workers The workers to submit for execution.
*/
protected void submit(List<? extends SwingWorker<?, ?>> workers) {
executor.submit(workers);
}
/**
* When a new dataSource is added, this method is called.
*
* @param dataSource The new dataSource.
*/
protected abstract void onNewDataSource(DataSource dataSource);
}

View File

@ -2,8 +2,6 @@ DataSourceSummaryDialog.closeButton.text=Close
DataSourceSummaryDetailsPanel.displayNameLabel.text=Display Name:
DataSourceSummaryDetailsPanel.originalNameLabel.text=Name:
DataSourceSummaryDetailsPanel.deviceIdLabel.text=Device ID:
DataSourceSummaryDetailsPanel.operatingSystemLabel.text=OS:
DataSourceSummaryDetailsPanel.dataSourceUsageLabel.text=Usage:
DataSourceSummaryDetailsPanel.timeZoneLabel.text=Time Zone:
DataSourceSummaryDetailsPanel.imageTypeLabel.text=Image Type:
DataSourceSummaryDetailsPanel.sizeLabel.text=Size:
@ -16,9 +14,6 @@ DataSourceSummaryDetailsPanel.displayNameValue.text=
DataSourceSummaryDetailsPanel.originalNameValue.text=
DataSourceSummaryDetailsPanel.deviceIdValue.toolTipText=
DataSourceSummaryDetailsPanel.deviceIdValue.text=
DataSourceSummaryDetailsPanel.dataSourceUsageValue.text=
DataSourceSummaryDetailsPanel.operatingSystemValue.toolTipText=
DataSourceSummaryDetailsPanel.operatingSystemValue.text=
DataSourceSummaryDetailsPanel.timeZoneValue.text=
DataSourceSummaryDetailsPanel.imageTypeValue.toolTipText=
DataSourceSummaryDetailsPanel.imageTypeValue.text=
@ -33,7 +28,16 @@ DataSourceSummaryDetailsPanel.acquisitionDetailsTextArea.text=
DataSourceSummaryDetailsPanel.acquisitionDetailsLabel.text=Acquisition Details:
DataSourceSummaryDetailsPanel.unallocatedSizeLabel.text=Unallocated Space:
DataSourceSummaryDetailsPanel.unallocatedSizeValue.text=
DataSourceSummaryCountsPanel.byMimeTypeLabel.text=Files by MIME Type
DataSourceSummaryCountsPanel.byCategoryLabel.text=Files by Category
DataSourceSummaryCountsPanel.jLabel1.text=Results by Type
DataSourceSummaryUserActivityPanel.programsRunLabel.text=Top Programs Run
DataSourceSummaryCountsPanel.resultsByTypeLabel.text=Results by Type
DataSourceSummaryUserActivityPanel.programsRunLabel.text=Recent Programs
DataSourceSummaryUserActivityPanel.recentAccountsLabel.text=Recent Accounts
DataSourceSummaryUserActivityPanel.topWebSearchLabel.text=Recent Web Searches
DataSourceSummaryUserActivityPanel.topDevicesAttachedLabel.text=Recent Devices Attached
DataSourceSummaryUserActivityPanel.recentDomainsLabel.text=Recent Domains
AnalysisPanel.hashsetHitsLabel.text=Hashset Hits
AnalysisPanel.keywordHitsLabel.text=Keyword Hits
AnalysisPanel.interestingItemLabel.text=Interesting Item Hits
RecentFilesPanel.openDocsLabel.text=Recently Opened Documents
RecentFilesPanel.downloadLabel.text=Recent Downloads
RecentFilesPanel.attachmentLabel.text=Recent Attachements

View File

@ -1,6 +1,9 @@
AnalysisPanel_countColumn_title=Count
AnalysisPanel_keyColumn_title=Name
CTL_DataSourceSummaryAction=Data Source Summary
DataSourceSummaryCountsPanel.ArtifactCountsTableModel.count.header=Count
DataSourceSummaryCountsPanel.ArtifactCountsTableModel.type.header=Result Type
DataSourceSummaryCountsPanel.byMimeTypeLabel.text=Files by MIME Type
DataSourceSummaryCountsPanel.FilesByCategoryTableModel.all.row=All
DataSourceSummaryCountsPanel.FilesByCategoryTableModel.allocated.row=Allocated
DataSourceSummaryCountsPanel.FilesByCategoryTableModel.count.header=Count
@ -9,12 +12,12 @@ DataSourceSummaryCountsPanel.FilesByCategoryTableModel.slack.row=Slack
DataSourceSummaryCountsPanel.FilesByCategoryTableModel.type.header=File Type
DataSourceSummaryCountsPanel.FilesByCategoryTableModel.unallocated.row=Unallocated
DataSourceSummaryCountsPanel.FilesByMimeTypeTableModel.audio.row=Audio
DataSourceSummaryCountsPanel.FilesByMimeTypeTableModel.count.header=Count
DataSourceSummaryCountsPanel.FilesByMimeTypeTableModel.documents.row=Documents
DataSourceSummaryCountsPanel.FilesByMimeTypeTableModel.executables.row=Executables
DataSourceSummaryCountsPanel.FilesByMimeTypeTableModel.images.row=Images
DataSourceSummaryCountsPanel.FilesByMimeTypeTableModel.type.header=File Type
DataSourceSummaryCountsPanel.FilesByMimeTypeTableModel.videos.row=Videos
DataSourceSummaryCountsPanel_FilesByMimeTypeTableModel_notAnalyzed_label=Not Analyzed
DataSourceSummaryCountsPanel_FilesByMimeTypeTableModel_other_label=Other
DataSourceSummaryDetailsPanel.getDataSources.error.text=Failed to get the list of datasources for the current case.
DataSourceSummaryDetailsPanel.getDataSources.error.title=Load Failure
DataSourceSummaryDetailsPanel.units.bytes=\ bytes
@ -27,8 +30,6 @@ DataSourceSummaryDialog.closeButton.text=Close
DataSourceSummaryDetailsPanel.displayNameLabel.text=Display Name:
DataSourceSummaryDetailsPanel.originalNameLabel.text=Name:
DataSourceSummaryDetailsPanel.deviceIdLabel.text=Device ID:
DataSourceSummaryDetailsPanel.operatingSystemLabel.text=OS:
DataSourceSummaryDetailsPanel.dataSourceUsageLabel.text=Usage:
DataSourceSummaryDetailsPanel.timeZoneLabel.text=Time Zone:
DataSourceSummaryDetailsPanel.imageTypeLabel.text=Image Type:
DataSourceSummaryDetailsPanel.sizeLabel.text=Size:
@ -41,9 +42,6 @@ DataSourceSummaryDetailsPanel.displayNameValue.text=
DataSourceSummaryDetailsPanel.originalNameValue.text=
DataSourceSummaryDetailsPanel.deviceIdValue.toolTipText=
DataSourceSummaryDetailsPanel.deviceIdValue.text=
DataSourceSummaryDetailsPanel.dataSourceUsageValue.text=
DataSourceSummaryDetailsPanel.operatingSystemValue.toolTipText=
DataSourceSummaryDetailsPanel.operatingSystemValue.text=
DataSourceSummaryDetailsPanel.timeZoneValue.text=
DataSourceSummaryDetailsPanel.imageTypeValue.toolTipText=
DataSourceSummaryDetailsPanel.imageTypeValue.text=
@ -58,9 +56,8 @@ DataSourceSummaryDetailsPanel.acquisitionDetailsTextArea.text=
DataSourceSummaryDetailsPanel.acquisitionDetailsLabel.text=Acquisition Details:
DataSourceSummaryDetailsPanel.unallocatedSizeLabel.text=Unallocated Space:
DataSourceSummaryDetailsPanel.unallocatedSizeValue.text=
DataSourceSummaryCountsPanel.byMimeTypeLabel.text=Files by MIME Type
DataSourceSummaryCountsPanel.byCategoryLabel.text=Files by Category
DataSourceSummaryCountsPanel.jLabel1.text=Results by Type
DataSourceSummaryCountsPanel.resultsByTypeLabel.text=Results by Type
DataSourceSummaryDialog.window.title=Data Sources Summary
DataSourceSummaryNode.column.dataSourceName.header=Data Source Name
DataSourceSummaryNode.column.files.header=Files
@ -69,14 +66,43 @@ DataSourceSummaryNode.column.status.header=Ingest Status
DataSourceSummaryNode.column.tags.header=Tags
DataSourceSummaryNode.column.type.header=Type
DataSourceSummaryNode.viewDataSourceAction.text=Go to Data Source
DataSourceSummaryTabbedPane_analysisTab_title=Analysis
DataSourceSummaryTabbedPane_countsTab_title=Counts
DataSourceSummaryTabbedPane_detailsTab_title=Details
DataSourceSummaryTabbedPane_detailsTab_title=Container
DataSourceSummaryTabbedPane_ingestHistoryTab_title=Ingest History
DataSourceSummaryTabbedPane_recentFileTab_title=Recent Files
DataSourceSummaryTabbedPane_userActivityTab_title=User Activity
DataSourceSummaryUserActivityPanel.programsRunLabel.text=Top Programs Run
DataSourceSummaryUserActivityPanel.programsRunLabel.text=Recent Programs
DataSourceSummaryUserActivityPanel.recentAccountsLabel.text=Recent Accounts
DataSourceSummaryUserActivityPanel.topWebSearchLabel.text=Recent Web Searches
DataSourceSummaryUserActivityPanel.topDevicesAttachedLabel.text=Recent Devices Attached
DataSourceSummaryUserActivityPanel.recentDomainsLabel.text=Recent Domains
AnalysisPanel.hashsetHitsLabel.text=Hashset Hits
AnalysisPanel.keywordHitsLabel.text=Keyword Hits
AnalysisPanel.interestingItemLabel.text=Interesting Item Hits
DataSourceSummaryUserActivityPanel_noDataExists=No communication data exists
DataSourceSummaryUserActivityPanel_tab_title=User Activity
DataSourceSummaryUserActivityPanel_TopAccountTableModel_accountType_header=Account Type
DataSourceSummaryUserActivityPanel_TopAccountTableModel_lastAccess_header=Last Accessed
DataSourceSummaryUserActivityPanel_TopDeviceAttachedTableModel_dateAccessed_header=Last Accessed
DataSourceSummaryUserActivityPanel_TopDeviceAttachedTableModel_deviceId_header=Device Id
DataSourceSummaryUserActivityPanel_TopDeviceAttachedTableModel_makeModel_header=Make and Model
DataSourceSummaryUserActivityPanel_TopDomainsTableModel_domain_header=Domain
DataSourceSummaryUserActivityPanel_TopDomainsTableModel_lastAccess_header=Last Access
DataSourceSummaryUserActivityPanel_TopDomainsTableModel_url_header=URL
DataSourceSummaryUserActivityPanel_TopProgramsTableModel_count_header=Run Times
DataSourceSummaryUserActivityPanel_TopProgramsTableModel_folder_header=Folder
DataSourceSummaryUserActivityPanel_TopProgramsTableModel_lastrun_header=Last Run
DataSourceSummaryUserActivityPanel_TopProgramsTableModel_name_header=Program
DataSourceSummaryUserActivityPanel_TopWebSearchTableModel_dateAccessed_header=Date Accessed
DataSourceSummaryUserActivityPanel_TopWebSearchTableModel_searchString_header=Search String
DataSourceSummaryUserActivityPanel_TopWebSearchTableModel_translatedResult_header=Translated
RecentFilePanel_col_header_domain=Domain
RecentFilePanel_col_header_path=Path
RecentFilePanel_col_header_sender=Sender
RecentFilePanel_no_open_documents=No recently open documents found.
RecentFilesPanel.openDocsLabel.text=Recently Opened Documents
RecentFilesPanel.downloadLabel.text=Recent Downloads
RecentFilesPanel.attachmentLabel.text=Recent Attachements
RecentFilesPanel_col_head_date=Date
ViewSummaryInformationAction.name.text=View Summary Information

Some files were not shown because too many files have changed in this diff Show More