diff --git a/.gitignore b/.gitignore index 45c3b68db4..0af92464ed 100644 --- a/.gitignore +++ b/.gitignore @@ -81,6 +81,7 @@ hs_err_pid*.log /thunderbirdparser/release/ /RecentActivity/release/ /CentralRepository/release/ +/Tika/release .idea/ *.iml diff --git a/BUILDING.txt b/BUILDING.txt index a77d6c8add..8b09ad5d3f 100644 --- a/BUILDING.txt +++ b/BUILDING.txt @@ -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. diff --git a/BootstrapIvy.xml b/BootstrapIvy.xml index c668d480ba..faaad6f6d1 100644 --- a/BootstrapIvy.xml +++ b/BootstrapIvy.xml @@ -1,6 +1,6 @@ - + @@ -9,18 +9,13 @@ - - - - - - + diff --git a/Core/build.xml b/Core/build.xml index 52f12a4b0b..32fff13e6e 100644 --- a/Core/build.xml +++ b/Core/build.xml @@ -63,6 +63,11 @@ + + + + + @@ -14,16 +14,6 @@ - - - - - - - - - - @@ -37,25 +27,27 @@ - + + - - - + + - + + + - + diff --git a/Core/manifest.mf b/Core/manifest.mf index 0f9b4579f6..a2c2843839 100644 --- a/Core/manifest.mf +++ b/Core/manifest.mf @@ -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 diff --git a/Core/nbproject/project.properties b/Core/nbproject/project.properties index 8dbd7f8d92..8d9c857fba 100644 --- a/Core/nbproject/project.properties +++ b/Core/nbproject/project.properties @@ -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 diff --git a/Core/nbproject/project.xml b/Core/nbproject/project.xml index 61e6a86b04..19c863e6b7 100644 --- a/Core/nbproject/project.xml +++ b/Core/nbproject/project.xml @@ -6,24 +6,6 @@ org.sleuthkit.autopsy.core - - org.jdesktop.beansbinding - - - - 1 - 1.27.1.121 - - - - org.jdesktop.layout - - - - 1 - 1.33.1 - - org.netbeans.api.progress @@ -245,6 +227,14 @@ 6.55.1 + + org.sleuthkit.autopsy.Tika + + + + 1.0 + + org.sleuthkit.autopsy.corelibs @@ -309,8 +299,6 @@ net.sf.sevenzipjbinding.impl net.sf.sevenzipjbinding.simple net.sf.sevenzipjbinding.simple.impl - org.apache.tika - org.apache.tika.io org.sleuthkit.autopsy.actions org.sleuthkit.autopsy.appservices org.sleuthkit.autopsy.casemodule @@ -352,100 +340,88 @@ org.sleuthkit.datamodel.blackboardutils.attributes - ext/commons-lang3-3.8.1.jar - release\modules\ext\commons-lang3-3.8.1.jar + ext/batik-xml-1.6.jar + release\modules\ext\batik-xml-1.6.jar - ext/batik-xml-1.6.jar - release/modules/ext/batik-xml-1.6.jar + ext/commons-digester-1.8.1.jar + release\modules\ext\commons-digester-1.8.1.jar ext/jai_core-1.1.3.jar - release/modules/ext/jai_core-1.1.3.jar + release\modules\ext\jai_core-1.1.3.jar ext/gax-grpc-1.44.0.jar - release/modules/ext/gax-grpc-1.44.0.jar + release\modules\ext\gax-grpc-1.44.0.jar - ext/cdm-4.5.5.jar - release\modules\ext\cdm-4.5.5.jar + ext/failureaccess-1.0.1.jar + release\modules\ext\failureaccess-1.0.1.jar - ext/sis-utility-0.8.jar - release\modules\ext\sis-utility-0.8.jar + ext/grpc-protobuf-1.19.0.jar + release\modules\ext\grpc-protobuf-1.19.0.jar ext/opencensus-api-0.19.2.jar - release/modules/ext/opencensus-api-0.19.2.jar + release\modules\ext\opencensus-api-0.19.2.jar ext/batik-svg-dom-1.6.jar - release/modules/ext/batik-svg-dom-1.6.jar + release\modules\ext\batik-svg-dom-1.6.jar ext/gax-httpjson-0.61.0.jar - release/modules/ext/gax-httpjson-0.61.0.jar - - - ext/boilerpipe-1.1.0.jar - release\modules\ext\boilerpipe-1.1.0.jar - - - ext/jsoup-1.11.3.jar - release\modules\ext\jsoup-1.11.3.jar + release\modules\ext\gax-httpjson-0.61.0.jar ext/sevenzipjbinding.jar - release/modules/ext/sevenzipjbinding.jar + release\modules\ext\sevenzipjbinding.jar ext/mchange-commons-java-0.2.9.jar - release/modules/ext/mchange-commons-java-0.2.9.jar + release\modules\ext\mchange-commons-java-0.2.9.jar + + + ext/api-common-1.7.0.jar + release\modules\ext\api-common-1.7.0.jar ext/jackson-databind-2.9.7.jar release\modules\ext\jackson-databind-2.9.7.jar - - ext/jai-imageio-core-1.4.0.jar - release\modules\ext\jai-imageio-core-1.4.0.jar - - - ext/api-common-1.7.0.jar - release/modules/ext/api-common-1.7.0.jar - - - ext/jcl-over-slf4j-1.7.25.jar - release\modules\ext\jcl-over-slf4j-1.7.25.jar - ext/okhttp-2.7.5.jar - release/modules/ext/okhttp-2.7.5.jar + release\modules\ext\okhttp-2.7.5.jar + + + ext/proto-google-cloud-translate-v3beta1-0.53.0.jar + release\modules\ext\proto-google-cloud-translate-v3beta1-0.53.0.jar + + + ext/error_prone_annotations-2.3.2.jar + release\modules\ext\error_prone_annotations-2.3.2.jar ext/libphonenumber-3.5.jar - release/modules/ext/libphonenumber-3.5.jar - - - ext/tika-core-1.20.jar - release\modules\ext\tika-core-1.20.jar + release\modules\ext\libphonenumber-3.5.jar ext/StixLib.jar - release/modules/ext/StixLib.jar - - - ext/bcprov-jdk15on-1.60.jar - release\modules\ext\bcprov-jdk15on-1.60.jar + release\modules\ext\StixLib.jar ext/google-auth-library-credentials-0.15.0.jar - release/modules/ext/google-auth-library-credentials-0.15.0.jar + release\modules\ext\google-auth-library-credentials-0.15.0.jar - ext/json-simple-1.1.1.jar - release\modules\ext\json-simple-1.1.1.jar + ext/grpc-auth-1.19.0.jar + release\modules\ext\grpc-auth-1.19.0.jar + + + ext/j2objc-annotations-1.1.jar + release\modules\ext\j2objc-annotations-1.1.jar ext/metadata-extractor-2.11.0.jar @@ -455,405 +431,389 @@ ext/commons-codec-1.11.jar release\modules\ext\commons-codec-1.11.jar - - ext/jmatio-1.5.jar - release\modules\ext\jmatio-1.5.jar - - - ext/tika-parsers-1.20.jar - release\modules\ext\tika-parsers-1.20.jar - - - ext/asm-7.0.jar - release\modules\ext\asm-7.0.jar - ext/commons-pool2-2.4.2.jar - release/modules/ext/commons-pool2-2.4.2.jar - - - ext/sleuthkit-4.10.0.jar - release/modules/ext/sleuthkit-4.10.0.jar + release\modules\ext\commons-pool2-2.4.2.jar ext/jxmapviewer2-2.4.jar - release/modules/ext/jxmapviewer2-2.4.jar + release\modules\ext\jxmapviewer2-2.4.jar + + + ext/jfreechart-1.0.19.jar + release/modules/ext/jfreechart-1.0.19.jar + + + ext/jcommon-1.0.23.jar + release/modules/ext/jcommon-1.0.23.jar ext/jdom-2.0.5-contrib.jar - release/modules/ext/jdom-2.0.5-contrib.jar - - - ext/openjson-1.0.10.jar - release\modules\ext\openjson-1.0.10.jar - - - ext/isoparser-1.1.22.jar - release\modules\ext\isoparser-1.1.22.jar + release\modules\ext\jdom-2.0.5-contrib.jar ext/xmpcore-5.1.3.jar - release/modules/ext/xmpcore-5.1.3.jar + release\modules\ext\xmpcore-5.1.3.jar ext/batik-util-1.6.jar - release/modules/ext/batik-util-1.6.jar - - - ext/javax.activation-1.2.0.jar - release\modules\ext\javax.activation-1.2.0.jar - - - ext/rome-1.12.0.jar - release\modules\ext\rome-1.12.0.jar + release\modules\ext\batik-util-1.6.jar ext/javax.annotation-api-1.3.2.jar release\modules\ext\javax.annotation-api-1.3.2.jar - ext/vorbis-java-core-0.8.jar - release\modules\ext\vorbis-java-core-0.8.jar + ext/jgraphx-4.1.0.jar + release\modules\ext\jgraphx-4.1.0.jar - ext/jgraphx-4.1.0.jar - release/modules/ext/jgraphx-4.1.0.jar + ext/jline-0.9.94.jar + release\modules\ext\jline-0.9.94.jar ext/DatCon.jar - release/modules/ext/DatCon.jar - - - ext/java-libpst-0.8.1.jar - release\modules\ext\java-libpst-0.8.1.jar + release\modules\ext\DatCon.jar ext/okio-1.6.0.jar - release/modules/ext/okio-1.6.0.jar + release\modules\ext\okio-1.6.0.jar + + + ext/bcprov-jdk15on-1.54.jar + release\modules\ext\bcprov-jdk15on-1.54.jar ext/curator-framework-2.8.0.jar - release/modules/ext/curator-framework-2.8.0.jar + release\modules\ext\curator-framework-2.8.0.jar ext/commons-dbcp2-2.1.1.jar - release/modules/ext/commons-dbcp2-2.1.1.jar + release\modules\ext\commons-dbcp2-2.1.1.jar ext/google-http-client-appengine-1.29.0.jar - release/modules/ext/google-http-client-appengine-1.29.0.jar + release\modules\ext\google-http-client-appengine-1.29.0.jar - ext/uimafit-core-2.4.0.jar - release\modules\ext\uimafit-core-2.4.0.jar + ext/proto-google-iam-v1-0.12.0.jar + release\modules\ext\proto-google-iam-v1-0.12.0.jar ext/jackcess-encrypt-2.1.4.jar release\modules\ext\jackcess-encrypt-2.1.4.jar - - ext/junrar-2.0.0.jar - release\modules\ext\junrar-2.0.0.jar - ext/google-http-client-1.29.0.jar - release/modules/ext/google-http-client-1.29.0.jar - - - ext/bcpkix-jdk15on-1.60.jar - release\modules\ext\bcpkix-jdk15on-1.60.jar + release\modules\ext\google-http-client-1.29.0.jar ext/opennlp-tools-1.9.1.jar release\modules\ext\opennlp-tools-1.9.1.jar - - ext/slf4j-api-1.7.25.jar - release\modules\ext\slf4j-api-1.7.25.jar - ext/bcprov-ext-jdk15on-1.54.jar - release/modules/ext/bcprov-ext-jdk15on-1.54.jar + release\modules\ext\bcprov-ext-jdk15on-1.54.jar ext/google-cloud-core-1.70.0.jar - release/modules/ext/google-cloud-core-1.70.0.jar + release\modules\ext\google-cloud-core-1.70.0.jar - ext/geoapi-3.0.1.jar - release\modules\ext\geoapi-3.0.1.jar + ext/protobuf-java-3.7.0.jar + release\modules\ext\protobuf-java-3.7.0.jar - ext/httpmime-4.5.6.jar - release\modules\ext\httpmime-4.5.6.jar - - - ext/jdom2-2.0.6.jar - release\modules\ext\jdom2-2.0.6.jar - - - ext/uimaj-core-3.0.1.jar - release\modules\ext\uimaj-core-3.0.1.jar + ext/bcpkix-jdk15on-1.54.jar + release\modules\ext\bcpkix-jdk15on-1.54.jar ext/sqlite-jdbc-3.25.2.jar - release/modules/ext/sqlite-jdbc-3.25.2.jar + release\modules\ext\sqlite-jdbc-3.25.2.jar - ext/cxf-rt-rs-client-3.3.0.jar - release\modules\ext\cxf-rt-rs-client-3.3.0.jar + ext/grpc-protobuf-lite-1.19.0.jar + release\modules\ext\grpc-protobuf-lite-1.19.0.jar - ext/pdfbox-tools-2.0.13.jar - release\modules\ext\pdfbox-tools-2.0.13.jar + ext/httpcore-4.4.9.jar + release\modules\ext\httpcore-4.4.9.jar - ext/grib-4.5.5.jar - release\modules\ext\grib-4.5.5.jar + ext/guava-27.1-android.jar + release\modules\ext\guava-27.1-android.jar - ext/gax-1.44.0.jar - release/modules/ext/gax-1.44.0.jar + ext/bcprov-jdk15on-1.52.jar + release\modules\ext\bcprov-jdk15on-1.52.jar - ext/jempbox-1.8.16.jar - release\modules\ext\jempbox-1.8.16.jar + ext/checker-compat-qual-2.5.3.jar + release\modules\ext\checker-compat-qual-2.5.3.jar - ext/jackcess-2.2.0.jar - release\modules\ext\jackcess-2.2.0.jar + ext/sleuthkit-4.10.0.jar + release\modules\ext\sleuthkit-4.10.0.jar - ext/grpc-context-1.19.0.jar - release/modules/ext/grpc-context-1.19.0.jar + ext/animal-sniffer-annotations-1.17.jar + release\modules\ext\animal-sniffer-annotations-1.17.jar - ext/jericho-html-3.3.jar - release/modules/ext/jericho-html-3.3.jar + ext/sleuthkit-caseuco-4.10.0.jar + release\modules\ext\sleuthkit-caseuco-4.10.0.jar - ext/httpservices-4.5.5.jar - release\modules\ext\httpservices-4.5.5.jar - - - ext/xz-1.8.jar - release\modules\ext\xz-1.8.jar - - - ext/commons-validator-1.6.jar - release/modules/ext/commons-validator-1.6.jar - - - ext/decodetect-core-0.3.jar - release/modules/ext/decodetect-core-0.3.jar - - - ext/jbig2-imageio-3.0.2.jar - release\modules\ext\jbig2-imageio-3.0.2.jar - - - ext/apache-mime4j-dom-0.8.2.jar - release\modules\ext\apache-mime4j-dom-0.8.2.jar - - - ext/pdfbox-2.0.13.jar - release\modules\ext\pdfbox-2.0.13.jar - - - ext/xmlbeans-3.0.2.jar - release\modules\ext\xmlbeans-3.0.2.jar - - - ext/curator-recipes-2.8.0.jar - release/modules/ext/curator-recipes-2.8.0.jar - - - ext/tagsoup-1.2.1.jar - release\modules\ext\tagsoup-1.2.1.jar - - - ext/jackson-core-2.9.7.jar - release\modules\ext\jackson-core-2.9.7.jar - - - ext/sis-metadata-0.8.jar - release\modules\ext\sis-metadata-0.8.jar - - - ext/parso-2.0.10.jar - release\modules\ext\parso-2.0.10.jar - - - ext/apache-mime4j-core-0.8.2.jar - release\modules\ext\apache-mime4j-core-0.8.2.jar - - - ext/commons-io-2.6.jar - release\modules\ext\commons-io-2.6.jar - - - ext/SparseBitSet-1.1.jar - release/modules/ext/SparseBitSet-1.1.jar - - - ext/batik-svggen-1.6.jar - release/modules/ext/batik-svggen-1.6.jar - - - ext/c3p0-0.9.5.jar - release/modules/ext/c3p0-0.9.5.jar - - - ext/zookeeper-3.4.6.jar - release/modules/ext/zookeeper-3.4.6.jar - - - ext/commons-csv-1.6.jar - release\modules\ext\commons-csv-1.6.jar - - - ext/jdom-2.0.5.jar - release/modules/ext/jdom-2.0.5.jar - - - ext/jackson-annotations-2.9.7.jar - release\modules\ext\jackson-annotations-2.9.7.jar - - - ext/google-api-client-1.27.0.jar - release/modules/ext/google-api-client-1.27.0.jar - - - ext/netcdf4-4.5.5.jar - release\modules\ext\netcdf4-4.5.5.jar - - - ext/sis-netcdf-0.8.jar - release\modules\ext\sis-netcdf-0.8.jar - - - ext/sentiment-analysis-parser-0.1.jar - release\modules\ext\sentiment-analysis-parser-0.1.jar - - - ext/commons-collections4-4.2.jar - release\modules\ext\commons-collections4-4.2.jar - - - ext/opencensus-contrib-http-util-0.19.2.jar - release/modules/ext/opencensus-contrib-http-util-0.19.2.jar - - - ext/google-auth-library-oauth2-http-0.15.0.jar - release/modules/ext/google-auth-library-oauth2-http-0.15.0.jar - - - ext/juniversalchardet-1.0.3.jar - release\modules\ext\juniversalchardet-1.0.3.jar - - - ext/jython-standalone-2.7.0.jar - release/modules/ext/jython-standalone-2.7.0.jar - - - ext/jhighlight-1.0.3.jar - release\modules\ext\jhighlight-1.0.3.jar - - - ext/jul-to-slf4j-1.7.25.jar - release\modules\ext\jul-to-slf4j-1.7.25.jar - - - ext/postgresql-9.4.1211.jre7.jar - release/modules/ext/postgresql-9.4.1211.jre7.jar - - - ext/jai_imageio-1.1.jar - release/modules/ext/jai_imageio-1.1.jar - - - ext/httpclient-4.5.6.jar - release\modules\ext\httpclient-4.5.6.jar - - - ext/curator-client-2.8.0.jar - release/modules/ext/curator-client-2.8.0.jar + ext/sleuthkit-4.10.0.jar + release/modules/ext/sleuthkit-4.10.0.jar ext/sleuthkit-caseuco-4.10.0.jar release/modules/ext/sleuthkit-caseuco-4.10.0.jar - ext/fontbox-2.0.13.jar - release\modules\ext\fontbox-2.0.13.jar + ext/gax-1.44.0.jar + release\modules\ext\gax-1.44.0.jar + + + ext/jsoup-1.10.3.jar + release\modules\ext\jsoup-1.10.3.jar + + + ext/grpc-context-1.19.0.jar + release\modules\ext\grpc-context-1.19.0.jar + + + ext/jackcess-2.2.0.jar + release\modules\ext\jackcess-2.2.0.jar + + + ext/slf4j-log4j12-1.7.6.jar + release\modules\ext\slf4j-log4j12-1.7.6.jar + + + ext/jericho-html-3.3.jar + release\modules\ext\jericho-html-3.3.jar + + + ext/google-cloud-core-grpc-1.70.0.jar + release\modules\ext\google-cloud-core-grpc-1.70.0.jar + + + ext/commons-validator-1.6.jar + release\modules\ext\commons-validator-1.6.jar + + + ext/slf4j-api-1.7.6.jar + release\modules\ext\slf4j-api-1.7.6.jar + + + ext/decodetect-core-0.3.jar + release\modules\ext\decodetect-core-0.3.jar + + + ext/httpclient-4.5.5.jar + release\modules\ext\httpclient-4.5.5.jar + + + ext/curator-recipes-2.8.0.jar + release\modules\ext\curator-recipes-2.8.0.jar + + + ext/jackson-annotations-2.9.0.jar + release\modules\ext\jackson-annotations-2.9.0.jar + + + ext/jackson-core-2.9.7.jar + release\modules\ext\jackson-core-2.9.7.jar + + + ext/commons-lang3-3.5.jar + release\modules\ext\commons-lang3-3.5.jar + + + ext/log4j-1.2.16.jar + release\modules\ext\log4j-1.2.16.jar + + + ext/commons-logging-1.2.jar + release\modules\ext\commons-logging-1.2.jar + + + ext/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar + release\modules\ext\listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar + + + ext/protobuf-java-util-3.7.0.jar + release\modules\ext\protobuf-java-util-3.7.0.jar + + + ext/commons-collections-3.2.2.jar + release\modules\ext\commons-collections-3.2.2.jar + + + ext/SparseBitSet-1.1.jar + release\modules\ext\SparseBitSet-1.1.jar + + + ext/grpc-grpclb-1.19.0.jar + release\modules\ext\grpc-grpclb-1.19.0.jar + + + ext/batik-svggen-1.6.jar + release\modules\ext\batik-svggen-1.6.jar + + + ext/c3p0-0.9.5.jar + release\modules\ext\c3p0-0.9.5.jar + + + ext/zookeeper-3.4.6.jar + release\modules\ext\zookeeper-3.4.6.jar + + + ext/grpc-alts-1.19.0.jar + release\modules\ext\grpc-alts-1.19.0.jar + + + ext/jdom-2.0.5.jar + release\modules\ext\jdom-2.0.5.jar + + + ext/gson-2.7.jar + release\modules\ext\gson-2.7.jar + + + ext/google-api-client-1.27.0.jar + release\modules\ext\google-api-client-1.27.0.jar + + + ext/opencensus-contrib-http-util-0.19.2.jar + release\modules\ext\opencensus-contrib-http-util-0.19.2.jar + + + ext/google-auth-library-oauth2-http-0.15.0.jar + release\modules\ext\google-auth-library-oauth2-http-0.15.0.jar + + + ext/jython-standalone-2.7.0.jar + release\modules\ext\jython-standalone-2.7.0.jar + + + ext/commons-lang-2.6.jar + release\modules\ext\commons-lang-2.6.jar + + + ext/jsr305-3.0.2.jar + release\modules\ext\jsr305-3.0.2.jar + + + ext/proto-google-common-protos-1.15.0.jar + release\modules\ext\proto-google-common-protos-1.15.0.jar + + + ext/netty-3.7.0.Final.jar + release\modules\ext\netty-3.7.0.Final.jar + + + ext/opencensus-contrib-grpc-metrics-0.19.2.jar + release\modules\ext\opencensus-contrib-grpc-metrics-0.19.2.jar + + + ext/jai_imageio-1.1.jar + release\modules\ext\jai_imageio-1.1.jar + + + ext/postgresql-9.4.1211.jre7.jar + release\modules\ext\postgresql-9.4.1211.jre7.jar + + + ext/junit-3.8.1.jar + release\modules\ext\junit-3.8.1.jar + + + ext/curator-client-2.8.0.jar + release\modules\ext\curator-client-2.8.0.jar + + + ext/grpc-core-1.19.0.jar + release\modules\ext\grpc-core-1.19.0.jar + + + ext/javax.ws.rs-api-2.0.jar + release\modules\ext\javax.ws.rs-api-2.0.jar ext/icepdf-core-6.2.2.jar - release/modules/ext/icepdf-core-6.2.2.jar + release\modules\ext\icepdf-core-6.2.2.jar ext/activemq-all-5.11.1.jar - release/modules/ext/activemq-all-5.11.1.jar + release\modules\ext\activemq-all-5.11.1.jar ext/google-cloud-core-http-1.70.0.jar - release/modules/ext/google-cloud-core-http-1.70.0.jar + release\modules\ext\google-cloud-core-http-1.70.0.jar ext/Rejistry-1.1-SNAPSHOT.jar - release/modules/ext/Rejistry-1.1-SNAPSHOT.jar + release\modules\ext\Rejistry-1.1-SNAPSHOT.jar - ext/dec-0.1.2.jar - release\modules\ext\dec-0.1.2.jar + ext/commons-beanutils-1.9.2.jar + release\modules\ext\commons-beanutils-1.9.2.jar ext/batik-dom-1.6.jar - release/modules/ext/batik-dom-1.6.jar + release\modules\ext\batik-dom-1.6.jar ext/google-http-client-jackson2-1.29.0.jar - release/modules/ext/google-http-client-jackson2-1.29.0.jar + release\modules\ext\google-http-client-jackson2-1.29.0.jar ext/threetenbp-1.3.3.jar - release/modules/ext/threetenbp-1.3.3.jar + release\modules\ext\threetenbp-1.3.3.jar ext/google-cloud-translate-1.70.0.jar - release/modules/ext/google-cloud-translate-1.70.0.jar + release\modules\ext\google-cloud-translate-1.70.0.jar + + + ext/grpc-stub-1.19.0.jar + release\modules\ext\grpc-stub-1.19.0.jar + + + ext/google-oauth-client-1.28.0.jar + release\modules\ext\google-oauth-client-1.28.0.jar ext/sevenzipjbinding-AllPlatforms.jar - release/modules/ext/sevenzipjbinding-AllPlatforms.jar + release\modules\ext\sevenzipjbinding-AllPlatforms.jar ext/jutf7-1.0.0.jar - release/modules/ext/jutf7-1.0.0.jar + release\modules\ext\jutf7-1.0.0.jar ext/batik-awt-util-1.6.jar - release/modules/ext/batik-awt-util-1.6.jar + release\modules\ext\batik-awt-util-1.6.jar ext/google-api-services-translate-v2-rev20170525-1.27.0.jar - release/modules/ext/google-api-services-translate-v2-rev20170525-1.27.0.jar - - - ext/webp-imageio-sejda-0.1.0.jar - release/modules/ext/webp-imageio-sejda-0.1.0.jar + release\modules\ext\google-api-services-translate-v2-rev20170525-1.27.0.jar ext/icepdf-viewer-6.2.2.jar - release/modules/ext/icepdf-viewer-6.2.2.jar + release\modules\ext\icepdf-viewer-6.2.2.jar - ext/bcmail-jdk15on-1.60.jar - release\modules\ext\bcmail-jdk15on-1.60.jar + ext/webp-imageio-sejda-0.1.0.jar + release\modules\ext\webp-imageio-sejda-0.1.0.jar - ext/vorbis-java-tika-0.8.jar - release\modules\ext\vorbis-java-tika-0.8.jar + ext/grpc-netty-shaded-1.19.0.jar + release\modules\ext\grpc-netty-shaded-1.19.0.jar diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/casemodule/Bundle_ja.properties index 27d4a47fd7..5f29c9ed07 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/Bundle_ja.properties +++ b/Core/src/org/sleuthkit/autopsy/casemodule/Bundle_ja.properties @@ -1,56 +1,97 @@ +#Tue Aug 18 18:09:20 UTC 2020 +AddImageAction.ingestConfig.ongoingIngest.msg=\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
\u7d9a\u884c\u3057\u3066\u65b0\u898f\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3092\u4eca\u3059\u3050\u8ffd\u52a0\u3057\u307e\u3059\u304b? +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=\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
\u7d9a\u884c\u3057\u3066\u65b0\u898f\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3092\u4eca\u3059\u3050\u8ffd\u52a0\u3057\u307e\u3059\u304b? -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: \\ / : * ? " < > | -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\: \\ / \: * ? " < > | 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: diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/Case.java b/Core/src/org/sleuthkit/autopsy/casemodule/Case.java index 275e502b8c..3ad14f6137 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/Case.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/Case.java @@ -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(); } /** @@ -1563,9 +1548,9 @@ public class Case { * * This should not be called from the event dispatch thread (EDT) * - * @param newTag The added ContentTag. - * @param deletedTagList List of ContentTags that were removed as a result - * of the addition of newTag. + * @param newTag The added ContentTag. + * @param deletedTagList List of ContentTags that were removed as a result + * of the addition of newTag. */ public void notifyContentTagAdded(ContentTag newTag, List deletedTagList) { eventPublisher.publish(new ContentTagAddedEvent(newTag, deletedTagList)); @@ -1628,9 +1613,9 @@ public class Case { * * This should not be called from the event dispatch thread (EDT) * - * @param newTag The added ContentTag. - * @param removedTagList List of ContentTags that were removed as a result - * of the addition of newTag. + * @param newTag The added ContentTag. + * @param removedTagList List of ContentTags that were removed as a result + * of the addition of newTag. */ public void notifyBlackBoardArtifactTagAdded(BlackboardArtifactTag newTag, List removedTagList) { eventPublisher.publish(new BlackBoardArtifactTagAddedEvent(newTag, removedTagList)); @@ -2120,7 +2105,7 @@ public class Case { */ private void openFileSystems(List images) throws TskCoreException, InterruptedException { byte[] tempBuff = new byte[512]; - + for (Image image : images) { String imageStr = image.getName(); @@ -2144,12 +2129,12 @@ public class Case { if (images == null) { return; } - + if (images.size() > MAX_IMAGE_THRESHOLD) { // If we have a large number of images, don't try to preload anything logger.log( - Level.INFO, - String.format("Skipping background load of file systems due to large number of images in case (%d)", images.size())); + Level.INFO, + String.format("Skipping background load of file systems due to large number of images in case (%d)", images.size())); return; } @@ -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())); } /** @@ -2506,7 +2491,7 @@ public class Case { * specific to this case. * * @param progressIndicator A progress indicator. - * @param isNewCase True if case is new + * @param isNewCase True if case is new * * @throws CaseActionException If there is a problem completing the * operation. The exception will have a @@ -2764,6 +2749,11 @@ public class Case { caseDb.close(); } + /** + * Delete files from temp directory if any exist. + */ + deleteTempfilesFromCaseDirectory(progressIndicator); + /* * Switch the log directory. */ diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/DefaultIngestStream.java b/Core/src/org/sleuthkit/autopsy/casemodule/DefaultIngestStream.java index 08bc0fa427..98f2855fcb 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/DefaultIngestStream.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/DefaultIngestStream.java @@ -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; @@ -35,6 +36,11 @@ class DefaultIngestStream implements IngestStream { public void addFiles(List fileObjectIds) throws IngestStreamClosedException { // Do nothing } + + @Override + public IngestJob getIngestJob() { + throw new UnsupportedOperationException("DefaultIngestStream has no associated IngestJob"); + } @Override public synchronized boolean isClosed() { diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/ImageDSProcessor.java b/Core/src/org/sleuthkit/autopsy/casemodule/ImageDSProcessor.java index 9dd9a39fd4..207b83ed8a 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/ImageDSProcessor.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/ImageDSProcessor.java @@ -464,6 +464,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 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 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 diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/Installer.java b/Core/src/org/sleuthkit/autopsy/casemodule/Installer.java new file mode 100644 index 0000000000..b8c42fb977 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/casemodule/Installer.java @@ -0,0 +1,66 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2020 Basis Technology Corp. + * Contact: carrier sleuthkit 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 ? "" : tempDirStr), ex); + } + } +} diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/OpenFromArguments.java b/Core/src/org/sleuthkit/autopsy/casemodule/OpenFromArguments.java deleted file mode 100644 index 91148673f5..0000000000 --- a/Core/src/org/sleuthkit/autopsy/casemodule/OpenFromArguments.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Autopsy Forensic Browser - * - * Copyright 2014 Basis Technology Corp. - * Contact: carrier sleuthkit 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
- + @@ -56,21 +53,24 @@ + + + - + - + - - - + + + + - @@ -79,9 +79,11 @@ - + + + - + @@ -96,9 +98,6 @@
- - - @@ -112,16 +111,16 @@ + - + - - + @@ -142,7 +141,7 @@ - + @@ -266,18 +265,18 @@ - + - - + + - + @@ -317,7 +316,7 @@ - + @@ -438,6 +437,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/AutopsyOptionsPanel.java b/Core/src/org/sleuthkit/autopsy/corecomponents/AutopsyOptionsPanel.java index bba1c70980..9dada6cfd3 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/AutopsyOptionsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/AutopsyOptionsPanel.java @@ -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("%s", 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; } @@ -425,7 +468,7 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel { return valid; } - + /** * Checks that if the mem field is enabled it has a valid value. * @@ -466,7 +509,7 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel { /** * Check if the logFileCount field is valid. - * + * * @return true if the logFileCount is valid false if it is not */ private boolean isLogNumFieldValid() { @@ -482,8 +525,9 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel { logNumAlert.setText(Bundle.AutopsyOptionsPanel_logNumAlert_invalidInput_text()); return false; } - return true; + 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) ); }// //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); + } 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_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 + }//GEN-LAST:event_tempDirectoryBrowseButtonActionPerformed private void specifyLogoRBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_specifyLogoRBActionPerformed agencyLogoPathField.setEnabled(true); @@ -834,18 +932,18 @@ 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); } catch (IOException | IndexOutOfBoundsException ex) { JOptionPane.showMessageDialog(this, - NbBundle.getMessage(this.getClass(), - "AutopsyOptionsPanel.invalidImageFile.msg"), - NbBundle.getMessage(this.getClass(), "AutopsyOptionsPanel.invalidImageFile.title"), - JOptionPane.ERROR_MESSAGE); + NbBundle.getMessage(this.getClass(), + "AutopsyOptionsPanel.invalidImageFile.msg"), + NbBundle.getMessage(this.getClass(), "AutopsyOptionsPanel.invalidImageFile.title"), + JOptionPane.ERROR_MESSAGE); try { updateAgencyLogo(oldLogoPath); //restore previous setting if new one is invalid } catch (IOException ex1) { @@ -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 diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle.properties b/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle.properties index 3c4dd31f76..c109aad513 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle.properties +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle.properties @@ -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=
No logo
selected
-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=
No logo
selected
+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 diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle.properties-MERGED index f9f63659b6..c86bc5278a 100755 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle.properties-MERGED +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle.properties-MERGED @@ -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=
No logo
selected
-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=
No logo
selected
+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 diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle_ja.properties index 5e684d205c..1eb5cb06fc 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle_ja.properties +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle_ja.properties @@ -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=
\u30ed\u30b4\u304c\u3042\u308a\u307e\u305b\u3093
selected
+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=
\n \u88fd\u54c1\u30d0\u30fc\u30b8\u30e7\u30f3: {0} ({9})
Sleuth Kit\u30d0\u30fc\u30b8\u30e7\u30f3: {7}
Netbeans RCP\u30d3\u30eb\u30c9: {8}
Java: {1}; {2}
\u30b7\u30b9\u30c6\u30e0: {3}; {4}; {5}
Userdir: {6}
-Format_OperatingSystem_Value={2} \u4e0a\u3067 {0} \u30d0\u30fc\u30b8\u30e7\u30f3 {1} \u304c\u5b9f\u884c\u4e2d\u3067\u3059 -LBL_Copyright=
Autopsy™ \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
\u8457\u4f5c\u6a29 © 2003-2020.
-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=
Autopsy™ \u306f The Sleuth Kit™ \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
Copyright © 2003-2020.
+LBL_Description=
\n \u88fd\u54c1\u30d0\u30fc\u30b8\u30e7\u30f3\: {0} ({9})
Sleuth Kit\u30d0\u30fc\u30b8\u30e7\u30f3\: {7}
Netbeans RCP\u30d3\u30eb\u30c9\: {8}
Java\: {1}; {2}
\u30b7\u30b9\u30c6\u30e0\: {3}; {4}; {5}
Userdir\: {6}
+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=
\u30ed\u30b4\u304c\u3042\u308a\u307e\u305b\u3093
selected
-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=\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
\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 -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 diff --git a/Core/src/org/sleuthkit/autopsy/coreutils/AppSQLiteDB.java b/Core/src/org/sleuthkit/autopsy/coreutils/AppSQLiteDB.java index f75618b59b..28f9516350 100644 --- a/Core/src/org/sleuthkit/autopsy/coreutils/AppSQLiteDB.java +++ b/Core/src/org/sleuthkit/autopsy/coreutils/AppSQLiteDB.java @@ -1,7 +1,7 @@ /* * Autopsy Forensic Browser * - * Copyright 2019 Basis Technology Corp. + * Copyright 2019-2020 Basis Technology Corp. * Contact: carrier sleuthkit 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 metaFiles = fileManager.findFiles( - sqliteFile.getDataSource(), metaFileName, - sqliteFile.getParent().getName()); + + List metaFiles = fileManager.findFilesExactName(sqliteFile.getParent().getId(), metaFileName); if (metaFiles != null) { for (AbstractFile metaFile : metaFiles) { diff --git a/Core/src/org/sleuthkit/autopsy/coreutils/ExecUtil.java b/Core/src/org/sleuthkit/autopsy/coreutils/ExecUtil.java index fc02b0e9f4..a7fc958f16 100644 --- a/Core/src/org/sleuthkit/autopsy/coreutils/ExecUtil.java +++ b/Core/src/org/sleuthkit/autopsy/coreutils/ExecUtil.java @@ -1,7 +1,7 @@ /* * Autopsy Forensic Browser * - * Copyright 2013-2019 Basis Technology Corp. + * Copyright 2013-2020 Basis Technology Corp. * Contact: carrier sleuthkit 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() { - long currentTimeInSeconds = (new Date().getTime()) / 1000; - return (currentTimeInSeconds - this.startTimeInSeconds) > this.maxRunTimeInSeconds; + 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 { - do { - process.waitFor(terminationCheckInterval, units); - if (process.isAlive() && terminator.shouldTerminateProcess()) { - killProcess(process); - try { - process.waitFor(); - } catch (InterruptedException ex) { - logger.log(Level.WARNING, String.format("Thread running %s was interrupted before the process completed", processName), ex); - } - } - } while (process.isAlive()); - } catch (InterruptedException ex) { - if (process.isAlive()) { - killProcess(process); - } + private static int waitForProcess(String processName, Process process, long terminationCheckInterval, TimeUnit units, ProcessTerminator terminator) throws IOException, InterruptedException { + do { 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); + process.waitFor(terminationCheckInterval, units); + } catch (InterruptedException 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; } - logger.log(Level.WARNING, String.format("Thread running %s was interrupted before the process completed", processName), ex); - Thread.currentThread().interrupt(); - } + if (process.isAlive() && terminator.shouldTerminateProcess()) { + terminateProcess(processName, process); + } + } while (process.isAlive()); + + /* + * 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()) { + if (PlatformUtil.isWindows()) { + try { Win32Process parentProcess = new Win32Process(process); List children = parentProcess.getChildren(); - children.stream().forEach((child) -> { child.terminate(); }); parentProcess.terminate(); - } else { - process.destroyForcibly(); + } 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 } - } catch (Exception ex) { - logger.log(Level.WARNING, "Error occurred when attempting to kill process: {0}", ex.getMessage()); // NON-NLS + } else { + process.destroyForcibly(); + } + + 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; diff --git a/Core/src/org/sleuthkit/autopsy/coreutils/SQLiteTableReader.java b/Core/src/org/sleuthkit/autopsy/coreutils/SQLiteTableReader.java index 59940d9e4c..0c3b0c65c5 100755 --- a/Core/src/org/sleuthkit/autopsy/coreutils/SQLiteTableReader.java +++ b/Core/src/org/sleuthkit/autopsy/coreutils/SQLiteTableReader.java @@ -425,15 +425,18 @@ 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 metaFiles = fileManager.findFiles( - sqliteFile.getDataSource(), metaFileName, - sqliteFile.getParent().getName()); + List metaFiles = fileManager.findFilesExactName(sqliteFile.getParent().getId(), metaFileName); if (metaFiles != null) { for (AbstractFile metaFile : metaFiles) { diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/datamodel/Bundle_ja.properties index 2fbfbee07b..150c7fecdc 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/Bundle_ja.properties +++ b/Core/src/org/sleuthkit/autopsy/datamodel/Bundle_ja.properties @@ -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 diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/ImageNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/ImageNode.java index f668893eb1..06a50eb788 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/ImageNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/ImageNode.java @@ -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; diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/SpecialDirectoryNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/SpecialDirectoryNode.java index ca73a64468..a3c6691ba2 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/SpecialDirectoryNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/SpecialDirectoryNode.java @@ -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; diff --git a/Core/src/org/sleuthkit/autopsy/datasourceprocessors/AutoIngestDataSourceProcessor.java b/Core/src/org/sleuthkit/autopsy/datasourceprocessors/AutoIngestDataSourceProcessor.java index 20f3bb59bd..27ffec6d53 100644 --- a/Core/src/org/sleuthkit/autopsy/datasourceprocessors/AutoIngestDataSourceProcessor.java +++ b/Core/src/org/sleuthkit/autopsy/datasourceprocessors/AutoIngestDataSourceProcessor.java @@ -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. */ diff --git a/Core/src/org/sleuthkit/autopsy/datasourcesummary/datamodel/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/datasourcesummary/datamodel/Bundle.properties-MERGED new file mode 100644 index 0000000000..2e019a0248 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/datamodel/Bundle.properties-MERGED @@ -0,0 +1,2 @@ +DataSourceUserActivitySummary_getRecentAccounts_calllogMessage=Call Log +DataSourceUserActivitySummary_getRecentAccounts_emailMessage=Email Message diff --git a/Core/src/org/sleuthkit/autopsy/datasourcesummary/datamodel/CaseDataSourcesSummary.java b/Core/src/org/sleuthkit/autopsy/datasourcesummary/datamodel/CaseDataSourcesSummary.java new file mode 100644 index 0000000000..50e883e29a --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/datamodel/CaseDataSourcesSummary.java @@ -0,0 +1,168 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2020 Basis Technology Corp. + * Contact: carrier sleuthkit 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 getDataSourceTypes() { + try { + SleuthkitCase skCase = Case.getCurrentCaseThrows().getSleuthkitCase(); + List listOfArtifacts = skCase.getBlackboardArtifacts(BlackboardArtifact.ARTIFACT_TYPE.TSK_DATA_SOURCE_USAGE); + Map 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 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 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 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 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 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() { + } +} diff --git a/Core/src/org/sleuthkit/autopsy/datasourcesummary/datamodel/DataSourceAnalysisSummary.java b/Core/src/org/sleuthkit/autopsy/datasourcesummary/datamodel/DataSourceAnalysisSummary.java new file mode 100644 index 0000000000..86aa21c7a1 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/datamodel/DataSourceAnalysisSummary.java @@ -0,0 +1,159 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2020 Basis Technology Corp. + * Contact: carrier sleuthkit 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 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> 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> 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> 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> getCountsData(DataSource dataSource, BlackboardAttribute.Type keyType, ARTIFACT_TYPE... artifactTypes) + throws SleuthkitCaseProviderException, TskCoreException { + List 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 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()); + } +} diff --git a/Core/src/org/sleuthkit/autopsy/datasourcesummary/datamodel/DataSourceCountsSummary.java b/Core/src/org/sleuthkit/autopsy/datasourcesummary/datamodel/DataSourceCountsSummary.java new file mode 100644 index 0000000000..0f2826636b --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/datamodel/DataSourceCountsSummary.java @@ -0,0 +1,160 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2019 - 2020 Basis Technology Corp. + * Contact: carrier sleuthkit 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 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> getStringLongResultSetHandler(String keyParam, String valueParam) { + return (resultSet) -> { + LinkedHashMap 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() { + } +} diff --git a/Core/src/org/sleuthkit/autopsy/datasourcesummary/datamodel/DataSourceDetailsSummary.java b/Core/src/org/sleuthkit/autopsy/datasourcesummary/datamodel/DataSourceDetailsSummary.java new file mode 100644 index 0000000000..3dd50131e5 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/datamodel/DataSourceDetailsSummary.java @@ -0,0 +1,178 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2020 Basis Technology Corp. + * Contact: carrier sleuthkit 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 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 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() { + } +} diff --git a/Core/src/org/sleuthkit/autopsy/datasourcesummary/datamodel/DataSourceInfoUtilities.java b/Core/src/org/sleuthkit/autopsy/datasourcesummary/datamodel/DataSourceInfoUtilities.java new file mode 100644 index 0000000000..4480b207e1 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/datamodel/DataSourceInfoUtilities.java @@ -0,0 +1,422 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2019 - 2020 Basis Technology Corp. + * Contact: carrier sleuthkit 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 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 getBaseQueryResult(String query, ResultSetHandler 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 getBaseQueryResult(SleuthkitCaseProvider provider, String query, ResultSetHandler 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 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 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> getArtifactMap(SleuthkitCase skCase, BlackboardArtifact.Type artifactType, DataSource dataSource, BlackboardAttribute.Type attributeType, SortOrder sortOrder) throws TskCoreException { + SortedMap> sortedMap = new TreeMap<>(new AttributeComparator(sortOrder)); + List artifactList = skCase.getBlackboard().getArtifacts(artifactType.getTypeID(), dataSource.getId()); + + for (BlackboardArtifact artifact : artifactList) { + BlackboardAttribute attribute = artifact.getAttribute(attributeType); + if (attribute == null) { + continue; + } + + List 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 createListFromMap(SortedMap> sortedMap, int maxCount) { + List artifactList = new ArrayList<>(); + + for (List 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 { + + 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); + } +} diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/DataSourceLabeledValueCallback.java b/Core/src/org/sleuthkit/autopsy/datasourcesummary/datamodel/DataSourceLabeledValueCallback.java similarity index 97% rename from Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/DataSourceLabeledValueCallback.java rename to Core/src/org/sleuthkit/autopsy/datasourcesummary/datamodel/DataSourceLabeledValueCallback.java index 1a44e2a76b..6c9c918667 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/DataSourceLabeledValueCallback.java +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/datamodel/DataSourceLabeledValueCallback.java @@ -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; diff --git a/Core/src/org/sleuthkit/autopsy/datasourcesummary/datamodel/DataSourceMimeTypeSummary.java b/Core/src/org/sleuthkit/autopsy/datasourcesummary/datamodel/DataSourceMimeTypeSummary.java new file mode 100644 index 0000000000..add28c0364 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/datamodel/DataSourceMimeTypeSummary.java @@ -0,0 +1,107 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2020 Basis Technology Corp. + * Contact: carrier sleuthkit 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 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 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 setValues) { + List 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() { + } +} diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/DataSourceSingleValueCallback.java b/Core/src/org/sleuthkit/autopsy/datasourcesummary/datamodel/DataSourceSingleValueCallback.java similarity index 97% rename from Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/DataSourceSingleValueCallback.java rename to Core/src/org/sleuthkit/autopsy/datasourcesummary/datamodel/DataSourceSingleValueCallback.java index fc7eea15e5..6b1ff205fa 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/DataSourceSingleValueCallback.java +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/datamodel/DataSourceSingleValueCallback.java @@ -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; diff --git a/Core/src/org/sleuthkit/autopsy/datasourcesummary/datamodel/DataSourceTopProgramsSummary.java b/Core/src/org/sleuthkit/autopsy/datasourcesummary/datamodel/DataSourceTopProgramsSummary.java new file mode 100644 index 0000000000..495f706f0b --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/datamodel/DataSourceTopProgramsSummary.java @@ -0,0 +1,304 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2020 Basis Technology Corp. + * Contact: carrier sleuthkit 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, 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 clauses) { + if (clauses.isEmpty()) { + return ""; + } + + List 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 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> handler = (resultSet) -> { + List 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 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, String> matchEntry : SHORT_FOLDER_MATCHERS) { + String result = matchEntry.apply(pathEls); + if (StringUtils.isNotBlank(result)) { + return result; + } + } + + return ""; + } +} diff --git a/Core/src/org/sleuthkit/autopsy/datasourcesummary/datamodel/DataSourceUserActivitySummary.java b/Core/src/org/sleuthkit/autopsy/datasourcesummary/datamodel/DataSourceUserActivitySummary.java new file mode 100644 index 0000000000..1ae108c496 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/datamodel/DataSourceUserActivitySummary.java @@ -0,0 +1,533 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2020 Basis Technology Corp. + * Contact: carrier sleuthkit 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 TOP_ACCOUNT_RESULT_DATE_COMPARE = (a, b) -> a.getLastAccess().compareTo(b.getLastAccess()); + private static final Comparator 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 { + + 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 getRecentDomains(DataSource dataSource, int count) throws InterruptedException { + Thread.sleep(SLEEP_TIME); + final String dId = Long.toString(dataSource.getId()); + final Function2 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 getMostRecentWebSearches(DataSource dataSource, int count) throws SleuthkitCaseProviderException, TskCoreException { + assertValidCount(count); + + // get the artifacts + List webSearchArtifacts = caseProvider.get().getBlackboard() + .getArtifacts(ARTIFACT_TYPE.TSK_WEB_SEARCH_QUERY.getTypeID(), dataSource.getId()); + + // group by search string (case insensitive) + Collection> 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 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 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 getRecentAccounts(DataSource dataSource, int count) throws SleuthkitCaseProviderException, TskCoreException { + assertValidCount(count); + + Stream messageResults = caseProvider.get().getBlackboard().getArtifacts(ARTIFACT_TYPE.TSK_MESSAGE.getTypeID(), dataSource.getId()) + .stream() + .map((art) -> getMessageAccountResult(art)); + + Stream 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 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 allResults = Stream.concat(messageResults, Stream.concat(emailResults, calllogResults)); + + // get them grouped by account type + Collection> 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; + } + } +} diff --git a/Core/src/org/sleuthkit/autopsy/datasourcesummary/datamodel/RecentFilesSummary.java b/Core/src/org/sleuthkit/autopsy/datasourcesummary/datamodel/RecentFilesSummary.java new file mode 100755 index 0000000000..42c15d3ff7 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/datamodel/RecentFilesSummary.java @@ -0,0 +1,438 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2020 Basis Technology Corp. + * Contact: carrier sleuthkit 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 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 artifactList + = DataSourceInfoUtilities.getArtifacts(provider.get(), + new BlackboardArtifact.Type(TSK_RECENT_OBJECT), + dataSource, + DATETIME_ATT, + DataSourceInfoUtilities.SortOrder.DESCENDING, + 10); + + List fileDetails = new ArrayList<>(); + for (BlackboardArtifact artifact : artifactList) { + Long accessedTime = null; + String path = ""; + + // Get all the attributes in one call. + List 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 getRecentDownloads(DataSource dataSource, int maxCount) throws TskCoreException, SleuthkitCaseProviderException { + List artifactList + = DataSourceInfoUtilities.getArtifacts(provider.get(), + new BlackboardArtifact.Type(TSK_WEB_DOWNLOAD), + dataSource, + DATETIME_ACCESSED_ATT, + DataSourceInfoUtilities.SortOrder.DESCENDING, + maxCount); + + List fileDetails = new ArrayList<>(); + for (BlackboardArtifact artifact : artifactList) { + // Get all the attributes in one call. + Long accessedTime = null; + String domain = ""; + String path = ""; + + List 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 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> buildAttachmentMap(DataSource dataSource) throws SleuthkitCaseProviderException, TskCoreException { + SleuthkitCase skCase = provider.get(); + TreeMap> sortedMap = new TreeMap<>(); + + List 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 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 createListFromMap(SortedMap> sortedMap, int maxCount) { + List fileList = new ArrayList<>(); + + for (List 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; + } + } +} diff --git a/Core/src/org/sleuthkit/autopsy/datasourcesummary/datamodel/SleuthkitCaseProvider.java b/Core/src/org/sleuthkit/autopsy/datasourcesummary/datamodel/SleuthkitCaseProvider.java new file mode 100644 index 0000000000..8371b2fefd --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/datamodel/SleuthkitCaseProvider.java @@ -0,0 +1,81 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2020 Basis Technology Corp. + * Contact: carrier sleuthkit 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; +} diff --git a/Core/src/org/sleuthkit/autopsy/datasourcesummary/datamodel/TopDomainsResult.java b/Core/src/org/sleuthkit/autopsy/datasourcesummary/datamodel/TopDomainsResult.java new file mode 100644 index 0000000000..e843e51c4c --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/datamodel/TopDomainsResult.java @@ -0,0 +1,76 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2020 Basis Technology Corp. + * Contact: carrier sleuthkit 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; + } + +} diff --git a/Core/src/org/sleuthkit/autopsy/datasourcesummary/datamodel/TopProgramsResult.java b/Core/src/org/sleuthkit/autopsy/datasourcesummary/datamodel/TopProgramsResult.java new file mode 100644 index 0000000000..7f682c3efb --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/datamodel/TopProgramsResult.java @@ -0,0 +1,74 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2020 Basis Technology Corp. + * Contact: carrier sleuthkit 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; + } +} diff --git a/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/AnalysisPanel.form b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/AnalysisPanel.form new file mode 100644 index 0000000000..4016b539a7 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/AnalysisPanel.form @@ -0,0 +1,263 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/AnalysisPanel.java b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/AnalysisPanel.java new file mode 100644 index 0000000000..16de061385 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/AnalysisPanel.java @@ -0,0 +1,209 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2020 Basis Technology Corp. + * Contact: carrier sleuthkit 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>> 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> hashsetHitsTable = JTablePanel.getJTablePanel(DEFAULT_COLUMNS); + + private final JTablePanel> keywordHitsTable = JTablePanel.getJTablePanel(DEFAULT_COLUMNS); + + private final JTablePanel> interestingItemsTable = JTablePanel.getJTablePanel(DEFAULT_COLUMNS); + + private final List> 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> 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> 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") + // //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) + ); + }// //GEN-END:initComponents + + // Variables declaration - do not modify//GEN-BEGIN:variables + // End of variables declaration//GEN-END:variables +} diff --git a/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/BaseDataSourceSummaryPanel.java b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/BaseDataSourceSummaryPanel.java new file mode 100644 index 0000000000..d28a734e34 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/BaseDataSourceSummaryPanel.java @@ -0,0 +1,64 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2020 Basis Technology Corp. + * Contact: carrier sleuthkit 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> 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); +} diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/Bundle.properties b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/Bundle.properties similarity index 69% rename from Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/Bundle.properties rename to Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/Bundle.properties index 24a312f733..b88a008e10 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/Bundle.properties +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/Bundle.properties @@ -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 diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/Bundle.properties-MERGED similarity index 64% rename from Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/Bundle.properties-MERGED rename to Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/Bundle.properties-MERGED index ba0d3510c7..f3325f2e46 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/Bundle.properties-MERGED +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/Bundle.properties-MERGED @@ -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 diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/Bundle_ja.properties similarity index 94% rename from Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/Bundle_ja.properties rename to Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/Bundle_ja.properties index 99fd24c7ef..5b92c2c817 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/Bundle_ja.properties +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/Bundle_ja.properties @@ -25,8 +25,6 @@ DataSourceSummaryDialog.closeButton.text=\u9589\u3058\u308b DataSourceSummaryDetailsPanel.displayNameLabel.text=\u8868\u793a\u540d: DataSourceSummaryDetailsPanel.originalNameLabel.text=\u540d\u524d: DataSourceSummaryDetailsPanel.deviceIdLabel.text=\u30c7\u30d0\u30a4\u30b9ID: -DataSourceSummaryDetailsPanel.operatingSystemLabel.text=OS: -DataSourceSummaryDetailsPanel.dataSourceUsageLabel.text=\u4f7f\u7528\u91cf: DataSourceSummaryDetailsPanel.timeZoneLabel.text=\u30bf\u30a4\u30e0\u30be\u30fc\u30f3: DataSourceSummaryDetailsPanel.imageTypeLabel.text=\u30a4\u30e1\u30fc\u30b8\u30bf\u30a4\u30d7: DataSourceSummaryDetailsPanel.sizeLabel.text=\u30b5\u30a4\u30ba: @@ -39,9 +37,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= diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/DataSourceBrowser.form b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/DataSourceBrowser.form similarity index 100% rename from Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/DataSourceBrowser.form rename to Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/DataSourceBrowser.form diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/DataSourceBrowser.java b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/DataSourceBrowser.java similarity index 95% rename from Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/DataSourceBrowser.java rename to Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/DataSourceBrowser.java index 92967738b0..98522e5071 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/DataSourceBrowser.java +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/DataSourceBrowser.java @@ -16,8 +16,9 @@ * 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.ui; +import org.sleuthkit.autopsy.datasourcesummary.uiutils.RightAlignedTableCellRenderer; import java.awt.EventQueue; import java.beans.PropertyVetoException; import javax.swing.ListSelectionModel; @@ -35,10 +36,11 @@ import javax.swing.event.ListSelectionListener; import org.openide.nodes.Node; import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException; -import org.sleuthkit.autopsy.casemodule.datasourcesummary.DataSourceSummaryNode.DataSourceSummaryEntryNode; +import org.sleuthkit.autopsy.datasourcesummary.ui.DataSourceSummaryNode.DataSourceSummaryEntryNode; import static javax.swing.SwingConstants.RIGHT; import javax.swing.SwingUtilities; import javax.swing.table.TableColumn; +import org.sleuthkit.autopsy.datasourcesummary.datamodel.CaseDataSourcesSummary; import org.sleuthkit.datamodel.DataSource; import org.sleuthkit.datamodel.IngestJobInfo; import org.sleuthkit.datamodel.SleuthkitCase; @@ -152,8 +154,8 @@ final class DataSourceBrowser extends javax.swing.JPanel implements ExplorerMana private List getDataSourceSummaryList(Map usageMap, Map fileCountsMap) { List summaryList = new ArrayList<>(); - final Map artifactCountsMap = DataSourceInfoUtilities.getCountsOfArtifacts(); - final Map tagCountsMap = DataSourceInfoUtilities.getCountsOfTags(); + final Map artifactCountsMap = CaseDataSourcesSummary.getCountsOfArtifacts(); + final Map tagCountsMap = CaseDataSourcesSummary.getCountsOfTags(); try { SleuthkitCase skCase = Case.getCurrentCaseThrows().getSleuthkitCase(); for (DataSource dataSource : skCase.getDataSources()) { diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/DataSourceSummary.java b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/DataSourceSummary.java similarity index 98% rename from Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/DataSourceSummary.java rename to Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/DataSourceSummary.java index b50c3596bd..1894e8968b 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/DataSourceSummary.java +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/DataSourceSummary.java @@ -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.ui; import java.sql.ResultSet; import java.sql.SQLException; diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/DataSourceSummaryAction.java b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/DataSourceSummaryAction.java similarity index 95% rename from Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/DataSourceSummaryAction.java rename to Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/DataSourceSummaryAction.java index 7514d61599..12a3ed3059 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/DataSourceSummaryAction.java +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/DataSourceSummaryAction.java @@ -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.ui; import java.awt.event.ActionEvent; import java.beans.PropertyChangeEvent; @@ -28,6 +28,7 @@ import org.openide.util.HelpCtx; import org.openide.util.NbBundle.Messages; import org.openide.util.actions.CallableSystemAction; import org.sleuthkit.autopsy.casemodule.Case; +import org.sleuthkit.autopsy.datasourcesummary.ui.Bundle; @ActionID(category = "Case", id = "org.sleuthkit.autopsy.casemodule.datasourcesummary.DataSourceSummaryAction") @ActionRegistration(displayName = "#CTL_DataSourceSummaryAction", lazy = false) diff --git a/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/DataSourceSummaryCountsPanel.form b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/DataSourceSummaryCountsPanel.form new file mode 100644 index 0000000000..c9c1930787 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/DataSourceSummaryCountsPanel.form @@ -0,0 +1,222 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/DataSourceSummaryCountsPanel.java b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/DataSourceSummaryCountsPanel.java new file mode 100644 index 0000000000..306a036941 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/DataSourceSummaryCountsPanel.java @@ -0,0 +1,289 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2019 Basis Technology Corp. + * Contact: carrier sleuthkit 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 org.sleuthkit.autopsy.datasourcesummary.uiutils.NonEditableTableModel; +import java.util.Map; +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.datasourcesummary.datamodel.DataSourceCountsSummary; + +import org.sleuthkit.datamodel.DataSource; + +/** + * Panel for displaying summary information on the known files present in the + * specified DataSource + */ +@Messages({ + "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 BaseDataSourceSummaryPanel { + + private static final long serialVersionUID = 1L; + + // Result returned for a data model if no data found. + private static final Object[][] EMPTY_PAIRS = new Object[][]{}; + + // 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 final DefaultTableCellRenderer rightAlignedRenderer = new DefaultTableCellRenderer(); + + private final FileTypePieChart fileTypePieChart = new FileTypePieChart(); + + /** + * Creates new form DataSourceSummaryCountsPanel + */ + DataSourceSummaryCountsPanel() { + rightAlignedRenderer.setHorizontalAlignment(JLabel.RIGHT); + initComponents(); + fileCountsByCategoryTable.getTableHeader().setReorderingAllowed(false); + artifactCountsTable.getTableHeader().setReorderingAllowed(false); + setDataSource(null); + } + + @Override + protected void onNewDataSource(DataSource dataSource) { + if (dataSource == null || !Case.isCaseOpen()) { + updateCountsTableData(EMPTY_PAIRS, EMPTY_PAIRS); + } else { + updateCountsTableData(getFileCategoryModel(dataSource), getArtifactCountsModel(dataSource)); + } + this.fileTypePieChart.setDataSource(dataSource); + } + + /** + * Specify the DataSource to display file information for. + * + * @param fileCategoryDataModel The file category data model. + * @param artifactDataModel The artifact type data model. + */ + private void updateCountsTableData(Object[][] fileCategoryDataModel, Object[][] artifactDataModel) { + 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 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(DataSourceCountsSummary.getCountOfFiles(selectedDataSource)); + Long unallocatedFiles = zeroIfNull(DataSourceCountsSummary.getCountOfUnallocatedFiles(selectedDataSource)); + Long allocatedFiles = zeroIfNull(DataSourceCountsSummary.getCountOfAllocatedFiles(selectedDataSource)); + Long slackFiles = zeroIfNull(DataSourceCountsSummary.getCountOfSlackFiles(selectedDataSource)); + Long directories = zeroIfNull(DataSourceCountsSummary.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; + } + + /** + * 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 artifactMapping = DataSourceCountsSummary.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") + // //GEN-BEGIN:initComponents + private void initComponents() { + + javax.swing.JScrollPane scrollParent = new javax.swing.JScrollPane(); + javax.swing.JPanel parentPanel = new javax.swing.JPanel(); + javax.swing.JScrollPane fileCountsByCategoryScrollPane = new javax.swing.JScrollPane(); + fileCountsByCategoryTable = new javax.swing.JTable(); + javax.swing.JLabel byCategoryLabel = new javax.swing.JLabel(); + javax.swing.JLabel resultsByTypeLabel = new javax.swing.JLabel(); + javax.swing.JScrollPane artifactCountsScrollPane = new javax.swing.JScrollPane(); + artifactCountsTable = new javax.swing.JTable(); + javax.swing.JPanel fileTypePiePanel = fileTypePieChart; + javax.swing.JPanel filesByCatParent = new javax.swing.JPanel(); + javax.swing.JPanel resultsByTypeParent = new javax.swing.JPanel(); + + parentPanel.setMinimumSize(new java.awt.Dimension(840, 320)); + + 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(resultsByTypeLabel, org.openide.util.NbBundle.getMessage(DataSourceSummaryCountsPanel.class, "DataSourceSummaryCountsPanel.resultsByTypeLabel.text")); // NOI18N + + artifactCountsTable.setAutoCreateRowSorter(true); + artifactCountsScrollPane.setViewportView(artifactCountsTable); + + fileTypePiePanel.setPreferredSize(new java.awt.Dimension(400, 300)); + + javax.swing.GroupLayout filesByCatParentLayout = new javax.swing.GroupLayout(filesByCatParent); + filesByCatParent.setLayout(filesByCatParentLayout); + filesByCatParentLayout.setHorizontalGroup( + filesByCatParentLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 0, Short.MAX_VALUE) + ); + filesByCatParentLayout.setVerticalGroup( + filesByCatParentLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 0, Short.MAX_VALUE) + ); + + javax.swing.GroupLayout resultsByTypeParentLayout = new javax.swing.GroupLayout(resultsByTypeParent); + resultsByTypeParent.setLayout(resultsByTypeParentLayout); + resultsByTypeParentLayout.setHorizontalGroup( + resultsByTypeParentLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 0, Short.MAX_VALUE) + ); + resultsByTypeParentLayout.setVerticalGroup( + resultsByTypeParentLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 0, Short.MAX_VALUE) + ); + + javax.swing.GroupLayout parentPanelLayout = new javax.swing.GroupLayout(parentPanel); + parentPanel.setLayout(parentPanelLayout); + parentPanelLayout.setHorizontalGroup( + parentPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(parentPanelLayout.createSequentialGroup() + .addContainerGap() + .addComponent(fileTypePiePanel, javax.swing.GroupLayout.PREFERRED_SIZE, 400, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(18, 18, 18) + .addGroup(parentPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(fileCountsByCategoryScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 140, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(byCategoryLabel) + .addComponent(filesByCatParent, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(18, 18, 18) + .addGroup(parentPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(resultsByTypeLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 79, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(parentPanelLayout.createSequentialGroup() + .addComponent(artifactCountsScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 244, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(resultsByTypeParent, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + parentPanelLayout.setVerticalGroup( + parentPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(parentPanelLayout.createSequentialGroup() + .addContainerGap() + .addGroup(parentPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(parentPanelLayout.createSequentialGroup() + .addComponent(fileTypePiePanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGroup(parentPanelLayout.createSequentialGroup() + .addGroup(parentPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(byCategoryLabel) + .addComponent(resultsByTypeLabel)) + .addGroup(parentPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, parentPanelLayout.createSequentialGroup() + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(resultsByTypeParent, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(148, 148, 148)) + .addGroup(parentPanelLayout.createSequentialGroup() + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(parentPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(artifactCountsScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE) + .addGroup(parentPanelLayout.createSequentialGroup() + .addComponent(fileCountsByCategoryScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 107, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(31, 31, 31) + .addComponent(filesByCatParent, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(0, 0, Short.MAX_VALUE))) + .addContainerGap()))))) + ); + + scrollParent.setViewportView(parentPanel); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(scrollParent) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(scrollParent) + ); + }// //GEN-END:initComponents + + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JTable artifactCountsTable; + private javax.swing.JTable fileCountsByCategoryTable; + // End of variables declaration//GEN-END:variables +} diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/DataSourceSummaryDetailsPanel.form b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/DataSourceSummaryDetailsPanel.form similarity index 75% rename from Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/DataSourceSummaryDetailsPanel.form rename to Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/DataSourceSummaryDetailsPanel.form index 9efc00faa0..3060e67efb 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/DataSourceSummaryDetailsPanel.form +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/DataSourceSummaryDetailsPanel.form @@ -37,22 +37,10 @@ - - - - - - - - - - - - - + @@ -64,7 +52,7 @@ - + @@ -76,7 +64,7 @@ - + @@ -85,25 +73,10 @@ - - - - - - - - - - - - - - - - + @@ -115,7 +88,7 @@ - + @@ -127,7 +100,7 @@ - + @@ -139,10 +112,10 @@ - + - + @@ -179,7 +152,7 @@ - <ResourceString bundle="org/sleuthkit/autopsy/casemodule/datasourcesummary/Bundle.properties" key="DataSourceSummaryDetailsPanel.filePathsTable.columnModel.title0" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="org/sleuthkit/autopsy/datasourcesummary/ui/Bundle.properties" key="DataSourceSummaryDetailsPanel.filePathsTable.columnModel.title0" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> @@ -193,22 +166,10 @@ - - - - - - - - - - - - - + @@ -220,10 +181,10 @@ - + - + @@ -235,10 +196,10 @@ - + - + @@ -250,7 +211,7 @@ - + @@ -262,7 +223,7 @@ - + @@ -274,7 +235,7 @@ - + @@ -286,7 +247,7 @@ - + @@ -298,7 +259,7 @@ - + @@ -310,7 +271,7 @@ - + @@ -322,7 +283,7 @@ - + @@ -334,7 +295,7 @@ - + @@ -346,7 +307,7 @@ - + @@ -358,7 +319,7 @@ - + @@ -370,7 +331,7 @@ - + @@ -379,22 +340,10 @@ - - - - - - - - - - - - - + @@ -424,7 +373,7 @@ - + @@ -466,7 +415,7 @@ - + @@ -478,7 +427,7 @@ - + diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/DataSourceSummaryDetailsPanel.java b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/DataSourceSummaryDetailsPanel.java similarity index 87% rename from Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/DataSourceSummaryDetailsPanel.java rename to Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/DataSourceSummaryDetailsPanel.java index 21caa2c4b8..c9df74d2b8 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/DataSourceSummaryDetailsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/DataSourceSummaryDetailsPanel.java @@ -16,15 +16,15 @@ * 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.ui; import java.text.DecimalFormat; import java.util.logging.Level; import org.sleuthkit.autopsy.coreutils.Logger; import javax.swing.table.DefaultTableModel; -import org.apache.commons.lang3.StringUtils; import org.openide.util.NbBundle.Messages; import org.sleuthkit.autopsy.casemodule.Case; +import org.sleuthkit.autopsy.datasourcesummary.datamodel.DataSourceDetailsSummary; import org.sleuthkit.datamodel.DataSource; import org.sleuthkit.datamodel.Image; import org.sleuthkit.datamodel.TskCoreException; @@ -32,7 +32,7 @@ import org.sleuthkit.datamodel.TskCoreException; /** * Panel to display additional details associated with a specific DataSource */ -class DataSourceSummaryDetailsPanel extends javax.swing.JPanel { +class DataSourceSummaryDetailsPanel extends BaseDataSourceSummaryPanel { //Because this panel was made using the gridbaglayout and netbean's Customize Layout tool it will be best to continue to modify it through that private static final long serialVersionUID = 1L; @@ -40,8 +40,6 @@ class DataSourceSummaryDetailsPanel extends javax.swing.JPanel { private static final DecimalFormat APPROXIMATE_SIZE_FORMAT = new DecimalFormat("#.##"); private static final Logger logger = Logger.getLogger(DataSourceSummaryDetailsPanel.class.getName()); - private DataSource dataSource; - /** * Creates new form DataSourceSummaryDetailsPanel */ @@ -52,30 +50,15 @@ class DataSourceSummaryDetailsPanel extends javax.swing.JPanel { 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; - + @Override + protected void onNewDataSource(DataSource dataSource) { if (dataSource == null || !Case.isCaseOpen()) { updateDetailsPanelData(null, null, null, null); } else { updateDetailsPanelData(dataSource, - DataSourceInfoUtilities.getSizeOfUnallocatedFiles(dataSource), - DataSourceInfoUtilities.getOperatingSystems(dataSource), - DataSourceInfoUtilities.getDataSourceType(dataSource)); + DataSourceDetailsSummary.getSizeOfUnallocatedFiles(dataSource), + DataSourceDetailsSummary.getOperatingSystems(dataSource), + DataSourceDetailsSummary.getDataSourceType(dataSource)); } } @@ -88,8 +71,6 @@ class DataSourceSummaryDetailsPanel extends javax.swing.JPanel { clearTableValues(); if (selectedDataSource != null) { unallocatedSizeValue.setText(getSizeString(unallocatedFilesSize)); - operatingSystemValue.setText(StringUtils.isBlank(osDetails) ? "" : osDetails); - dataSourceUsageValue.setText(StringUtils.isBlank(usage) ? "" : usage); timeZoneValue.setText(selectedDataSource.getTimeZone()); displayNameValue.setText(selectedDataSource.getName()); @@ -218,10 +199,6 @@ class DataSourceSummaryDetailsPanel extends javax.swing.JPanel { originalNameLabel.setVisible(!originalNameValue.getText().isEmpty()); deviceIdValue.setVisible(!deviceIdValue.getText().isEmpty()); deviceIdLabel.setVisible(!deviceIdValue.getText().isEmpty()); - dataSourceUsageValue.setVisible(!dataSourceUsageValue.getText().isEmpty()); - dataSourceUsageLabel.setVisible(!dataSourceUsageValue.getText().isEmpty()); - operatingSystemValue.setVisible(!operatingSystemValue.getText().isEmpty()); - operatingSystemLabel.setVisible(!operatingSystemValue.getText().isEmpty()); timeZoneValue.setVisible(!timeZoneValue.getText().isEmpty()); timeZoneLabel.setVisible(!timeZoneValue.getText().isEmpty()); acquisitionDetailsTextArea.setVisible(!acquisitionDetailsTextArea.getText().isEmpty()); @@ -253,8 +230,6 @@ class DataSourceSummaryDetailsPanel extends javax.swing.JPanel { displayNameValue.setText(""); originalNameValue.setText(""); deviceIdValue.setText(""); - dataSourceUsageValue.setText(""); - operatingSystemValue.setText(""); timeZoneValue.setText(""); acquisitionDetailsTextArea.setText(""); imageTypeValue.setText(""); @@ -279,18 +254,15 @@ class DataSourceSummaryDetailsPanel extends javax.swing.JPanel { jScrollPane1 = new javax.swing.JScrollPane(); jPanel1 = new javax.swing.JPanel(); - operatingSystemLabel = new javax.swing.JLabel(); displayNameLabel = new javax.swing.JLabel(); originalNameLabel = new javax.swing.JLabel(); sha1HashValue = new javax.swing.JLabel(); - operatingSystemValue = new javax.swing.JLabel(); displayNameValue = new javax.swing.JLabel(); sha256HashValue = new javax.swing.JLabel(); originalNameValue = new javax.swing.JLabel(); deviceIdValue = new javax.swing.JLabel(); filePathsScrollPane = new javax.swing.JScrollPane(); filePathsTable = new javax.swing.JTable(); - dataSourceUsageValue = new javax.swing.JLabel(); timeZoneValue = new javax.swing.JLabel(); imageTypeValue = new javax.swing.JLabel(); md5HashValue = new javax.swing.JLabel(); @@ -305,7 +277,6 @@ class DataSourceSummaryDetailsPanel extends javax.swing.JPanel { imageTypeLabel = new javax.swing.JLabel(); acquisitionDetailsLabel = new javax.swing.JLabel(); timeZoneLabel = new javax.swing.JLabel(); - dataSourceUsageLabel = new javax.swing.JLabel(); deviceIdLabel = new javax.swing.JLabel(); acquisitionDetailsScrollPane = new javax.swing.JScrollPane(); acquisitionDetailsTextArea = new javax.swing.JTextArea(); @@ -316,15 +287,6 @@ class DataSourceSummaryDetailsPanel extends javax.swing.JPanel { jPanel1.setLayout(new java.awt.GridBagLayout()); - org.openide.awt.Mnemonics.setLocalizedText(operatingSystemLabel, org.openide.util.NbBundle.getMessage(DataSourceSummaryDetailsPanel.class, "DataSourceSummaryDetailsPanel.operatingSystemLabel.text")); // NOI18N - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 4; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; - gridBagConstraints.insets = new java.awt.Insets(0, 10, 0, 4); - jPanel1.add(operatingSystemLabel, gridBagConstraints); - org.openide.awt.Mnemonics.setLocalizedText(displayNameLabel, org.openide.util.NbBundle.getMessage(DataSourceSummaryDetailsPanel.class, "DataSourceSummaryDetailsPanel.displayNameLabel.text")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; @@ -354,18 +316,6 @@ class DataSourceSummaryDetailsPanel extends javax.swing.JPanel { gridBagConstraints.insets = new java.awt.Insets(0, 0, 0, 10); jPanel1.add(sha1HashValue, gridBagConstraints); - org.openide.awt.Mnemonics.setLocalizedText(operatingSystemValue, org.openide.util.NbBundle.getMessage(DataSourceSummaryDetailsPanel.class, "DataSourceSummaryDetailsPanel.operatingSystemValue.text")); // NOI18N - operatingSystemValue.setToolTipText(org.openide.util.NbBundle.getMessage(DataSourceSummaryDetailsPanel.class, "DataSourceSummaryDetailsPanel.operatingSystemValue.toolTipText")); // NOI18N - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 4; - gridBagConstraints.gridwidth = 4; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.anchor = java.awt.GridBagConstraints.FIRST_LINE_START; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(0, 0, 0, 10); - jPanel1.add(operatingSystemValue, gridBagConstraints); - org.openide.awt.Mnemonics.setLocalizedText(displayNameValue, org.openide.util.NbBundle.getMessage(DataSourceSummaryDetailsPanel.class, "DataSourceSummaryDetailsPanel.displayNameValue.text")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; @@ -446,17 +396,6 @@ class DataSourceSummaryDetailsPanel extends javax.swing.JPanel { gridBagConstraints.insets = new java.awt.Insets(6, 0, 10, 10); jPanel1.add(filePathsScrollPane, gridBagConstraints); - org.openide.awt.Mnemonics.setLocalizedText(dataSourceUsageValue, org.openide.util.NbBundle.getMessage(DataSourceSummaryDetailsPanel.class, "DataSourceSummaryDetailsPanel.dataSourceUsageValue.text")); // NOI18N - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 3; - gridBagConstraints.gridwidth = 4; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.anchor = java.awt.GridBagConstraints.FIRST_LINE_START; - gridBagConstraints.weightx = 0.5; - gridBagConstraints.insets = new java.awt.Insets(6, 0, 0, 10); - jPanel1.add(dataSourceUsageValue, gridBagConstraints); - org.openide.awt.Mnemonics.setLocalizedText(timeZoneValue, org.openide.util.NbBundle.getMessage(DataSourceSummaryDetailsPanel.class, "DataSourceSummaryDetailsPanel.timeZoneValue.text")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; @@ -597,15 +536,6 @@ class DataSourceSummaryDetailsPanel extends javax.swing.JPanel { gridBagConstraints.insets = new java.awt.Insets(0, 10, 6, 4); jPanel1.add(timeZoneLabel, gridBagConstraints); - org.openide.awt.Mnemonics.setLocalizedText(dataSourceUsageLabel, org.openide.util.NbBundle.getMessage(DataSourceSummaryDetailsPanel.class, "DataSourceSummaryDetailsPanel.dataSourceUsageLabel.text")); // NOI18N - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 3; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.anchor = java.awt.GridBagConstraints.FIRST_LINE_START; - gridBagConstraints.insets = new java.awt.Insets(6, 10, 0, 4); - jPanel1.add(dataSourceUsageLabel, gridBagConstraints); - org.openide.awt.Mnemonics.setLocalizedText(deviceIdLabel, org.openide.util.NbBundle.getMessage(DataSourceSummaryDetailsPanel.class, "DataSourceSummaryDetailsPanel.deviceIdLabel.text")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; @@ -688,8 +618,6 @@ class DataSourceSummaryDetailsPanel extends javax.swing.JPanel { private javax.swing.JLabel acquisitionDetailsLabel; private javax.swing.JScrollPane acquisitionDetailsScrollPane; private javax.swing.JTextArea acquisitionDetailsTextArea; - private javax.swing.JLabel dataSourceUsageLabel; - private javax.swing.JLabel dataSourceUsageValue; private javax.swing.JLabel deviceIdLabel; private javax.swing.JLabel deviceIdValue; private javax.swing.JLabel displayNameLabel; @@ -705,8 +633,6 @@ class DataSourceSummaryDetailsPanel extends javax.swing.JPanel { private javax.swing.JScrollPane jScrollPane1; private javax.swing.JLabel md5HashLabel; private javax.swing.JLabel md5HashValue; - private javax.swing.JLabel operatingSystemLabel; - private javax.swing.JLabel operatingSystemValue; private javax.swing.JLabel originalNameLabel; private javax.swing.JLabel originalNameValue; private javax.swing.JLabel sectorSizeLabel; diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/DataSourceSummaryDialog.form b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/DataSourceSummaryDialog.form similarity index 92% rename from Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/DataSourceSummaryDialog.form rename to Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/DataSourceSummaryDialog.form index 272fc9b041..d4edf4b0ee 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/DataSourceSummaryDialog.form +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/DataSourceSummaryDialog.form @@ -22,7 +22,7 @@ - + @@ -36,7 +36,7 @@ - + @@ -48,7 +48,7 @@ - + diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/DataSourceSummaryDialog.java b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/DataSourceSummaryDialog.java similarity index 94% rename from Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/DataSourceSummaryDialog.java rename to Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/DataSourceSummaryDialog.java index 9cd7549c06..1bc033822d 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/DataSourceSummaryDialog.java +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/DataSourceSummaryDialog.java @@ -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.ui; import java.awt.Frame; import java.beans.PropertyChangeEvent; @@ -27,6 +27,7 @@ import java.util.Observer; import java.util.Set; import javax.swing.event.ListSelectionEvent; import org.openide.util.NbBundle.Messages; +import org.sleuthkit.autopsy.datasourcesummary.datamodel.CaseDataSourcesSummary; import org.sleuthkit.autopsy.ingest.IngestManager; import org.sleuthkit.autopsy.ingest.events.DataSourceAnalysisCompletedEvent; import org.sleuthkit.autopsy.ingest.events.DataSourceAnalysisCompletedEvent.Reason; @@ -53,8 +54,8 @@ final class DataSourceSummaryDialog extends javax.swing.JDialog implements Obser }) DataSourceSummaryDialog(Frame owner) { super(owner, Bundle.DataSourceSummaryDialog_window_title(), true); - Map usageMap = DataSourceInfoUtilities.getDataSourceTypes(); - Map fileCountsMap = DataSourceInfoUtilities.getCountsOfFiles(); + Map usageMap = CaseDataSourcesSummary.getDataSourceTypes(); + Map fileCountsMap = CaseDataSourcesSummary.getCountsOfFiles(); dataSourcesPanel = new DataSourceBrowser(usageMap, fileCountsMap); dataSourceSummaryTabbedPane = new DataSourceSummaryTabbedPane(); initComponents(); @@ -125,7 +126,7 @@ final class DataSourceSummaryDialog extends javax.swing.JDialog implements Obser .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(dataSourceSummarySplitPane, javax.swing.GroupLayout.DEFAULT_SIZE, 668, Short.MAX_VALUE) + .addComponent(dataSourceSummarySplitPane, javax.swing.GroupLayout.DEFAULT_SIZE, 860, Short.MAX_VALUE) .addGroup(layout.createSequentialGroup() .addGap(0, 0, Short.MAX_VALUE) .addComponent(closeButton))) @@ -135,7 +136,7 @@ final class DataSourceSummaryDialog extends javax.swing.JDialog implements Obser layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() - .addComponent(dataSourceSummarySplitPane, javax.swing.GroupLayout.DEFAULT_SIZE, 362, Short.MAX_VALUE) + .addComponent(dataSourceSummarySplitPane, javax.swing.GroupLayout.DEFAULT_SIZE, 540, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(closeButton) .addContainerGap()) diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/DataSourceSummaryNode.java b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/DataSourceSummaryNode.java similarity index 98% rename from Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/DataSourceSummaryNode.java rename to Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/DataSourceSummaryNode.java index 0411d94bb2..a4c48e7adf 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/DataSourceSummaryNode.java +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/DataSourceSummaryNode.java @@ -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.ui; import java.awt.event.ActionEvent; import java.util.ArrayList; @@ -30,6 +30,7 @@ import org.openide.nodes.Children; import org.openide.nodes.Node; import org.openide.nodes.Sheet; import org.openide.util.NbBundle.Messages; +import org.sleuthkit.autopsy.datasourcesummary.ui.Bundle; import org.sleuthkit.autopsy.datamodel.NodeProperty; import org.sleuthkit.autopsy.directorytree.ViewContextAction; import org.sleuthkit.datamodel.DataSource; diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/DataSourceSummaryTabbedPane.java b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/DataSourceSummaryTabbedPane.java similarity index 54% rename from Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/DataSourceSummaryTabbedPane.java rename to Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/DataSourceSummaryTabbedPane.java index dddc4ee123..9696f4d4c4 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/DataSourceSummaryTabbedPane.java +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/DataSourceSummaryTabbedPane.java @@ -16,9 +16,13 @@ * 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.ui; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; import javax.swing.JTabbedPane; +import org.apache.commons.lang3.tuple.Pair; import org.openide.util.NbBundle.Messages; import org.sleuthkit.autopsy.casemodule.IngestJobInfoPanel; import org.sleuthkit.datamodel.DataSource; @@ -30,17 +34,24 @@ import org.sleuthkit.datamodel.DataSource; */ @Messages({ "DataSourceSummaryTabbedPane_countsTab_title=Counts", - "DataSourceSummaryTabbedPane_detailsTab_title=Details", + "DataSourceSummaryTabbedPane_detailsTab_title=Container", "DataSourceSummaryTabbedPane_userActivityTab_title=User Activity", - "DataSourceSummaryTabbedPane_ingestHistoryTab_title=Ingest History" + "DataSourceSummaryTabbedPane_ingestHistoryTab_title=Ingest History", + "DataSourceSummaryTabbedPane_recentFileTab_title=Recent Files", + "DataSourceSummaryTabbedPane_analysisTab_title=Analysis" }) public class DataSourceSummaryTabbedPane extends JTabbedPane { private static final long serialVersionUID = 1L; - private final DataSourceSummaryCountsPanel countsPanel = new DataSourceSummaryCountsPanel(); - private final DataSourceSummaryDetailsPanel detailsPanel = new DataSourceSummaryDetailsPanel(); - private final DataSourceSummaryUserActivityPanel userActivityPanel = new DataSourceSummaryUserActivityPanel(); + // A pair of the tab name and the corresponding BaseDataSourceSummaryTabs to be displayed. + private final List> tabs = new ArrayList<>(Arrays.asList( + Pair.of(Bundle.DataSourceSummaryTabbedPane_countsTab_title(), new DataSourceSummaryCountsPanel()), + Pair.of(Bundle.DataSourceSummaryTabbedPane_userActivityTab_title(), new DataSourceSummaryUserActivityPanel()), + Pair.of(Bundle.DataSourceSummaryTabbedPane_recentFileTab_title(), new RecentFilesPanel()), + Pair.of(Bundle.DataSourceSummaryTabbedPane_analysisTab_title(), new AnalysisPanel()) + )); + private final IngestJobInfoPanel ingestHistoryPanel = new IngestJobInfoPanel(); private DataSource dataSource = null; @@ -49,11 +60,22 @@ public class DataSourceSummaryTabbedPane extends JTabbedPane { * Constructs a tabbed pane showing the summary of a data source. */ public DataSourceSummaryTabbedPane() { + initComponent(); + } - addTab(Bundle.DataSourceSummaryTabbedPane_detailsTab_title(), detailsPanel); - addTab(Bundle.DataSourceSummaryTabbedPane_countsTab_title(), countsPanel); - addTab(Bundle.DataSourceSummaryTabbedPane_userActivityTab_title(), userActivityPanel); + private void initComponent() { + for (Pair tab : tabs) { + addTab(tab.getKey(), tab.getValue()); + } + + // IngestJobInfoPanel is not specifically a data source summary panel + // and is called separately for that reason. addTab(Bundle.DataSourceSummaryTabbedPane_ingestHistoryTab_title(), ingestHistoryPanel); + + // The Container tab should be last. + Pair tab = Pair.of(Bundle.DataSourceSummaryTabbedPane_detailsTab_title(), new DataSourceSummaryDetailsPanel()); + addTab(tab.getKey(), tab.getValue()); + tabs.add(tab); } /** @@ -73,9 +95,12 @@ public class DataSourceSummaryTabbedPane extends JTabbedPane { public void setDataSource(DataSource dataSource) { this.dataSource = dataSource; - detailsPanel.setDataSource(dataSource); - countsPanel.setDataSource(dataSource); - userActivityPanel.setDataSource(dataSource); + for (Pair tab : tabs) { + tab.getValue().setDataSource(dataSource); + } + + // IngestJobInfoPanel is not specifically a data source summary panel + // and is called separately for that reason. ingestHistoryPanel.setDataSource(dataSource); } } diff --git a/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/DataSourceSummaryUserActivityPanel.form b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/DataSourceSummaryUserActivityPanel.form new file mode 100644 index 0000000000..f24955084b --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/DataSourceSummaryUserActivityPanel.form @@ -0,0 +1,398 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/DataSourceSummaryUserActivityPanel.java b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/DataSourceSummaryUserActivityPanel.java new file mode 100644 index 0000000000..b4011fe4d6 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/DataSourceSummaryUserActivityPanel.java @@ -0,0 +1,417 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2020 Basis Technology Corp. + * Contact: carrier sleuthkit 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.awt.Component; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Arrays; +import java.util.Date; +import java.util.List; +import java.util.Locale; +import java.util.stream.Collectors; +import org.apache.commons.lang.StringUtils; +import org.openide.util.NbBundle.Messages; +import org.sleuthkit.autopsy.casemodule.Case; +import org.sleuthkit.autopsy.datasourcesummary.datamodel.DataSourceUserActivitySummary; +import org.sleuthkit.autopsy.datasourcesummary.datamodel.DataSourceTopProgramsSummary; +import org.sleuthkit.autopsy.datasourcesummary.datamodel.DataSourceUserActivitySummary.TopAccountResult; +import org.sleuthkit.autopsy.datasourcesummary.datamodel.DataSourceUserActivitySummary.TopDeviceAttachedResult; +import org.sleuthkit.autopsy.datasourcesummary.datamodel.DataSourceUserActivitySummary.TopWebSearchResult; +import org.sleuthkit.autopsy.datasourcesummary.datamodel.TopDomainsResult; +import org.sleuthkit.autopsy.datasourcesummary.datamodel.TopProgramsResult; +import org.sleuthkit.autopsy.datasourcesummary.uiutils.CellModelTableCellRenderer.DefaultCellModel; +import org.sleuthkit.autopsy.datasourcesummary.uiutils.DataFetchWorker; +import org.sleuthkit.autopsy.datasourcesummary.uiutils.DataFetchWorker.DataFetchComponents; +import org.sleuthkit.autopsy.datasourcesummary.uiutils.DataFetchResult; +import org.sleuthkit.autopsy.datasourcesummary.uiutils.JTablePanel; +import org.sleuthkit.autopsy.datasourcesummary.uiutils.JTablePanel.ColumnModel; +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", + "DataSourceSummaryUserActivityPanel_TopDomainsTableModel_domain_header=Domain", + "DataSourceSummaryUserActivityPanel_TopDomainsTableModel_url_header=URL", + "DataSourceSummaryUserActivityPanel_TopDomainsTableModel_lastAccess_header=Last Access", + "DataSourceSummaryUserActivityPanel_noDataExists=No communication data exists", + "DataSourceSummaryUserActivityPanel_TopWebSearchTableModel_searchString_header=Search String", + "DataSourceSummaryUserActivityPanel_TopWebSearchTableModel_dateAccessed_header=Date Accessed", + "DataSourceSummaryUserActivityPanel_TopWebSearchTableModel_translatedResult_header=Translated", + "DataSourceSummaryUserActivityPanel_TopDeviceAttachedTableModel_deviceId_header=Device Id", + "DataSourceSummaryUserActivityPanel_TopDeviceAttachedTableModel_makeModel_header=Make and Model", + "DataSourceSummaryUserActivityPanel_TopDeviceAttachedTableModel_dateAccessed_header=Last Accessed", + "DataSourceSummaryUserActivityPanel_TopAccountTableModel_accountType_header=Account Type", + "DataSourceSummaryUserActivityPanel_TopAccountTableModel_lastAccess_header=Last Accessed",}) +public class DataSourceSummaryUserActivityPanel extends BaseDataSourceSummaryPanel { + + 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 int TOP_DOMAINS_COUNT = 10; + private static final int TOP_SEARCHES_COUNT = 10; + private static final int TOP_ACCOUNTS_COUNT = 5; + private static final int TOP_DEVICES_COUNT = 10; + + /** + * Gets a string formatted date or returns empty string if the date is null. + * + * @param date The date. + * + * @return The formatted date string or empty string if the date is null. + */ + private static String getFormatted(Date date) { + return date == null ? "" : DATETIME_FORMAT.format(date); + } + + // set up recent programs table + private final JTablePanel topProgramsTable = JTablePanel.getJTablePanel(Arrays.asList( + // program name column + new ColumnModel<>( + Bundle.DataSourceSummaryUserActivityPanel_TopProgramsTableModel_name_header(), + (prog) -> { + return new DefaultCellModel(prog.getProgramName()) + .setTooltip(prog.getProgramPath()); + }, + 250), + // program folder column + new ColumnModel<>( + Bundle.DataSourceSummaryUserActivityPanel_TopProgramsTableModel_folder_header(), + (prog) -> { + return new DefaultCellModel( + getShortFolderName( + prog.getProgramPath(), + prog.getProgramName())) + .setTooltip(prog.getProgramPath()); + }, + 150), + // run count column + new ColumnModel<>( + Bundle.DataSourceSummaryUserActivityPanel_TopProgramsTableModel_count_header(), + (prog) -> { + String runTimes = prog.getRunTimes() == null ? "" : Long.toString(prog.getRunTimes()); + return new DefaultCellModel(runTimes); + }, + 80), + // last run date column + new ColumnModel<>( + Bundle.DataSourceSummaryUserActivityPanel_TopProgramsTableModel_lastrun_header(), + (prog) -> new DefaultCellModel(getFormatted(prog.getLastRun())), + 150) + )); + + // set up recent domains table + private final JTablePanel recentDomainsTable = JTablePanel.getJTablePanel(Arrays.asList( + // domain column + new ColumnModel<>( + Bundle.DataSourceSummaryUserActivityPanel_TopDomainsTableModel_domain_header(), + (recentDomain) -> new DefaultCellModel(recentDomain.getDomain()), + 250), + // url column + new ColumnModel<>( + Bundle.DataSourceSummaryUserActivityPanel_TopDomainsTableModel_url_header(), + (recentDomain) -> new DefaultCellModel(recentDomain.getUrl()), + 250), + // last accessed column + new ColumnModel<>( + Bundle.DataSourceSummaryUserActivityPanel_TopDomainsTableModel_lastAccess_header(), + (recentDomain) -> new DefaultCellModel(getFormatted(recentDomain.getLastVisit())), + 150) + )); + + // top web searches table + private final JTablePanel topWebSearchesTable = JTablePanel.getJTablePanel(Arrays.asList( + // search string column + new ColumnModel<>( + Bundle.DataSourceSummaryUserActivityPanel_TopWebSearchTableModel_searchString_header(), + (webSearch) -> new DefaultCellModel(webSearch.getSearchString()), + 250 + ), + // last accessed + new ColumnModel<>( + Bundle.DataSourceSummaryUserActivityPanel_TopWebSearchTableModel_dateAccessed_header(), + (webSearch) -> new DefaultCellModel(getFormatted(webSearch.getDateAccessed())), + 150 + ), + // translated value + new ColumnModel<>( + Bundle.DataSourceSummaryUserActivityPanel_TopWebSearchTableModel_translatedResult_header(), + (webSearch) -> new DefaultCellModel(webSearch.getTranslatedResult()), + 250 + ) + )); + + // top devices attached table + private final JTablePanel topDevicesAttachedTable = JTablePanel.getJTablePanel(Arrays.asList( + // device id column + new ColumnModel<>( + Bundle.DataSourceSummaryUserActivityPanel_TopDeviceAttachedTableModel_deviceId_header(), + (device) -> new DefaultCellModel(device.getDeviceId()), + 250 + ), + // last accessed + new ColumnModel<>( + Bundle.DataSourceSummaryUserActivityPanel_TopDeviceAttachedTableModel_dateAccessed_header(), + (device) -> new DefaultCellModel(getFormatted(device.getDateAccessed())), + 150 + ), + // make and model + new ColumnModel<>( + Bundle.DataSourceSummaryUserActivityPanel_TopDeviceAttachedTableModel_makeModel_header(), + (device) -> { + String make = StringUtils.isBlank(device.getDeviceMake()) ? "" : device.getDeviceMake().trim(); + String model = StringUtils.isBlank(device.getDeviceModel()) ? "" : device.getDeviceModel().trim(); + String makeModelString = (make.isEmpty() || model.isEmpty()) + ? make + model + : String.format("%s - %s", make, model); + return new DefaultCellModel(makeModelString); + }, + 250 + ) + )); + + // top accounts table + private final JTablePanel topAccountsTable = JTablePanel.getJTablePanel(Arrays.asList( + // account type column + new ColumnModel<>( + Bundle.DataSourceSummaryUserActivityPanel_TopAccountTableModel_accountType_header(), + (account) -> new DefaultCellModel(account.getAccountType()), + 250 + ), + // last accessed + new ColumnModel<>( + Bundle.DataSourceSummaryUserActivityPanel_TopAccountTableModel_lastAccess_header(), + (account) -> new DefaultCellModel(getFormatted(account.getLastAccess())), + 150 + ) + )); + + private final List> tables = Arrays.asList( + topProgramsTable, + recentDomainsTable, + topWebSearchesTable, + topDevicesAttachedTable, + topAccountsTable + ); + + private final List> dataFetchComponents; + private final DataSourceTopProgramsSummary topProgramsData; + + /** + * Creates a new DataSourceSummaryUserActivityPanel. + */ + public DataSourceSummaryUserActivityPanel() { + this(new DataSourceTopProgramsSummary(), new DataSourceUserActivitySummary()); + } + + /** + * Creates a new DataSourceSummaryUserActivityPanel. + * + * @param topProgramsData Class from which to obtain top programs data. + * @param userActivityData Class from which to obtain remaining user + * activity data. + */ + public DataSourceSummaryUserActivityPanel( + DataSourceTopProgramsSummary topProgramsData, + DataSourceUserActivitySummary userActivityData) { + + this.topProgramsData = topProgramsData; + + // set up data acquisition methods + this.dataFetchComponents = Arrays.asList( + // top programs query + new DataFetchComponents<>( + (dataSource) -> topProgramsData.getTopPrograms(dataSource, TOP_PROGS_COUNT), + (result) -> topProgramsTable.showDataFetchResult(result, JTablePanel.getDefaultErrorMessage(), + Bundle.DataSourceSummaryUserActivityPanel_noDataExists())), + // top domains query + new DataFetchComponents<>( + (dataSource) -> userActivityData.getRecentDomains(dataSource, TOP_DOMAINS_COUNT), + (result) -> recentDomainsTable.showDataFetchResult(result, JTablePanel.getDefaultErrorMessage(), + Bundle.DataSourceSummaryUserActivityPanel_noDataExists())), + // top web searches query + new DataFetchComponents<>( + (dataSource) -> userActivityData.getMostRecentWebSearches(dataSource, TOP_SEARCHES_COUNT), + (result) -> topWebSearchesTable.showDataFetchResult(result, JTablePanel.getDefaultErrorMessage(), + Bundle.DataSourceSummaryUserActivityPanel_noDataExists())), + // top devices query + new DataFetchComponents<>( + (dataSource) -> userActivityData.getRecentDevices(dataSource, TOP_DEVICES_COUNT), + (result) -> topDevicesAttachedTable.showDataFetchResult(result, JTablePanel.getDefaultErrorMessage(), + Bundle.DataSourceSummaryUserActivityPanel_noDataExists())), + // top accounts query + new DataFetchComponents<>( + (dataSource) -> userActivityData.getRecentAccounts(dataSource, TOP_ACCOUNTS_COUNT), + (result) -> topAccountsTable.showDataFetchResult(result, JTablePanel.getDefaultErrorMessage(), + Bundle.DataSourceSummaryUserActivityPanel_noDataExists())) + ); + + initComponents(); + } + + /** + * Queries DataSourceTopProgramsSummary instance for short folder name. + * + * @param path The path for the application. + * @param appName The application name. + * + * @return The underlying short folder name if one exists. + */ + private String getShortFolderName(String path, String appName) { + return this.topProgramsData.getShortFolderName(path, appName); + } + + @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> 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") + // //GEN-BEGIN:initComponents + private void initComponents() { + + javax.swing.JScrollPane contentScrollPane = new javax.swing.JScrollPane(); + javax.swing.JPanel contentPanel = new javax.swing.JPanel(); + javax.swing.JLabel programsRunLabel = 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(0, 2)); + javax.swing.JPanel topProgramsTablePanel = topProgramsTable; + javax.swing.Box.Filler filler3 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 20), new java.awt.Dimension(0, 20), new java.awt.Dimension(0, 20)); + javax.swing.JLabel recentDomainsLabel = new javax.swing.JLabel(); + javax.swing.Box.Filler filler2 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 2), new java.awt.Dimension(0, 2), new java.awt.Dimension(0, 2)); + javax.swing.JPanel recentDomainsTablePanel = recentDomainsTable; + javax.swing.Box.Filler filler4 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 20), new java.awt.Dimension(0, 20), new java.awt.Dimension(0, 20)); + javax.swing.JLabel topWebSearchLabel = new javax.swing.JLabel(); + javax.swing.Box.Filler filler5 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 2), new java.awt.Dimension(0, 2), new java.awt.Dimension(0, 2)); + javax.swing.JPanel topWebSearches = topWebSearchesTable; + javax.swing.Box.Filler filler6 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 20), new java.awt.Dimension(0, 20), new java.awt.Dimension(0, 20)); + javax.swing.JLabel topDevicesAttachedLabel = new javax.swing.JLabel(); + javax.swing.Box.Filler filler7 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 2), new java.awt.Dimension(0, 2), new java.awt.Dimension(0, 2)); + javax.swing.JPanel recentDevicesAttached = topDevicesAttachedTable; + javax.swing.Box.Filler filler8 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 20), new java.awt.Dimension(0, 20), new java.awt.Dimension(0, 20)); + javax.swing.JLabel recentAccountsLabel = new javax.swing.JLabel(); + javax.swing.Box.Filler filler9 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 2), new java.awt.Dimension(0, 2), new java.awt.Dimension(0, 2)); + javax.swing.JPanel topAccounts = topAccountsTable; + + setLayout(new java.awt.BorderLayout()); + + contentScrollPane.setMaximumSize(null); + contentScrollPane.setMinimumSize(null); + + contentPanel.setBorder(javax.swing.BorderFactory.createEmptyBorder(10, 10, 10, 10)); + contentPanel.setMaximumSize(new java.awt.Dimension(32767, 450)); + contentPanel.setMinimumSize(new java.awt.Dimension(10, 450)); + contentPanel.setLayout(new javax.swing.BoxLayout(contentPanel, javax.swing.BoxLayout.PAGE_AXIS)); + + programsRunLabel.setHorizontalAlignment(javax.swing.SwingConstants.LEFT); + org.openide.awt.Mnemonics.setLocalizedText(programsRunLabel, org.openide.util.NbBundle.getMessage(DataSourceSummaryUserActivityPanel.class, "DataSourceSummaryUserActivityPanel.programsRunLabel.text")); // NOI18N + programsRunLabel.setAlignmentX(Component.LEFT_ALIGNMENT); + contentPanel.add(programsRunLabel); + contentPanel.add(filler1); + + topProgramsTablePanel.setAlignmentX(0.0F); + topProgramsTablePanel.setMaximumSize(new java.awt.Dimension(32767, 106)); + topProgramsTablePanel.setMinimumSize(new java.awt.Dimension(10, 106)); + topProgramsTablePanel.setPreferredSize(new java.awt.Dimension(10, 106)); + contentPanel.add(topProgramsTablePanel); + contentPanel.add(filler3); + + recentDomainsLabel.setHorizontalAlignment(javax.swing.SwingConstants.LEFT); + org.openide.awt.Mnemonics.setLocalizedText(recentDomainsLabel, org.openide.util.NbBundle.getMessage(DataSourceSummaryUserActivityPanel.class, "DataSourceSummaryUserActivityPanel.recentDomainsLabel.text")); // NOI18N + contentPanel.add(recentDomainsLabel); + contentPanel.add(filler2); + + recentDomainsTablePanel.setAlignmentX(0.0F); + recentDomainsTablePanel.setMaximumSize(new java.awt.Dimension(32767, 106)); + recentDomainsTablePanel.setMinimumSize(new java.awt.Dimension(10, 106)); + recentDomainsTablePanel.setPreferredSize(new java.awt.Dimension(10, 106)); + contentPanel.add(recentDomainsTablePanel); + contentPanel.add(filler4); + + topWebSearchLabel.setHorizontalAlignment(javax.swing.SwingConstants.LEFT); + org.openide.awt.Mnemonics.setLocalizedText(topWebSearchLabel, org.openide.util.NbBundle.getMessage(DataSourceSummaryUserActivityPanel.class, "DataSourceSummaryUserActivityPanel.topWebSearchLabel.text")); // NOI18N + contentPanel.add(topWebSearchLabel); + contentPanel.add(filler5); + + topWebSearches.setAlignmentX(0.0F); + topWebSearches.setMaximumSize(new java.awt.Dimension(32767, 106)); + topWebSearches.setMinimumSize(new java.awt.Dimension(10, 106)); + topWebSearches.setPreferredSize(new java.awt.Dimension(10, 106)); + contentPanel.add(topWebSearches); + contentPanel.add(filler6); + + topDevicesAttachedLabel.setHorizontalAlignment(javax.swing.SwingConstants.LEFT); + org.openide.awt.Mnemonics.setLocalizedText(topDevicesAttachedLabel, org.openide.util.NbBundle.getMessage(DataSourceSummaryUserActivityPanel.class, "DataSourceSummaryUserActivityPanel.topDevicesAttachedLabel.text")); // NOI18N + contentPanel.add(topDevicesAttachedLabel); + contentPanel.add(filler7); + + recentDevicesAttached.setAlignmentX(0.0F); + recentDevicesAttached.setMaximumSize(new java.awt.Dimension(32767, 106)); + recentDevicesAttached.setMinimumSize(new java.awt.Dimension(10, 106)); + recentDevicesAttached.setPreferredSize(new java.awt.Dimension(10, 106)); + contentPanel.add(recentDevicesAttached); + contentPanel.add(filler8); + + recentAccountsLabel.setHorizontalAlignment(javax.swing.SwingConstants.LEFT); + org.openide.awt.Mnemonics.setLocalizedText(recentAccountsLabel, org.openide.util.NbBundle.getMessage(DataSourceSummaryUserActivityPanel.class, "DataSourceSummaryUserActivityPanel.recentAccountsLabel.text")); // NOI18N + contentPanel.add(recentAccountsLabel); + contentPanel.add(filler9); + + topAccounts.setAlignmentX(0.0F); + topAccounts.setMaximumSize(new java.awt.Dimension(32767, 106)); + topAccounts.setMinimumSize(new java.awt.Dimension(10, 106)); + topAccounts.setPreferredSize(new java.awt.Dimension(10, 106)); + contentPanel.add(topAccounts); + + contentScrollPane.setViewportView(contentPanel); + + add(contentScrollPane, java.awt.BorderLayout.CENTER); + }// //GEN-END:initComponents + + // Variables declaration - do not modify//GEN-BEGIN:variables + // End of variables declaration//GEN-END:variables +} diff --git a/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/FileTypePieChart.java b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/FileTypePieChart.java new file mode 100644 index 0000000000..691234cd48 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/FileTypePieChart.java @@ -0,0 +1,190 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2020 Basis Technology Corp. + * Contact: carrier sleuthkit 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.awt.BorderLayout; +import java.awt.Font; +import javax.swing.JPanel; +import org.sleuthkit.datamodel.DataSource; + +import org.jfree.chart.ChartFactory; +import org.jfree.chart.ChartPanel; +import org.jfree.chart.JFreeChart; +import org.jfree.chart.labels.PieSectionLabelGenerator; +import org.jfree.chart.labels.StandardPieSectionLabelGenerator; +import org.jfree.chart.plot.PiePlot; +import org.jfree.data.general.DefaultPieDataset; + +import java.text.DecimalFormat; +import java.util.Arrays; +import java.util.Set; +import java.util.stream.Collectors; +import javax.swing.JLabel; +import org.openide.util.NbBundle.Messages; +import org.sleuthkit.autopsy.coreutils.FileTypeUtils; +import org.sleuthkit.autopsy.datasourcesummary.datamodel.DataSourceMimeTypeSummary; +import static org.sleuthkit.autopsy.coreutils.FileTypeUtils.FileTypeCategory; + +/** + * A Pie Chart that shows file mime types in a data source. + */ +class FileTypePieChart extends JPanel { + + private static final long serialVersionUID = 1L; + + private static final Font DEFAULT_FONT = new JLabel().getFont(); + private static final Font DEFAULT_HEADER_FONT = new Font(DEFAULT_FONT.getName(), DEFAULT_FONT.getStyle(), (int) (DEFAULT_FONT.getSize() * 1.5)); + + private final DefaultPieDataset dataset = new DefaultPieDataset(); + private DataSource dataSource; + + // used for determining mime types that fall in the 'other' category + private static final Set ALL_CATEGORY_MIME_TYPES = Arrays.asList( + FileTypeCategory.IMAGE, + FileTypeCategory.VIDEO, + FileTypeCategory.AUDIO, + FileTypeCategory.DOCUMENTS, + FileTypeCategory.EXECUTABLE) + .stream() + .flatMap((cat) -> cat.getMediaTypes().stream()) + .collect(Collectors.toSet()); + + /** + * Default constructor for the pie chart. + */ + @Messages({ + "DataSourceSummaryCountsPanel.byMimeTypeLabel.text=Files by MIME Type", + "DataSourceSummaryCountsPanel.FilesByMimeTypeTableModel.audio.row=Audio", + "DataSourceSummaryCountsPanel.FilesByMimeTypeTableModel.documents.row=Documents", + "DataSourceSummaryCountsPanel.FilesByMimeTypeTableModel.executables.row=Executables", + "DataSourceSummaryCountsPanel.FilesByMimeTypeTableModel.images.row=Images", + "DataSourceSummaryCountsPanel.FilesByMimeTypeTableModel.videos.row=Videos", + "DataSourceSummaryCountsPanel_FilesByMimeTypeTableModel_other_label=Other", + "DataSourceSummaryCountsPanel_FilesByMimeTypeTableModel_notAnalyzed_label=Not Analyzed" + }) + FileTypePieChart() { + // Create chart + JFreeChart chart = ChartFactory.createPieChart( + Bundle.DataSourceSummaryCountsPanel_byMimeTypeLabel_text(), + dataset, + true, + true, + false); + + chart.setBackgroundPaint(null); + chart.getLegend().setItemFont(DEFAULT_FONT); + chart.getTitle().setFont(DEFAULT_HEADER_FONT); + + PiePlot plot = ((PiePlot) chart.getPlot()); + + //Format Label + PieSectionLabelGenerator labelGenerator = new StandardPieSectionLabelGenerator( + "{0}: {1} ({2})", new DecimalFormat("0"), new DecimalFormat("0.0%")); + + plot.setLabelGenerator(labelGenerator); + plot.setLabelFont(DEFAULT_FONT); + + plot.setBackgroundPaint(null); + plot.setOutlinePaint(null); + + // Create Panel + ChartPanel panel = new ChartPanel(chart); + this.setLayout(new BorderLayout()); + this.add(panel, BorderLayout.CENTER); + } + + /** + * The datasource currently used as the model with this pie chart. + * + * @return The datasource currently being used as the model in this pie + * chart. + */ + DataSource getDataSource() { + return dataSource; + } + + /** + * Sets datasource to visualize in the pie chart. + * + * @param dataSource The datasource to use in this pie chart. + */ + void setDataSource(DataSource dataSource) { + this.dataSource = dataSource; + this.dataset.clear(); + + if (dataSource != null) { + addIfPresent(Bundle.DataSourceSummaryCountsPanel_FilesByMimeTypeTableModel_images_row(), + this.dataSource, FileTypeCategory.IMAGE); + addIfPresent(Bundle.DataSourceSummaryCountsPanel_FilesByMimeTypeTableModel_videos_row(), + this.dataSource, FileTypeCategory.VIDEO); + addIfPresent(Bundle.DataSourceSummaryCountsPanel_FilesByMimeTypeTableModel_audio_row(), + this.dataSource, FileTypeCategory.AUDIO); + addIfPresent(Bundle.DataSourceSummaryCountsPanel_FilesByMimeTypeTableModel_documents_row(), + this.dataSource, FileTypeCategory.DOCUMENTS); + addIfPresent(Bundle.DataSourceSummaryCountsPanel_FilesByMimeTypeTableModel_executables_row(), + this.dataSource, FileTypeCategory.EXECUTABLE); + addIfPresent(Bundle.DataSourceSummaryCountsPanel_FilesByMimeTypeTableModel_other_label(), + DataSourceMimeTypeSummary.getCountOfFilesNotInMimeTypes(this.dataSource, ALL_CATEGORY_MIME_TYPES)); + addIfPresent(Bundle.DataSourceSummaryCountsPanel_FilesByMimeTypeTableModel_notAnalyzed_label(), + DataSourceMimeTypeSummary.getCountOfFilesWithNoMimeType(this.dataSource)); + } + } + + /** + * Adds count for file type category if there is a value. Uses fields + * 'dataSource' and 'dataset'. + * + * @param label The label for this pie slice. + * @param dataSource The data source. + * @param category The category for the pie slice. + */ + private void addIfPresent(String label, DataSource dataSource, FileTypeUtils.FileTypeCategory category) { + if (dataSource == null) { + return; + } + + Long count = getCount(dataSource, category); + addIfPresent(label, count); + } + + /** + * Adds count for a a label if the count is non-null and greater than 0. + * + * @param label The label. + * @param count The count. + */ + private void addIfPresent(String label, Long count) { + if (count != null && count > 0) { + this.dataset.setValue(label, count); + } + } + + /** + * 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 DataSourceMimeTypeSummary.getCountOfFilesForMimeTypes(dataSource, category.getMediaTypes()); + } +} diff --git a/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/RecentFilesPanel.form b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/RecentFilesPanel.form new file mode 100755 index 0000000000..4d1cdccecd --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/RecentFilesPanel.form @@ -0,0 +1,137 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/RecentFilesPanel.java b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/RecentFilesPanel.java new file mode 100755 index 0000000000..5910aba6e3 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/RecentFilesPanel.java @@ -0,0 +1,301 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2020 Basis Technology Corp. + * Contact: carrier sleuthkit 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.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; +import org.openide.util.NbBundle.Messages; +import org.sleuthkit.autopsy.casemodule.Case; +import org.sleuthkit.autopsy.datasourcesummary.datamodel.RecentFilesSummary; +import org.sleuthkit.autopsy.datasourcesummary.datamodel.RecentFilesSummary.RecentAttachmentDetails; +import org.sleuthkit.autopsy.datasourcesummary.datamodel.RecentFilesSummary.RecentDownloadDetails; +import org.sleuthkit.autopsy.datasourcesummary.datamodel.RecentFilesSummary.RecentFileDetails; +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.autopsy.datasourcesummary.uiutils.ListTableModel; +import org.sleuthkit.datamodel.DataSource; + +/** + * Data Source Summary recent files panel. + */ +public final class RecentFilesPanel extends BaseDataSourceSummaryPanel { + + private static final long serialVersionUID = 1L; + + private final List> tablePanelList = new ArrayList<>(); + private final List> dataFetchComponents = new ArrayList<>(); + + private final RecentFilesSummary dataHandler; + + @Messages({ + "RecentFilesPanel_col_head_date=Date", + "RecentFilePanel_col_header_domain=Domain", + "RecentFilePanel_col_header_path=Path", + "RecentFilePanel_col_header_sender=Sender" + }) + + /** + * Default constructor. + */ + public RecentFilesPanel() { + this(new RecentFilesSummary()); + } + + /** + * Creates new form RecentFilesPanel + */ + public RecentFilesPanel(RecentFilesSummary dataHandler) { + this.dataHandler = dataHandler; + + initComponents(); + initalizeTables(); + } + + @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 + tablePanelList.forEach((table) -> table.showDefaultLoadingMessage()); + + // create swing workers to run for each table + List> workers = dataFetchComponents + .stream() + .map((components) -> new DataFetchWorker<>(components, dataSource)) + .collect(Collectors.toList()); + + // submit swing workers to run + submit(workers); + } + } + + /** + * Setup the data model and columns for the panel tables. + */ + private void initalizeTables() { + initalizeOpenDocsTable(); + initalizeDownloadTable(); + initalizeAttchementsTable(); + } + + @Messages({ + "RecentFilePanel_no_open_documents=No recently open documents found." + }) + /** + * Setup the data model and columns for the recently open table. + */ + @SuppressWarnings("unchecked") + private void initalizeOpenDocsTable() { + List> list = Arrays.asList( + new ColumnModel<>(Bundle.RecentFilePanel_col_header_path(), + (prog) -> { + return new DefaultCellModel(prog.getPath()); + }, 250), + new ColumnModel<>(Bundle.RecentFilesPanel_col_head_date(), + (prog) -> { + return new DefaultCellModel(prog.getDateAsString()); + }, 80)); + + ListTableModel tableModel = JTablePanel.getTableModel(list); + + JTablePanel pane = (JTablePanel) openedDocPane; + pane.setModel(tableModel); + pane.setColumnModel(JTablePanel.getTableColumnModel(list)); + tablePanelList.add(pane); + + DataFetchWorker.DataFetchComponents> worker + = new DataFetchWorker.DataFetchComponents<>( + (dataSource) -> dataHandler.getRecentlyOpenedDocuments(dataSource, 10), + (result) -> pane.showDataFetchResult(result, JTablePanel.getDefaultErrorMessage(), + Bundle.RecentFilePanel_no_open_documents())); + + dataFetchComponents.add(worker); + } + + /** + * Setup the data model and columns for the recent download table. + */ + @SuppressWarnings("unchecked") + private void initalizeDownloadTable() { + List> list = Arrays.asList( + new ColumnModel<>(Bundle.RecentFilePanel_col_header_domain(), + (prog) -> { + return new DefaultCellModel(prog.getWebDomain()); + }, 100), + new ColumnModel<>(Bundle.RecentFilePanel_col_header_path(), + (prog) -> { + return new DefaultCellModel(prog.getPath()); + }, 250), + new ColumnModel<>(Bundle.RecentFilesPanel_col_head_date(), + (prog) -> { + return new DefaultCellModel(prog.getDateAsString()); + }, 80)); + + ListTableModel tableModel = JTablePanel.getTableModel(list); + + JTablePanel pane = (JTablePanel) downloadsPane; + pane.setModel(tableModel); + pane.setColumnModel(JTablePanel.getTableColumnModel(list)); + tablePanelList.add(pane); + + DataFetchWorker.DataFetchComponents> worker + = new DataFetchWorker.DataFetchComponents<>( + (dataSource) -> dataHandler.getRecentDownloads(dataSource, 10), + (result) -> pane.showDataFetchResult(result, JTablePanel.getDefaultErrorMessage(), + Bundle.RecentFilePanel_no_open_documents())); + + dataFetchComponents.add(worker); + } + + /** + * Setup the data model and columns for the recent attachments. + */ + @SuppressWarnings("unchecked") + private void initalizeAttchementsTable() { + List> list = Arrays.asList( + new ColumnModel<>(Bundle.RecentFilePanel_col_header_path(), + (prog) -> { + return new DefaultCellModel(prog.getPath()); + }, 250), + new ColumnModel<>(Bundle.RecentFilesPanel_col_head_date(), + (prog) -> { + return new DefaultCellModel(prog.getDateAsString()); + }, 80), + new ColumnModel<>(Bundle.RecentFilePanel_col_header_sender(), + (prog) -> { + return new DefaultCellModel(prog.getSender()); + }, 150)); + + ListTableModel tableModel = JTablePanel.getTableModel(list); + + JTablePanel pane = (JTablePanel) attachmentsPane; + pane.setModel(tableModel); + pane.setColumnModel(JTablePanel.getTableColumnModel(list)); + tablePanelList.add(pane); + + DataFetchWorker.DataFetchComponents> worker + = new DataFetchWorker.DataFetchComponents<>( + (dataSource) -> dataHandler.getRecentAttachments(dataSource, 10), + (result) -> pane.showDataFetchResult(result, JTablePanel.getDefaultErrorMessage(), + Bundle.RecentFilePanel_no_open_documents())); + + dataFetchComponents.add(worker); + } + + /** + * 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") + // //GEN-BEGIN:initComponents + private void initComponents() { + java.awt.GridBagConstraints gridBagConstraints; + + javax.swing.JScrollPane scrollPane = new javax.swing.JScrollPane(); + javax.swing.JPanel tablePanel = new javax.swing.JPanel(); + openedDocPane = new JTablePanel(); + downloadsPane = new JTablePanel(); + attachmentsPane = new JTablePanel(); + javax.swing.JLabel openDocsLabel = new javax.swing.JLabel(); + javax.swing.JLabel downloadLabel = new javax.swing.JLabel(); + javax.swing.JLabel attachmentLabel = new javax.swing.JLabel(); + + setLayout(new java.awt.BorderLayout()); + + tablePanel.setMinimumSize(new java.awt.Dimension(400, 400)); + tablePanel.setPreferredSize(new java.awt.Dimension(600, 400)); + tablePanel.setLayout(new java.awt.GridBagLayout()); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 1; + gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; + gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH; + gridBagConstraints.weightx = 1.0; + gridBagConstraints.weighty = 1.0; + gridBagConstraints.insets = new java.awt.Insets(5, 5, 0, 5); + tablePanel.add(openedDocPane, gridBagConstraints); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 3; + gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; + gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH; + gridBagConstraints.weightx = 1.0; + gridBagConstraints.weighty = 1.0; + gridBagConstraints.insets = new java.awt.Insets(5, 5, 0, 5); + tablePanel.add(downloadsPane, gridBagConstraints); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 5; + gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; + gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH; + gridBagConstraints.weightx = 1.0; + gridBagConstraints.weighty = 1.0; + gridBagConstraints.insets = new java.awt.Insets(5, 5, 10, 5); + tablePanel.add(attachmentsPane, gridBagConstraints); + + org.openide.awt.Mnemonics.setLocalizedText(openDocsLabel, org.openide.util.NbBundle.getMessage(RecentFilesPanel.class, "RecentFilesPanel.openDocsLabel.text")); // NOI18N + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 0; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH; + gridBagConstraints.insets = new java.awt.Insets(10, 5, 0, 5); + tablePanel.add(openDocsLabel, gridBagConstraints); + + org.openide.awt.Mnemonics.setLocalizedText(downloadLabel, org.openide.util.NbBundle.getMessage(RecentFilesPanel.class, "RecentFilesPanel.downloadLabel.text")); // NOI18N + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 2; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.insets = new java.awt.Insets(15, 5, 0, 5); + tablePanel.add(downloadLabel, gridBagConstraints); + + org.openide.awt.Mnemonics.setLocalizedText(attachmentLabel, org.openide.util.NbBundle.getMessage(RecentFilesPanel.class, "RecentFilesPanel.attachmentLabel.text")); // NOI18N + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 4; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH; + gridBagConstraints.insets = new java.awt.Insets(15, 5, 0, 5); + tablePanel.add(attachmentLabel, gridBagConstraints); + + scrollPane.setViewportView(tablePanel); + + add(scrollPane, java.awt.BorderLayout.CENTER); + }// //GEN-END:initComponents + + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JPanel attachmentsPane; + private javax.swing.JPanel downloadsPane; + private javax.swing.JPanel openedDocPane; + // End of variables declaration//GEN-END:variables + +} diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/ViewSummaryInformationAction.java b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/ViewSummaryInformationAction.java similarity index 95% rename from Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/ViewSummaryInformationAction.java rename to Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/ViewSummaryInformationAction.java index babe2197a1..c62cb8c214 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/ViewSummaryInformationAction.java +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/ViewSummaryInformationAction.java @@ -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.ui; import java.awt.Frame; import java.awt.event.ActionEvent; @@ -24,6 +24,7 @@ import javax.swing.AbstractAction; import javax.swing.SwingUtilities; import org.openide.util.NbBundle.Messages; import org.openide.windows.WindowManager; +import org.sleuthkit.autopsy.datasourcesummary.ui.Bundle; /** * ViewSummaryInformationAction action for opening a Data Sources Summary Dialog diff --git a/Core/src/org/sleuthkit/autopsy/datasourcesummary/uiutils/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/datasourcesummary/uiutils/Bundle.properties-MERGED new file mode 100644 index 0000000000..332a884f05 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/uiutils/Bundle.properties-MERGED @@ -0,0 +1,3 @@ +JTablePanel_errorMessage_defaultText=There was an error loading results. +JTablePanel_loadingMessage_defaultText=Loading results... +JTablePanel_noDataExists_defaultText=No data exists. diff --git a/Core/src/org/sleuthkit/autopsy/datasourcesummary/uiutils/CellModelTableCellRenderer.java b/Core/src/org/sleuthkit/autopsy/datasourcesummary/uiutils/CellModelTableCellRenderer.java new file mode 100644 index 0000000000..7131dff6c2 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/uiutils/CellModelTableCellRenderer.java @@ -0,0 +1,234 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2020 Basis Technology Corp. + * Contact: carrier sleuthkit 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.uiutils; + +import java.awt.Component; +import java.awt.Insets; +import javax.swing.BorderFactory; +import javax.swing.JLabel; +import javax.swing.JTable; +import javax.swing.border.Border; +import javax.swing.table.DefaultTableCellRenderer; +import org.apache.commons.lang3.StringUtils; + +/** + * A Table cell renderer that renders a cell of a table based off of the + * CellModel interface provided within this class. + */ +public class CellModelTableCellRenderer extends DefaultTableCellRenderer { + + private static final long serialVersionUID = 1L; + + /** + * Describes the horizontal alignment. + */ + public enum HorizontalAlign { + LEFT(JLabel.LEFT), + CENTER(JLabel.CENTER), + RIGHT(JLabel.RIGHT); + + private final int jlabelAlignment; + + /** + * Constructor for a HorizontalAlign enum. + * + * @param jlabelAlignment The corresponding JLabel horizontal alignment + * number. + */ + HorizontalAlign(int jlabelAlignment) { + this.jlabelAlignment = jlabelAlignment; + } + + /** + * @return The corresponding JLabel horizontal alignment (i.e. + * JLabel.LEFT). + */ + int getJLabelAlignment() { + return this.jlabelAlignment; + } + } + + /** + * Basic interface for a cell model. + */ + public interface CellModel { + + /** + * @return The text to be shown in the cell. + */ + String getText(); + + /** + * @return The tooltip (if any) to be displayed in the cell. + */ + String getTooltip(); + + /** + * @return The horizontal alignment for the text in the cell. + */ + HorizontalAlign getHorizontalAlignment(); + + /** + * @return The insets for the cell text. + */ + Insets getInsets(); + } + + /** + * The default cell model. + */ + public static class DefaultCellModel implements CellModel { + + private final String text; + private String tooltip; + private HorizontalAlign horizontalAlignment; + private Insets insets; + + /** + * Main constructor. + * + * @param text The text to be displayed in the cell. + */ + public DefaultCellModel(String text) { + this.text = text; + this.tooltip = text; + } + + @Override + public String getText() { + return text; + } + + @Override + public String getTooltip() { + return tooltip; + } + + /** + * Sets the tooltip for this cell model. + * + * @param tooltip The tooltip for the cell model. + * + * @return As a utility, returns this. + */ + public DefaultCellModel setTooltip(String tooltip) { + this.tooltip = tooltip; + return this; + } + + @Override + public HorizontalAlign getHorizontalAlignment() { + return horizontalAlignment; + } + + /** + * Sets the horizontal alignment for this cell model. + * + * @param alignment The horizontal alignment for the cell model. + * + * @return As a utility, returns this. + */ + public DefaultCellModel setHorizontalAlignment(HorizontalAlign alignment) { + this.horizontalAlignment = alignment; + return this; + } + + @Override + public Insets getInsets() { + return insets; + } + + /** + * Sets the insets for the text within the cell + * + * @param insets The insets. + * + * @return As a utility, returns this. + */ + public DefaultCellModel setInsets(Insets insets) { + this.insets = insets; + return this; + } + + @Override + public String toString() { + return getText(); + } + } + + private static final int DEFAULT_ALIGNMENT = JLabel.LEFT; + private static final Border DEFAULT_BORDER = BorderFactory.createEmptyBorder(1, 5, 1, 5); + + @Override + 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 CellModel) { + return getTableCellRendererComponent(c, (CellModel) value); + } else { + return c; + } + + } + + /** + * Customizes the jlabel to match the column model and cell model provided. + * + * @param defaultCell The cell to customize that will be displayed in the + * jtable. + * @param cellModel The cell model for this cell. + * + * @return The provided defaultCell. + */ + protected Component getTableCellRendererComponent(JLabel defaultCell, CellModel cellModel) { + // sets the text for the cell or null if not present. + String text = cellModel.getText(); + if (StringUtils.isNotBlank(text)) { + defaultCell.setText(text); + } else { + defaultCell.setText(null); + } + + // sets the tooltip for the cell if present. + String tooltip = cellModel.getTooltip(); + if (StringUtils.isNotBlank(tooltip)) { + defaultCell.setToolTipText(tooltip); + } else { + defaultCell.setToolTipText(null); + } + + // sets the padding for cell text within the cell. + Insets insets = cellModel.getInsets(); + if (insets != null) { + defaultCell.setBorder(BorderFactory.createEmptyBorder(insets.top, insets.left, insets.bottom, insets.right)); + } else { + defaultCell.setBorder(DEFAULT_BORDER); + } + + // sets the JLabel alignment (left, center, right) or default alignment + // if no alignment is specified + int alignment = (cellModel.getHorizontalAlignment() == null) + ? DEFAULT_ALIGNMENT + : cellModel.getHorizontalAlignment().getJLabelAlignment(); + defaultCell.setHorizontalAlignment(alignment); + + return defaultCell; + } +} diff --git a/Core/src/org/sleuthkit/autopsy/datasourcesummary/uiutils/DataFetchResult.java b/Core/src/org/sleuthkit/autopsy/datasourcesummary/uiutils/DataFetchResult.java new file mode 100644 index 0000000000..93cc24f5fe --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/uiutils/DataFetchResult.java @@ -0,0 +1,93 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2020 Basis Technology Corp. + * Contact: carrier sleuthkit 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.uiutils; + +/** + * The result of a loading process. + */ +public final class DataFetchResult { + + /** + * The type of result. + */ + public enum ResultType { + SUCCESS, ERROR + } + + /** + * Creates a DataFetchResult of loaded data including the data. + * + * @param data The data. + * + * @return The loaded data result. + */ + public static DataFetchResult getSuccessResult(R data) { + return new DataFetchResult<>(ResultType.SUCCESS, data, null); + } + + /** + * Returns an error result. + * + * @param e The exception (if any) present with the error. + * + * @return The error result. + */ + public static DataFetchResult getErrorResult(Throwable e) { + return new DataFetchResult<>(ResultType.ERROR, null, e); + } + + private final ResultType state; + private final R data; + private final Throwable exception; + + /** + * Main constructor for the DataLoadingResult. + * + * @param state The state of the result. + * @param data If the result is SUCCESS, the data related to this + * result. + * @param exception If the result is ERROR, the related exception. + */ + private DataFetchResult(ResultType state, R data, Throwable exception) { + this.state = state; + this.data = data; + this.exception = exception; + } + + /** + * @return The current loading state. + */ + public ResultType getResultType() { + return state; + } + + /** + * @return The data if the state is SUCCESS. + */ + public R getData() { + return data; + } + + /** + * @return The exception if the state is ERROR. + */ + public Throwable getException() { + return exception; + } +} diff --git a/Core/src/org/sleuthkit/autopsy/datasourcesummary/uiutils/DataFetchWorker.java b/Core/src/org/sleuthkit/autopsy/datasourcesummary/uiutils/DataFetchWorker.java new file mode 100644 index 0000000000..89f11f544c --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/uiutils/DataFetchWorker.java @@ -0,0 +1,152 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2020 Basis Technology Corp. + * Contact: carrier sleuthkit 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.uiutils; + +import java.util.concurrent.ExecutionException; +import java.util.function.Consumer; +import java.util.logging.Level; +import javax.swing.SwingWorker; +import org.sleuthkit.autopsy.coreutils.Logger; + +/** + * A Swing worker that accepts an argument of a data fetcher and a result + * handler. If the data fetcher throws an InterruptedException, it is treated as + * a cancellation and not passed to the result handler. + */ +public class DataFetchWorker extends SwingWorker { + + /** + * Holds the functions necessary for a DataFetchWorker. Includes the fetcher + * and result handler. The args are not included since they are likely + * dynamic. + */ + public static class DataFetchComponents { + + private final DataFetcher fetcher; + private final Consumer> resultHandler; + + /** + * Main constructor. + * + * @param fetcher The fetcher to be used as an argument for the + * DataFetchWorker. + * @param resultHandler The result handler to be used as an argument for + * the DataFetchWorker. + */ + public DataFetchComponents(DataFetcher fetcher, Consumer> resultHandler) { + this.fetcher = fetcher; + this.resultHandler = resultHandler; + } + + /** + * @return The function that fetches the data. + */ + public DataFetcher getFetcher() { + return fetcher; + } + + /** + * @return When those results are received, this function handles + * presenting the results in the UI. + */ + public Consumer> getResultHandler() { + return resultHandler; + } + } + + private static final Logger logger = Logger.getLogger(DataFetchWorker.class.getName()); + + private final A args; + private final DataFetcher processor; + private final Consumer> resultHandler; + + /** + * Main constructor for this swing worker. + * + * @param components Accepts a components arg which provides a data + * processor and a results consumer. + * @param args The argument to be provided to the data processor. + */ + public DataFetchWorker(DataFetchComponents components, A args) { + this(components.getFetcher(), components.getResultHandler(), args); + } + + /** + * Main constructor for this swing worker. + * + * @param processor The function that will do the fetching of the data + * provided the given args. InterruptedException's are + * treated as cancellations and are not passed to the + * result handler. + * @param resultHandler The ui function that will handle the result of the + * data processing. + * @param args The args provided to the data processor. + */ + public DataFetchWorker( + DataFetcher processor, + Consumer> resultHandler, + A args) { + + this.args = args; + this.processor = processor; + this.resultHandler = resultHandler; + } + + @Override + protected R doInBackground() throws Exception { + return processor.runQuery(args); + } + + @Override + protected void done() { + // if cancelled, simply return + if (Thread.interrupted() || isCancelled()) { + return; + } + + R result = null; + try { + result = get(); + } catch (InterruptedException ignored) { + // if cancelled, simply return + return; + } catch (ExecutionException ex) { + Throwable inner = ex.getCause(); + // if cancelled during operation, simply return + if (inner instanceof InterruptedException) { + return; + } + + // otherwise, there is an error to log + logger.log(Level.WARNING, "There was an error while fetching results.", ex); + + // and pass the result to the client + resultHandler.accept(DataFetchResult.getErrorResult(inner)); + return; + } + + // if cancelled, simply return + if (Thread.interrupted() || isCancelled()) { + return; + } + + // if the data is loaded, send the data to the consumer. + resultHandler.accept(DataFetchResult.getSuccessResult(result)); + } +} diff --git a/Core/src/org/sleuthkit/autopsy/datasourcesummary/uiutils/DataFetcher.java b/Core/src/org/sleuthkit/autopsy/datasourcesummary/uiutils/DataFetcher.java new file mode 100644 index 0000000000..6eabe79634 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/uiutils/DataFetcher.java @@ -0,0 +1,43 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2020 Basis Technology Corp. + * Contact: carrier sleuthkit 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.uiutils; + +/** + * A function that accepts input of type I and outputs type O. This function is + * meant to be utilized with DataFetchWorker and can therefore, throw an + * interrupted exception if the processing is cancelled or an Exception of on + * another type in the event that the fetching encountered an error. + */ +@FunctionalInterface +public interface DataFetcher { + + /** + * A function that accepts an input argument and outputs a result. Since it + * is meant to be used with the DataFetchWorker, it may throw an interrupted + * exception if the thread has been interrupted. It throws another type of + * exception if there is an error during fetching. + * + * @param input The input argument. + * + * @return The output result. + * + * @throws Exception + */ + O runQuery(I input) throws Exception; +} diff --git a/Core/src/org/sleuthkit/autopsy/datasourcesummary/uiutils/DefaultListTableModel.java b/Core/src/org/sleuthkit/autopsy/datasourcesummary/uiutils/DefaultListTableModel.java new file mode 100644 index 0000000000..ed472230c2 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/uiutils/DefaultListTableModel.java @@ -0,0 +1,81 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2020 Basis Technology Corp. + * Contact: carrier sleuthkit 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.uiutils; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.function.Function; +import javax.swing.table.AbstractTableModel; + +/** + * A TableModel for a JTable designed to show a list of data where each item in + * the list represents a row. + */ +public class DefaultListTableModel extends AbstractTableModel implements ListTableModel { + + private static final long serialVersionUID = 1L; + private final List> columns; + private List dataRows = Collections.emptyList(); + + /** + * Main constructor. + * + * @param columns A list of functions where the index of each function + * represents the data to be displayed at each column index. + * The data displayed at row 'r' and column 'c' will be the + * result of columns.get(c).apply(dataRows.get(r)). + */ + public DefaultListTableModel(List> columns) { + this.columns = columns; + } + + @Override + public List getDataRows() { + return dataRows; + } + + @Override + public void setDataRows(List dataRows) { + this.dataRows = dataRows == null ? Collections.emptyList() : new ArrayList<>(dataRows); + super.fireTableDataChanged(); + } + + @Override + public int getRowCount() { + return dataRows.size(); + } + + @Override + public int getColumnCount() { + return columns.size(); + } + + @Override + public Object getValueAt(int rowIndex, int columnIndex) { + // if index requested is null, return null + if (rowIndex < 0 || rowIndex >= dataRows.size() || columnIndex < 0 || columnIndex >= columns.size()) { + return null; + } + + // otherwise, get the corresponding row and use the corresponding + // column function to get the value + return columns.get(columnIndex).apply(dataRows.get(rowIndex)); + } +} diff --git a/Core/src/org/sleuthkit/autopsy/datasourcesummary/uiutils/JTablePanel.java b/Core/src/org/sleuthkit/autopsy/datasourcesummary/uiutils/JTablePanel.java new file mode 100644 index 0000000000..fe164db8df --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/uiutils/JTablePanel.java @@ -0,0 +1,453 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2020 Basis Technology Corp. + * Contact: carrier sleuthkit 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.uiutils; + +import java.awt.BorderLayout; +import java.awt.Graphics; +import java.util.Collections; +import java.util.List; +import java.util.function.Function; +import java.util.logging.Level; +import java.util.stream.Collectors; +import javax.swing.JComponent; +import javax.swing.JLabel; +import javax.swing.JLayer; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTable; +import javax.swing.plaf.LayerUI; +import javax.swing.table.DefaultTableColumnModel; +import javax.swing.table.TableColumn; +import javax.swing.table.TableColumnModel; +import org.openide.util.NbBundle.Messages; +import org.sleuthkit.autopsy.coreutils.Logger; +import org.sleuthkit.autopsy.datasourcesummary.uiutils.CellModelTableCellRenderer.CellModel; + +/** + * A table that displays a list of items and also can display messages for + * loading, load error, and not loaded. + */ +@Messages({ + "JTablePanel_loadingMessage_defaultText=Loading results...", + "JTablePanel_errorMessage_defaultText=There was an error loading results.", + "JTablePanel_noDataExists_defaultText=No data exists.",}) +public class JTablePanel extends JPanel { + + /** + * JTables don't allow displaying messages. So this LayerUI is used to + * display the contents of a child JLabel. Inspired by TableWaitLayerTest + * (Animating a Busy Indicator): + * https://docs.oracle.com/javase/tutorial/uiswing/misc/jlayer.html. + */ + private static class Overlay extends LayerUI { + + private static final long serialVersionUID = 1L; + + private final JLabel label; + private boolean visible; + + /** + * Main constructor for the Overlay. + */ + Overlay() { + label = new JLabel(); + label.setHorizontalAlignment(JLabel.CENTER); + label.setVerticalAlignment(JLabel.CENTER); + label.setOpaque(false); + + } + + /** + * @return Whether or not this message overlay should be visible. + */ + boolean isVisible() { + return visible; + } + + /** + * Sets this layer visible when painted. In order to be shown in UI, + * this component needs to be repainted. + * + * @param visible Whether or not it is visible. + */ + void setVisible(boolean visible) { + this.visible = visible; + } + + /** + * Sets the message to be displayed in the child jlabel. + * + * @param message The message to be displayed. + */ + void setMessage(String message) { + label.setText(String.format("
%s
", + message == null ? "" : message)); + } + + @Override + public void paint(Graphics g, JComponent c) { + // Paint the underlying view. + super.paint(g, c); + + if (!visible) { + return; + } + + int w = c.getWidth(); + int h = c.getHeight(); + + // paint the jlabel if visible. + label.setBounds(0, 0, w, h); + label.paint(g); + } + } + + /** + * Describes aspects of a column which can be used with getTableModel or + * getJTablePanel. 'T' represents the object that will represent rows in the + * table. + */ + public static class ColumnModel { + + private final String headerTitle; + private final Function cellRenderer; + private final Integer width; + + /** + * Constructor for a DataResultColumnModel. + * + * @param headerTitle The title for the column. + * @param cellRenderer The method that generates a CellModel for the + * column based on the data. + */ + public ColumnModel(String headerTitle, Function cellRenderer) { + this(headerTitle, cellRenderer, null); + } + + /** + * Constructor for a DataResultColumnModel. + * + * @param headerTitle The title for the column. + * @param cellRenderer The method that generates a CellModel for the + * column based on the data. + * @param width The preferred width of the column. + */ + public ColumnModel(String headerTitle, Function cellRenderer, Integer width) { + this.headerTitle = headerTitle; + this.cellRenderer = cellRenderer; + this.width = width; + } + + /** + * @return The title for the column. + */ + public String getHeaderTitle() { + return headerTitle; + } + + /** + * @return The method that generates a CellModel for the column based on + * the data. + */ + public Function getCellRenderer() { + return cellRenderer; + } + + /** + * @return The preferred width of the column (can be null). + */ + public Integer getWidth() { + return width; + } + } + + private static final long serialVersionUID = 1L; + + private static final Logger logger = Logger.getLogger(JTablePanel.class.getName()); + + private static final String DEFAULT_LOADING_MESSAGE = Bundle.JTablePanel_loadingMessage_defaultText(); + private static final String DEFAULT_ERROR_MESSAGE = Bundle.JTablePanel_errorMessage_defaultText(); + private static final String DEFAULT_NO_RESULTS_MESSAGE = Bundle.JTablePanel_noDataExists_defaultText(); + + private static final CellModelTableCellRenderer DEFAULT_CELL_RENDERER = new CellModelTableCellRenderer(); + + /** + * Generates a TableColumnModel based on the column definitions. + * + * @param columns The column definitions. + * + * @return The corresponding TableColumnModel to be used with a JTable. + */ + public static TableColumnModel getTableColumnModel(List> columns) { + TableColumnModel tableModel = new DefaultTableColumnModel(); + + for (int i = 0; i < columns.size(); i++) { + TableColumn col = new TableColumn(i); + ColumnModel model = columns.get(i); + // if a preferred width is specified in the column definition, + // set the underlying TableColumn preferred width. + if (model.getWidth() != null && model.getWidth() >= 0) { + col.setPreferredWidth(model.getWidth()); + } + + // set the title + col.setHeaderValue(model.getHeaderTitle()); + + // use the cell model renderer in this instance + col.setCellRenderer(DEFAULT_CELL_RENDERER); + + tableModel.addColumn(col); + } + + return tableModel; + } + + /** + * Generates a ListTableModel based on the column definitions provided where + * 'T' is the object representing each row. + * + * @param columns The column definitions. + * + * @return The corresponding ListTableModel. + */ + public static ListTableModel getTableModel(List> columns) { + List> columnRenderers = columns.stream() + .map((colModel) -> colModel.getCellRenderer()) + .collect(Collectors.toList()); + + return new DefaultListTableModel<>(columnRenderers); + } + + /** + * Generates a JTablePanel corresponding to the provided column definitions + * where 'T' is the object representing each row. + * + * @param columns The column definitions. + * + * @return The corresponding JTablePanel. + */ + public static JTablePanel getJTablePanel(List> columns) { + ListTableModel tableModel = getTableModel(columns); + JTablePanel resultTable = new JTablePanel<>(tableModel); + return resultTable.setColumnModel(getTableColumnModel(columns)); + } + + /** + * @return The default error message. + */ + public static String getDefaultErrorMessage() { + return DEFAULT_ERROR_MESSAGE; + } + + /** + * @return The default message for no results. + */ + public static String getDefaultNoResultsMessage() { + return DEFAULT_NO_RESULTS_MESSAGE; + } + + private JScrollPane tableScrollPane; + private Overlay overlayLayer; + private ListTableModel tableModel; + private JTable table; + + /** + * Panel constructor. + * + * @param tableModel The model to use for the table. + */ + public JTablePanel(ListTableModel tableModel) { + this(); + setModel(tableModel); + } + + /** + * Default constructor. + */ + public JTablePanel() { + initComponents(); + } + + /** + * Set the table model. This method must be called prior to calling + * setResultList. + * + * @param tableModel + */ + public final void setModel(ListTableModel tableModel) { + if (tableModel == null) { + throw new IllegalArgumentException("Null table model passed to setModel"); + } + + this.tableModel = tableModel; + table.setModel(tableModel); + } + + /** + * @return The underlying JTable's column model. + */ + public TableColumnModel getColumnModel() { + return this.table.getColumnModel(); + } + + /** + * Sets the underlying JTable's column model. + * + * @param columnModel The table column model to use with the JTable. + * + * @return As a utility, returns this. + */ + public JTablePanel setColumnModel(TableColumnModel columnModel) { + this.table.setColumnModel(columnModel); + return this; + } + + /** + * Sets the data to be shown in the JTable. Repaint is not handled in this + * method and should be handled separately. + * + * @param data The list of data objects to be shown. + */ + private void setResultList(List data) { + + if(tableModel == null) { + throw new IllegalStateException("ListTableModel has not be initialized"); + } + + // set the list of data to be shown as either the data or an empty list + // on null. + List dataToSet = (data == null) ? Collections.emptyList() : data; + + // since the data is being reset, scroll to the top. + tableScrollPane.getVerticalScrollBar().setValue(0); + + // set the underlying table model's data. + this.tableModel.setDataRows(dataToSet); + } + + /** + * Sets the message and visibility of the overlay. Repaint is not handled in + * this method and should be handled separately. + * + * @param visible The visibility of the overlay. + * @param message The message in the overlay. + */ + private void setOverlay(boolean visible, String message) { + this.overlayLayer.setVisible(visible); + this.overlayLayer.setMessage(message); + } + + /** + * Clears the results from the underlying JTable and shows the provided + * message. + * + * @param message The message to be shown. + */ + public synchronized void showMessage(String message) { + setResultList(null); + setOverlay(true, message); + repaint(); + } + + /** + * Shows a default loading message on the table. This will clear any results + * in the table. + */ + public void showDefaultLoadingMessage() { + showMessage(DEFAULT_LOADING_MESSAGE); + } + + /** + * Shows the list as rows of data in the table. If overlay message will be + * cleared if present. + * + * @param data The data to be shown where each item represents a row of + * data. + */ + public synchronized void showResults(List data) { + setOverlay(false, null); + setResultList(data); + repaint(); + } + + /** + * Shows the data in a DataFetchResult. If there was an error during the + * operation, the errorMessage will be displayed. If the operation completed + * successfully and no data is present, noResultsMessage will be shown. + * Otherwise, the data will be shown as rows in the table. + * + * @param result The DataFetchResult. + * @param errorMessage The error message to be shown in the event of an + * error. + * @param noResultsMessage The message to be shown if there are no results + * but the operation completed successfully. + */ + public void showDataFetchResult(DataFetchResult> result, String errorMessage, String noResultsMessage) { + if (result == null) { + logger.log(Level.SEVERE, "Null data processor result received."); + return; + } + + switch (result.getResultType()) { + case SUCCESS: + if (result.getData() == null || result.getData().isEmpty()) { + showMessage(noResultsMessage); + } else { + showResults(result.getData()); + } + break; + case ERROR: + // if there is an error, log accordingly, set result list to + // empty and display error message + logger.log(Level.WARNING, "An exception was caused while results were loaded.", result.getException()); + showMessage(errorMessage); + break; + default: + // an unknown loading state was specified. log accordingly. + logger.log(Level.SEVERE, "No known loading state was found in result."); + break; + } + } + + /** + * Shows the data in a DataFetchResult. If there was an error during the + * operation, the DEFAULT_ERROR_MESSAGE will be displayed. If the operation + * completed successfully and no data is present, DEFAULT_NO_RESULTS_MESSAGE + * will be shown. Otherwise, the data will be shown as rows in the table. + * + * @param result The DataFetchResult. + */ + public void showDataFetchResult(DataFetchResult> result) { + showDataFetchResult(result, DEFAULT_ERROR_MESSAGE, DEFAULT_NO_RESULTS_MESSAGE); + } + + /** + * Initialize the gui components. + */ + private void initComponents() { + table = new JTable(); + table.getTableHeader().setReorderingAllowed(false); + + overlayLayer = new Overlay(); + tableScrollPane = new JScrollPane(table); + JLayer dualLayer = new JLayer<>(tableScrollPane, overlayLayer); + setLayout(new BorderLayout()); + add(dualLayer, BorderLayout.CENTER); + } +} diff --git a/Core/src/org/sleuthkit/autopsy/datasourcesummary/uiutils/ListTableModel.java b/Core/src/org/sleuthkit/autopsy/datasourcesummary/uiutils/ListTableModel.java new file mode 100644 index 0000000000..bf5f1d1552 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/uiutils/ListTableModel.java @@ -0,0 +1,42 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2020 Basis Technology Corp. + * Contact: carrier sleuthkit 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.uiutils; + +import java.util.List; +import javax.swing.table.TableModel; + +/** + * An interface to be used with the JTablePanel that specifies a TableModel to + * be used with the underlying JTable based on a list of object type T. + */ +public interface ListTableModel extends TableModel { + + /** + * @return The list of objects supporting the rows to be displayed in the + * table. + */ + List getDataRows(); + + /** + * Sets the list of objects to be displayed in the table. + * + * @param dataRows The datarows to be displayed. + */ + void setDataRows(List dataRows); +} diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/NonEditableTableModel.java b/Core/src/org/sleuthkit/autopsy/datasourcesummary/uiutils/NonEditableTableModel.java similarity index 74% rename from Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/NonEditableTableModel.java rename to Core/src/org/sleuthkit/autopsy/datasourcesummary/uiutils/NonEditableTableModel.java index 8ed965e2ab..0461e514d8 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/NonEditableTableModel.java +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/uiutils/NonEditableTableModel.java @@ -16,17 +16,24 @@ * 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.uiutils; import javax.swing.table.DefaultTableModel; /** * A Table model where cells are not editable. */ -class NonEditableTableModel extends DefaultTableModel { +public class NonEditableTableModel extends DefaultTableModel { + private static final long serialVersionUID = 1L; - - NonEditableTableModel(Object[][] data, Object[] columnNames) { + + /** + * Main constructor. + * + * @param data The data to be displayed. + * @param columnNames The column names. + */ + public NonEditableTableModel(Object[][] data, Object[] columnNames) { super(data, columnNames); } diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/RightAlignedTableCellRenderer.java b/Core/src/org/sleuthkit/autopsy/datasourcesummary/uiutils/RightAlignedTableCellRenderer.java similarity index 94% rename from Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/RightAlignedTableCellRenderer.java rename to Core/src/org/sleuthkit/autopsy/datasourcesummary/uiutils/RightAlignedTableCellRenderer.java index 12f111bba2..6869ceea11 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/datasourcesummary/RightAlignedTableCellRenderer.java +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/uiutils/RightAlignedTableCellRenderer.java @@ -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.uiutils; import java.awt.Component; import java.lang.reflect.InvocationTargetException; @@ -31,7 +31,7 @@ import org.sleuthkit.autopsy.guiutils.GrayableCellRenderer; * cell contains a NodeProperty the value of that NodeProperty sets text to * empty string if null. */ -final class RightAlignedTableCellRenderer extends GrayableCellRenderer { +public class RightAlignedTableCellRenderer extends GrayableCellRenderer { private static final long serialVersionUID = 1L; diff --git a/Core/src/org/sleuthkit/autopsy/datasourcesummary/uiutils/SwingWorkerSequentialExecutor.java b/Core/src/org/sleuthkit/autopsy/datasourcesummary/uiutils/SwingWorkerSequentialExecutor.java new file mode 100644 index 0000000000..54abdb0ad9 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/uiutils/SwingWorkerSequentialExecutor.java @@ -0,0 +1,74 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2020 Basis Technology Corp. + * Contact: carrier sleuthkit 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.uiutils; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.stream.Collectors; +import javax.swing.SwingWorker; + +/** + * Runs a list of swing workers in sequential order. Also, provides the ability + * to reset or cancel a run. + * + * Based on: + * https://stackoverflow.com/questions/31580805/java-swingworker-one-after-another-and-update-gui + */ +public class SwingWorkerSequentialExecutor { + + private final ExecutorService executorService = Executors.newFixedThreadPool(1); + private List> workers = Collections.emptyList(); + private List> futures = Collections.emptyList(); + + /** + * Cancels currently running operations and starts running the new list of + * swing workers. + * + * @param submittedWorkers The list of submitted swing workers. + */ + public synchronized void submit(List> submittedWorkers) { + // cancel currently running operations + cancelRunning(); + + // if no workers, there is nothing to run + if (submittedWorkers == null) { + return; + } + + this.workers = new ArrayList<>(submittedWorkers); + + // start running the workers and capture the futures if there is a need to cancel them. + this.futures = this.workers.stream() + .map((w) -> executorService.submit(w)) + .collect(Collectors.toList()); + } + + /** + * Cancels currently running items. + */ + public synchronized void cancelRunning() { + futures.forEach((f) -> f.cancel(true)); + workers = Collections.emptyList(); + futures = Collections.emptyList(); + } +} diff --git a/Core/src/org/sleuthkit/autopsy/directorytree/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/directorytree/Bundle_ja.properties index 335d00982e..cf6128e8ed 100644 --- a/Core/src/org/sleuthkit/autopsy/directorytree/Bundle_ja.properties +++ b/Core/src/org/sleuthkit/autopsy/directorytree/Bundle_ja.properties @@ -1,171 +1,166 @@ +#Tue Aug 18 18:09:21 UTC 2020 +AddExternalViewerRuleDialog.cancelButton.title=\u53d6\u308a\u6d88\u3057 +AddExternalViewerRuleDialog.saveButton.title=\u4fdd\u5b58 +AddExternalViewerRuleDialog.title=\u5916\u90e8\u30d3\u30e5\u30fc\u30ef\u30fc\u30eb\u30fc\u30eb +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= CSVWriter.done.notifyMsg.error=CSV \u30d5\u30a1\u30a4\u30eb\u3078\u306e\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -# {0} - \u51fa\u529b\u30d5\u30a1\u30a4\u30eb CSVWriter.done.notifyMsg.success={0} \u306b\u66f8\u304d\u8fbc\u307f\u307e\u3057\u305f CSVWriter.progress.cancelling=\u53d6\u308a\u6d88\u3057\u4e2d\u3067\u3059 CSVWriter.progress.extracting=CSV \u30d5\u30a1\u30a4\u30eb\u306b\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u4e2d\u3067\u3059 CTL_DirectoryTreeTopComponent=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u30d5\u30a1\u30a4\u30eb +DataResultFilterNode.action.openInExtViewer.text=\u5916\u90e8\u30d3\u30e5\u30fc\u30ef\u30fc\u3067\u958b\u304f Ctrl+E +DataResultFilterNode.action.searchFilesSameMd5.text=\u540c\u3058MD5\u30cf\u30c3\u30b7\u30e5\u3067\u30d5\u30a1\u30a4\u30eb\u3092\u691c\u7d22 +DataResultFilterNode.action.viewFileInDir.text=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u5185\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u8868\u793a +DataResultFilterNode.action.viewInDir.text=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u3067\u8868\u793a +DataResultFilterNode.action.viewInNewWin.text=\u65b0\u3057\u3044\u30a6\u30a3\u30f3\u30c9\u30a6\u3067\u8868\u793a +DataResultFilterNode.action.viewSrcFileInDir.text=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u5185\u306e\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u3092\u8868\u793a DataResultFilterNode.viewSourceArtifact.text=\u30bd\u30fc\u30b9\u7d50\u679c\u3092\u8868\u793a -# {0} - dataSourceCount +DirectoryTreeFilterNode.action.collapseAll.text=\u3059\u3079\u3066\u3092\u6298\u308a\u305f\u305f\u3080 +DirectoryTreeFilterNode.action.openFileSrcByAttr.text=\u5c5e\u6027\u5225\u306b\u30d5\u30a1\u30a4\u30eb\u691c\u7d22\u3092\u958b\u304f +DirectoryTreeFilterNode.action.runIngestMods.text=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u5b9f\u884c +DirectoryTreeTopComponent.action.viewArtContent.text=\u904e\u53bb\u306e\u691c\u7d22\u7d50\u679c\u306e\u5185\u5bb9\u3092\u8868\u793a +DirectoryTreeTopComponent.backButton.text= DirectoryTreeTopComponent.componentOpened.groupDataSources.text=\u3053\u306e\u30b1\u30fc\u30b9\u306b\u306f {0} \u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u5225\u306b\u30b0\u30eb\u30fc\u30d7\u5316\u3057\u3066\u8aad\u307f\u8fbc\u307f\u3092\u65e9\u304f\u3057\u307e\u3059\u304b? DirectoryTreeTopComponent.componentOpened.groupDataSources.title=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u5225\u306b\u30b0\u30eb\u30fc\u30d7\u5316\u3057\u307e\u3059\u304b? DirectoryTreeTopComponent.emptyMimeNode.text=\u30c7\u30fc\u30bf\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u8b58\u5225\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u5b9f\u884c\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +DirectoryTreeTopComponent.forwardButton.text= +DirectoryTreeTopComponent.openViewPreferencesButton.text= DirectoryTreeTopComponent.resultsView.title=\u30ea\u30c3\u30b9\u30f3\u4e2d\u3067\u3059 +ExplorerNodeActionVisitor.action.extUnallocToSingleFile=\u672a\u4f7f\u7528\u9818\u57df\u3092\u5358\u4e00\u30d5\u30a1\u30a4\u30eb\u306b\u62bd\u51fa +ExplorerNodeActionVisitor.action.extUnallocToSingleFiles=\u672a\u4f7f\u7528\u9818\u57df\u3092\u5358\u4e00\u30d5\u30a1\u30a4\u30eb\u306b\u62bd\u51fa +ExplorerNodeActionVisitor.action.fileSystemDetails.title=\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u8a73\u7d30 +ExplorerNodeActionVisitor.action.imgDetails.title=\u30a4\u30e1\u30fc\u30b8\u8a73\u7d30 +ExplorerNodeActionVisitor.action.volumeDetails.title=\u30dc\u30ea\u30e5\u30fc\u30e0\u8a73\u7d30 +ExplorerNodeActionVisitor.exception.probGetParent.text={0} \u304b\u3089\u6b21\u306e\u89aa\u3092\u53d6\u5f97\u4e2d\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\: {1} +ExplorerNodeActionVisitor.imgDetail.noVolMatchesErr=\u30a8\u30e9\u30fc\: \u4e00\u81f4\u3059\u308b\u30dc\u30ea\u30e5\u30fc\u30e0\u304c\u3042\u308a\u307e\u305b\u3093\u3002 +ExplorerNodeActionVisitor.volDetail.noVolMatchErr=\u30a8\u30e9\u30fc\: \u4e00\u81f4\u3059\u308b\u30dc\u30ea\u30e5\u30fc\u30e0\u304c\u3042\u308a\u307e\u305b\u3093\u3002 ExportCSV.saveNodesToCSV.empty=\u30c7\u30fc\u30bf\u306f\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f -# {0} - \u51fa\u529b\u30d5\u30a1\u30a4\u30eb ExportCSV.saveNodesToCSV.fileExists=\u30d5\u30a1\u30a4\u30eb {0} \u306f\u3059\u3067\u306b\u5b58\u5728\u3057\u307e\u3059 ExportCSV.saveNodesToCSV.noCurrentCase=\u958b\u3044\u3066\u3044\u308b\u30b1\u30fc\u30b9\u306f\u3042\u308a\u307e\u305b\u3093 ExportCSV.title.text=\u9078\u629e\u3057\u305f\u884c\u3092CSV\u306b\u30a8\u30af\u30b9\u30dd\u30fc\u30c8 -ExternalViewerAction.actionPerformed.failure.exe.message=\u30d5\u30a1\u30a4\u30eb\u306f\u5b9f\u884c\u53ef\u80fd\u30d5\u30a1\u30a4\u30eb\u3067\u3042\u308b\u305f\u3081\u958b\u304d\u307e\u305b\u3093\u3002 ExternalViewerAction.actionPerformed.failure.IO.message=\u3053\u306e\u30bf\u30a4\u30d7\u306e\u30d5\u30a1\u30a4\u30eb\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 +ExternalViewerAction.actionPerformed.failure.exe.message=\u30d5\u30a1\u30a4\u30eb\u306f\u5b9f\u884c\u53ef\u80fd\u30d5\u30a1\u30a4\u30eb\u3067\u3042\u308b\u305f\u3081\u958b\u304d\u307e\u305b\u3093\u3002 ExternalViewerAction.actionPerformed.failure.missingFile.message=\u30d5\u30a1\u30a4\u30eb\u306f\u3059\u3067\u306b\u5b58\u5728\u3057\u307e\u305b\u3093\u3002 ExternalViewerAction.actionPerformed.failure.open.url=URL\u3092\u958b\u3051\u307e\u305b\u3093 ExternalViewerAction.actionPerformed.failure.permission.message=\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304f\u8a31\u53ef\u304c\u62d2\u5426\u3055\u308c\u307e\u3057\u305f\u3002 ExternalViewerAction.actionPerformed.failure.support.message=\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 -# {0} - \u30d5\u30a1\u30a4\u30eb\u540d ExternalViewerAction.actionPerformed.failure.title=\u30d5\u30a1\u30a4\u30eb\u30aa\u30fc\u30d7\u30f3\u5931\u6557 {0} ExternalViewerAction.actionPerformed.urlFailure.title=URL\u30aa\u30fc\u30d7\u30f3\u5931\u6557 +ExternalViewerGlobalSettingsPanel.ContentViewerExtensionLabel.text=\u30b3\u30f3\u30c6\u30f3\u30c4\u30d3\u30e5\u30fc\u30ef\u30fc\u306e\u62e1\u5f35\u5b50\u3092\u8ffd\u52a0\: +ExternalViewerGlobalSettingsPanel.HxDLabel.text=HxD\u30a8\u30c7\u30a3\u30bf\u30fc\u30d1\u30b9\: +ExternalViewerGlobalSettingsPanel.JOptionPane.invalidExePath.message=\u5b9f\u884c\u53ef\u80fd\u306a\u30d7\u30ed\u30b0\u30e9\u30e0\u3078\u306e\u30d1\u30b9\u304c\u7121\u52b9\u3067\u3059 +ExternalViewerGlobalSettingsPanel.JOptionPane.invalidExePath.title=\u7121\u52b9\u306a\u30d1\u30b9 +ExternalViewerGlobalSettingsPanel.JOptionPane.invalidExt.message=\u62e1\u5f35\u5b50\u304c\u7121\u52b9\u3067\u3059\u3002 +ExternalViewerGlobalSettingsPanel.JOptionPane.invalidExt.title=\u7121\u52b9\u306a\u62e1\u5f35\u5b50 +ExternalViewerGlobalSettingsPanel.JOptionPane.invalidMime.message=MIME \u30bf\u30a4\u30d7\u304c\u7121\u52b9\u3067\u3059\u3002[\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u306e\u30aa\u30d7\u30b7\u30e7\u30f3] \u30d1\u30cd\u30eb\u306b\u30ab\u30b9\u30bf\u30e0\u30bf\u30a4\u30d7\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +ExternalViewerGlobalSettingsPanel.JOptionPane.invalidMime.title=\u7121\u52b9\u306aMIME\u30bf\u30a4\u30d7 +ExternalViewerGlobalSettingsPanel.JOptionPane.ruleAlreadyExists.message=\u3053\u306eMIME\u30bf\u30a4\u30d7\u307e\u305f\u306f\u62e1\u5f35\u5b50\u306e\u30eb\u30fc\u30eb\u304c\u3059\u3067\u306b\u5b58\u5728\u3057\u3066\u3044\u307e\u3059\u3002\u305d\u306e\u30eb\u30fc\u30eb\u3092\u7de8\u96c6\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +ExternalViewerGlobalSettingsPanel.JOptionPane.ruleAlreadyExists.title=\u30eb\u30fc\u30eb\u306f\u8ffd\u52a0\u3055\u308c\u3066\u3044\u307e\u305b\u3093 +ExternalViewerGlobalSettingsPanel.browseHxDDirectory.text=\u53c2\u7167 +ExternalViewerGlobalSettingsPanel.deleteRuleButton.text=\u30eb\u30fc\u30eb\u3092\u524a\u9664 +ExternalViewerGlobalSettingsPanel.editRuleButton.text=\u30eb\u30fc\u30eb\u3092\u7de8\u96c6 +ExternalViewerGlobalSettingsPanel.exePathLabel.EXT.text=\u3053\u306e\u62e1\u5f35\u5b50\u306b\u95a2\u9023\u4ed8\u3051\u3089\u308c\u3066\u3044\u308b\u30d7\u30ed\u30b0\u30e9\u30e0 +ExternalViewerGlobalSettingsPanel.exePathLabel.MIME.text=\u3053\u306eMIME\u30bf\u30a4\u30d7\u306b\u95a2\u9023\u4ed8\u3051\u3089\u308c\u3066\u3044\u308b\u30d7\u30ed\u30b0\u30e9\u30e0 +ExternalViewerGlobalSettingsPanel.exePathLabel.empty.text=MIME\u30bf\u30a4\u30d7\u307e\u305f\u306f\u62e1\u5f35\u5b50\u304c\u9078\u629e\u3055\u308c\u3066\u3044\u307e\u305b\u3093 +ExternalViewerGlobalSettingsPanel.externalViewerTitleLabel.text=\u5916\u90e8\u30d3\u30e5\u30fc\u30ef\u30fc\u306e\u30ab\u30b9\u30bf\u30e0\u30eb\u30fc\u30eb\u3092\u8ffd\u52a0\: +ExternalViewerGlobalSettingsPanel.jButton2.text=jButton2 +ExternalViewerGlobalSettingsPanel.jTable1.columnModel.title2=\u30bf\u30a4\u30c8\u30eb3 +ExternalViewerGlobalSettingsPanel.jTable1.columnModel.title2_1=\u30bf\u30a4\u30c8\u30eb3 +ExternalViewerGlobalSettingsPanel.jTable1.columnModel.title3=\u30bf\u30a4\u30c8\u30eb4 +ExternalViewerGlobalSettingsPanel.jTable1.columnModel.title3_1=\u30bf\u30a4\u30c8\u30eb4 +ExternalViewerGlobalSettingsPanel.newRuleButton.text=\u65b0\u898f\u30eb\u30fc\u30eb +ExternalViewerGlobalSettingsPanel.newRuleButton1.text=\u65b0\u898f\u30eb\u30fc\u30eb ExternalViewerShortcutAction.title.text=\u5916\u90e8\u30d3\u30e5\u30fc\u30ef\u30fc\u3067\u958b\u304f Ctrl+E +ExtractAction.confDlg.destFileExist.msg=\u5b9b\u5148\u30d5\u30a1\u30a4\u30eb {0} \u306f\u3059\u3067\u306b\u5b58\u5728\u3057\u307e\u3059\u3002\u4e0a\u66f8\u304d\u3057\u307e\u3059\u304b? +ExtractAction.confDlg.destFileExist.title=\u30d5\u30a1\u30a4\u30eb\u304c\u5b58\u5728\u3057\u307e\u3059 +ExtractAction.done.notifyMsg.extractErr=\u6b21\u306e\u30d5\u30a1\u30a4\u30eb\u306e\u62bd\u51fa\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\: {0} +ExtractAction.done.notifyMsg.fileExtr.text=\u30d5\u30a1\u30a4\u30eb\u304c\u62bd\u51fa\u3055\u308c\u307e\u3057\u305f\u3002 +ExtractAction.extractFiles.cantCreateFolderErr.msg=\u9078\u629e\u3057\u305f\u30d5\u30a9\u30eb\u30c0\u30fc\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002 +ExtractAction.msgDlg.cantOverwriteFile.msg=\u65e2\u5b58\u306e\u30d5\u30a1\u30a4\u30eb {0} \u3092\u4e0a\u66f8\u304d\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f ExtractAction.noOpenCase.errMsg=\u958b\u3044\u3066\u3044\u308b\u30b1\u30fc\u30b9\u306f\u3042\u308a\u307e\u305b\u3093\u3002 +ExtractAction.notifyDlg.noFileToExtr.msg=\u62bd\u51fa\u3059\u308b\u30d5\u30a1\u30a4\u30eb\u306f\u3042\u308a\u307e\u305b\u3093\u3002 +ExtractAction.progress.cancellingExtraction={0} (\u53d6\u308a\u6d88\u3057\u4e2d\u3067\u3059...) +ExtractAction.progress.extracting=\u62bd\u51fa\u4e2d\u3067\u3059 +ExtractAction.title.extractFiles.text=\u30d5\u30a1\u30a4\u30eb\u3092\u62bd\u51fa +ExtractUnallocAction.confDlg.unallocFileAlreadyExist.msg=\u3053\u306e\u30dc\u30ea\u30e5\u30fc\u30e0\u306eUnalloc\u30d5\u30a1\u30a4\u30eb {0} \u306f\u3059\u3067\u306b\u5b58\u5728\u3057\u307e\u3059\u3002\u7f6e\u304d\u63db\u3048\u307e\u3059\u304b? +ExtractUnallocAction.dlgTitle.selectDirToSaveTo.msg=\u4fdd\u5b58\u5148\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u3092\u9078\u629e +ExtractUnallocAction.done.errMsg.msg=\u6b21\u306e\u672a\u4f7f\u7528\u9818\u57df\u306e\u62bd\u51fa\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\: {0} +ExtractUnallocAction.done.errMsg.title=\u62bd\u51fa\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f +ExtractUnallocAction.done.notifyMsg.completedExtract.msg=\u30d5\u30a1\u30a4\u30eb\u3092 {0} \u306b\u62bd\u51fa\u3057\u307e\u3057\u305f +ExtractUnallocAction.done.notifyMsg.completedExtract.title=\u672a\u4f7f\u7528\u9818\u57df\u306e\u62bd\u51fa\u3092\u5b8c\u4e86\u3057\u307e\u3057\u305f\u3002 ExtractUnallocAction.imageError=\u30a4\u30e1\u30fc\u30b8\u304b\u3089\u672a\u4f7f\u7528\u9818\u57df\u306e\u62bd\u51fa\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f +ExtractUnallocAction.msgDlg.folderDoesntExist.msg=\u30d5\u30a9\u30eb\u30c0\u30fc\u306f\u5b58\u5728\u3057\u307e\u305b\u3093\u3002\u6709\u52b9\u306a\u30d5\u30a9\u30eb\u30c0\u30fc\u3092\u9078\u629e\u3057\u3066\u7d9a\u884c\u3057\u3066\u304f\u3060\u3055\u3044\u3002 ExtractUnallocAction.noFiles=\u30dc\u30ea\u30e5\u30fc\u30e0\u306b\u672a\u4f7f\u7528\u30d5\u30a1\u30a4\u30eb\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093 ExtractUnallocAction.noOpenCase.errMsg=\u958b\u3044\u3066\u3044\u308b\u30b1\u30fc\u30b9\u306f\u3042\u308a\u307e\u305b\u3093\u3002 +ExtractUnallocAction.notifyMsg.unallocAlreadyBeingExtr.msg=\u672a\u4f7f\u7528\u9818\u57df\u306f\u3053\u306e\u30dc\u30ea\u30e5\u30fc\u30e0\u4e0a\u3067\u3059\u3067\u306b\u62bd\u51fa\u4e2d\u3067\u3059\u3002\u5225\u306e\u30a4\u30e1\u30fc\u30b8\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +ExtractUnallocAction.processing.counter.msg=\u30e1\u30e2\u30ea\u30fc {1} MB\u306e {0} \u3092\u51e6\u7406\u4e2d\u3067\u3059 +ExtractUnallocAction.progress.displayName.cancelling.text=\u672a\u4f7f\u7528\u9818\u57df\u3092\u62bd\u51fa\u4e2d\u3067\u3059(\u53d6\u308a\u6d88\u3057\u4e2d\u3067\u3059...) +ExtractUnallocAction.progress.extractUnalloc.title=\u672a\u4f7f\u7528\u9818\u57df\u3092\u62bd\u51fa\u4e2d\u3067\u3059 ExtractUnallocAction.volumeError=\u30dc\u30ea\u30e5\u30fc\u30e0\u304b\u3089\u672a\u4f7f\u7528\u9818\u57df\u306e\u62bd\u51fa\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -# {0} - fileName ExtractUnallocAction.volumeInProgress=\u672a\u4f7f\u7528\u9818\u57df\u3092\u3059\u3067\u306b {0} \u306b\u62bd\u51fa\u4e2d\u3067\u3059 - \u3053\u306e\u30dc\u30ea\u30e5\u30fc\u30e0\u3092\u30b9\u30ad\u30c3\u30d7\u3057\u307e\u3059 FileSystemDetailsAction.title.text=\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u8a73\u7d30 -# {0} - dataSourceCount -GroupDataSourcesDialog.groupDataSources.text=\u3053\u306e\u30b1\u30fc\u30b9\u306b\u306f {0} \u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002 -HINT_DirectoryTreeTopComponent=\u3053\u308c\u306fDirectoryTree\u30a6\u30a3\u30f3\u30c9\u30a6\u3067\u3059 -OpenIDE-Module-Name=DirectoryTree -FileSystemDetailsPanel.imgOffsetLabel.text=\u30a4\u30e1\u30fc\u30b8\u30aa\u30d5\u30bb\u30c3\u30c8: -FileSystemDetailsPanel.fsTypeLabel.text=FileSystem\u30bf\u30a4\u30d7: -FileSystemDetailsPanel.fsTypeValue.text=... -FileSystemDetailsPanel.imgOffsetValue.text=... -FileSystemDetailsPanel.volumeIDValue.text=... -FileSystemDetailsPanel.blockSizeValue.text=... -FileSystemDetailsPanel.blockCountValue.text=... -FileSystemDetailsPanel.rootInumValue.text=... -FileSystemDetailsPanel.firstInumValue.text=... -FileSystemDetailsPanel.lastInumValue.text=... -FileSystemDetailsPanel.volumeIDLabel.text=\u30dc\u30ea\u30e5\u30fc\u30e0ID: -FileSystemDetailsPanel.blockSizeLabel.text=\u30d6\u30ed\u30c3\u30af\u30b5\u30a4\u30ba: -FileSystemDetailsPanel.blockCountLabel.text=\u30d6\u30ed\u30c3\u30af\u30ab\u30a6\u30f3\u30c8: -FileSystemDetailsPanel.rootInumLabel.text=\u30eb\u30fc\u30c8\u30e1\u30bf\u30c7\u30fc\u30bf\u5165\u529b: -FileSystemDetailsPanel.firstInumLabel.text=\u6700\u521d\u306e\u30e1\u30bf\u30c7\u30fc\u30bf\u5165\u529b: -FileSystemDetailsPanel.lastInumLabel.text=\u6700\u5f8c\u306e\u30e1\u30bf\u30c7\u30fc\u30bf\u5165\u529b: FileSystemDetailsPanel.OKButton.text=OK +FileSystemDetailsPanel.blockCountLabel.text=\u30d6\u30ed\u30c3\u30af\u30ab\u30a6\u30f3\u30c8\: +FileSystemDetailsPanel.blockCountValue.text=... +FileSystemDetailsPanel.blockSizeLabel.text=\u30d6\u30ed\u30c3\u30af\u30b5\u30a4\u30ba\: +FileSystemDetailsPanel.blockSizeValue.text=... +FileSystemDetailsPanel.bytesLabel1.text=\u30d0\u30a4\u30c8 +FileSystemDetailsPanel.bytesLabel2.text=\u30d0\u30a4\u30c8 +FileSystemDetailsPanel.firstInumLabel.text=\u6700\u521d\u306e\u30e1\u30bf\u30c7\u30fc\u30bf\u5165\u529b\: +FileSystemDetailsPanel.firstInumValue.text=... +FileSystemDetailsPanel.fsTypeLabel.text=FileSystem\u30bf\u30a4\u30d7\: +FileSystemDetailsPanel.fsTypeValue.text=... +FileSystemDetailsPanel.imgOffsetLabel.text=\u30a4\u30e1\u30fc\u30b8\u30aa\u30d5\u30bb\u30c3\u30c8\: +FileSystemDetailsPanel.imgOffsetValue.text=... +FileSystemDetailsPanel.lastInumLabel.text=\u6700\u5f8c\u306e\u30e1\u30bf\u30c7\u30fc\u30bf\u5165\u529b\: +FileSystemDetailsPanel.lastInumValue.text=... +FileSystemDetailsPanel.rootInumLabel.text=\u30eb\u30fc\u30c8\u30e1\u30bf\u30c7\u30fc\u30bf\u5165\u529b\: +FileSystemDetailsPanel.rootInumValue.text=... +FileSystemDetailsPanel.volumeIDLabel.text=\u30dc\u30ea\u30e5\u30fc\u30e0ID\: +FileSystemDetailsPanel.volumeIDValue.text=... +GroupDataSourcesDialog.dataSourceCountLabel.text=jLabel1 +GroupDataSourcesDialog.groupDataSources.text=\u3053\u306e\u30b1\u30fc\u30b9\u306b\u306f {0} \u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002 +GroupDataSourcesDialog.noButton.text=\u3044\u3044\u3048 +GroupDataSourcesDialog.queryLabel.text=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u5225\u306b\u30b0\u30eb\u30fc\u30d7\u5316\u3057\u3066\u8aad\u307f\u8fbc\u307f\u3092\u65e9\u304f\u3057\u307e\u3059\u304b? +GroupDataSourcesDialog.title=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u5225\u306b\u30b0\u30eb\u30fc\u30d7\u5316\u3057\u307e\u3059\u304b? +GroupDataSourcesDialog.yesButton.text=\u306f\u3044 +HINT_DirectoryTreeTopComponent=\u3053\u308c\u306fDirectoryTree\u30a6\u30a3\u30f3\u30c9\u30a6\u3067\u3059 +ImageDetailsPanel.OKButton.text=OK +ImageDetailsPanel.imageInfoLabel.text=\u30a4\u30e1\u30fc\u30b8\u60c5\u5831 +ImageDetailsPanel.imgHashLabel.text=\u30cf\u30c3\u30b7\u30e5\u5024\: +ImageDetailsPanel.imgHashValue.text=... +ImageDetailsPanel.imgNameLabel.text=\u540d\u524d\: +ImageDetailsPanel.imgNameValue.text=... +ImageDetailsPanel.imgSectorSizeLabel.text=\u30bb\u30af\u30bf\u30fc\u30b5\u30a4\u30ba\: +ImageDetailsPanel.imgSectorSizeValue.text=... +ImageDetailsPanel.imgTotalSizeLabel.text=\u5408\u8a08\u30b5\u30a4\u30ba\: +ImageDetailsPanel.imgTotalSizeValue.text=... +ImageDetailsPanel.imgTypeLabel.text=\u30bf\u30a4\u30d7\: +ImageDetailsPanel.imgTypeValue.text=... +OpenIDE-Module-Name=DirectoryTree +OptionsCategory_Keywords_ExternalViewer=ExternalViewer +OptionsCategory_Name_ExternalViewer=\u5916\u90e8\u30d3\u30e5\u30fc\u30ef\u30fc SelectionContext.dataSourceFiles=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb SelectionContext.dataSources=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9 SelectionContext.views=\u30d3\u30e5\u30fc ViewContextAction.errorMessage.cannotFindDirectory=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u3092\u898b\u3064\u3051\u3089\u308c\u307e\u305b\u3093\u3067\u3057\u305f\u3002 ViewContextAction.errorMessage.cannotFindNode=\u30c4\u30ea\u30fc\u5185\u306e\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u30ce\u30fc\u30c9\u3092\u898b\u3064\u3051\u3089\u308c\u307e\u305b\u3093\u3067\u3057\u305f\u3002 ViewContextAction.errorMessage.cannotSelectDirectory=\u30c4\u30ea\u30fc\u5185\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u3092\u9078\u629e\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002 -VolumeDetailsPanel.volumeIDLabel.text=\u30dc\u30ea\u30e5\u30fc\u30e0ID: -VolumeDetailsPanel.volumeIDValue.text=... -VolumeDetailsPanel.startValue.text=... -VolumeDetailsPanel.lengthValue.text=... -VolumeDetailsPanel.descValue.text=... -VolumeDetailsPanel.flagsValue.text=... -VolumeDetailsPanel.startLabel.text=\u30bb\u30af\u30bf\u30fc\u3092\u958b\u59cb\u4e2d\u3067\u3059: -VolumeDetailsPanel.lengthLabel.text=\u30bb\u30af\u30bf\u30fc\u306e\u9577\u3055: -VolumeDetailsPanel.descLabel.text=\u8a18\u8ff0: -VolumeDetailsPanel.flagsLabel.text=\u30d5\u30e9\u30b0: -VolumeDetailsPanel.jLabel1.text=\u30dc\u30ea\u30e5\u30fc\u30e0\u60c5\u5831\u5168\u822c VolumeDetailsPanel.OKButton.text=OK -ImageDetailsPanel.imageInfoLabel.text=\u30a4\u30e1\u30fc\u30b8\u60c5\u5831 -ImageDetailsPanel.imgNameLabel.text=\u540d\u524d: -ImageDetailsPanel.imgNameValue.text=... -ImageDetailsPanel.imgTypeLabel.text=\u30bf\u30a4\u30d7: -ImageDetailsPanel.imgTypeValue.text=... -ImageDetailsPanel.OKButton.text=OK -ImageDetailsPanel.imgSectorSizeLabel.text=\u30bb\u30af\u30bf\u30fc\u30b5\u30a4\u30ba: -ImageDetailsPanel.imgSectorSizeValue.text=... -DirectoryTreeTopComponent.backButton.text= -DirectoryTreeTopComponent.forwardButton.text= -ImageDetailsPanel.imgTotalSizeValue.text=... -ImageDetailsPanel.imgTotalSizeLabel.text=\u5408\u8a08\u30b5\u30a4\u30ba: -ImageDetailsPanel.imgHashValue.text=... -ImageDetailsPanel.imgHashLabel.text=\u30cf\u30c3\u30b7\u30e5\u5024: -DataResultFilterNode.action.viewFileInDir.text=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u5185\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u8868\u793a -DataResultFilterNode.action.viewSrcFileInDir.text=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u5185\u306e\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u3092\u8868\u793a -DataResultFilterNode.action.viewInNewWin.text=\u65b0\u3057\u3044\u30a6\u30a3\u30f3\u30c9\u30a6\u3067\u8868\u793a -DataResultFilterNode.action.openInExtViewer.text=\u5916\u90e8\u30d3\u30e5\u30fc\u30ef\u30fc\u3067\u958b\u304f Ctrl+E -DataResultFilterNode.action.searchFilesSameMd5.text=\u540c\u3058MD5\u30cf\u30c3\u30b7\u30e5\u3067\u30d5\u30a1\u30a4\u30eb\u3092\u691c\u7d22 -DataResultFilterNode.action.viewInDir.text=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u3067\u8868\u793a -DirectoryTreeFilterNode.action.collapseAll.text=\u3059\u3079\u3066\u3092\u6298\u308a\u305f\u305f\u3080 -DirectoryTreeFilterNode.action.openFileSrcByAttr.text=\u5c5e\u6027\u5225\u306b\u30d5\u30a1\u30a4\u30eb\u691c\u7d22\u3092\u958b\u304f -DirectoryTreeFilterNode.action.runIngestMods.text=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u5b9f\u884c -DirectoryTreeTopComponent.action.viewArtContent.text=\u904e\u53bb\u306e\u691c\u7d22\u7d50\u679c\u306e\u5185\u5bb9\u3092\u8868\u793a -ExplorerNodeActionVisitor.action.imgDetails.title=\u30a4\u30e1\u30fc\u30b8\u8a73\u7d30 -ExplorerNodeActionVisitor.action.extUnallocToSingleFiles=\u672a\u4f7f\u7528\u9818\u57df\u3092\u5358\u4e00\u30d5\u30a1\u30a4\u30eb\u306b\u62bd\u51fa -ExplorerNodeActionVisitor.action.fileSystemDetails.title=\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u8a73\u7d30 -ExplorerNodeActionVisitor.action.volumeDetails.title=\u30dc\u30ea\u30e5\u30fc\u30e0\u8a73\u7d30 -ExplorerNodeActionVisitor.action.extUnallocToSingleFile=\u672a\u4f7f\u7528\u9818\u57df\u3092\u5358\u4e00\u30d5\u30a1\u30a4\u30eb\u306b\u62bd\u51fa -ExplorerNodeActionVisitor.volDetail.noVolMatchErr=\u30a8\u30e9\u30fc: \u4e00\u81f4\u3059\u308b\u30dc\u30ea\u30e5\u30fc\u30e0\u304c\u3042\u308a\u307e\u305b\u3093\u3002 -ExplorerNodeActionVisitor.imgDetail.noVolMatchesErr=\u30a8\u30e9\u30fc: \u4e00\u81f4\u3059\u308b\u30dc\u30ea\u30e5\u30fc\u30e0\u304c\u3042\u308a\u307e\u305b\u3093\u3002 -ExplorerNodeActionVisitor.exception.probGetParent.text={0} \u304b\u3089\u6b21\u306e\u89aa\u3092\u53d6\u5f97\u4e2d\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f: {1} -ExtractAction.title.extractFiles.text=\u30d5\u30a1\u30a4\u30eb\u3092\u62bd\u51fa -ExtractAction.extractFiles.cantCreateFolderErr.msg=\u9078\u629e\u3057\u305f\u30d5\u30a9\u30eb\u30c0\u30fc\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002 -ExtractAction.confDlg.destFileExist.msg=\u5b9b\u5148\u30d5\u30a1\u30a4\u30eb {0} \u306f\u3059\u3067\u306b\u5b58\u5728\u3057\u307e\u3059\u3002\u4e0a\u66f8\u304d\u3057\u307e\u3059\u304b? -ExtractAction.confDlg.destFileExist.title=\u30d5\u30a1\u30a4\u30eb\u304c\u5b58\u5728\u3057\u307e\u3059 -ExtractAction.msgDlg.cantOverwriteFile.msg=\u65e2\u5b58\u306e\u30d5\u30a1\u30a4\u30eb {0} \u3092\u4e0a\u66f8\u304d\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f -ExtractAction.notifyDlg.noFileToExtr.msg=\u62bd\u51fa\u3059\u308b\u30d5\u30a1\u30a4\u30eb\u306f\u3042\u308a\u307e\u305b\u3093\u3002 -ExtractAction.progress.extracting=\u62bd\u51fa\u4e2d\u3067\u3059 -ExtractAction.progress.cancellingExtraction={0} (\u53d6\u308a\u6d88\u3057\u4e2d\u3067\u3059...) -ExtractAction.done.notifyMsg.fileExtr.text=\u30d5\u30a1\u30a4\u30eb\u304c\u62bd\u51fa\u3055\u308c\u307e\u3057\u305f\u3002 -ExtractUnallocAction.notifyMsg.unallocAlreadyBeingExtr.msg=\u672a\u4f7f\u7528\u9818\u57df\u306f\u3053\u306e\u30dc\u30ea\u30e5\u30fc\u30e0\u4e0a\u3067\u3059\u3067\u306b\u62bd\u51fa\u4e2d\u3067\u3059\u3002\u5225\u306e\u30a4\u30e1\u30fc\u30b8\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -ExtractUnallocAction.msgDlg.folderDoesntExist.msg=\u30d5\u30a9\u30eb\u30c0\u30fc\u306f\u5b58\u5728\u3057\u307e\u305b\u3093\u3002\u6709\u52b9\u306a\u30d5\u30a9\u30eb\u30c0\u30fc\u3092\u9078\u629e\u3057\u3066\u7d9a\u884c\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -ExtractUnallocAction.dlgTitle.selectDirToSaveTo.msg=\u4fdd\u5b58\u5148\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u3092\u9078\u629e -ExtractUnallocAction.confDlg.unallocFileAlreadyExist.msg=\u3053\u306e\u30dc\u30ea\u30e5\u30fc\u30e0\u306eUnalloc\u30d5\u30a1\u30a4\u30eb {0} \u306f\u3059\u3067\u306b\u5b58\u5728\u3057\u307e\u3059\u3002\u7f6e\u304d\u63db\u3048\u307e\u3059\u304b? -ExtractUnallocAction.progress.extractUnalloc.title=\u672a\u4f7f\u7528\u9818\u57df\u3092\u62bd\u51fa\u4e2d\u3067\u3059 -ExtractUnallocAction.progress.displayName.cancelling.text=\u672a\u4f7f\u7528\u9818\u57df\u3092\u62bd\u51fa\u4e2d\u3067\u3059(\u53d6\u308a\u6d88\u3057\u4e2d\u3067\u3059...) -ExtractUnallocAction.processing.counter.msg=\u30e1\u30e2\u30ea\u30fc {1} MB\u306e {0} \u3092\u51e6\u7406\u4e2d\u3067\u3059 -ExtractUnallocAction.done.notifyMsg.completedExtract.title=\u672a\u4f7f\u7528\u9818\u57df\u306e\u62bd\u51fa\u3092\u5b8c\u4e86\u3057\u307e\u3057\u305f\u3002 -ExtractUnallocAction.done.notifyMsg.completedExtract.msg=\u30d5\u30a1\u30a4\u30eb\u3092 {0} \u306b\u62bd\u51fa\u3057\u307e\u3057\u305f -ExtractUnallocAction.done.errMsg.title=\u62bd\u51fa\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -ExtractUnallocAction.done.errMsg.msg=\u6b21\u306e\u672a\u4f7f\u7528\u9818\u57df\u306e\u62bd\u51fa\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: {0} -ExtractAction.done.notifyMsg.extractErr=\u6b21\u306e\u30d5\u30a1\u30a4\u30eb\u306e\u62bd\u51fa\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: {0} -OptionsCategory_Name_ExternalViewer=\u5916\u90e8\u30d3\u30e5\u30fc\u30ef\u30fc -OptionsCategory_Keywords_ExternalViewer=ExternalViewer -ExternalViewerGlobalSettingsPanel.exePathLabel.MIME.text=\u3053\u306eMIME\u30bf\u30a4\u30d7\u306b\u95a2\u9023\u4ed8\u3051\u3089\u308c\u3066\u3044\u308b\u30d7\u30ed\u30b0\u30e9\u30e0 -ExternalViewerGlobalSettingsPanel.exePathLabel.EXT.text=\u3053\u306e\u62e1\u5f35\u5b50\u306b\u95a2\u9023\u4ed8\u3051\u3089\u308c\u3066\u3044\u308b\u30d7\u30ed\u30b0\u30e9\u30e0 -ExternalViewerGlobalSettingsPanel.exePathLabel.empty.text=MIME\u30bf\u30a4\u30d7\u307e\u305f\u306f\u62e1\u5f35\u5b50\u304c\u9078\u629e\u3055\u308c\u3066\u3044\u307e\u305b\u3093 -AddExternalViewerRuleDialog.saveButton.title=\u4fdd\u5b58 -AddExternalViewerRuleDialog.cancelButton.title=\u53d6\u308a\u6d88\u3057 -AddExternalViewerRuleDialog.title=\u5916\u90e8\u30d3\u30e5\u30fc\u30ef\u30fc\u30eb\u30fc\u30eb -ExternalViewerGlobalSettingsPanel.JOptionPane.invalidMime.message=MIME \u30bf\u30a4\u30d7\u304c\u7121\u52b9\u3067\u3059\u3002[\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u306e\u30aa\u30d7\u30b7\u30e7\u30f3] \u30d1\u30cd\u30eb\u306b\u30ab\u30b9\u30bf\u30e0\u30bf\u30a4\u30d7\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -ExternalViewerGlobalSettingsPanel.JOptionPane.invalidMime.title=\u7121\u52b9\u306aMIME\u30bf\u30a4\u30d7 -ExternalViewerGlobalSettingsPanel.JOptionPane.invalidExt.message=\u62e1\u5f35\u5b50\u304c\u7121\u52b9\u3067\u3059\u3002 -ExternalViewerGlobalSettingsPanel.JOptionPane.invalidExt.title=\u7121\u52b9\u306a\u62e1\u5f35\u5b50 -ExternalViewerGlobalSettingsPanel.JOptionPane.invalidExePath.message=\u5b9f\u884c\u53ef\u80fd\u306a\u30d7\u30ed\u30b0\u30e9\u30e0\u3078\u306e\u30d1\u30b9\u304c\u7121\u52b9\u3067\u3059 -ExternalViewerGlobalSettingsPanel.JOptionPane.invalidExePath.title=\u7121\u52b9\u306a\u30d1\u30b9 -ExternalViewerGlobalSettingsPanel.JOptionPane.ruleAlreadyExists.message=\u3053\u306eMIME\u30bf\u30a4\u30d7\u307e\u305f\u306f\u62e1\u5f35\u5b50\u306e\u30eb\u30fc\u30eb\u304c\u3059\u3067\u306b\u5b58\u5728\u3057\u3066\u3044\u307e\u3059\u3002\u305d\u306e\u30eb\u30fc\u30eb\u3092\u7de8\u96c6\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -ExternalViewerGlobalSettingsPanel.JOptionPane.ruleAlreadyExists.title=\u30eb\u30fc\u30eb\u306f\u8ffd\u52a0\u3055\u308c\u3066\u3044\u307e\u305b\u3093 -AddExternalViewerRulePanel.mimeRadioButton.text=MIME\u30bf\u30a4\u30d7 -AddExternalViewerRulePanel.nameTextField.text= -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 -GroupDataSourcesDialog.dataSourceCountLabel.text=jLabel1 -GroupDataSourcesDialog.queryLabel.text=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u5225\u306b\u30b0\u30eb\u30fc\u30d7\u5316\u3057\u3066\u8aad\u307f\u8fbc\u307f\u3092\u65e9\u304f\u3057\u307e\u3059\u304b? -GroupDataSourcesDialog.yesButton.text=\u306f\u3044 -GroupDataSourcesDialog.noButton.text=\u3044\u3044\u3048 -GroupDataSourcesDialog.title=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u5225\u306b\u30b0\u30eb\u30fc\u30d7\u5316\u3057\u307e\u3059\u304b? -DirectoryTreeTopComponent.openViewPreferencesButton.text= -ExternalViewerGlobalSettingsPanel.jTable1.columnModel.title3=\u30bf\u30a4\u30c8\u30eb4 -ExternalViewerGlobalSettingsPanel.jTable1.columnModel.title2=\u30bf\u30a4\u30c8\u30eb3 -ExternalViewerGlobalSettingsPanel.jTable1.columnModel.title3_1=\u30bf\u30a4\u30c8\u30eb4 -ExternalViewerGlobalSettingsPanel.jTable1.columnModel.title2_1=\u30bf\u30a4\u30c8\u30eb3 -ExternalViewerGlobalSettingsPanel.newRuleButton1.text=\u65b0\u898f\u30eb\u30fc\u30eb -ExternalViewerGlobalSettingsPanel.editRuleButton.text=\u30eb\u30fc\u30eb\u3092\u7de8\u96c6 -ExternalViewerGlobalSettingsPanel.deleteRuleButton.text=\u30eb\u30fc\u30eb\u3092\u524a\u9664 -ExternalViewerGlobalSettingsPanel.externalViewerTitleLabel.text=\u5916\u90e8\u30d3\u30e5\u30fc\u30ef\u30fc\u306e\u30ab\u30b9\u30bf\u30e0\u30eb\u30fc\u30eb\u3092\u8ffd\u52a0: -ExternalViewerGlobalSettingsPanel.newRuleButton.text=\u65b0\u898f\u30eb\u30fc\u30eb -ExternalViewerGlobalSettingsPanel.jButton2.text=jButton2 -ExternalViewerGlobalSettingsPanel.browseHxDDirectory.text=\u53c2\u7167 -ExternalViewerGlobalSettingsPanel.HxDLabel.text=HxD\u30a8\u30c7\u30a3\u30bf\u30fc\u30d1\u30b9: -ExternalViewerGlobalSettingsPanel.ContentViewerExtensionLabel.text=\u30b3\u30f3\u30c6\u30f3\u30c4\u30d3\u30e5\u30fc\u30ef\u30fc\u306e\u62e1\u5f35\u5b50\u3092\u8ffd\u52a0: -FileSystemDetailsPanel.bytesLabel1.text=\u30d0\u30a4\u30c8 -FileSystemDetailsPanel.bytesLabel2.text=\u30d0\u30a4\u30c8 +VolumeDetailsPanel.descLabel.text=\u8a18\u8ff0\: +VolumeDetailsPanel.descValue.text=... +VolumeDetailsPanel.flagsLabel.text=\u30d5\u30e9\u30b0\: +VolumeDetailsPanel.flagsValue.text=... +VolumeDetailsPanel.generalVolumeLabel.text=\u6a19\u6e96\u30dc\u30ea\u30e5\u30fc\u30e0\u60c5\u5831 +VolumeDetailsPanel.lengthLabel.text=\u30bb\u30af\u30bf\u30fc\u306e\u9577\u3055\: +VolumeDetailsPanel.lengthValue.text=... +VolumeDetailsPanel.startLabel.text=\u30bb\u30af\u30bf\u30fc\u3092\u958b\u59cb\u4e2d\u3067\u3059\: +VolumeDetailsPanel.startValue.text=... +VolumeDetailsPanel.volumeIDLabel.text=\u30dc\u30ea\u30e5\u30fc\u30e0ID\: +VolumeDetailsPanel.volumeIDValue.text=... diff --git a/Core/src/org/sleuthkit/autopsy/directorytree/actionhelpers/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/directorytree/actionhelpers/Bundle_ja.properties new file mode 100644 index 0000000000..e59e05a228 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/directorytree/actionhelpers/Bundle_ja.properties @@ -0,0 +1,3 @@ +#Tue Aug 18 18:09:21 UTC 2020 +ExtractActionHelper.progress.extracting={0}\u306b\u62bd\u51fa\u3057\u3066\u3044\u307e\u3059 +ExtractActionHelper.progress.fileExtracting=\u30d5\u30a1\u30a4\u30eb\u3092\u62bd\u51fa\u4e2d\uff1a{0} diff --git a/Core/src/org/sleuthkit/autopsy/discovery/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/discovery/Bundle_ja.properties new file mode 100644 index 0000000000..e37405bd7e --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/discovery/Bundle_ja.properties @@ -0,0 +1,236 @@ +#Tue Aug 18 18:09:21 UTC 2020 +CTL_OpenDiscoveryAction=\u767a\u898b +DataSourceFilterPanel.dataSourceCheckbox.text=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\uff1a +DataSourceModuleWrapper.exifModule.text=Exif\u30d1\u30fc\u30b5\u30fc\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3067\u5b9f\u884c\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f\uff1a{0}_x000D_ +DataSourceModuleWrapper.fileTypeModule.text=\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u8b58\u5225\u30e2\u30b8\u30e5\u30fc\u30eb\u306f\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u306b\u5b9f\u884c\u3055\u308c\u3066\u307e\u305b\u3093\uff1a{0} +DataSourceModuleWrapper.hashModule.text=\u30cf\u30c3\u30b7\u30e5\u30fb\u30eb\u30c3\u30af\u30a2\u30c3\u30d7\u30fb\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3067\u5b9f\u884c\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f\uff1a{0}\n +DetailsPanel.instancesList.border.title=\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9 +DiscoveryDialog.documentsButton.text=\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8 +DiscoveryDialog.groupByLabel.text=\u30b0\u30eb\u30fc\u30d7\u5316\uff1a +DiscoveryDialog.imagesButton.text=\u753b\u50cf +DiscoveryDialog.name.text=\u767a\u898b +DiscoveryDialog.orderByLabel.text=\u30b0\u30eb\u30fc\u30d7\u5185\u3067\u306e\u4e26\u3079\u66ff\u3048\uff1a +DiscoveryDialog.orderGroupsByLabel.text=\u30b0\u30eb\u30fc\u30d7\u306e\u4e26\u3079\u66ff\u3048\uff1a +DiscoveryDialog.searchButton.text=\u691c\u51fa +DiscoveryDialog.sortingPanel.border.title=\u30b9\u30c6\u30c3\u30d73\uff1a\u30c7\u30a3\u30b9\u30d7\u30ec\u30a4\u8a2d\u5b9a\u306e\u9078\u629e +DiscoveryDialog.step1Label.text=\u30b9\u30c6\u30c3\u30d71\uff1a\u7d50\u679c\u306e\u30bf\u30a4\u30d7\u3092\u9078\u629e\u3059\u308b +DiscoveryDialog.videosButton.text=\u30d3\u30c7\u30aa +DiscoveryExtractAction.title.extractFiles.text=\u30d5\u30a1\u30a4\u30eb\u3092\u62bd\u51fa +DiscoveryTopComponent.cancelButton.text=\u691c\u7d22\u3092\u30ad\u30e3\u30f3\u30bb\u30eb +DiscoveryTopComponent.name=\u767a\u898b +DiscoveryTopComponent.newSearch.text=\u65b0\u3057\u3044\u691c\u7d22 +DiscoveryTopComponent.searchCancelled.text=\u691c\u7d22\u306f\u30ad\u30e3\u30f3\u30bb\u30eb\u3055\u308c\u307e\u3057\u305f\u3002 +DiscoveryTopComponent.searchComplete.text={0}\u306e\u7d50\u679c +DiscoveryTopComponent.searchInProgress.text=\u30bf\u30a4\u30d7{0}\u306e\u7d50\u679c\u3092\u691c\u7d22\u3057\u3066\u3044\u307e\u3059\u3002 \u304a\u5f85\u3061\u304f\u3060\u3055\u3044\u3002 +DiscoveryUiUtility.bytes.text=\u30d0\u30a4\u30c8 +DiscoveryUiUtility.gigaBytes.text=GB +DiscoveryUiUtility.kiloBytes.text=KB +DiscoveryUiUtility.megaBytes.text=MB +DiscoveryUiUtility.sizeLabel.text=\u30b5\u30a4\u30ba\uff1a{0} {1} +DiscoveryUiUtility.terraBytes.text=TB +DocumentFilterPanel.documentsFiltersSplitPane.border.title=\u30b9\u30c6\u30c3\u30d72\uff1a\u8868\u793a\u3059\u308b\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0 +DocumentPanel.nameLabel.more.text=\u305d\u306e\u4ed6{0}\u500b +DocumentPanel.noImageExtraction.text=\uff1f\u306e0 \u753b\u50cf +DocumentPanel.numberOfImages.noImages=\u753b\u50cf\u304c\u3042\u308a\u307e\u305b\u3093 +DocumentPanel.numberOfImages.text={0}\u753b\u50cf\u4e2d\u306e1 +DocumentWrapper.previewInitialValue=\u30d7\u30ec\u30d3\u30e5\u30fc\u306f\u307e\u3060\u751f\u6210\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 +FileGroup.groupSortingAlgorithm.groupName.text=\u30b0\u30eb\u30fc\u30d7\u540d +FileGroup.groupSortingAlgorithm.groupSize.text=\u30b0\u30eb\u30fc\u30d7\u30b5\u30a4\u30ba +FileSearch.DataSourceGroupKey.datasourceAndID={0}\uff08ID\uff1a{1}\uff09 +FileSearch.DataSourceGroupKey.idOnly=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\uff08ID\uff1a{0}\uff09 +FileSearch.FileTagGroupKey.noSets=\u306a\u3057 +FileSearch.GroupingAttributeType.datasource.displayName=\u30c7\u30fc\u30bf\u30fb\u30bd\u30fc\u30b9 +FileSearch.GroupingAttributeType.fileType.displayName=\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7 +FileSearch.GroupingAttributeType.frequency.displayName=\u904e\u53bb\u306e\u767a\u751f +FileSearch.GroupingAttributeType.hash.displayName=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8 +FileSearch.GroupingAttributeType.interestingItem.displayName=\u8208\u5473\u6df1\u3044\u30a2\u30a4\u30c6\u30e0 +FileSearch.GroupingAttributeType.keywordList.displayName=\u30ad\u30fc\u30ef\u30fc\u30c9 +FileSearch.GroupingAttributeType.none.displayName=\u306a\u3057 +FileSearch.GroupingAttributeType.object.displayName=\u691c\u51fa\u3055\u308c\u305f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8 +FileSearch.GroupingAttributeType.parent.displayName=\u89aa\u30d5\u30a9\u30eb\u30c0 +FileSearch.GroupingAttributeType.size.displayName=\u30d5\u30a1\u30a4\u30eb\u30b5\u30a4\u30ba +FileSearch.GroupingAttributeType.tag.displayName=\u30bf\u30b0 +FileSearch.HashHitsGroupKey.noHashHits=\u306a\u3057 +FileSearch.InterestingItemGroupKey.noSets=\u306a\u3057 +FileSearch.KeywordListGroupKey.noKeywords=\u306a\u3057 +FileSearch.NoGroupingGroupKey.allFiles=\u3059\u3079\u3066\u306e\u30d5\u30a1\u30a4\u30eb +FileSearch.ObjectDetectedGroupKey.noSets=\u306a\u3057 +FileSearch.documentSummary.noBytes=\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u304c\u8aad\u307f\u53d6\u3089\u308c\u306a\u304b\u3063\u305f\u305f\u3081\u3001\u30d7\u30ec\u30d3\u30e5\u30fc\u3092\u8868\u793a\u3067\u304d\u307e\u305b\u3093\u3002 +FileSearch.documentSummary.noPreview=\u30d7\u30ec\u30d3\u30e5\u30fc\u4e0d\u53ef\u3002 +FileSearch.genVideoThumb.progress.text=\u4e00\u6642\u30d5\u30a1\u30a4\u30eb{0}\u3092\u62bd\u51fa\u3057\u3066\u3044\u307e\u3059 +FileSearchData.FileSize.100kbto1mb=\: 100KB-1MB +FileSearchData.FileSize.100mbto1gb=\: 100MB-1GB +FileSearchData.FileSize.10PlusGb=\: 10GB+ +FileSearchData.FileSize.16kbto100kb=\: 16-100KB +FileSearchData.FileSize.1gbto5gb=\: 1-5GB +FileSearchData.FileSize.1mbto50mb=\: 1-50MB +FileSearchData.FileSize.200PlusMb=\: 200MB+ +FileSearchData.FileSize.500kbto100mb=\: 500KB-100MB +FileSearchData.FileSize.50mbto200mb=\: 50-200MB +FileSearchData.FileSize.5gbto10gb=\: 5-10GB +FileSearchData.FileSize.LARGE.displayName=\u5927 +FileSearchData.FileSize.MEDIUM.displayName=\u4e2d +FileSearchData.FileSize.SMALL.displayName=\u5c0f +FileSearchData.FileSize.XLARGE.displayName=XLarge +FileSearchData.FileSize.XSMALL.displayName=GB +FileSearchData.FileSize.XXLARGE.displayName=XXLarge +FileSearchData.FileSize.upTo16kb=\: 0-16KB +FileSearchData.FileSize.upTo500kb=\: 0-500KB +FileSearchData.FileType.Audio.displayName=\u30aa\u30fc\u30c7\u30a3\u30aa +FileSearchData.FileType.Documents.displayName=\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8 +FileSearchData.FileType.Executables.displayName=\u5b9f\u884c\u53ef\u80fd +FileSearchData.FileType.Image.displayName=\u753b\u50cf +FileSearchData.FileType.Other.displayName=\u305d\u306e\u4ed6/\u4e0d\u660e +FileSearchData.FileType.Video.displayName=\u30d3\u30c7\u30aa +FileSearchData.Frequency.common.displayName=\u4e00\u822c\uff0811-100\uff09 +FileSearchData.Frequency.known.displayName=\u65e2\u77e5\uff08NSRL\uff09 +FileSearchData.Frequency.rare.displayName=\u7a00\uff082-10\uff09 +FileSearchData.Frequency.unique.displayName=\u552f\u4e00(1) +FileSearchData.Frequency.unknown.displayName=\u4e0d\u660e +FileSearchData.Frequency.verycommon.displayName=\u975e\u5e38\u306b\u4e00\u822c\u7684\uff08100+\uff09 +FileSearchData.Score.interesting.displayName=\u8208\u5473\u6df1\u3044 +FileSearchData.Score.notable.displayName=\u6ce8\u76ee\u3059\u3079\u304d +FileSearchData.Score.unknown.displayName=\u4e0d\u660e +FileSearchDialog.addParentButton.text=\u8ffd\u52a0 +FileSearchDialog.cancelButton.text=\u30ad\u30e3\u30f3\u30bb\u30eb +FileSearchDialog.deleteParentButton.text=\u524a\u9664 +FileSearchDialog.dsCheckBox.text=\u30c7\u30fc\u30bf\u30fb\u30bd\u30fc\u30b9 +FileSearchDialog.exifCheckBox.text=EXIF\u30c7\u30fc\u30bf\u304c\u5fc5\u8981 +FileSearchDialog.freqCheckBox.text=CR\u983b\u5ea6 +FileSearchDialog.hashCheckBox.text=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8 +FileSearchDialog.intCheckBox.text=\u8208\u5473\u6df1\u3044\u30a2\u30a4\u30c6\u30e0 +FileSearchDialog.jLabel1.text=\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7 +FileSearchDialog.jLabel2.text=\uff08\u3059\u3079\u3066\u4f7f\u7528\u3055\u308c\u307e\u3059\uff09 +FileSearchDialog.jLabel3.text=\u5c5e\u6027\u3067\u30b0\u30eb\u30fc\u30d7\u5316\uff1a +FileSearchDialog.jLabel4.text=\u30b0\u30eb\u30fc\u30d7\u306e\u4e26\u3079\u66ff\u3048\uff1a +FileSearchDialog.jLabel5.text=\u30d5\u30a1\u30a4\u30eb\u306e\u4e26\u3079\u66ff\u3048\u9806\u5e8f\uff1a +FileSearchDialog.kwCheckBox.text=\u30ad\u30fc\u30ef\u30fc\u30c9 +FileSearchDialog.notableCheckBox.text=\u6ce8\u76ee\u30bf\u30b0\u4ed8\u304c\u5fc5\u8981\u3067\u3059 +FileSearchDialog.objCheckBox.text=\u30aa\u30d6\u30b8\u30a7\u30af\u30c8 +FileSearchDialog.orderAttrRadioButton.text=\u5c5e\u6027 +FileSearchDialog.orderSizeRadioButton.text=\u30b0\u30eb\u30fc\u30d7\u30b5\u30a4\u30ba +FileSearchDialog.parentCheckBox.text=\u89aa +FileSearchDialog.parentFullRadioButton.text=\u6e80\u3005 +FileSearchDialog.parentSubstringRadioButton.text=\u30b5\u30d6\u30b9\u30c8\u30ea\u30f3\u30b0 +FileSearchDialog.scoreCheckBox.text=\u30b9\u30b3\u30a2\u6709 +FileSearchDialog.searchButton.text=\u691c\u7d22 +FileSearchDialog.sizeCheckBox.text=\u30b5\u30a4\u30ba +FileSearchDialog.tagsCheckBox.text=\u30bf\u30b0 +FileSearchFiltering.DataSourceFilter.datasource={0}({1}) +FileSearchFiltering.DataSourceFilter.desc=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\uff1a{0} +FileSearchFiltering.DataSourceFilter.or=, +FileSearchFiltering.FileTypeFilter.desc=\u30bf\u30a4\u30d7\uff1a{0} +FileSearchFiltering.FileTypeFilter.or=, +FileSearchFiltering.FrequencyFilter.desc=\u904e\u53bb\u306e\u767a\u751f\uff1a{0} +FileSearchFiltering.FrequencyFilter.or=, +FileSearchFiltering.HashSetFilter.desc=\u30bb\u30c3\u30c8\u5185\u306e\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u30d2\u30c3\u30c8\uff1a{0} +FileSearchFiltering.InterestingItemSetFilter.desc=\u30bb\u30c3\u30c8\u5185\u306e\u8208\u5473\u6df1\u3044\u30a2\u30a4\u30c6\u30e0\u30d2\u30c3\u30c8\uff1a{0} +FileSearchFiltering.KeywordListFilter.desc=\u30ea\u30b9\u30c8\u5185\u306e\u30ad\u30fc\u30ef\u30fc\u30c9\uff1a{0} +FileSearchFiltering.KnownFilter.desc=\u4e0d\u660e +FileSearchFiltering.ObjectDetectionFilter.desc=\u30bb\u30c3\u30c8\u3067\u691c\u51fa\u3055\u308c\u305f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\uff1a{0} +FileSearchFiltering.ParentFilter.desc=\u4e00\u81f4\u3059\u308b\u30d1\u30b9\uff1a{0} +FileSearchFiltering.ParentFilter.exact=\uff08\u5b8c\u5168\u4e00\u81f4\uff09 +FileSearchFiltering.ParentFilter.excluded=\uff08\u9664\u304f\uff09 +FileSearchFiltering.ParentFilter.included=\uff08\u4ed8\u5c5e\uff09 +FileSearchFiltering.ParentFilter.or=, +FileSearchFiltering.ParentFilter.substring=\uff08\u30b5\u30d6\u30b9\u30c8\u30ea\u30f3\u30b0\uff09 +FileSearchFiltering.ParentSearchTerm.excludeString=\uff08\u9664\u304f\uff09 +FileSearchFiltering.ParentSearchTerm.fullString=\uff08\u5b8c\u5168\u4e00\u81f4\uff09 +FileSearchFiltering.ParentSearchTerm.includeString=\uff08\u542b\u3080\uff09 +FileSearchFiltering.ParentSearchTerm.subString=\uff08\u30b5\u30d6\u30b9\u30c8\u30ea\u30f3\u30b0\uff09 +FileSearchFiltering.PreviouslyNotableFilter.desc=\u4ee5\u524d\u306b\u6ce8\u76ee\u3068\u3057\u3066\u30de\u30fc\u30af\u3055\u308c\u305f\u3082\u306e +FileSearchFiltering.ScoreFilter.desc=\u30b9\u30b3\u30a2\uff1a{0} +FileSearchFiltering.SizeFilter.desc=\u30b5\u30a4\u30ba\uff1a{0} +FileSearchFiltering.SizeFilter.or=, +FileSearchFiltering.TagsFilter.desc=\u30bf\u30b0\u4ed8\u304d{0} +FileSearchFiltering.TagsFilter.or=, +FileSearchFiltering.UserCreatedFilter.desc=EXIF\u30c7\u30fc\u30bf\u3092\u542b\u3080 +FileSearchFiltering.concatenateSetNamesForDisplay.comma=, +FileSearchPanel.addButton.text=\u8ffd\u52a0 +FileSearchPanel.crFrequencyCheckbox.text=\u904e\u53bb\u306e\u767a\u751f\uff1a +FileSearchPanel.dataSourceCheckbox.text=\u30c7\u30fc\u30bf\u30fb\u30bd\u30fc\u30b9\uff1a +FileSearchPanel.deleteButton.text=\u524a\u9664 +FileSearchPanel.excludeRadioButton.text=\u9664\u5916\u3059\u308b +FileSearchPanel.filtersScrollPane.border.title=\u30d5\u30a3\u30eb\u30bf\u30fc +FileSearchPanel.fullRadioButton.text=\u6e80\u3005 +FileSearchPanel.groupByLabel.text=\u30b0\u30eb\u30fc\u30d7\u5316\uff1a +FileSearchPanel.hashSetCheckbox.text=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\uff1a +FileSearchPanel.includeRadioButton.text=\u542b\u3080 +FileSearchPanel.interestingItemsCheckbox.text=\u8208\u5473\u6df1\u3044\u30a2\u30a4\u30c6\u30e0\uff1a +FileSearchPanel.keywordCheckbox.text=\u30ad\u30fc\u30ef\u30fc\u30c9\uff1a +FileSearchPanel.knownFilesCheckbox.text=\u65e2\u77e5\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u975e\u8868\u793a +FileSearchPanel.notableCheckbox.text=\u6ce8\u76ee\u30bf\u30b0\u4ed8\u3051\u304c\u5fc5\u8981 +FileSearchPanel.objectsCheckbox.text=\u691c\u51fa\u3055\u308c\u305f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\uff1a +FileSearchPanel.orderByLabel.text=\u30b0\u30eb\u30fc\u30d7\u5185\u3067\u306e\u4e26\u3079\u66ff\u3048\uff1a +FileSearchPanel.orderGroupsByLabel.text=\u30b0\u30eb\u30fc\u30d7\u306e\u4e26\u3079\u66ff\u3048\uff1a +FileSearchPanel.parentCheckbox.text=\u89aa\u30d5\u30a9\u30eb\u30c0\uff1a +FileSearchPanel.parentLabel.text=\uff08\u3059\u3079\u3066\u4f7f\u7528\u3055\u308c\u307e\u3059\uff09 +FileSearchPanel.scoreCheckbox.text=\u30b9\u30b3\u30a2\u3042\u308a\uff1a +FileSearchPanel.sizeCheckbox.text=\u30d5\u30a1\u30a4\u30eb\u30b5\u30a4\u30ba\uff1a +FileSearchPanel.sortingPanel.border.title=\u30b0\u30eb\u30fc\u30d7\u5316 +FileSearchPanel.stepThreeLabel.text=\u30b9\u30c6\u30c3\u30d73\uff1a\u30c7\u30a3\u30b9\u30d7\u30ec\u30a4\u8a2d\u5b9a\u3092\u9078\u629e\u3059\u308b +FileSearchPanel.substringRadioButton.text=\u30b5\u30d6\u30b9\u30c8\u30ea\u30f3\u30b0 +FileSearchPanel.tagsCheckbox.text=\u30bf\u30b0\uff1a +FileSearchPanel.userCreatedCheckbox.text=\u30e6\u30fc\u30b6\u30fc\u4f5c\u6210\u306e\u53ef\u80fd\u6027\u6709\u308a +FileSorter.SortingMethod.datasource.displayName=\u30c7\u30fc\u30bf\u30fb\u30bd\u30fc\u30b9 +FileSorter.SortingMethod.filename.displayName=\u30d5\u30a1\u30a4\u30eb\u540d +FileSorter.SortingMethod.filesize.displayName=\u30d5\u30a1\u30a4\u30eb\u30b5\u30a4\u30ba +FileSorter.SortingMethod.filetype.displayName=\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7 +FileSorter.SortingMethod.frequency.displayName=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u983b\u5ea6 +FileSorter.SortingMethod.fullPath.displayName=\u30d5\u30eb\u30d1\u30b9 +FileSorter.SortingMethod.keywordlist.displayName=\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u540d +GroupListPanel.groupKeyList.border.title=\u30b0\u30eb\u30fc\u30d7 +GroupsListPanel.noResults.message.text=\u9078\u629e\u3057\u305f\u30d5\u30a3\u30eb\u30bf\u30fc\u306e\u7d50\u679c\u306f\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002\n\n\u6ce8\u610f\uff1a\n -\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u8b58\u5225\u30e2\u30b8\u30e5\u30fc\u30eb\u306f\u3001\u7d50\u679c\u3092\u691c\u7d22\u3059\u308b\u5404\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3067\u5b9f\u884c\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\n -\u904e\u53bb\u306e\u767a\u751f\u3067\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u3059\u308b\u5834\u5408\u306f\u3001\u5404\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3067\u30cf\u30c3\u30b7\u30e5\u30fb\u30eb\u30c3\u30af\u30a2\u30c3\u30d7\u30fb\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u5b9f\u884c\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\n -\u30e6\u30fc\u30b6\u30fc\u4f5c\u6210\u30b3\u30f3\u30c6\u30f3\u30c4\u3067\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u3059\u308b\u5834\u5408\u306f\u3001Exif\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u5404\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3067\u5b9f\u884c\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 +GroupsListPanel.noResults.title.text=\u7d50\u679c\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093 +HashSetFilterPanel.hashSetCheckbox.text=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\uff1a +ImageFilterPanel.imageFiltersSplitPane.border.title=\u30b9\u30c6\u30c3\u30d72\uff1a\u8868\u793a\u3059\u308b\u753b\u50cf\u306e\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0 +ImageThumbnailPanel.isDeleted.text=\u30d5\u30a1\u30a4\u30eb\u306e\u5168\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c\u524a\u9664\u3002 +ImageThumbnailPanel.nameLabel.more.text=\u305d\u306e\u4ed6{0}\u500b +InterestingItemFilterPanel.interestingItemsCheckbox.text=\u8208\u5473\u6df1\u3044\u30a2\u30a4\u30c6\u30e0\uff1a +InterestingItemsFilterPanel.interestingItemsCheckbox.text=\u8208\u5473\u6df1\u3044\u30a2\u30a4\u30c6\u30e0\uff1a +ObjectDetectedFilterPanel.text=\u691c\u51fa\u3055\u308c\u305f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\uff1a +OpenDiscoveryAction.resultsIncomplete.text=\u691c\u51fa\u7d50\u679c\u304c\u4e0d\u5b8c\u5168\u304b\u3082\u77e5\u308c\u307e\u305b\u3093 +ParentFolderFilterPanel.addButton.text=\u8ffd\u52a0 +ParentFolderFilterPanel.addButton.text_1=\u8ffd\u52a0 +ParentFolderFilterPanel.deleteButton.text=\u524a\u9664 +ParentFolderFilterPanel.deleteButton.text_1=\u524a\u9664 +ParentFolderFilterPanel.excludeRadioButton.text=\u9664\u5916\u3059\u308b +ParentFolderFilterPanel.excludeRadioButton.text_1=\u9664\u5916\u3059\u308b +ParentFolderFilterPanel.fullRadioButton.text=\u6e80\u3005 +ParentFolderFilterPanel.fullRadioButton.text_1=\u6e80\u3005 +ParentFolderFilterPanel.includeRadioButton.text=\u542b\u3080 +ParentFolderFilterPanel.includeRadioButton.text_1=\u542b\u3080 +ParentFolderFilterPanel.parentCheckbox.text=\u89aa\u30d5\u30a9\u30eb\u30c0\uff1a +ParentFolderFilterPanel.parentCheckbox.text_1=\u89aa\u30d5\u30a9\u30eb\u30c0\uff1a +ParentFolderFilterPanel.parentLabel.text=\uff08\u3059\u3079\u3066\u4f7f\u7528\u3055\u308c\u307e\u3059\uff09 +ParentFolderFilterPanel.parentLabel.text_1=\uff08\u3059\u3079\u3066\u4f7f\u7528\u3055\u308c\u307e\u3059\uff09 +ParentFolderFilterPanel.substringRadioButton.text=\u30b5\u30d6\u30b9\u30c8\u30ea\u30f3\u30b0 +ParentFolderFilterPanel.substringRadioButton.text_1=\u30b5\u30d6\u30b9\u30c8\u30ea\u30f3\u30b0 +PastOccurrencesFilterPanel.pastOccurrencesCheckbox.text=\u904e\u53bb\u306e\u767a\u751f\uff1a +ResultFile.score.interestingResult.description=\u30d5\u30a1\u30a4\u30eb\u306e\u4e00\u3064\u4ee5\u4e0a\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306b\u8208\u5473\u6df1\u3044\u7d50\u679c\u304c\u95a2\u9023\u4ed8\u3051\u3089\u308c\u3066\u3044\u307e\u3059\u3002 +ResultFile.score.notableFile.description=\u30d5\u30a1\u30a4\u30eb\u306e\u4e00\u3064\u4ee5\u4e0a\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306b\u6ce8\u76ee\u306b\u5024\u3059\u308b\u3082\u306e\u3068\u3057\u3066\u8a8d\u8b58\u3055\u308c\u307e\u3057\u305f\u3002 +ResultFile.score.notableTaggedFile.description=\u30d5\u30a1\u30a4\u30eb\u306e\u4e00\u3064\u4ee5\u4e0a\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306b\u6ce8\u76ee\u3059\u3079\u304d\u30bf\u30b0\u304c\u4ed8\u3051\u3089\u308c\u3066\u3044\u307e\u3059\u3002 +ResultFile.score.taggedFile.description=\u30d5\u30a1\u30a4\u30eb\u306e\u4e00\u3064\u4ee5\u4e0a\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c\u30bf\u30b0\u4ed8\u3051\u3055\u308c\u3066\u3044\u307e\u3059\u3002 +ResultsPanel.currentPage.displayValue=\u30da\u30fc\u30b8\uff1a{0} / {1} +ResultsPanel.currentPageLabel.text=\u30da\u30fc\u30b8\uff1a- +ResultsPanel.documentPreview.text=\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u30fb\u30d7\u30ec\u30d3\u30e5\u30fc\u306e\u4f5c\u6210\u304c\u30ad\u30e3\u30f3\u30bb\u30eb\u3055\u308c\u307e\u3057\u305f\u3002 +ResultsPanel.gotoPageLabel.text=\u30da\u30fc\u30b8\u306b\u79fb\u52d5\uff1a +ResultsPanel.invalidPageNumber.message=\u9078\u629e\u3057\u305f\u30da\u30fc\u30b8\u756a\u53f7{0}\u306f\u5b58\u5728\u3057\u307e\u305b\u3093\u3002 1\u301c{1}\u306e\u5024\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +ResultsPanel.invalidPageNumber.title=\u7121\u52b9\u306a\u30da\u30fc\u30b8\u756a\u53f7 +ResultsPanel.openInExternalViewer.name=\u5916\u90e8\u30d3\u30e5\u30fc\u30a2\u3067\u958b\u304f +ResultsPanel.pageControlsLabel.text=\u30da\u30fc\u30b8\uff1a +ResultsPanel.pageSizeLabel.text=\u30da\u30fc\u30b8\u30b5\u30a4\u30ba\uff1a +ResultsPanel.unableToCreate.text=\u6982\u8981\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3002 +ResultsPanel.viewFileInDir.name=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u8868\u793a +ResultsSplitPaneDivider.detailsLabel.text=\u8a73\u7d30\u30a8\u30ea\u30a2 +SizeFilterPanel.sizeCheckbox.text=\u30d5\u30a1\u30a4\u30eb\u30b5\u30a4\u30ba\uff1a +UserCreatedFilterPanel.userCreatedCheckbox.text=\u30e6\u30fc\u30b6\u30fc\u4f5c\u6210\u306e\u53ef\u80fd\u6027\u6709\u308a +UserCreatedFilterPanel.userCreatedCheckbox.text_1=\u30e6\u30fc\u30b6\u30fc\u4f5c\u6210\u306e\u53ef\u80fd\u6027\u6709\u308a +VideoFilterPanel.videoFiltersSplitPane.border.title=\u30b9\u30c6\u30c3\u30d72\uff1a\u8868\u793a\u3059\u308b\u52d5\u753b\u3092\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u3059\u308b +VideoThumbnailPanel.bytes.text=\u30d0\u30a4\u30c8 +VideoThumbnailPanel.deleted.text=\u30d5\u30a1\u30a4\u30eb\u306e\u5168\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u524a\u9664\u3002 +VideoThumbnailPanel.kiloBytes.text=KB +VideoThumbnailPanel.megaBytes.text=MB +VideoThumbnailPanel.nameLabel.more.text=\u305d\u306e\u4ed6{0}\u500b +VideoThumbnailPanel.sizeLabel.text=\u30b5\u30a4\u30ba\uff1a{0} {1} +VideoThumbnailPanel.terraBytes.text=TB diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/DataSourceModulesWrapper.java b/Core/src/org/sleuthkit/autopsy/discovery/ui/DataSourceModulesWrapper.java index b1981d22aa..3aa0e0fe12 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/DataSourceModulesWrapper.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/DataSourceModulesWrapper.java @@ -19,9 +19,9 @@ package org.sleuthkit.autopsy.discovery.ui; import org.openide.util.NbBundle.Messages; -import org.sleuthkit.autopsy.modules.exif.ExifParserModuleFactory; import org.sleuthkit.autopsy.modules.filetypeid.FileTypeIdModuleFactory; import org.sleuthkit.autopsy.modules.hashdatabase.HashLookupModuleFactory; +import org.sleuthkit.autopsy.modules.pictureanalyzer.PictureAnalyzerIngestModuleFactory; import org.sleuthkit.datamodel.IngestJobInfo; import org.sleuthkit.datamodel.IngestModuleInfo; @@ -118,7 +118,7 @@ class DataSourceModulesWrapper { * data source. */ private void updateExifStatus(IngestModuleInfo moduleInfo) { - if (!exifModuleRun && moduleInfo.getDisplayName().equals(ExifParserModuleFactory.getModuleName())) { + if (!exifModuleRun && moduleInfo.getDisplayName().equals(PictureAnalyzerIngestModuleFactory.getModuleName())) { exifModuleRun = true; } } diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/GroupListPanel.java b/Core/src/org/sleuthkit/autopsy/discovery/ui/GroupListPanel.java index 6a185b70ab..b1791c3ff3 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/GroupListPanel.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/GroupListPanel.java @@ -21,6 +21,8 @@ package org.sleuthkit.autopsy.discovery.ui; import org.sleuthkit.autopsy.discovery.search.AbstractFilter; import com.google.common.eventbus.Subscribe; import java.awt.Cursor; +import java.awt.Graphics2D; +import java.awt.font.FontRenderContext; import java.util.List; import java.util.Map; import javax.swing.DefaultListCellRenderer; @@ -209,11 +211,28 @@ final class GroupListPanel extends javax.swing.JPanel { if (newValue instanceof GroupKey) { String valueString = newValue.toString(); setToolTipText(valueString); - //if paths would be longer than 37 characters shorten them to be 37 characters - if (groupingAttribute instanceof DiscoveryAttributes.ParentPathAttribute && valueString.length() > 37) { - valueString = valueString.substring(0, 16) + " ... " + valueString.substring(valueString.length() - 16); + valueString += " (" + groupMap.get(newValue) + ")"; + + if (groupingAttribute instanceof DiscoveryAttributes.ParentPathAttribute) { + // Using the list FontRenderContext instead of this because + // the label RenderContext was sometimes null, but this should work. + FontRenderContext context = ((Graphics2D) list.getGraphics()).getFontRenderContext(); + + //Determine the width of the string with the given font. + double stringWidth = getFont().getStringBounds(valueString, context).getWidth(); + // subtracting 10 from the width as a littl inset. + int listWidth = list.getWidth() - 10; + + if (stringWidth > listWidth) { + double avgCharWidth = Math.floor(stringWidth / valueString.length()); + + // The extra 5 is to account for the " ... " that is being added back. + int charToRemove = (int) Math.ceil((stringWidth - listWidth) / avgCharWidth) + 5; + int charactersToShow = (int) Math.ceil((valueString.length() - charToRemove) / 2); + valueString = valueString.substring(0, charactersToShow) + " ... " + valueString.substring(valueString.length() - charactersToShow); + } } - newValue = valueString + " (" + groupMap.get(newValue) + ")"; + newValue = valueString; } super.getListCellRendererComponent(list, newValue, index, isSelected, cellHasFocus); return this; diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/OpenDiscoveryAction.java b/Core/src/org/sleuthkit/autopsy/discovery/ui/OpenDiscoveryAction.java index adff2a38d4..2931a962dd 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/OpenDiscoveryAction.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/OpenDiscoveryAction.java @@ -38,7 +38,7 @@ import org.sleuthkit.autopsy.casemodule.Case; */ @ActionID(category = "Tools", id = "org.sleuthkit.autopsy.newpackage.OpenDiscoveryAction") @ActionReferences(value = { - @ActionReference(path = "Menu/Tools", position = 103) + @ActionReference(path = "Menu/Tools", position = 105) , @ActionReference(path = "Toolbars/Case", position = 105)}) @ActionRegistration(displayName = "#CTL_OpenDiscoveryAction", lazy = false) diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/filesearch/Bundle_ja.properties index 514fc8b0bc..a4ad1d256f 100644 --- a/Core/src/org/sleuthkit/autopsy/filesearch/Bundle_ja.properties +++ b/Core/src/org/sleuthkit/autopsy/filesearch/Bundle_ja.properties @@ -1,74 +1,73 @@ -DataSourceFilter.errorMessage.emptyDataSource=\u5c11\u306a\u304f\u3068\u30821\u3064\u306e\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3092\u9078\u629e\u3057\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 -DateSearchFilter.errorMessage.endDateBeforeStartDate=\u7d42\u4e86\u65e5\u306f\u958b\u59cb\u65e5\u3088\u308a\u5f8c\u306e\u65e5\u4ed8\u3067\u3042\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 +#Tue Aug 18 18:09:21 UTC 2020 DataSourceFilter.errorMessage.emptyDataSource=\u5c11\u306a\u304f\u3068\u30821\u3064\u306e\u30c7\u30fc\u30bf\u30bf\u30a4\u30d7\u306e\u30c1\u30a7\u30c3\u30af\u30dc\u30c3\u30af\u30b9\u3092\u9078\u629e\u3057\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 -FileSearchPanel.emptyNode.display.text=\u8a72\u5f53\u3059\u308b\u7d50\u679c\u304c\u3042\u308a\u307e\u305b\u3093\u3002 -HashSearchFilter.errorMessage.emptyHash=\u30cf\u30c3\u30b7\u30e5\u30c7\u30fc\u30bf\u304c\u7a7a(\u672a\u5165\u529b)\u3067\u3059\u3002 -HashSearchFilter.errorMessage.wrongCharacter=MD5\u306b\u7121\u52b9\u306a16\u9032\u6570\u6587\u5b57\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002 -# {0} - \u30cf\u30c3\u30b7\u30e5\u30c7\u30fc\u30bf\u9577 -HashSearchFilter.errorMessage.wrongLength=\u5165\u529b\u306e\u9577\u3055({0}) \u304cMD5\u306e\u9577\u3055(32)\u3068\u4e00\u81f4\u3057\u307e\u305b\u3093\u3002 -KnownStatusSearchFilter.errorMessage.noKnownStatusCheckboxSelected=\u5c11\u306a\u304f\u3068\u30821\u3064\u306e\u65e2\u77e5\u306e\u30b9\u30c6\u30fc\u30bf\u30b9\u30c1\u30a7\u30c3\u30af\u30dc\u30c3\u30af\u30b9\u3092\u9078\u629e\u3057\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 -MimeTypeFilter.errorMessage.emptyMimeType=\u5c11\u306a\u304f\u3068\u30821\u3064\u306eMIME\u30bf\u30a4\u30d7\u3092\u9078\u629e\u3057\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 -NameSearchFilter.errorMessage.emtpyName=\u691c\u7d22\u3059\u308b\u540d\u524d\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -OpenIDE-Module-Name=FileSearch -KnownStatusSearchPanel.knownCheckBox.text=\u65e2\u77e5\u306e\u30b9\u30c6\u30fc\u30bf\u30b9: -KnownStatusSearchPanel.knownBadOptionCheckBox.text=\u9855\u8457 -KnownStatusSearchPanel.knownOptionCheckBox.text=\u65e2\u77e5(NSRL\u307e\u305f\u306f\u305d\u306e\u4ed6) -KnownStatusSearchPanel.unknownOptionCheckBox.text=\u4e0d\u660e -DateSearchFilter.noneSelectedMsg.text=\u5c11\u306a\u304f\u3068\u30821\u3064\u306e\u30c7\u30fc\u30bf\u30bf\u30a4\u30d7\u3092\u9078\u629e\u3057\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093! -DateSearchPanel.dateCheckBox.text=\u65e5\u4ed8: -DateSearchPanel.jLabel4.text=\u30bf\u30a4\u30e0\u30be\u30fc\u30f3: -DateSearchPanel.createdCheckBox.text=\u4f5c\u6210\u6e08\u307f +DataSourcePanel.dataSourceCheckBox.actionCommand=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\: +DataSourcePanel.dataSourceCheckBox.label=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\: +DataSourcePanel.dataSourceCheckBox.text=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\: +DataSourcePanel.dataSourceNoteLabel.text=*\u6ce8\: \u8907\u6570\u306e\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3092\u9078\u629e\u3067\u304d\u307e\u3059 +DateSearchFilter.errorMessage.endDateBeforeStartDate=\u7d42\u4e86\u65e5\u306f\u958b\u59cb\u65e5\u3088\u308a\u5f8c\u306e\u65e5\u4ed8\u3067\u3042\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 +DateSearchFilter.noneSelectedMsg.text=\u5c11\u306a\u304f\u3068\u30821\u3064\u306e\u30c7\u30fc\u30bf\u30bf\u30a4\u30d7\u3092\u9078\u629e\u3057\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\! DateSearchPanel.accessedCheckBox.text=\u30a2\u30af\u30bb\u30b9\u6e08\u307f DateSearchPanel.changedCheckBox.text=\u5909\u66f4\u6e08\u307f -DateSearchPanel.modifiedCheckBox.text=\u4fee\u6b63\u6e08\u307f +DateSearchPanel.copyMenuItem.text=\u30b3\u30d4\u30fc +DateSearchPanel.createdCheckBox.text=\u4f5c\u6210\u6e08\u307f +DateSearchPanel.cutMenuItem.text=\u5207\u308a\u53d6\u308a +DateSearchPanel.dateCheckBox.text=\u65e5\u4ed8\: +DateSearchPanel.dateFormatLabel.text=*\u65e5\u4ed8\u306e\u5f62\u5f0f\u306fmm/dd/yyyy\u3067\u3059 DateSearchPanel.jLabel1.text=\u5b9b\u5148 -NameSearchPanel.nameCheckBox.text=\u540d\u524d: -NameSearchPanel.noteNameLabel.text=*\u6ce8: \u540d\u524d\u7167\u5408\u306f\u5927\u6587\u5b57\u5c0f\u6587\u5b57\u3092\u533a\u5225\u305b\u305a\u306b\u3001\u30d5\u30a1\u30a4\u30eb\u540d\u306e\u4e00\u90e8\u3068\u7167\u5408\u3057\u307e\u3059\u3002\u6b63\u898f\u8868\u73fe\u306f\u73fe\u5728\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 +DateSearchPanel.jLabel4.text=\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\: +DateSearchPanel.modifiedCheckBox.text=\u4fee\u6b63\u6e08\u307f +DateSearchPanel.noLimitLabel.text=*\u7a7a\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u306f\u300c\u5236\u9650\u306a\u3057\u300d\u3092\u610f\u5473\u3057\u307e\u3059 +DateSearchPanel.pasteMenuItem.text=\u8cbc\u308a\u4ed8\u3051 +DateSearchPanel.selectAllMenuItem.text=\u3059\u3079\u3066\u9078\u629e +FileSearchAction.getName.text=\u5c5e\u6027\u5225\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u691c\u7d22 +FileSearchDialog.frame.msg=\u5c5e\u6027\u5225\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u691c\u7d22 +FileSearchDialog.frame.title=\u5c5e\u6027\u5225\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u691c\u7d22 +FileSearchPanel.custComp.label.text=\u6b21\u306e\u6761\u4ef6\u306b\u4e00\u81f4\u3059\u308b\u30d5\u30a1\u30a4\u30eb\u3092\u691c\u7d22\: +FileSearchPanel.emptyNode.display.text=\u8a72\u5f53\u3059\u308b\u7d50\u679c\u304c\u3042\u308a\u307e\u305b\u3093\u3002 +FileSearchPanel.emptyWhereClause.text=\u7121\u52b9\u306a\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u3059\u3002\u8868\u793a\u3059\u308b\u3082\u306e\u306f\u3042\u308a\u307e\u305b\u3093\u3002 +FileSearchPanel.errorLabel.text=\ +FileSearchPanel.filterTitle.knownStatus=\u65e2\u77e5\u306e\u30b9\u30c6\u30fc\u30bf\u30b9 +FileSearchPanel.filterTitle.metadata=\u30e1\u30bf\u30c7\u30fc\u30bf +FileSearchPanel.filterTitle.name=\u540d\u524d +FileSearchPanel.search.exception.noFilterSelected.msg=\u5c11\u306a\u304f\u3068\u30821\u3064\u306e\u30d5\u30a3\u30eb\u30bf\u30fc\u3092\u9078\u629e\u3057\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 +FileSearchPanel.search.results.details=\u4e00\u81f4\u3059\u308b\u7d50\u679c\u6570\u304c\u591a\u3044\u3068\u3001\u4e00\u90e8\u306e\u64cd\u4f5c\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306b\u5f71\u97ff\u3059\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002 +FileSearchPanel.search.results.msg=\u30d5\u30a1\u30a4\u30eb\u691c\u7d22\: \u4e00\u81f4\u3059\u308b\u7d50\u679c\u304c {0} \u4ef6\u898b\u3064\u304b\u308a\u307e\u3057\u305f +FileSearchPanel.search.results.pathText=\u30d5\u30a1\u30a4\u30eb\u540d\u691c\u7d22\u7d50\u679c\: +FileSearchPanel.search.results.title=\u30d5\u30a1\u30a4\u30eb\u691c\u7d22\u7d50\u679c {0} +FileSearchPanel.search.validationErr.msg=\u691c\u8a3c\u30a8\u30e9\u30fc\: {0} +FileSearchPanel.searchButton.text=\u691c\u7d22 +HashSearchFilter.errorMessage.emptyHash=\u30cf\u30c3\u30b7\u30e5\u30c7\u30fc\u30bf\u304c\u7a7a(\u672a\u5165\u529b)\u3067\u3059\u3002 +HashSearchFilter.errorMessage.wrongCharacter=MD5\u306b\u7121\u52b9\u306a16\u9032\u6570\u6587\u5b57\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002 +HashSearchFilter.errorMessage.wrongLength=\u5165\u529b\u306e\u9577\u3055({0}) \u304cMD5\u306e\u9577\u3055(32)\u3068\u4e00\u81f4\u3057\u307e\u305b\u3093\u3002 +HashSearchPanel.emptyHashMsg.text=\u30cf\u30c3\u30b7\u30e5\u691c\u7d22\u306b\u4f55\u304b\u5165\u529b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 +HashSearchPanel.md5CheckBox.text=MD5\: +KnownStatusSearchFilter.errorMessage.noKnownStatusCheckboxSelected=\u5c11\u306a\u304f\u3068\u30821\u3064\u306e\u65e2\u77e5\u306e\u30b9\u30c6\u30fc\u30bf\u30b9\u30c1\u30a7\u30c3\u30af\u30dc\u30c3\u30af\u30b9\u3092\u9078\u629e\u3057\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 +KnownStatusSearchFilter.noneSelectedMsg.text=\u5c11\u306a\u304f\u3068\u30821\u3064\u306e\u65e2\u77e5\u306e\u30b9\u30c6\u30fc\u30bf\u30b9\u3092\u9078\u629e\u3057\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\! +KnownStatusSearchPanel.knownBadOptionCheckBox.text=\u9855\u8457 +KnownStatusSearchPanel.knownCheckBox.text=\u65e2\u77e5\u306e\u30b9\u30c6\u30fc\u30bf\u30b9\: +KnownStatusSearchPanel.knownOptionCheckBox.text=\u65e2\u77e5(NSRL\u307e\u305f\u306f\u305d\u306e\u4ed6) +KnownStatusSearchPanel.unknownOptionCheckBox.text=\u4e0d\u660e +MimeTypeFilter.errorMessage.emptyMimeType=\u5c11\u306a\u304f\u3068\u30821\u3064\u306eMIME\u30bf\u30a4\u30d7\u3092\u9078\u629e\u3057\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 +MimeTypePanel.mimeTypeCheckBox.text=MIME\u30bf\u30a4\u30d7\: +MimeTypePanel.noteLabel.text=*\u8907\u6570\u306eMIME\u30bf\u30a4\u30d7\u3092\u9078\u629e\u3067\u304d\u307e\u3059 +NameSearchFilter.emptyNameMsg.text=\u540d\u524d\u691c\u7d22\u306b\u4f55\u304b\u5165\u529b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 +NameSearchFilter.errorMessage.emtpyName=\u691c\u7d22\u3059\u308b\u540d\u524d\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +NameSearchPanel.copyMenuItem.text=\u30b3\u30d4\u30fc +NameSearchPanel.cutMenuItem.text=\u5207\u308a\u53d6\u308a +NameSearchPanel.nameCheckBox.text=\u540d\u524d\: +NameSearchPanel.noteNameLabel.text=*\u6ce8\: \u540d\u524d\u7167\u5408\u306f\u5927\u6587\u5b57\u5c0f\u6587\u5b57\u3092\u533a\u5225\u305b\u305a\u306b\u3001\u30d5\u30a1\u30a4\u30eb\u540d\u306e\u4e00\u90e8\u3068\u7167\u5408\u3057\u307e\u3059\u3002\u6b63\u898f\u8868\u73fe\u306f\u73fe\u5728\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 +NameSearchPanel.pasteMenuItem.text=\u8cbc\u308a\u4ed8\u3051 NameSearchPanel.searchTextField.text= +NameSearchPanel.selectAllMenuItem.text=\u3059\u3079\u3066\u9078\u629e +OpenIDE-Module-Name=FileSearch +SearchNode.getName.text=\u691c\u7d22\u7d50\u679c SizeSearchFilter.errorMessage.nonNegativeNumber=\u5165\u529b\u30b5\u30a4\u30ba\u30c7\u30fc\u30bf\u306f\u8ca0\u306e\u6570\u3067\u3059\u3002 SizeSearchFilter.errorMessage.notANumber=\u5165\u529b\u30b5\u30a4\u30ba\u30c7\u30fc\u30bf\u306f\u6570\u5b57\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 -SizeSearchPanel.sizeCheckBox.text=\u30b5\u30a4\u30ba: -NameSearchPanel.cutMenuItem.text=\u5207\u308a\u53d6\u308a -NameSearchPanel.copyMenuItem.text=\u30b3\u30d4\u30fc -NameSearchPanel.pasteMenuItem.text=\u8cbc\u308a\u4ed8\u3051 -NameSearchPanel.selectAllMenuItem.text=\u3059\u3079\u3066\u9078\u629e -SizeSearchPanel.selectAllMenuItem.text=\u3059\u3079\u3066\u9078\u629e -SizeSearchPanel.pasteMenuItem.text=\u8cbc\u308a\u4ed8\u3051 SizeSearchPanel.copyMenuItem.text=\u30b3\u30d4\u30fc SizeSearchPanel.cutMenuItem.text=\u5207\u308a\u53d6\u308a -DateSearchPanel.cutMenuItem.text=\u5207\u308a\u53d6\u308a -DateSearchPanel.selectAllMenuItem.text=\u3059\u3079\u3066\u9078\u629e -DateSearchPanel.pasteMenuItem.text=\u8cbc\u308a\u4ed8\u3051 -DateSearchPanel.copyMenuItem.text=\u30b3\u30d4\u30fc -FileSearchAction.getName.text=\u5c5e\u6027\u5225\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u691c\u7d22 -FileSearchDialog.frame.title=\u5c5e\u6027\u5225\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u691c\u7d22 -FileSearchDialog.frame.msg=\u5c5e\u6027\u5225\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u691c\u7d22 -FileSearchPanel.custComp.label.text=\u6b21\u306e\u6761\u4ef6\u306b\u4e00\u81f4\u3059\u308b\u30d5\u30a1\u30a4\u30eb\u3092\u691c\u7d22: -FileSearchPanel.filterTitle.name=\u540d\u524d -FileSearchPanel.filterTitle.metadata=\u30e1\u30bf\u30c7\u30fc\u30bf -FileSearchPanel.filterTitle.knownStatus=\u65e2\u77e5\u306e\u30b9\u30c6\u30fc\u30bf\u30b9 -FileSearchPanel.search.results.title=\u30d5\u30a1\u30a4\u30eb\u691c\u7d22\u7d50\u679c {0} -FileSearchPanel.search.results.pathText=\u30d5\u30a1\u30a4\u30eb\u540d\u691c\u7d22\u7d50\u679c: -FileSearchPanel.search.results.msg=\u30d5\u30a1\u30a4\u30eb\u691c\u7d22: \u4e00\u81f4\u3059\u308b\u7d50\u679c\u304c {0} \u4ef6\u898b\u3064\u304b\u308a\u307e\u3057\u305f -FileSearchPanel.search.results.details=\u4e00\u81f4\u3059\u308b\u7d50\u679c\u6570\u304c\u591a\u3044\u3068\u3001\u4e00\u90e8\u306e\u64cd\u4f5c\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306b\u5f71\u97ff\u3059\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002 -FileSearchPanel.search.exception.noFilterSelected.msg=\u5c11\u306a\u304f\u3068\u30821\u3064\u306e\u30d5\u30a3\u30eb\u30bf\u30fc\u3092\u9078\u629e\u3057\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 -FileSearchPanel.search.validationErr.msg=\u691c\u8a3c\u30a8\u30e9\u30fc: {0} -FileSearchPanel.emptyWhereClause.text=\u7121\u52b9\u306a\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u3059\u3002\u8868\u793a\u3059\u308b\u3082\u306e\u306f\u3042\u308a\u307e\u305b\u3093\u3002 -KnownStatusSearchFilter.noneSelectedMsg.text=\u5c11\u306a\u304f\u3068\u30821\u3064\u306e\u65e2\u77e5\u306e\u30b9\u30c6\u30fc\u30bf\u30b9\u3092\u9078\u629e\u3057\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093! -NameSearchFilter.emptyNameMsg.text=\u540d\u524d\u691c\u7d22\u306b\u4f55\u304b\u5165\u529b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 -SearchNode.getName.text=\u691c\u7d22\u7d50\u679c +SizeSearchPanel.pasteMenuItem.text=\u8cbc\u308a\u4ed8\u3051 +SizeSearchPanel.selectAllMenuItem.text=\u3059\u3079\u3066\u9078\u629e +SizeSearchPanel.sizeCheckBox.text=\u30b5\u30a4\u30ba\: SizeSearchPanel.sizeCompareComboBox.equalTo=\u76f8\u5f53 SizeSearchPanel.sizeCompareComboBox.greaterThan=\u4ee5\u4e0a SizeSearchPanel.sizeCompareComboBox.lessThan=\u4ee5\u4e0b -FileSearchPanel.searchButton.text=\u691c\u7d22 -MimeTypePanel.mimeTypeCheckBox.text=MIME\u30bf\u30a4\u30d7: -HashSearchPanel.md5CheckBox.text=MD5: -HashSearchPanel.emptyHashMsg.text=\u30cf\u30c3\u30b7\u30e5\u691c\u7d22\u306b\u4f55\u304b\u5165\u529b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 -FileSearchPanel.errorLabel.text=\ -DataSourcePanel.dataSourceCheckBox.label=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9: -DataSourcePanel.dataSourceCheckBox.actionCommand=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9: -DataSourcePanel.dataSourceCheckBox.text=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9: -DataSourcePanel.dataSourceNoteLabel.text=*\u6ce8: \u8907\u6570\u306e\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3092\u9078\u629e\u3067\u304d\u307e\u3059 -DateSearchPanel.noLimitLabel.text=*\u7a7a(\u672a\u5165\u529b)\u306e\u30d5\u30a3\u30fc\u30c9\u306f\u300c\u5236\u9650\u306a\u3057\u300d\u3092\u610f\u5473\u3057\u307e\u3059 -DateSearchPanel.dateFormatLabel.text=*\u65e5\u4ed8\u5f62\u5f0f\u306fmm/dd/yyyy\u3067\u3059 -MimeTypePanel.noteLabel.text=*\u6ce8: \u8907\u6570\u306eMIME\u30bf\u30a4\u30d7\u3092\u9078\u629e\u3067\u304d\u307e\u3059 diff --git a/Core/src/org/sleuthkit/autopsy/geolocation/Bundle.properties b/Core/src/org/sleuthkit/autopsy/geolocation/Bundle.properties index 6d3f5b4b66..77a2b221ee 100755 --- a/Core/src/org/sleuthkit/autopsy/geolocation/Bundle.properties +++ b/Core/src/org/sleuthkit/autopsy/geolocation/Bundle.properties @@ -36,3 +36,4 @@ MapPanel.zoomInBtn.text= MapPanel.zoomOutBtn.text= GeoFilterPanel.showLabel.text=Show: GeoFilterPanel.showLabel.toolTipText=Show: +GeoFilterPanel.atCBPanel.AccessibleContext.accessibleName= diff --git a/Core/src/org/sleuthkit/autopsy/geolocation/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/geolocation/Bundle.properties-MERGED index d16fa37761..ddec131b05 100755 --- a/Core/src/org/sleuthkit/autopsy/geolocation/Bundle.properties-MERGED +++ b/Core/src/org/sleuthkit/autopsy/geolocation/Bundle.properties-MERGED @@ -77,4 +77,5 @@ MapPanel.zoomInBtn.text= MapPanel.zoomOutBtn.text= GeoFilterPanel.showLabel.text=Show: GeoFilterPanel.showLabel.toolTipText=Show: +GeoFilterPanel.atCBPanel.AccessibleContext.accessibleName= WaypointExtractAction_label=Extract Files(s) diff --git a/Core/src/org/sleuthkit/autopsy/geolocation/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/geolocation/Bundle_ja.properties new file mode 100644 index 0000000000..ab993ea889 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/geolocation/Bundle_ja.properties @@ -0,0 +1,39 @@ +#Tue Aug 18 18:09:21 UTC 2020 +GLTopComponent_No_dataSource_Title=\u30b8\u30aa\u30ed\u30b1\u30fc\u30b7\u30e7\u30f3\u30fb\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u306f\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f +GLTopComponent_No_dataSource_message=\u30b8\u30aa\u30ed\u30b1\u30fc\u30b7\u30e7\u30f3\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u3092\u542b\u3080\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u306f\u3042\u308a\u307e\u305b\u3093\u3002 +GLTopComponent_initilzation_error=\u30a6\u30a7\u30a4\u30dd\u30a4\u30f3\u30c8\u306e\u521d\u671f\u5316\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 \u4f4d\u7f6e\u60c5\u5831\u30c7\u30fc\u30bf\u304c\u4e0d\u5b8c\u5168\u3067\u3042\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002 +GeoFilterPanel.allButton.text=\u5168\u3066 +GeoFilterPanel.mostRecentButton.text=\u6700\u5f8c\u306e\u307f +GeoFilterPanel.optionsLabel.text=\u65e5\u4ed8 +GeoFilterPanel.showLabel.text=\u8868\u793a\uff1a +GeoFilterPanel.showLabel.toolTipText=\u8868\u793a\uff1a +GeoFilterPanel_ArtifactType_List_Title=\u30bf\u30a4\u30d7 +GeoFilterPanel_empty_artifactType=\u30d5\u30a3\u30eb\u30bf\u30fc\u3092\u9069\u7528\u3067\u304d\u307e\u305b\u3093\u30021\u3064\u4ee5\u4e0a\u306e\u6848\u4ef6\u30bf\u30a4\u30d7\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +GeoFilterPanel_empty_dataSource=\u30d5\u30a3\u30eb\u30bf\u3092\u9069\u7528\u3067\u304d\u307e\u305b\u3093\u30021\u3064\u4ee5\u4e0a\u306e\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +GeoTopComponent_filter_exception_msg=\u30a6\u30a7\u30a4\u30dd\u30a4\u30f3\u30c8\u306e\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u4e2d\u306b\u4f8b\u5916\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 +GeolocationSettingsPanel.defaultDataSource.text=\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30aa\u30f3\u30e9\u30a4\u30f3\u30fb\u30bf\u30a4\u30eb\u30b5\u30fc\u30d0\u30fc\uff08bing.com/maps\uff09 +GeolocationSettingsPanel.mbtileTestBtn.text=\u30c6\u30b9\u30c8 +GeolocationSettingsPanel.mbtilesBrowseBtn.text=\u30d6\u30e9\u30a6\u30ba +GeolocationSettingsPanel.mbtilesRBtn.text=MBTiles\u30d5\u30a1\u30a4\u30eb +GeolocationSettingsPanel.osmServerRBnt.text=OpenStreetMap\u30b5\u30fc\u30d0\u30fc +GeolocationSettingsPanel.serverTestBtn.text=\u30c6\u30b9\u30c8 +GeolocationSettingsPanel.tilePane.border.title=Map Tile \u30c7\u30fc\u30bf\u30bd\u30fc\u30b9 +GeolocationSettingsPanel.zipFileBrowseBnt.text=\u30d6\u30e9\u30a6\u30ba +GeolocationSettingsPanel.zipFileRBnt.actionCommand=OpenStreetMap\u30bf\u30a4\u30eb\u306eZIP\u30d5\u30a1\u30a4\u30eb +GeolocationSettingsPanel.zipFileRBnt.text=OpenStreetMap zip\u30d5\u30a1\u30a4\u30eb +GeolocationSettingsPanel_malformed_url_message=\u300c\u6307\u5b9a\u3055\u308c\u305fOSM\u30bf\u30a4\u30eb\u30b5\u30fc\u30d0\u30fc\u30a2\u30c9\u30ec\u30b9\u306f\u7121\u52b9\u3067\u3059\u3002\n\u5148\u982d\u306bhttp\uff1a//\u304c\u4ed8\u3044\u305f\u5f62\u5f0f\u306eURL\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044 +GeolocationSettingsPanel_osm_server_test_success_message=\u6307\u5b9a\u3055\u308c\u305fOSM\u30bf\u30a4\u30eb\u30b5\u30fc\u30d0\u30fc\u30a2\u30c9\u30ec\u30b9\u306f\u6709\u52b9\u3067\u3059\u3002 +GeolocationSettings_mbtile_does_not_exist_message=\u63d0\u4f9b\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u306f\u5b58\u5728\u3057\u307e\u305b\u3093\u3002\n\u30d5\u30a1\u30a4\u30eb\u304c\u5b58\u5728\u3059\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u3001\u3082\u3046\u4e00\u5ea6\u304a\u8a66\u3057\u304f\u3060\u3055\u3044\u3002 +GeolocationSettings_mbtile_does_not_exist_title=\u30d5\u30a1\u30a4\u30eb\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093 +GeolocationSettings_mbtile_not_valid_message=\u63d0\u4f9b\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u306fraster tile\u30d5\u30a1\u30a4\u30eb\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 +GeolocationSettings_mbtile_not_valid_title=\u30d5\u30a1\u30a4\u30eb\u304c\u7121\u52b9\u3067\u3059 +GeolocationSettings_mbtile_test_success_message=\u63d0\u4f9b\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u306f\u6709\u52b9\u306ambtile raster \u3067\u3059\u3002 +GeolocationSettings_mbtile_test_success_title=\u6210\u529f +GeolocationSettings_path_not_valid_message=\u63d0\u4f9b\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9\u306f\u7a7a\u3067\u3059\u3002\n\u6709\u52b9\u306a\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +GeolocationSettings_path_not_valid_title=\u30d5\u30a1\u30a4\u30eb\u304c\u7121\u52b9\u3067\u3059 +GeolocationTC_KML_report_title=KML\u30ec\u30dd\u30fc\u30c8 +GeolocationTC_empty_waypoint_message=\u30a6\u30a7\u30a4\u30dd\u30a4\u30f3\u30c8\u304c\u306a\u3044\u305f\u3081\u3001KML\u30ec\u30dd\u30fc\u30c8\u3092\u751f\u6210\u3067\u304d\u307e\u305b\u3093\u3002\nKML\u30ec\u30dd\u30fc\u30c8\u3092\u751f\u6210\u3059\u308b\u524d\u306b\u30a6\u30a7\u30a4\u30dd\u30a4\u30f3\u30c8\u304c\u8868\u793a\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044 +GeolocationTC_report_progress_title=KML\u30ec\u30dd\u30fc\u30c8\u306e\u9032\u884c\u72b6\u6cc1 +GeolocationTopComponent.WaypointFetcher.onErrorDescription=GPS\u30c8\u30e9\u30c3\u30af\u30c7\u30fc\u30bf\u306e\u53ce\u96c6\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 \u4e00\u90e8\u306e\u7d50\u679c\u306f\u9664\u5916\u3055\u308c\u3066\u3044\u307e\u3059\u3002 +GeolocationTopComponent.WaypointFetcher.onErrorTitle=GPS\u30c8\u30e9\u30c3\u30af\u30c7\u30fc\u30bf\u306e\u53ce\u96c6\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f +GeolocationTopComponent.reportButton.text=KML\u30ec\u30dd\u30fc\u30c8 diff --git a/Core/src/org/sleuthkit/autopsy/geolocation/GeoFilterPanel.form b/Core/src/org/sleuthkit/autopsy/geolocation/GeoFilterPanel.form index f19020d8c6..720f4d8a55 100755 --- a/Core/src/org/sleuthkit/autopsy/geolocation/GeoFilterPanel.form +++ b/Core/src/org/sleuthkit/autopsy/geolocation/GeoFilterPanel.form @@ -9,6 +9,14 @@
+ + + + + + + + @@ -40,7 +48,7 @@ - + @@ -99,6 +107,9 @@ + + + @@ -148,7 +159,7 @@ - + @@ -190,5 +201,50 @@
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Core/src/org/sleuthkit/autopsy/geolocation/GeoFilterPanel.java b/Core/src/org/sleuthkit/autopsy/geolocation/GeoFilterPanel.java index c5d945dd31..df91b2963e 100755 --- a/Core/src/org/sleuthkit/autopsy/geolocation/GeoFilterPanel.java +++ b/Core/src/org/sleuthkit/autopsy/geolocation/GeoFilterPanel.java @@ -21,7 +21,6 @@ package org.sleuthkit.autopsy.geolocation; import org.sleuthkit.autopsy.guiutils.CheckBoxListPanel; import java.awt.Color; import java.awt.Graphics; -import java.awt.GridBagConstraints; import java.awt.event.ActionListener; import java.awt.image.BufferedImage; import java.sql.ResultSet; @@ -82,43 +81,22 @@ class GeoFilterPanel extends javax.swing.JPanel { "GeoFilterPanel_DataSource_List_Title=Data Sources", "GeoFilterPanel_ArtifactType_List_Title=Types" }) + @SuppressWarnings("unchecked") GeoFilterPanel() { // numberModel is used in initComponents numberModel = new SpinnerNumberModel(10, 1, Integer.MAX_VALUE, 1); initComponents(); - // The gui builder cannot handle using CheckBoxListPanel due to its - // use of generics so we will initalize it here. - dsCheckboxPanel = new CheckBoxListPanel<>(); + dsCheckboxPanel = (CheckBoxListPanel)dsCBPanel; dsCheckboxPanel.setPanelTitle(Bundle.GeoFilterPanel_DataSource_List_Title()); dsCheckboxPanel.setPanelTitleIcon(new ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/image.png"))); dsCheckboxPanel.setSetAllSelected(true); - atCheckboxPanel = new CheckBoxListPanel<>(); + atCheckboxPanel = (CheckBoxListPanel)atCBPanel; atCheckboxPanel.setPanelTitle(Bundle.GeoFilterPanel_ArtifactType_List_Title()); atCheckboxPanel.setPanelTitleIcon(new ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/extracted_content.png"))); atCheckboxPanel.setSetAllSelected(true); - - GridBagConstraints gridBagConstraints = new GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 3; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; - gridBagConstraints.weightx = 1.0; - gridBagConstraints.weighty = 1.0; - gridBagConstraints.insets = new java.awt.Insets(0, 15, 0, 15); - add(dsCheckboxPanel, gridBagConstraints); - - gridBagConstraints = new GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 4; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; - gridBagConstraints.weightx = 1.0; - gridBagConstraints.weighty = 1.0; - gridBagConstraints.insets = new java.awt.Insets(0, 15, 0, 15); - add(atCheckboxPanel, gridBagConstraints); } @Override @@ -221,7 +199,11 @@ class GeoFilterPanel extends javax.swing.JPanel { javax.swing.JPanel buttonPanel = new javax.swing.JPanel(); applyButton = new javax.swing.JButton(); javax.swing.JLabel optionsLabel = new javax.swing.JLabel(); + dsCBPanel = new CheckBoxListPanel(); + atCBPanel = new CheckBoxListPanel(); + setMinimumSize(new java.awt.Dimension(10, 700)); + setPreferredSize(new java.awt.Dimension(300, 700)); setLayout(new java.awt.GridBagLayout()); waypointSettings.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(GeoFilterPanel.class, "GeoFilterPanel.waypointSettings.border.title"))); // NOI18N @@ -268,6 +250,7 @@ class GeoFilterPanel extends javax.swing.JPanel { waypointSettings.add(showWaypointsWOTSCheckBox, gridBagConstraints); daysSpinner.setEnabled(false); + daysSpinner.setMaximumSize(new java.awt.Dimension(100, 26)); daysSpinner.setPreferredSize(new java.awt.Dimension(75, 26)); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; @@ -298,7 +281,7 @@ class GeoFilterPanel extends javax.swing.JPanel { gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.weightx = 1.0; - gridBagConstraints.insets = new java.awt.Insets(5, 15, 9, 15); + gridBagConstraints.insets = new java.awt.Insets(5, 15, 9, 25); add(waypointSettings, gridBagConstraints); buttonPanel.setLayout(new java.awt.GridBagLayout()); @@ -316,7 +299,7 @@ class GeoFilterPanel extends javax.swing.JPanel { gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.weightx = 1.0; - gridBagConstraints.insets = new java.awt.Insets(9, 15, 0, 15); + gridBagConstraints.insets = new java.awt.Insets(9, 15, 0, 25); add(buttonPanel, gridBagConstraints); optionsLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/blueGeo16.png"))); // NOI18N @@ -327,6 +310,29 @@ class GeoFilterPanel extends javax.swing.JPanel { gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(0, 15, 0, 0); add(optionsLabel, gridBagConstraints); + + dsCBPanel.setMinimumSize(new java.awt.Dimension(150, 250)); + dsCBPanel.setPreferredSize(new java.awt.Dimension(150, 250)); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 3; + gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; + gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; + gridBagConstraints.weighty = 1.0; + gridBagConstraints.insets = new java.awt.Insets(5, 15, 9, 25); + add(dsCBPanel, gridBagConstraints); + + atCBPanel.setMinimumSize(new java.awt.Dimension(150, 250)); + atCBPanel.setPreferredSize(new java.awt.Dimension(150, 250)); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 4; + gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; + gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; + gridBagConstraints.weighty = 1.0; + gridBagConstraints.insets = new java.awt.Insets(5, 15, 9, 25); + add(atCBPanel, gridBagConstraints); + atCBPanel.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(GeoFilterPanel.class, "GeoFilterPanel.atCBPanel.AccessibleContext.accessibleName")); // NOI18N }// //GEN-END:initComponents private void allButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_allButtonActionPerformed @@ -341,8 +347,10 @@ class GeoFilterPanel extends javax.swing.JPanel { // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JRadioButton allButton; private javax.swing.JButton applyButton; + private javax.swing.JPanel atCBPanel; private javax.swing.JLabel daysLabel; private javax.swing.JSpinner daysSpinner; + private javax.swing.JPanel dsCBPanel; private javax.swing.JRadioButton mostRecentButton; private javax.swing.JLabel showLabel; private javax.swing.JCheckBox showWaypointsWOTSCheckBox; diff --git a/Core/src/org/sleuthkit/autopsy/geolocation/OpenGeolocationAction.java b/Core/src/org/sleuthkit/autopsy/geolocation/OpenGeolocationAction.java index 4f7243978a..d809f55e04 100755 --- a/Core/src/org/sleuthkit/autopsy/geolocation/OpenGeolocationAction.java +++ b/Core/src/org/sleuthkit/autopsy/geolocation/OpenGeolocationAction.java @@ -44,7 +44,7 @@ import org.sleuthkit.autopsy.core.RuntimeProperties; id = "org.sleuthkit.autopsy.geolocation.OpenGeolocationAction") @ActionRegistration(displayName = "#CTL_OpenGeolocation", lazy = false) @ActionReferences(value = { - @ActionReference(path = "Menu/Tools", position = 102), + @ActionReference(path = "Menu/Tools", position = 103), @ActionReference(path = "Toolbars/Case", position = 103)}) public class OpenGeolocationAction extends CallableSystemAction { diff --git a/Core/src/org/sleuthkit/autopsy/geolocation/datamodel/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/geolocation/datamodel/Bundle_ja.properties new file mode 100644 index 0000000000..984eeeda78 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/geolocation/datamodel/Bundle_ja.properties @@ -0,0 +1,5 @@ +#Tue Aug 18 18:09:21 UTC 2020 +GEOTrack_point_label_header=\u30c8\u30e9\u30c3\u30af\u306e\u30c8\u30e9\u30c3\u30af\u30dd\u30a4\u30f3\u30c8\uff1a{0} +Route_point_label=\u30eb\u30fc\u30c8\u306e\u30a6\u30a7\u30a4\u30dd\u30a4\u30f3\u30c8 +Track_distanceFromHome_displayName=\u539f\u70b9\u304b\u3089\u306e\u8ddd\u96e2 +Track_distanceTraveled_displayName=\u8d70\u884c\u8ddd\u96e2 diff --git a/Core/src/org/sleuthkit/autopsy/guiutils/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/guiutils/Bundle_ja.properties index 20895b6374..21eec7e42d 100644 --- a/Core/src/org/sleuthkit/autopsy/guiutils/Bundle_ja.properties +++ b/Core/src/org/sleuthkit/autopsy/guiutils/Bundle_ja.properties @@ -1,3 +1,6 @@ +#Tue Aug 18 18:09:21 UTC 2020 +CheckBoxListPanel.checkButton.text=\u3059\u3079\u3066\u9078\u629e +CheckBoxListPanel.uncheckButton.text=\u3059\u3079\u3066\u306e\u9078\u629e\u3092\u89e3\u9664 StatusIconCellRenderer.tooltiptext.error=\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f StatusIconCellRenderer.tooltiptext.ok=OK StatusIconCellRenderer.tooltiptext.warning=\u8b66\u544a\u304c\u767a\u751f\u3057\u307e\u3057\u305f diff --git a/Core/src/org/sleuthkit/autopsy/ingest/IngestJobInputStream.java b/Core/src/org/sleuthkit/autopsy/ingest/IngestJobInputStream.java index 4e8e9c4019..a2687d5c1d 100644 --- a/Core/src/org/sleuthkit/autopsy/ingest/IngestJobInputStream.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/IngestJobInputStream.java @@ -58,6 +58,11 @@ class IngestJobInputStream implements IngestStream { } ingestJob.addStreamingIngestFiles(fileObjectIds); } + + @Override + public IngestJob getIngestJob() { + return ingestJob; + } @Override public synchronized void close() { diff --git a/Core/src/org/sleuthkit/autopsy/ingest/IngestJobSettings.java b/Core/src/org/sleuthkit/autopsy/ingest/IngestJobSettings.java index 4b0228c5fe..0dbbaebb57 100644 --- a/Core/src/org/sleuthkit/autopsy/ingest/IngestJobSettings.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/IngestJobSettings.java @@ -474,6 +474,9 @@ public final class IngestJobSettings { case "Correlation Engine": //NON-NLS moduleNames.add("Central Repository"); //NON-NLS break; + case "Exif Parser": //NON-NLS + moduleNames.add("Picture Analyzer"); //NON-NLS + break; default: moduleNames.add(name); } diff --git a/Core/src/org/sleuthkit/autopsy/ingest/IngestModuleFactoryLoader.java b/Core/src/org/sleuthkit/autopsy/ingest/IngestModuleFactoryLoader.java index 3e3e006dd3..59614ab573 100644 --- a/Core/src/org/sleuthkit/autopsy/ingest/IngestModuleFactoryLoader.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/IngestModuleFactoryLoader.java @@ -31,7 +31,6 @@ import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.examples.SampleIngestModuleFactory; import org.sleuthkit.autopsy.modules.dataSourceIntegrity.DataSourceIntegrityModuleFactory; -import org.sleuthkit.autopsy.modules.exif.ExifParserModuleFactory; import org.sleuthkit.autopsy.modules.fileextmismatch.FileExtMismatchDetectorModuleFactory; import org.sleuthkit.autopsy.modules.filetypeid.FileTypeIdModuleFactory; import org.sleuthkit.autopsy.modules.hashdatabase.HashLookupModuleFactory; @@ -40,6 +39,7 @@ import org.sleuthkit.autopsy.modules.photoreccarver.PhotoRecCarverIngestModuleFa import org.sleuthkit.autopsy.modules.embeddedfileextractor.EmbeddedFileExtractorModuleFactory; import org.sleuthkit.autopsy.modules.encryptiondetection.EncryptionDetectionModuleFactory; import org.sleuthkit.autopsy.centralrepository.ingestmodule.CentralRepoIngestModuleFactory; +import org.sleuthkit.autopsy.modules.pictureanalyzer.PictureAnalyzerIngestModuleFactory; import org.sleuthkit.autopsy.modules.vmextractor.VMExtractorIngestModuleFactory; import org.sleuthkit.autopsy.python.JythonModuleLoader; @@ -60,7 +60,7 @@ final class IngestModuleFactoryLoader { add(FileTypeIdModuleFactory.class.getCanonicalName()); add(FileExtMismatchDetectorModuleFactory.class.getCanonicalName()); add(EmbeddedFileExtractorModuleFactory.class.getCanonicalName()); - add(ExifParserModuleFactory.class.getCanonicalName()); + add(PictureAnalyzerIngestModuleFactory.class.getCanonicalName()); add("org.sleuthkit.autopsy.keywordsearch.KeywordSearchModuleFactory"); //NON-NLS add("org.sleuthkit.autopsy.thunderbirdparser.EmailParserModuleFactory"); //NON-NLS add(EncryptionDetectionModuleFactory.class.getCanonicalName()); diff --git a/Core/src/org/sleuthkit/autopsy/ingest/IngestStream.java b/Core/src/org/sleuthkit/autopsy/ingest/IngestStream.java index 62a42af208..77001531be 100644 --- a/Core/src/org/sleuthkit/autopsy/ingest/IngestStream.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/IngestStream.java @@ -34,6 +34,13 @@ public interface IngestStream { * @throws IngestStreamClosedException */ void addFiles(List fileObjectIds) throws IngestStreamClosedException; + + /** + * Get the ingest job associated with this ingest stream. + * + * @return The IngestJob. + */ + IngestJob getIngestJob(); /** * Closes the ingest stream. Should be called after all files from data diff --git a/Core/src/org/sleuthkit/autopsy/livetriage/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/livetriage/Bundle_ja.properties new file mode 100644 index 0000000000..fc1fa62271 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/livetriage/Bundle_ja.properties @@ -0,0 +1,3 @@ +#Tue Aug 18 18:09:21 UTC 2020 +SelectDriveDialog.descriptionTextArea.text=\u3053\u306e\u6a5f\u80fd\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3068\u30d0\u30c3\u30c1\u30d5\u30a1\u30a4\u30eb\u3092\u30ea\u30e0\u30fc\u30d0\u30d6\u30eb\u30c9\u30e9\u30a4\u30d6\u306b\u30b3\u30d4\u30fc\u3057\u3066\u3001\n\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u307e\u305f\u306f\u30c9\u30e9\u30a4\u30d6\u306e\u30a4\u30e1\u30fc\u30b8\u30f3\u30b0\u3092\u305b\u305a\u306b\u5206\u6790\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002\n\n\u30b7\u30b9\u30c6\u30e0\u3092\u5206\u6790\u3059\u308b\u306b\u306f\u3001\u30c9\u30e9\u30a4\u30d6\u3092\u633f\u5165\u3057\u3001\u300cRunFromUSB.bat\u300d\u3092\u7ba1\u7406\u8005\u3068\u3057\u3066\u5b9f\u884c\u5f8c\u306b\u3001[\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u306e\u8ffd\u52a0]\u30d1\u30cd\u30eb\u3067[\u30ed\u30fc\u30ab\u30eb\u30c7\u30a3\u30b9\u30af]\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u9078\u629e\u3057\u3066\u4e0b\u3055\u3044\u3002 +SelectDriveDialog.selectDriveLabel.text=\u30e9\u30a4\u30d6\u30fb\u30c8\u30ea\u30a2\u30fc\u30b8\u306b\u4f7f\u7528\u3059\u308b\u30c9\u30e9\u30a4\u30d6\u3092\u9078\u629e\uff08\u30ed\u30fc\u30c9\u306b\u6642\u9593\u304c\u304b\u304b\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\uff09\uff1a diff --git a/Core/src/org/sleuthkit/autopsy/logicalimager/dsp/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/logicalimager/dsp/Bundle_ja.properties new file mode 100644 index 0000000000..f6a274578a --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/logicalimager/dsp/Bundle_ja.properties @@ -0,0 +1,2 @@ +#Tue Aug 18 18:09:21 UTC 2020 +AddMultipleImagesTask.imageError=\u753b\u50cf{0}\u3092\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u8ffd\u52a0\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f diff --git a/Core/src/org/sleuthkit/autopsy/machinesettings/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/machinesettings/Bundle.properties-MERGED new file mode 100644 index 0000000000..69b348fcb7 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/machinesettings/Bundle.properties-MERGED @@ -0,0 +1,4 @@ +# {0} - path +UserMachinePreferences_validateTempDirectory_errorOnCreate_text=There was an error creating the temp directory for path: {0} +# {0} - path +UserMachinePreferences_validateTempDirectory_errorOnReadWrite_text=There was an error reading or writing to temp directory path: {0} diff --git a/Core/src/org/sleuthkit/autopsy/machinesettings/UserMachinePreferences.java b/Core/src/org/sleuthkit/autopsy/machinesettings/UserMachinePreferences.java new file mode 100644 index 0000000000..cc1538c9b7 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/machinesettings/UserMachinePreferences.java @@ -0,0 +1,108 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2020 Basis Technology Corp. + * Contact: carrier sleuthkit 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.machinesettings; + +import java.io.File; +import java.nio.file.Paths; +import java.util.prefs.Preferences; +import org.apache.commons.lang3.StringUtils; +import org.openide.util.NbBundle; +import org.openide.util.NbPreferences; +import org.sleuthkit.autopsy.coreutils.FileUtil; + +/** + * Provides case-specific settings like the user-specified temp folder. + */ +public final class UserMachinePreferences { + + private static final Preferences preferences = NbPreferences.forModule(UserMachinePreferences.class); + + private static final String TEMP_DIR_KEY = "TempDirectory"; + + /** + * Retrieves a default temporary directory that is a subdirectory of + * java.io.tmpdir. + * + * @return The absolute path to the temp directory. + */ + private static String getDefaultTempDirectory() { + return Paths.get(System.getProperty("java.io.tmpdir")).toAbsolutePath().toString(); + } + + /** + * Retrieves the base user-specified temporary directory. + * + * @return The base user-specified temporary directory. + */ + public static String getBaseTempDirectory() { + String tempDir = preferences.get(TEMP_DIR_KEY, null); + return StringUtils.isBlank(tempDir) ? getDefaultTempDirectory() : tempDir; + } + + /** + * Checks to see if temporary directory location can be created and is + * read/write. + * + * @param path The location. + * + * @return True if this is a valid location for a temp directory. + * + * @throws UserMachinePreferencesException If path could not be validated + * due to mkdirs failure or the + * directory is not read/write. + */ + @NbBundle.Messages({ + "# {0} - path", + "UserMachinePreferences_validateTempDirectory_errorOnCreate_text=There was an error creating the temp directory for path: {0}", + "# {0} - path", + "UserMachinePreferences_validateTempDirectory_errorOnReadWrite_text=There was an error reading or writing to temp directory path: {0}" + }) + private static boolean validateTempDirectory(String path) throws UserMachinePreferencesException { + if (StringUtils.isBlank(path)) { + // in this instance, the default path will be used. + return true; + } + + File f = new File(path); + if (!f.exists() && !f.mkdirs()) { + throw new UserMachinePreferencesException(Bundle.UserMachinePreferences_validateTempDirectory_errorOnCreate_text(path)); + } + + if (!FileUtil.hasReadWriteAccess(Paths.get(path))) { + throw new UserMachinePreferencesException(Bundle.UserMachinePreferences_validateTempDirectory_errorOnReadWrite_text(path)); + } + return true; + } + + /** + * Sets the base user-specified temporary directory. + * + * @param path The path to the directory. + * + * @throws UserMachinePreferencesException If the directory cannot be + * accessed or created. + */ + public static void setBaseTempDirectory(String path) throws UserMachinePreferencesException { + validateTempDirectory(path); + preferences.put(TEMP_DIR_KEY, path); + } + + private UserMachinePreferences() { + } +} diff --git a/Core/src/org/sleuthkit/autopsy/machinesettings/UserMachinePreferencesException.java b/Core/src/org/sleuthkit/autopsy/machinesettings/UserMachinePreferencesException.java new file mode 100644 index 0000000000..3d1df2f890 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/machinesettings/UserMachinePreferencesException.java @@ -0,0 +1,45 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2020 Basis Technology Corp. + * Contact: carrier sleuthkit 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.machinesettings; + +/** + * Exception class for UserMachinePreferences. + */ +public class UserMachinePreferencesException extends Exception { + private static final long serialVersionUID = 1L; + + /** + * Main constructor. + * + * @param string The message for the exception. + */ + UserMachinePreferencesException(String string) { + super(string); + } + + /** + * Main constructor. + * + * @param string The message for the exception. + * @param thrwbl The inner exception. + */ + UserMachinePreferencesException(String string, Throwable thrwbl) { + super(string, thrwbl); + } +} diff --git a/Core/src/org/sleuthkit/autopsy/modules/dataSourceIntegrity/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/modules/dataSourceIntegrity/Bundle_ja.properties index f73bf77a55..b8020d9a20 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/dataSourceIntegrity/Bundle_ja.properties +++ b/Core/src/org/sleuthkit/autopsy/modules/dataSourceIntegrity/Bundle_ja.properties @@ -1,50 +1,34 @@ -# {0} - hashName -# {1} - calculatedHashValue -DataSourceIntegrityIngestModule.process.calcHashWithType=
  • \u8a08\u7b97\u6e08\u307f {0} \u30cf\u30c3\u30b7\u30e5: {1}
  • -# {0} - imageName +#Tue Aug 18 18:09:21 UTC 2020 +DataSourceIntegrityIngestModule.process.calcHashWithType=
  • \u8a08\u7b97\u6e08\u307f {0} \u30cf\u30c3\u30b7\u30e5\: {1}
  • DataSourceIntegrityIngestModule.process.calculateHashDone=

    {0} \u306e\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u30cf\u30c3\u30b7\u30e5\u8a08\u7b97\u7d50\u679c

    -# {0} - imageName -DataSourceIntegrityIngestModule.process.errorLoadingHashes=\ \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304b\u3089\u30a4\u30e1\u30fc\u30b8 {0} \u306e\u30cf\u30c3\u30b7\u30e5\u3092\u8aad\u307f\u8fbc\u307f\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -# {0} - imageName -DataSourceIntegrityIngestModule.process.errorSavingHashes=\ \u30a4\u30e1\u30fc\u30b8 {0} \u306e\u30cf\u30c3\u30b7\u30e5\u3092\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u4fdd\u5b58\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -# {0} - hashName -DataSourceIntegrityIngestModule.process.hashAlgorithmError={0} \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u30c0\u30a4\u30b8\u30a7\u30b9\u30c8\u306e\u4f5c\u6210\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -DataSourceIntegrityIngestModule.process.hashesCalculated=\ \u8a08\u7b97\u6e08\u307f\u30cf\u30c3\u30b7\u30e5 -# {0} - hashAlgorithm -# {1} - calculatedHashValue -# {2} - storedHashValue -DataSourceIntegrityIngestModule.process.hashFailedForArtifact={0} \u30cf\u30c3\u30b7\u30e5\u306e\u691c\u8a3c\u306b\u5931\u6557\u3057\u307e\u3057\u305f:\n \u8a08\u7b97\u6e08\u307f\u30cf\u30c3\u30b7\u30e5: {1}\N \u4fdd\u5b58\u6e08\u307f\u30cf\u30c3\u30b7\u30e5: {2}\n -# {0} - calculatedHashValue -# {1} - storedHashValue -DataSourceIntegrityIngestModule.process.hashList=
    • \u8a08\u7b97\u6e08\u307f\u30cf\u30c3\u30b7\u30e5: {0}
    • \u4fdd\u5b58\u6e08\u307f\u30cf\u30c3\u30b7\u30e5: {1}
    -# {0} - hashName -DataSourceIntegrityIngestModule.process.hashMatch=
  • {0} \u691c\u8a3c\u6e08\u307f\u30cf\u30c3\u30b7\u30e5
  • -# {0} - hashName -DataSourceIntegrityIngestModule.process.hashNonMatch=
  • {0} \u30cf\u30c3\u30b7\u30e5\u304c\u691c\u8a3c\u3055\u308c\u3066\u3044\u307e\u305b\u3093
  • -# {0} - imageName -DataSourceIntegrityIngestModule.process.skipCompute=\u30aa\u30d7\u30b7\u30e7\u30f3\u304c\u7121\u52b9\u3060\u3063\u305f\u305f\u3081 {0} \u306e\u65b0\u898f\u30cf\u30c3\u30b7\u30e5\u306e\u8a08\u7b97\u304c\u884c\u308f\u308c\u3066\u3044\u307e\u305b\u3093 -# {0} - imageName -DataSourceIntegrityIngestModule.process.skipVerify=\u30aa\u30d7\u30b7\u30e7\u30f3\u304c\u7121\u52b9\u3060\u3063\u305f\u305f\u3081 {0} \u306e\u65e2\u5b58\u30cf\u30c3\u30b7\u30e5\u306e\u691c\u8a3c\u304c\u884c\u308f\u308c\u3066\u3044\u307e\u305b\u3093 -# {0} - imageName -DataSourceIntegrityIngestModule.process.verificationFailure={0} \u304c\u5b8c\u5168\u6027\u691c\u8a3c\u306b\u5931\u6557\u3057\u307e\u3057\u305f -# {0} - imageName -DataSourceIntegrityIngestModule.process.verificationSuccess={0} \u306e\u5b8c\u5168\u6027\u304c\u691c\u8a3c\u3055\u308c\u307e\u3057\u305f -DataSourceIntegrityIngestModule.startup.noCheckboxesSelected=\u5c11\u306a\u304f\u3068\u30821\u3064\u306e\u30c1\u30a7\u30c3\u30af\u30dc\u30c3\u30af\u30b9\u3092\u9078\u629e\u3057\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093 -OpenIDE-Module-Name=ewfVerify -DataSourceIntegrityModuleFactory.moduleName.text=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u5b8c\u5168\u6027 -DataSourceIntegrityModuleFactory.moduleDesc.text=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u306e\u30cf\u30c3\u30b7\u30e5\u3092\u8a08\u7b97\u304a\u3088\u3073\u691c\u8a3c\u3057\u307e\u3059\u3002 DataSourceIntegrityIngestModule.process.errProcImg={0} \u306e\u51e6\u7406\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -DataSourceIntegrityIngestModule.process.skipNonEwf=\u975e\u30c7\u30a3\u30b9\u30af\u30a4\u30e1\u30fc\u30b8\u306e\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9 {0} \u3092\u30b9\u30ad\u30c3\u30d7\u4e2d\u3067\u3059 -DataSourceIntegrityIngestModule.process.noStoredHash=\u30a4\u30e1\u30fc\u30b8 {0} \u306b\u4fdd\u5b58\u6e08\u307f\u30cf\u30c3\u30b7\u30e5\u306f\u3042\u308a\u307e\u305b\u3093\u3002 -DataSourceIntegrityIngestModule.process.startingImg={0} \u3092\u8d77\u52d5\u4e2d\u3067\u3059 DataSourceIntegrityIngestModule.process.errReadImgAtChunk=\u30c1\u30e3\u30f3\u30af {1} \u306e {0} \u3092\u8aad\u307f\u53d6\u308a\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -DataSourceIntegrityIngestModule.shutDown.verified=\ \u691c\u8a3c\u6e08\u307f +DataSourceIntegrityIngestModule.process.errorLoadingHashes=\ \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304b\u3089\u30a4\u30e1\u30fc\u30b8 {0} \u306e\u30cf\u30c3\u30b7\u30e5\u3092\u8aad\u307f\u8fbc\u307f\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f +DataSourceIntegrityIngestModule.process.errorSavingHashes=\ \u30a4\u30e1\u30fc\u30b8 {0} \u306e\u30cf\u30c3\u30b7\u30e5\u3092\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u4fdd\u5b58\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f +DataSourceIntegrityIngestModule.process.hashAlgorithmError={0} \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u30c0\u30a4\u30b8\u30a7\u30b9\u30c8\u306e\u4f5c\u6210\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f +DataSourceIntegrityIngestModule.process.hashFailedForArtifact={0} \u30cf\u30c3\u30b7\u30e5\u306e\u691c\u8a3c\u306b\u5931\u6557\u3057\u307e\u3057\u305f\:\n \u8a08\u7b97\u6e08\u307f\u30cf\u30c3\u30b7\u30e5\: {1}N \u4fdd\u5b58\u6e08\u307f\u30cf\u30c3\u30b7\u30e5\: {2}\n +DataSourceIntegrityIngestModule.process.hashList=
    • \u8a08\u7b97\u6e08\u307f\u30cf\u30c3\u30b7\u30e5\: {0}
    • \u4fdd\u5b58\u6e08\u307f\u30cf\u30c3\u30b7\u30e5\: {1}
    +DataSourceIntegrityIngestModule.process.hashMatch=
  • {0} \u691c\u8a3c\u6e08\u307f\u30cf\u30c3\u30b7\u30e5
  • +DataSourceIntegrityIngestModule.process.hashNonMatch=
  • {0} \u30cf\u30c3\u30b7\u30e5\u304c\u691c\u8a3c\u3055\u308c\u3066\u3044\u307e\u305b\u3093
  • +DataSourceIntegrityIngestModule.process.hashesCalculated=\ \u8a08\u7b97\u6e08\u307f\u30cf\u30c3\u30b7\u30e5 +DataSourceIntegrityIngestModule.process.noStoredHash=\u30a4\u30e1\u30fc\u30b8 {0} \u306b\u4fdd\u5b58\u6e08\u307f\u30cf\u30c3\u30b7\u30e5\u306f\u3042\u308a\u307e\u305b\u3093\u3002 +DataSourceIntegrityIngestModule.process.skipCompute=\u30aa\u30d7\u30b7\u30e7\u30f3\u304c\u7121\u52b9\u3060\u3063\u305f\u305f\u3081 {0} \u306e\u65b0\u898f\u30cf\u30c3\u30b7\u30e5\u306e\u8a08\u7b97\u304c\u884c\u308f\u308c\u3066\u3044\u307e\u305b\u3093 +DataSourceIntegrityIngestModule.process.skipNonEwf=\u975e\u30c7\u30a3\u30b9\u30af\u30a4\u30e1\u30fc\u30b8\u306e\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9 {0} \u3092\u30b9\u30ad\u30c3\u30d7\u4e2d\u3067\u3059 +DataSourceIntegrityIngestModule.process.skipVerify=\u30aa\u30d7\u30b7\u30e7\u30f3\u304c\u7121\u52b9\u3060\u3063\u305f\u305f\u3081 {0} \u306e\u65e2\u5b58\u30cf\u30c3\u30b7\u30e5\u306e\u691c\u8a3c\u304c\u884c\u308f\u308c\u3066\u3044\u307e\u305b\u3093 +DataSourceIntegrityIngestModule.process.startingImg={0} \u3092\u8d77\u52d5\u4e2d\u3067\u3059 +DataSourceIntegrityIngestModule.process.verificationFailure={0} \u304c\u5b8c\u5168\u6027\u691c\u8a3c\u306b\u5931\u6557\u3057\u307e\u3057\u305f +DataSourceIntegrityIngestModule.process.verificationSuccess={0} \u306e\u5b8c\u5168\u6027\u304c\u691c\u8a3c\u3055\u308c\u307e\u3057\u305f +DataSourceIntegrityIngestModule.shutDown.calcHashLi=
  • \u8a08\u7b97\u6e08\u307f\u30cf\u30c3\u30b7\u30e5\: {0}
  • DataSourceIntegrityIngestModule.shutDown.notVerified=\ \u691c\u8a3c\u3055\u308c\u3066\u3044\u307e\u305b\u3093 +DataSourceIntegrityIngestModule.shutDown.resultLi=
  • \u7d50\u679c\:{0}
  • +DataSourceIntegrityIngestModule.shutDown.storedHashLi=
  • \u4fdd\u5b58\u6e08\u307f\u30cf\u30c3\u30b7\u30e5\: {0}
  • +DataSourceIntegrityIngestModule.shutDown.verified=\ \u691c\u8a3c\u6e08\u307f DataSourceIntegrityIngestModule.shutDown.verifyResultsHeader=

    {0} \u306e\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u691c\u8a3c\u7d50\u679c

    -DataSourceIntegrityIngestModule.shutDown.resultLi=
  • \u7d50\u679c:{0}
  • -DataSourceIntegrityIngestModule.shutDown.calcHashLi=
  • \u8a08\u7b97\u6e08\u307f\u30cf\u30c3\u30b7\u30e5: {0}
  • -DataSourceIntegrityIngestModule.shutDown.storedHashLi=
  • \u4fdd\u5b58\u6e08\u307f\u30cf\u30c3\u30b7\u30e5: {0}
  • +DataSourceIntegrityIngestModule.startup.noCheckboxesSelected=\u5c11\u306a\u304f\u3068\u30821\u3064\u306e\u30c1\u30a7\u30c3\u30af\u30dc\u30c3\u30af\u30b9\u3092\u9078\u629e\u3057\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093 DataSourceIntegrityIngestSettingsPanel.computeHashesCheckbox.text=\u4f55\u3082\u306a\u3044\u5834\u5408\u306f\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u30cf\u30c3\u30b7\u30e5\u3092\u8a08\u7b97 -DataSourceIntegrityIngestSettingsPanel.jLabel1.text=\u3053\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u306f\u8ad6\u7406\u30d5\u30a1\u30a4\u30eb\u4e0a\u3067\u306f\u5b9f\u884c\u3055\u308c\u307e\u305b\u3093 -DataSourceIntegrityIngestSettingsPanel.jLabel3.text=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u8a2d\u5b9a +DataSourceIntegrityIngestSettingsPanel.ingestSettingsLabel.text=\u53d6\u308a\u8fbc\u307f\u8a2d\u5b9a +DataSourceIntegrityIngestSettingsPanel.noteLabel.text=\u6ce8\u610f\uff1a\u3000\u3053\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u306f\u8ad6\u7406\u30d5\u30a1\u30a4\u30eb\u3067\u306f\u5b9f\u884c\u3055\u308c\u307e\u305b\u3093 DataSourceIntegrityIngestSettingsPanel.verifyHashesCheckbox.text=\u65e2\u5b58\u306e\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u30cf\u30c3\u30b7\u30e5\u3092\u691c\u8a3c +DataSourceIntegrityModuleFactory.moduleDesc.text=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u306e\u30cf\u30c3\u30b7\u30e5\u3092\u8a08\u7b97\u304a\u3088\u3073\u691c\u8a3c\u3057\u307e\u3059\u3002 +DataSourceIntegrityModuleFactory.moduleName.text=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u5b8c\u5168\u6027 +OpenIDE-Module-Name=ewfVerify diff --git a/Core/src/org/sleuthkit/autopsy/modules/drones/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/modules/drones/Bundle_ja.properties new file mode 100644 index 0000000000..5a4bbf3a56 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/modules/drones/Bundle_ja.properties @@ -0,0 +1,6 @@ +#Tue Aug 18 18:09:21 UTC 2020 +DATExtractor_process_message=DJI DAT\u30d5\u30a1\u30a4\u30eb\u3092\u51e6\u7406\u3057\u3066\u3044\u307e\u3059\uff1a%s +DATFileExtractor_Extractor_Name=DAT\u30d5\u30a1\u30a4\u30eb\u62bd\u51fa\u30e2\u30b8\u30e5\u30fc\u30eb +DroneIngestModule_Description=\u30c9\u30ed\u30fc\u30f3\u306b\u3088\u3063\u3066\u751f\u6210\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u3092\u5206\u6790\u3057\u307e\u3059\u3002 +DroneIngestModule_Name=\u30c9\u30ed\u30fc\u30f3\u30fb\u30a2\u30ca\u30e9\u30a4\u30b6\u30fc +DroneIngestModule_process_start={0}\u3092\u958b\u59cb\u3057\u307e\u3057\u305f diff --git a/Core/src/org/sleuthkit/autopsy/modules/embeddedfileextractor/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/modules/embeddedfileextractor/Bundle_ja.properties index d032b4f3d1..1eec472175 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/embeddedfileextractor/Bundle_ja.properties +++ b/Core/src/org/sleuthkit/autopsy/modules/embeddedfileextractor/Bundle_ja.properties @@ -1,54 +1,47 @@ +#Tue Aug 18 18:05:03 UTC 2020 CannotCreateOutputFolder=\u51fa\u529b\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3002 CannotRunFileTypeDetection=\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u306e\u691c\u51fa\u3092\u5b9f\u884c\u3067\u304d\u307e\u305b\u3093\u3002 +EmbeddedFileExtractorIngestModule.ArchiveExtractor.UnpackStream.write.exception.msg=\u30d5\u30a1\u30a4\u30eb\u3092\u6b21\u306b\u958b\u5c01\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\: {0} +EmbeddedFileExtractorIngestModule.ArchiveExtractor.UnpackStream.write.noSpace.msg=\u30c7\u30a3\u30b9\u30af\u306b\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u66f8\u304d\u8fbc\u3081\u307e\u305b\u3093\u3002\u5341\u5206\u306a\u9818\u57df\u304c\u3042\u308a\u307e\u305b\u3093\u3002 +EmbeddedFileExtractorIngestModule.ArchiveExtractor.UnpackedTree.exception.msg=\u6d3e\u751f\u30d5\u30a1\u30a4\u30eb\u3092\u6b21\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u8ffd\u52a0\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\:{0} +EmbeddedFileExtractorIngestModule.ArchiveExtractor.encryptionFileLevel=\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u307f\u306e\u6697\u53f7\u5316(\u30a2\u30fc\u30ab\u30a4\u30d6\u30d5\u30a1\u30a4\u30eb) +EmbeddedFileExtractorIngestModule.ArchiveExtractor.encryptionFull=\u5b8c\u5168\u306a\u6697\u53f7\u5316(\u30a2\u30fc\u30ab\u30a4\u30d6\u30d5\u30a1\u30a4\u30eb) +EmbeddedFileExtractorIngestModule.ArchiveExtractor.init.errInitModule.details=\u30a8\u30e9\u30fc\u307e\u305f\u306f\u51fa\u529b\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u306e\u521d\u671f\u5316\u4e2d\u3067\u3059\: {0}\: {1} +EmbeddedFileExtractorIngestModule.ArchiveExtractor.isZipBombCheck.warnDetails=\u5727\u7e2e\u7387\u306f {0} \u3067\u3059\u3002{1} \u306e\u9805\u76ee\u3092\u30b9\u30ad\u30c3\u30d7\u3057\u307e\u3059\u3002 +EmbeddedFileExtractorIngestModule.ArchiveExtractor.isZipBombCheck.warnMsg=\u30a2\u30fc\u30ab\u30a4\u30d6\u3067ZIP\u7206\u5f3e\u304c\u691c\u51fa\u3055\u308c\u305f\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\: {0}\u3001\u9805\u76ee\: {1} EmbeddedFileExtractorIngestModule.ArchiveExtractor.moduleDesc.text=\u57cb\u3081\u8fbc\u307f\u30d5\u30a1\u30a4\u30eb(doc, docx, ppt, pptx, xls, xlsx, zip, rar, arj, 7z, gzip, bzip2, tar)\u3092\u62bd\u51fa\u3057\u3001\u30d5\u30a1\u30a4\u30eb\u306e\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u3092\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u3057\u3001\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u30c4\u30ea\u30fc\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u5165\u529b\u3057\u307e\u3059\u3002 EmbeddedFileExtractorIngestModule.ArchiveExtractor.moduleName=\u57cb\u3081\u8fbc\u307f\u30d5\u30a1\u30a4\u30eb\u62bd\u51fa\u30c4\u30fc\u30eb +EmbeddedFileExtractorIngestModule.ArchiveExtractor.unpack.encrFileDetected.details=\u30a2\u30fc\u30ab\u30a4\u30d6\u306e\u3044\u304f\u3064\u304b\u306e\u30d5\u30a1\u30a4\u30eb\: {0} \u304c\u6697\u53f7\u5316\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u5727\u7e2e\u30fb\u89e3\u51cd\u30bd\u30d5\u30c8 {1} \u306f\u3053\u306e\u30a2\u30fc\u30ab\u30a4\u30d6\u304b\u3089\u3059\u3079\u3066\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u62bd\u51fa\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002 +EmbeddedFileExtractorIngestModule.ArchiveExtractor.unpack.encrFileDetected.msg=\u30a2\u30fc\u30ab\u30a4\u30d6\u306b\u6697\u53f7\u5316\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u304c\u691c\u51fa\u3055\u308c\u307e\u3057\u305f\u3002 +EmbeddedFileExtractorIngestModule.ArchiveExtractor.unpack.errUnpacking.details={0} \u306e\u958b\u5c01\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002{1} +EmbeddedFileExtractorIngestModule.ArchiveExtractor.unpack.errUnpacking.msg={0} \u306e\u958b\u5c01\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f +EmbeddedFileExtractorIngestModule.ArchiveExtractor.unpack.notEnoughDiskSpace.details=\u30a2\u30fc\u30ab\u30a4\u30d6\u9805\u76ee\u304c\u5927\u304d\u3059\u304e\u3067\u958b\u5c01\u3067\u304d\u307e\u305b\u3093\u3002\u3053\u306e\u9805\u76ee\u306e\u958b\u5c01\u3092\u30b9\u30ad\u30c3\u30d7\u3057\u307e\u3059\u3002 +EmbeddedFileExtractorIngestModule.ArchiveExtractor.unpack.notEnoughDiskSpace.msg=\u30a2\u30fc\u30ab\u30a4\u30d6\u9805\u76ee\u3092\u958b\u5c01\u3059\u308b\u305f\u3081\u306e\u5341\u5206\u306a\u30c7\u30a3\u30b9\u30af\u9818\u57df\u304c\u3042\u308a\u307e\u305b\u3093\: {0}\u3001{1} +EmbeddedFileExtractorIngestModule.ArchiveExtractor.unpack.warnDetails.zipBomb=\u30a2\u30fc\u30ab\u30a4\u30d6\u306f {0} \u30ec\u30d9\u30eb\u306e\u6df1\u3055\u3067\u3059\u3002{1} \u306e\u51e6\u7406\u3092\u30b9\u30ad\u30c3\u30d7\u3057\u307e\u3059 +EmbeddedFileExtractorIngestModule.ArchiveExtractor.unpack.warnMsg.zipBomb=ZIP\u7206\u5f3e\u304c\u691c\u51fa\u3055\u308c\u305f\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\: {0} +EmbeddedFileExtractorIngestModule.ImageExtractor.docContainer.init.err=\u8aad\u307f\u53d6\u308a\u4e2d\u306bDOC\u30b3\u30f3\u30c6\u30ca\u30fc\u3092\u521d\u671f\u5316\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f +EmbeddedFileExtractorIngestModule.ImageExtractor.docxContainer.init.err=\u6b21\u3092\u8aad\u307f\u53d6\u308a\u4e2d\u306bDOCX\u30b3\u30f3\u30c6\u30ca\u30fc\u3092\u521d\u671f\u5316\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\: {0} +EmbeddedFileExtractorIngestModule.ImageExtractor.extractImage.addToDB.exception.msg=\u6d3e\u751f\u30d5\u30a1\u30a4\u30eb\u3092\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u8ffd\u52a0\u3067\u304d\u307e\u305b\u3093. +EmbeddedFileExtractorIngestModule.ImageExtractor.getOutputFolderPath.exception.msg=\u6b21\u306e\u62bd\u8c61\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u306e\u30a4\u30e1\u30fc\u30b8\u62bd\u51fa\u30d1\u30b9\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\: {0} +EmbeddedFileExtractorIngestModule.ImageExtractor.pptContainer.init.err=\u6b21\u3092\u8aad\u307f\u53d6\u308a\u4e2d\u306bPPT\u30b3\u30f3\u30c6\u30ca\u30fc\u3092\u521d\u671f\u5316\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\: {0} +EmbeddedFileExtractorIngestModule.ImageExtractor.pptxContainer.init.err=\u8aad\u307f\u53d6\u308a\u4e2d\u306bPPTX\u30b3\u30f3\u30c6\u30ca\u30fc\u3092\u521d\u671f\u5316\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\: {0} +EmbeddedFileExtractorIngestModule.ImageExtractor.xlsContainer.init.err=\u6b21\u3092\u8aad\u307f\u53d6\u308a\u4e2d\u306bXLS\u30b3\u30f3\u30c6\u30ca\u30fc\u3092\u521d\u671f\u5316\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\: {0} +EmbeddedFileExtractorIngestModule.ImageExtractor.xlsxContainer.init.err=\u6b21\u3092\u8aad\u307f\u53d6\u308a\u4e2d\u306bXLSX\u30b3\u30f3\u30c6\u30ca\u30fc\u3092\u521d\u671f\u5316\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\: {0} EmbeddedFileExtractorIngestModule.NoOpenCase.errMsg=\u958b\u3044\u3066\u3044\u308b\u30b1\u30fc\u30b9\u306f\u3042\u308a\u307e\u305b\u3093\u3002 +EmbeddedFileExtractorIngestModule.SevenZipContentReadStream.read.exception.errReadStream=\u30b3\u30f3\u30c6\u30f3\u30c4\u30b9\u30c8\u30ea\u30fc\u30e0\u306e\u8aad\u307f\u53d6\u308a\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 +EmbeddedFileExtractorIngestModule.SevenZipContentReadStream.seek.exception.invalidOrigin=\u7121\u52b9\u306a\u30b7\u30fc\u30af\u30aa\u30ea\u30b8\u30f3\: {0} EmbeddedFileExtractorIngestModule.UnableToGetMSOfficeExtractor.errMsg=MSOfficeEmbeddedContentExtractor\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3002 ExtractArchiveWithPasswordAction.extractFailed.title=\u30d1\u30b9\u30ef\u30fc\u30c9\u3067\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u5c01\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f ExtractArchiveWithPasswordAction.name.text=\u30d1\u30b9\u30ef\u30fc\u30c9\u3067\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u89e3\u51cd -# {0} - archiveFile -ExtractArchiveWithPasswordAction.progress.text=\u6b21\u306e\u30a2\u30fc\u30ab\u30a4\u30d6\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u958b\u5c01\u4e2d\u3067\u3059: {0} +ExtractArchiveWithPasswordAction.progress.text=\u6b21\u306e\u30a2\u30fc\u30ab\u30a4\u30d6\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u958b\u5c01\u4e2d\u3067\u3059\: {0} ExtractArchiveWithPasswordAction.prompt.text=\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5165\u529b ExtractArchiveWithPasswordAction.prompt.title=\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5165\u529b OpenIDE-Module-Display-Category=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb -OpenIDE-Module-Long-Description=\ - Embedded File Extraction Ingest Module\n\n\u57cb\u3081\u8fbc\u307f\u30d5\u30a1\u30a4\u30eb\u62bd\u51fa\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u3001\u6587\u66f8\u30d5\u30a1\u30a4\u30eb(\u4f8b: doc, docx, ppt, pptx, xls, xlsx)\u3068\u30a2\u30fc\u30ab\u30a4\u30d6\u30d5\u30a1\u30a4\u30eb(\u4f8b: zip\u3001\u5727\u7e2e\u30fb\u89e3\u51cd\u30bd\u30d5\u30c87zip\u3067\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u305d\u306e\u4ed6\u30a2\u30fc\u30ab\u30a4\u30d6\u30bf\u30a4\u30d7)\u3092\u51e6\u7406\u3057\u307e\u3059\u3002\n\ - \u3053\u308c\u3089\u306e\u30d5\u30a1\u30a4\u30eb\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u62bd\u51fa\u3057\u3001\u69cb\u6210\u6e08\u307f\u306e\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u306b\u3088\u3063\u3066\u51e6\u7406\u3055\u308c\u308b\u73fe\u5728\u306e\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u306b\u6d3e\u751f\u30d5\u30a1\u30a4\u30eb\u3092\u623b\u3057\u307e\u3059\u3002\n\ - \u6d3e\u751f\u30d5\u30a1\u30a4\u30eb\u304c\u30a2\u30fc\u30ab\u30a4\u30d6\u30d5\u30a1\u30a4\u30eb\u306e\u5834\u5408\u3001\u5727\u7e2e\u30fb\u89e3\u51cd\u30bd\u30d5\u30c87zip\u3067\u518d\u51e6\u7406\u3055\u308c\u307e\u3059\u3002\u5727\u7e2e\u30fb\u89e3\u51cd\u30bd\u30d5\u30c8\u304cN\u30ec\u30d9\u30eb\u306e\u6df1\u3055\u3067\u30a2\u30fc\u30ab\u30a4\u30d6\u30d5\u30a1\u30a4\u30eb\u3092\u51e6\u7406\u3057\u307e\u3059\u3002\n\n\ - \u62bd\u51fa\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u306f\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u30c4\u30ea\u30fc\u3067\u53c2\u7167\u3067\u304d\u307e\u3059\u3002\n\n\ - \u30e2\u30b8\u30e5\u30fc\u30eb\u306f\u3002Windows\u3001Linux\u3001Mac\u306e\u5404\u30aa\u30da\u30ec\u30fc\u30c6\u30a3\u30f3\u30b0\u30b7\u30b9\u30c6\u30e0\u3067\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u3059\u3002 +OpenIDE-Module-Long-Description=Embedded File Extraction Ingest Module\n\n\u57cb\u3081\u8fbc\u307f\u30d5\u30a1\u30a4\u30eb\u62bd\u51fa\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u3001\u6587\u66f8\u30d5\u30a1\u30a4\u30eb(\u4f8b\: doc, docx, ppt, pptx, xls, xlsx)\u3068\u30a2\u30fc\u30ab\u30a4\u30d6\u30d5\u30a1\u30a4\u30eb(\u4f8b\: zip\u3001\u5727\u7e2e\u30fb\u89e3\u51cd\u30bd\u30d5\u30c87zip\u3067\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u305d\u306e\u4ed6\u30a2\u30fc\u30ab\u30a4\u30d6\u30bf\u30a4\u30d7)\u3092\u51e6\u7406\u3057\u307e\u3059\u3002\n\u3053\u308c\u3089\u306e\u30d5\u30a1\u30a4\u30eb\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u62bd\u51fa\u3057\u3001\u69cb\u6210\u6e08\u307f\u306e\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u306b\u3088\u3063\u3066\u51e6\u7406\u3055\u308c\u308b\u73fe\u5728\u306e\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u306b\u6d3e\u751f\u30d5\u30a1\u30a4\u30eb\u3092\u623b\u3057\u307e\u3059\u3002\n\u6d3e\u751f\u30d5\u30a1\u30a4\u30eb\u304c\u30a2\u30fc\u30ab\u30a4\u30d6\u30d5\u30a1\u30a4\u30eb\u306e\u5834\u5408\u3001\u5727\u7e2e\u30fb\u89e3\u51cd\u30bd\u30d5\u30c87zip\u3067\u518d\u51e6\u7406\u3055\u308c\u307e\u3059\u3002\u5727\u7e2e\u30fb\u89e3\u51cd\u30bd\u30d5\u30c8\u304cN\u30ec\u30d9\u30eb\u306e\u6df1\u3055\u3067\u30a2\u30fc\u30ab\u30a4\u30d6\u30d5\u30a1\u30a4\u30eb\u3092\u51e6\u7406\u3057\u307e\u3059\u3002\n\n\u62bd\u51fa\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u306f\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u30c4\u30ea\u30fc\u3067\u53c2\u7167\u3067\u304d\u307e\u3059\u3002\n\n\u30e2\u30b8\u30e5\u30fc\u30eb\u306f\u3002Windows\u3001Linux\u3001Mac\u306e\u5404\u30aa\u30da\u30ec\u30fc\u30c6\u30a3\u30f3\u30b0\u30b7\u30b9\u30c6\u30e0\u3067\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u3059\u3002 OpenIDE-Module-Name=\u57cb\u3081\u8fbc\u307f\u30d5\u30a1\u30a4\u30eb\u62bd\u51fa OpenIDE-Module-Short-Description=\u57cb\u3081\u8fbc\u307f\u30d5\u30a1\u30a4\u30eb\u62bd\u51fa\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb -EmbeddedFileExtractorIngestModule.SevenZipContentReadStream.seek.exception.invalidOrigin=\u7121\u52b9\u306a\u30b7\u30fc\u30af\u30aa\u30ea\u30b8\u30f3: {0} -EmbeddedFileExtractorIngestModule.SevenZipContentReadStream.read.exception.errReadStream=\u30b3\u30f3\u30c6\u30f3\u30c4\u30b9\u30c8\u30ea\u30fc\u30e0\u306e\u8aad\u307f\u53d6\u308a\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 -EmbeddedFileExtractorIngestModule.ArchiveExtractor.encryptionFileLevel=\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u307f\u306e\u6697\u53f7\u5316(\u30a2\u30fc\u30ab\u30a4\u30d6\u30d5\u30a1\u30a4\u30eb) -EmbeddedFileExtractorIngestModule.ArchiveExtractor.encryptionFull=\u5b8c\u5168\u306a\u6697\u53f7\u5316(\u30a2\u30fc\u30ab\u30a4\u30d6\u30d5\u30a1\u30a4\u30eb) -EmbeddedFileExtractorIngestModule.ArchiveExtractor.init.errInitModule.details=\u30a8\u30e9\u30fc\u307e\u305f\u306f\u51fa\u529b\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u306e\u521d\u671f\u5316\u4e2d\u3067\u3059: {0}: {1} -EmbeddedFileExtractorIngestModule.ArchiveExtractor.isZipBombCheck.warnMsg=\u30a2\u30fc\u30ab\u30a4\u30d6\u3067ZIP\u7206\u5f3e\u304c\u691c\u51fa\u3055\u308c\u305f\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059: {0}\u3001\u9805\u76ee: {1} -EmbeddedFileExtractorIngestModule.ArchiveExtractor.isZipBombCheck.warnDetails=\u5727\u7e2e\u7387\u306f {0} \u3067\u3059\u3002{1} \u306e\u9805\u76ee\u3092\u30b9\u30ad\u30c3\u30d7\u3057\u307e\u3059\u3002 -EmbeddedFileExtractorIngestModule.ArchiveExtractor.unpack.warnMsg.zipBomb=ZIP\u7206\u5f3e\u304c\u691c\u51fa\u3055\u308c\u305f\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059: {0} -EmbeddedFileExtractorIngestModule.ArchiveExtractor.unpack.warnDetails.zipBomb=\u30a2\u30fc\u30ab\u30a4\u30d6\u306f {0} \u30ec\u30d9\u30eb\u306e\u6df1\u3055\u3067\u3059\u3002{1} \u306e\u51e6\u7406\u3092\u30b9\u30ad\u30c3\u30d7\u3057\u307e\u3059 -EmbeddedFileExtractorIngestModule.ArchiveExtractor.unpack.notEnoughDiskSpace.msg=\u30a2\u30fc\u30ab\u30a4\u30d6\u9805\u76ee\u3092\u958b\u5c01\u3059\u308b\u305f\u3081\u306e\u5341\u5206\u306a\u30c7\u30a3\u30b9\u30af\u9818\u57df\u304c\u3042\u308a\u307e\u305b\u3093: {0}\u3001{1} -EmbeddedFileExtractorIngestModule.ArchiveExtractor.unpack.notEnoughDiskSpace.details=\u30a2\u30fc\u30ab\u30a4\u30d6\u9805\u76ee\u304c\u5927\u304d\u3059\u304e\u3067\u958b\u5c01\u3067\u304d\u307e\u305b\u3093\u3002\u3053\u306e\u9805\u76ee\u306e\u958b\u5c01\u3092\u30b9\u30ad\u30c3\u30d7\u3057\u307e\u3059\u3002 -EmbeddedFileExtractorIngestModule.ArchiveExtractor.unpack.errUnpacking.msg={0} \u306e\u958b\u5c01\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -EmbeddedFileExtractorIngestModule.ArchiveExtractor.unpack.errUnpacking.details={0} \u306e\u958b\u5c01\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002{1} -EmbeddedFileExtractorIngestModule.ArchiveExtractor.unpack.encrFileDetected.msg=\u30a2\u30fc\u30ab\u30a4\u30d6\u306b\u6697\u53f7\u5316\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u304c\u691c\u51fa\u3055\u308c\u307e\u3057\u305f\u3002 -EmbeddedFileExtractorIngestModule.ArchiveExtractor.unpack.encrFileDetected.details=\u30a2\u30fc\u30ab\u30a4\u30d6\u306e\u3044\u304f\u3064\u304b\u306e\u30d5\u30a1\u30a4\u30eb: {0} \u304c\u6697\u53f7\u5316\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u5727\u7e2e\u30fb\u89e3\u51cd\u30bd\u30d5\u30c8 {1} \u306f\u3053\u306e\u30a2\u30fc\u30ab\u30a4\u30d6\u304b\u3089\u3059\u3079\u3066\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u62bd\u51fa\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002 -EmbeddedFileExtractorIngestModule.ArchiveExtractor.UnpackStream.write.exception.msg=\u30d5\u30a1\u30a4\u30eb\u3092\u6b21\u306b\u958b\u5c01\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: {0} -EmbeddedFileExtractorIngestModule.ArchiveExtractor.UnpackedTree.exception.msg=\u6d3e\u751f\u30d5\u30a1\u30a4\u30eb\u3092\u6b21\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u8ffd\u52a0\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f:{0} -EmbeddedFileExtractorIngestModule.ImageExtractor.docContainer.init.err=\u8aad\u307f\u53d6\u308a\u4e2d\u306bDOC\u30b3\u30f3\u30c6\u30ca\u30fc\u3092\u521d\u671f\u5316\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f -EmbeddedFileExtractorIngestModule.ImageExtractor.docxContainer.init.err=\u6b21\u3092\u8aad\u307f\u53d6\u308a\u4e2d\u306bDOCX\u30b3\u30f3\u30c6\u30ca\u30fc\u3092\u521d\u671f\u5316\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f: {0} -EmbeddedFileExtractorIngestModule.ImageExtractor.pptContainer.init.err=\u6b21\u3092\u8aad\u307f\u53d6\u308a\u4e2d\u306bPPT\u30b3\u30f3\u30c6\u30ca\u30fc\u3092\u521d\u671f\u5316\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f: {0} -EmbeddedFileExtractorIngestModule.ImageExtractor.pptxContainer.init.err=\u8aad\u307f\u53d6\u308a\u4e2d\u306bPPTX\u30b3\u30f3\u30c6\u30ca\u30fc\u3092\u521d\u671f\u5316\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f: {0} -EmbeddedFileExtractorIngestModule.ImageExtractor.xlsContainer.init.err=\u6b21\u3092\u8aad\u307f\u53d6\u308a\u4e2d\u306bXLS\u30b3\u30f3\u30c6\u30ca\u30fc\u3092\u521d\u671f\u5316\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f: {0} -EmbeddedFileExtractorIngestModule.ImageExtractor.xlsxContainer.init.err=\u6b21\u3092\u8aad\u307f\u53d6\u308a\u4e2d\u306bXLSX\u30b3\u30f3\u30c6\u30ca\u30fc\u3092\u521d\u671f\u5316\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f: {0} -EmbeddedFileExtractorIngestModule.ImageExtractor.extractImage.addToDB.exception.msg=\u6d3e\u751f\u30d5\u30a1\u30a4\u30eb\u3092\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u8ffd\u52a0\u3067\u304d\u307e\u305b\u3093. -EmbeddedFileExtractorIngestModule.ImageExtractor.getOutputFolderPath.exception.msg=\u6b21\u306e\u62bd\u8c61\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u306e\u30a4\u30e1\u30fc\u30b8\u62bd\u51fa\u30d1\u30b9\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f: {0} -EmbeddedFileExtractorIngestModule.ImageExtractor.getOutputFolderPath.exception.msg=\u6b21\u306e\u62bd\u8c61\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u306e\u30a4\u30e1\u30fc\u30b8\u62bd\u51fa\u30d1\u30b9\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f: {0} -EmbeddedFileExtractorIngestModule.ArchiveExtractor.UnpackStream.write.noSpace.msg=\u30c7\u30a3\u30b9\u30af\u306b\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u66f8\u304d\u8fbc\u3081\u307e\u305b\u3093\u3002\u5341\u5206\u306a\u9818\u57df\u304c\u3042\u308a\u307e\u305b\u3093\u3002 -SevenZipContentReadStream.seek.exception.invalidOrigin=\u7121\u52b9\u306a\u30aa\u30ea\u30b8\u30f3 {0} SevenZipContentReadStream.read.exception.errReadStream=\u30b9\u30c8\u30ea\u30fc\u30e0\u306e\u8aad\u307f\u53d6\u308a\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f +SevenZipContentReadStream.seek.exception.invalidOrigin=\u7121\u52b9\u306a\u30aa\u30ea\u30b8\u30f3 {0} SevenZipExtractor.indexError.message=\u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u691c\u7d22\u3059\u308b\u305f\u3081\u306e\u3001\u6697\u53f7\u5316\u691c\u51fa\u6e08\u307f\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u3092\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002 -# {0} - rootArchive SevenZipExtractor.zipBombArtifactCreation.text=Zip\u7206\u5f3e\u304c\u691c\u51fa\u3055\u308c\u307e\u3057\u305f {0} UnableToInitializeLibraries=7Zip\u30e9\u30a4\u30d6\u30e9\u30ea\u30fc\u3092\u521d\u671f\u5316\u3067\u304d\u307e\u305b\u3093\u3002 diff --git a/Core/src/org/sleuthkit/autopsy/modules/exif/Bundle.properties b/Core/src/org/sleuthkit/autopsy/modules/exif/Bundle.properties deleted file mode 100644 index 2987fc2ae8..0000000000 --- a/Core/src/org/sleuthkit/autopsy/modules/exif/Bundle.properties +++ /dev/null @@ -1,8 +0,0 @@ -OpenIDE-Module-Display-Category=Ingest Module -OpenIDE-Module-Long-Description=\ - Exif metadata ingest module. \n\n\ - The ingest module analyzes image files, extracts Exif information and posts the Exif data as results. -OpenIDE-Module-Name=ExifParser -OpenIDE-Module-Short-Description=Exif metadata ingest module -ExifParserFileIngestModule.moduleName.text=Exif Parser -ExifParserFileIngestModule.getDesc.text=Ingests JPEG files and retrieves their EXIF metadata. diff --git a/Core/src/org/sleuthkit/autopsy/modules/exif/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/modules/exif/Bundle.properties-MERGED deleted file mode 100755 index f9a5a88b1b..0000000000 --- a/Core/src/org/sleuthkit/autopsy/modules/exif/Bundle.properties-MERGED +++ /dev/null @@ -1,11 +0,0 @@ -CannotRunFileTypeDetection=Cannot run file type detection. -ExifParserFileIngestModule.indexError.message=Failed to post EXIF Metadata artifact(s). -ExifParserFileIngestModule.userContent.description=EXIF metadata exists for this file. -OpenIDE-Module-Display-Category=Ingest Module -OpenIDE-Module-Long-Description=\ - Exif metadata ingest module. \n\n\ - The ingest module analyzes image files, extracts Exif information and posts the Exif data as results. -OpenIDE-Module-Name=ExifParser -OpenIDE-Module-Short-Description=Exif metadata ingest module -ExifParserFileIngestModule.moduleName.text=Exif Parser -ExifParserFileIngestModule.getDesc.text=Ingests JPEG files and retrieves their EXIF metadata. diff --git a/Core/src/org/sleuthkit/autopsy/modules/exif/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/modules/exif/Bundle_ja.properties index fb0ec85c09..7c91fb9e90 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/exif/Bundle_ja.properties +++ b/Core/src/org/sleuthkit/autopsy/modules/exif/Bundle_ja.properties @@ -1,10 +1,10 @@ +#Tue Aug 18 18:09:21 UTC 2020 CannotRunFileTypeDetection=\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u306e\u691c\u51fa\u3092\u5b9f\u884c\u3067\u304d\u307e\u305b\u3093\u3002 +ExifParserFileIngestModule.getDesc.text=Ingests JPEG\u30d5\u30a1\u30a4\u30eb\u3092\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u3057\u3001EXIF\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u56de\u53ce\u3057\u307e\u3059\u3002 ExifParserFileIngestModule.indexError.message=\u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u691c\u7d22\u3059\u308b\u305f\u3081\u306e\u3001EXIF\u30e1\u30bf\u30c7\u30fc\u30bf\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u3092\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002 +ExifParserFileIngestModule.moduleName.text=Exif\u89e3\u6790\u30c4\u30fc\u30eb +ExifParserFileIngestModule.userContent.description=\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306b\u306fEXIF\u30e1\u30bf\u30c7\u30fc\u30bf\u304c\u5b58\u5728\u3057\u307e\u3059\u3002 OpenIDE-Module-Display-Category=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb -OpenIDE-Module-Long-Description=\ - EXIF\u30e1\u30bf\u30c7\u30fc\u30bf\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u3067\u3059\u3002 \n\n\ - \u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u30a4\u30e1\u30fc\u30b8\u30d5\u30a1\u30a4\u30eb\u3092\u89e3\u6790\u3057\u3001Exif\u60c5\u5831\u3092\u62bd\u51fa\u3057\u3001Exif\u30c7\u30fc\u30bf\u3092\u7d50\u679c\u3068\u3057\u3066\u6295\u7a3f\u3057\u307e\u3059\u3002 +OpenIDE-Module-Long-Description=EXIF\u30e1\u30bf\u30c7\u30fc\u30bf\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u3067\u3059\u3002 \n\n\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u30a4\u30e1\u30fc\u30b8\u30d5\u30a1\u30a4\u30eb\u3092\u89e3\u6790\u3057\u3001Exif\u60c5\u5831\u3092\u62bd\u51fa\u3057\u3001Exif\u30c7\u30fc\u30bf\u3092\u7d50\u679c\u3068\u3057\u3066\u6295\u7a3f\u3057\u307e\u3059\u3002 OpenIDE-Module-Name=ExifParser OpenIDE-Module-Short-Description=Exif\u30e1\u30bf\u30c7\u30fc\u30bf\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u3067\u3059\u3002 -ExifParserFileIngestModule.moduleName.text=Exif\u89e3\u6790\u30c4\u30fc\u30eb -ExifParserFileIngestModule.getDesc.text=Ingests JPEG\u30d5\u30a1\u30a4\u30eb\u3092\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u3057\u3001EXIF\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u56de\u53ce\u3057\u307e\u3059\u3002 diff --git a/Core/src/org/sleuthkit/autopsy/modules/exif/ExifParserFileIngestModule.java b/Core/src/org/sleuthkit/autopsy/modules/exif/ExifParserFileIngestModule.java deleted file mode 100644 index cf7b300ec1..0000000000 --- a/Core/src/org/sleuthkit/autopsy/modules/exif/ExifParserFileIngestModule.java +++ /dev/null @@ -1,249 +0,0 @@ -/* - * Autopsy Forensic Browser - * - * Copyright 2011-2018 Basis Technology Corp. - * Contact: carrier sleuthkit 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.modules.exif; - -import com.drew.imaging.ImageMetadataReader; -import com.drew.imaging.ImageProcessingException; -import com.drew.lang.GeoLocation; -import com.drew.lang.Rational; -import com.drew.metadata.Metadata; -import com.drew.metadata.exif.ExifIFD0Directory; -import com.drew.metadata.exif.ExifSubIFDDirectory; -import com.drew.metadata.exif.GpsDirectory; -import java.io.BufferedInputStream; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Date; -import java.util.HashSet; -import java.util.TimeZone; -import java.util.logging.Level; -import org.apache.commons.lang3.StringUtils; -import org.openide.util.NbBundle; -import org.openide.util.NbBundle.Messages; -import org.sleuthkit.autopsy.casemodule.Case; -import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException; -import org.sleuthkit.autopsy.coreutils.Logger; -import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; -import org.sleuthkit.autopsy.ingest.FileIngestModule; -import org.sleuthkit.autopsy.ingest.IngestJobContext; -import org.sleuthkit.autopsy.ingest.IngestModuleReferenceCounter; -import org.sleuthkit.autopsy.modules.filetypeid.FileTypeDetector; -import org.sleuthkit.datamodel.AbstractFile; -import org.sleuthkit.datamodel.Blackboard; -import org.sleuthkit.datamodel.BlackboardArtifact; -import static org.sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE.TSK_METADATA_EXIF; -import static org.sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE.TSK_USER_CONTENT_SUSPECTED; -import org.sleuthkit.datamodel.BlackboardAttribute; -import static org.sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DATETIME_CREATED; -import static org.sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DEVICE_MAKE; -import static org.sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DEVICE_MODEL; -import static org.sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE.TSK_GEO_ALTITUDE; -import static org.sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE.TSK_GEO_LATITUDE; -import static org.sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE.TSK_GEO_LONGITUDE; -import org.sleuthkit.datamodel.Content; -import org.sleuthkit.datamodel.Image; -import org.sleuthkit.datamodel.ReadContentInputStream; -import org.sleuthkit.datamodel.ReadContentInputStream.ReadContentInputStreamException; -import org.sleuthkit.datamodel.TskCoreException; -import org.sleuthkit.datamodel.TskData; -import org.sleuthkit.datamodel.TskData.TSK_DB_FILES_TYPE_ENUM; - -/** - * Ingest module to parse image Exif metadata. Currently only supports JPEG - * files. Ingests an image file and, if available, adds it's date, latitude, - * longitude, altitude, device model, and device make to a blackboard artifact. - */ -@NbBundle.Messages({"CannotRunFileTypeDetection=Cannot run file type detection."}) -public final class ExifParserFileIngestModule implements FileIngestModule { - - private static final Logger logger = Logger.getLogger(ExifParserFileIngestModule.class.getName()); - private static final String MODULE_NAME = ExifParserModuleFactory.getModuleName(); - private long jobId; - private static final IngestModuleReferenceCounter refCounter = new IngestModuleReferenceCounter(); - private FileTypeDetector fileTypeDetector; - private final HashSet supportedMimeTypes = new HashSet<>(); - private TimeZone timeZone = null; - private Blackboard blackboard; - - ExifParserFileIngestModule() { - supportedMimeTypes.add("audio/x-wav"); //NON-NLS - supportedMimeTypes.add("image/jpeg"); //NON-NLS - supportedMimeTypes.add("image/tiff"); //NON-NLS - } - - @Override - public void startUp(IngestJobContext context) throws IngestModuleException { - jobId = context.getJobId(); - refCounter.incrementAndGet(jobId); - try { - fileTypeDetector = new FileTypeDetector(); - } catch (FileTypeDetector.FileTypeDetectorInitException ex) { - throw new IngestModuleException(Bundle.CannotRunFileTypeDetection(), ex); - } - } - - @Messages({"ExifParserFileIngestModule.indexError.message=Failed to post EXIF Metadata artifact(s)."}) - @Override - public ProcessResult process(AbstractFile content) { - try { - blackboard = Case.getCurrentCaseThrows().getSleuthkitCase().getBlackboard(); - } catch (NoCurrentCaseException ex) { - logger.log(Level.INFO, "Exception while getting open case.", ex); //NON-NLS - return ProcessResult.ERROR; - } - //skip unalloc - if ((content.getType().equals(TSK_DB_FILES_TYPE_ENUM.UNALLOC_BLOCKS) - || (content.getType().equals(TSK_DB_FILES_TYPE_ENUM.SLACK)))) { - return ProcessResult.OK; - } - - if (content.isFile() == false) { - return ProcessResult.OK; - } - - // skip known - if (content.getKnown().equals(TskData.FileKnown.KNOWN)) { - return ProcessResult.OK; - } - - //skip unsupported - if (!parsableFormat(content)) { - return ProcessResult.OK; - } - - return processFile(content); - } - - @Messages({"ExifParserFileIngestModule.userContent.description=EXIF metadata exists for this file."}) - private ProcessResult processFile(AbstractFile file) { - - try (BufferedInputStream bin = new BufferedInputStream(new ReadContentInputStream(file));) { - - Collection attributes = new ArrayList<>(); - Metadata metadata = ImageMetadataReader.readMetadata(bin); - - // Date - ExifSubIFDDirectory exifDir = metadata.getFirstDirectoryOfType(ExifSubIFDDirectory.class); - if (exifDir != null) { - - // set the timeZone for the current datasource. - if (timeZone == null) { - try { - Content dataSource = file.getDataSource(); - if ((dataSource != null) && (dataSource instanceof Image)) { - Image image = (Image) dataSource; - timeZone = TimeZone.getTimeZone(image.getTimeZone()); - } - } catch (TskCoreException ex) { - logger.log(Level.INFO, "Error getting time zones", ex); //NON-NLS - } - } - Date date = exifDir.getDate(ExifSubIFDDirectory.TAG_DATETIME_ORIGINAL, timeZone); - if (date != null) { - attributes.add(new BlackboardAttribute(TSK_DATETIME_CREATED, MODULE_NAME, date.getTime() / 1000)); - } - } - - // GPS Stuff - GpsDirectory gpsDir = metadata.getFirstDirectoryOfType(GpsDirectory.class); - if (gpsDir != null) { - GeoLocation loc = gpsDir.getGeoLocation(); - if (loc != null) { - attributes.add(new BlackboardAttribute(TSK_GEO_LATITUDE, MODULE_NAME, loc.getLatitude())); - attributes.add(new BlackboardAttribute(TSK_GEO_LONGITUDE, MODULE_NAME, loc.getLongitude())); - } - - Rational altitude = gpsDir.getRational(GpsDirectory.TAG_ALTITUDE); - if (altitude != null) { - attributes.add(new BlackboardAttribute(TSK_GEO_ALTITUDE, MODULE_NAME, altitude.doubleValue())); - } - } - - // Device info - ExifIFD0Directory devDir = metadata.getFirstDirectoryOfType(ExifIFD0Directory.class); - if (devDir != null) { - String model = devDir.getString(ExifIFD0Directory.TAG_MODEL); - if (StringUtils.isNotBlank(model)) { - attributes.add(new BlackboardAttribute(TSK_DEVICE_MODEL, MODULE_NAME, model)); - } - - String make = devDir.getString(ExifIFD0Directory.TAG_MAKE); - if (StringUtils.isNotBlank(make)) { - attributes.add(new BlackboardAttribute(TSK_DEVICE_MAKE, MODULE_NAME, make)); - } - } - - // Add the attributes, if there are any, to a new artifact - if (!attributes.isEmpty()) { - // Create artifact if it doesn't already exist. - if (!blackboard.artifactExists(file, TSK_METADATA_EXIF, attributes)) { - BlackboardArtifact bba = file.newArtifact(TSK_METADATA_EXIF); - BlackboardArtifact bba2 = file.newArtifact(TSK_USER_CONTENT_SUSPECTED); - bba.addAttributes(attributes); - bba2.addAttribute(new BlackboardAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_COMMENT, MODULE_NAME, Bundle.ExifParserFileIngestModule_userContent_description())); - try { - // index the artifact for keyword search - blackboard.postArtifact(bba, MODULE_NAME); - blackboard.postArtifact(bba2, MODULE_NAME); - } catch (Blackboard.BlackboardException ex) { - logger.log(Level.SEVERE, "Unable to index blackboard artifact " + bba.getArtifactID(), ex); //NON-NLS - MessageNotifyUtil.Notify.error( - Bundle.ExifParserFileIngestModule_indexError_message(), bba.getDisplayName()); - } - } - } - - return ProcessResult.OK; - } catch (TskCoreException ex) { - logger.log(Level.WARNING, "Failed to create blackboard artifact for exif metadata ({0}).", ex.getLocalizedMessage()); //NON-NLS - return ProcessResult.ERROR; - } catch (ImageProcessingException ex) { - logger.log(Level.WARNING, String.format("Failed to process the image file '%s/%s' (id=%d).", file.getParentPath(), file.getName(), file.getId()), ex); - return ProcessResult.ERROR; - } catch (ReadContentInputStreamException ex) { - logger.log(Level.WARNING, String.format("Error while trying to read image file '%s/%s' (id=%d).", file.getParentPath(), file.getName(), file.getId()), ex); //NON-NLS - return ProcessResult.ERROR; - } catch (IOException ex) { - logger.log(Level.WARNING, String.format("IOException when parsing image file '%s/%s' (id=%d).", file.getParentPath(), file.getName(), file.getId()), ex); //NON-NLS - return ProcessResult.ERROR; - } - } - - /** - * Checks if should try to attempt to extract exif. Currently checks if - * JPEG, TIFF or X-WAV (by signature) - * - * @param f file to be checked - * - * @return true if to be processed - */ - private boolean parsableFormat(AbstractFile f) { - String mimeType = fileTypeDetector.getMIMEType(f); - return supportedMimeTypes.contains(mimeType); - } - - @Override - public void shutDown() { - // We only need to check for this final event on the last module per job - if (refCounter.decrementAndGet(jobId) == 0) { - timeZone = null; - } - } -} diff --git a/Core/src/org/sleuthkit/autopsy/modules/exif/layer.xml b/Core/src/org/sleuthkit/autopsy/modules/exif/layer.xml deleted file mode 100644 index 7fd4cab788..0000000000 --- a/Core/src/org/sleuthkit/autopsy/modules/exif/layer.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/Bundle_ja.properties index 8620a7ca3d..54ac431e90 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/Bundle_ja.properties +++ b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/Bundle_ja.properties @@ -1,75 +1,74 @@ -# {0} - \u30bf\u30a4\u30d7\u540d +#Tue Aug 18 18:09:21 UTC 2020 +AddFileTypePanel.addSigButton.text=\u7f72\u540d\u3092\u8ffd\u52a0 AddFileTypePanel.containsIllegalCharacter.message=\u4ee3\u308f\u308a\u306bMIME\u30bf\u30a4\u30d7\u306e\u7121\u52b9\u306a\u6587\u5b57 {0} \u304c\u63d0\u6848\u3055\u308c\u307e\u3057\u305f AddFileTypePanel.containsIllegalCharacter.title=MIME\u30bf\u30a4\u30d7\u306e\u7121\u52b9\u306a\u6587\u5b57 -AddFileTypePanel.mimeFormatLabel.text=MIME\u30bf\u30a4\u30d7\u306e\u5f62\u5f0f\u306f\u6b21\u306e\u3068\u304a\u308a\u3067\u3042\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059: \u30e1\u30c7\u30a3\u30a2\u30bf\u30a4\u30d7/\u30e1\u30c7\u30a3\u30a2\u30b5\u30d6\u30bf\u30a4\u30d7 -# {0} - \u30e1\u30c7\u30a3\u30a2\u30b5\u30d6\u30bf\u30a4\u30d7 -AddFileTypePanel.nonStandardMIMEType.message=MIME\u30bf\u30a4\u30d7\u306e\u5f62\u5f0f\u306f\u6b21\u306e\u3068\u304a\u308a\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093: \u30e1\u30c7\u30a3\u30a2\u30bf\u30a4\u30d7/\u30e1\u30c7\u30a3\u30a2\u30b5\u30d6\u30bf\u30a4\u30d7\u3002\u4ee3\u308f\u308a\u306b\u30ab\u30b9\u30bf\u30e0/{0} \u304c\u63d0\u6848\u3055\u308c\u307e\u3057\u305f\u3002 +AddFileTypePanel.deleteSigButton.text=\u7f72\u540d\u3092\u524a\u9664 +AddFileTypePanel.editSigButton.text=\u7f72\u540d\u3092\u7de8\u96c6 +AddFileTypePanel.jLabel1.text=\u7f72\u540d +AddFileTypePanel.mimeFormatLabel.text=MIME\u30bf\u30a4\u30d7\u306e\u5f62\u5f0f\u306f\u6b21\u306e\u3068\u304a\u308a\u3067\u3042\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\: \u30e1\u30c7\u30a3\u30a2\u30bf\u30a4\u30d7/\u30e1\u30c7\u30a3\u30a2\u30b5\u30d6\u30bf\u30a4\u30d7 +AddFileTypePanel.mimeTypeLabel.text=MIME\u30bf\u30a4\u30d7 +AddFileTypePanel.mimeTypeTextField.text= +AddFileTypePanel.nonStandardMIMEType.message=MIME\u30bf\u30a4\u30d7\u306e\u5f62\u5f0f\u306f\u6b21\u306e\u3068\u304a\u308a\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\: \u30e1\u30c7\u30a3\u30a2\u30bf\u30a4\u30d7/\u30e1\u30c7\u30a3\u30a2\u30b5\u30d6\u30bf\u30a4\u30d7\u3002\u4ee3\u308f\u308a\u306b\u30ab\u30b9\u30bf\u30e0/{0} \u304c\u63d0\u6848\u3055\u308c\u307e\u3057\u305f\u3002 AddFileTypePanel.nonStandardMIMEType.title=\u975e\u6a19\u6e96\u306eMIME\u30bf\u30a4\u30d7 +AddFileTypePanel.postHitCheckBox.text=\u691c\u51fa\u6642\u306b"\u8208\u5473\u6df1\u3044\u30d5\u30a1\u30a4\u30eb"\u3068\u3057\u3066\u30a2\u30e9\u30fc\u30c8 +AddFileTypePanel.setNameLabel.text=\u30bb\u30c3\u30c8\u540d +AddFileTypePanel.setNameTextField.text= AddFileTypeSignatureDialog.addButton.title=OK AddFileTypeSignatureDialog.cancelButton.title=\u53d6\u308a\u6d88\u3057 AddFileTypeSignatureDialog.invalidSignature.message=\u7121\u52b9\u306a\u7f72\u540d +AddFileTypeSignaturePanel.hexPrefixLabel.text=0x +AddFileTypeSignaturePanel.offsetLabel.text=\u30d0\u30a4\u30c8\u30aa\u30d5\u30bb\u30c3\u30c8 +AddFileTypeSignaturePanel.offsetRelativeToLabel.text=\u30aa\u30d5\u30bb\u30c3\u30c8\u76f8\u5bfe\u5148 +AddFileTypeSignaturePanel.offsetTextField.text= +AddFileTypeSignaturePanel.signatureLabel.text=\u7f72\u540d AddFileTypeSignaturePanel.signatureStringFail.text=\u7f72\u540d\u6587\u5b57\u5217\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f +AddFileTypeSignaturePanel.signatureTextField.text= +AddFileTypeSignaturePanel.signatureTypeLabel.text=\u7f72\u540d\u30bf\u30a4\u30d7 AddMimeTypeDialog.addButton.title=OK AddMimeTypeDialog.cancelButton.title=\u53d6\u308a\u6d88\u3057 -AddMimeTypedialog.title=\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7 AddMimeTypePanel.emptySetName.message=\u30a2\u30e9\u30fc\u30c8\u304c\u8981\u6c42\u3055\u308c\u305f\u5834\u5408\u3001\u8208\u5473\u6df1\u3044\u30d5\u30a1\u30a4\u30eb\u30bb\u30c3\u30c8\u540d\u304c\u5fc5\u8981\u3067\u3059\u3002 AddMimeTypePanel.emptySetName.title=\u8208\u5473\u6df1\u3044\u30d5\u30a1\u30a4\u30eb\u30bb\u30c3\u30c8\u540d\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093 AddMimeTypePanel.emptySigList.message=\u5c11\u306a\u304f\u3068\u30821\u3064\u306e\u7f72\u540d\u304c\u5fc5\u8981\u3067\u3059\u3002 AddMimeTypePanel.emptySigList.title=\u7121\u52b9\u306a\u7f72\u540d\u30ea\u30b9\u30c8 +AddMimeTypedialog.title=\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7 CannotRunFileTypeDetection=\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u306e\u691c\u51fa\u3092\u5b9f\u884c\u3067\u304d\u307e\u305b\u3093\u3002 -FileTypeIdGlobalSettingsPanel.Title=\u30b0\u30ed\u30fc\u30d0\u30eb\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u8b58\u5225\u8a2d\u5b9a -OptionsCategory_Name_FileTypeId=\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7 -OptionsCategory_Keywords_FileTypeId=FileTypeId -OpenIDE-Module-Name=FileTypeId -FileTypeIdIngestModule.moduleName.text=\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u8b58\u5225 -FileTypeIdIngestModule.moduleDesc.text=\u30d0\u30a4\u30ca\u30ea\u30fc\u7f72\u540d\u306b\u57fa\u3065\u304d\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u3092\u7167\u5408\u3057\u307e\u3059\u3002 -FileTypeIdIngestModule.complete.totalProcTime=\u5408\u8a08\u51e6\u7406\u6642\u9593 -FileTypeIdIngestModule.complete.totalFiles=\u30d5\u30a1\u30a4\u30eb\u51e6\u7406\u306b\u8cbb\u3084\u3057\u305f\u5408\u8a08\u6642\u9593 -FileTypeIdIngestModule.complete.srvMsg.text=\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7ID\u7d50\u679c -FileTypeIdModuleFactory.getIngestJobSettingsPanel.exception.msg=instanceof FileTypeIdModuleSettings\u306b\u306a\u308b\u3068\u4e88\u60f3\u3055\u308c\u308b\u8a2d\u5b9a\u5f15\u6570 -FileTypeIdModuleFactory.createFileIngestModule.exception.msg=instanceof FileTypeIdModuleSettings\u306b\u306a\u308b\u3068\u4e88\u60f3\u3055\u308c\u308b\u8a2d\u5b9a\u5f15\u6570 -FileTypeIdIngestJobSettingsPanel.skipKnownCheckBox.toolTipText=\u65e2\u77e5\u30cf\u30c3\u30b7\u30e5\u3092\u6301\u3064\u30d5\u30a1\u30a4\u30eb\u6570\u306b\u5fdc\u3058\u3066\u3001\u3053\u306e\u30dc\u30c3\u30af\u30b9\u3092\u30c1\u30a7\u30c3\u30af\u3059\u308b\u3068\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u8b58\u5225\u901f\u5ea6\u304c\u5411\u4e0a\u3057\u307e\u3059\u3002 -FileTypeIdIngestJobSettingsPanel.skipKnownCheckBox.text=\u65e2\u77e5\u30d5\u30a1\u30a4\u30eb(NSRL)\u3092\u30b9\u30ad\u30c3\u30d7 -FileTypeIdGlobalSettingsPanel.deleteTypeButton.text=\u30bf\u30a4\u30d7\u3092\u524a\u9664 -FileTypeIdGlobalSettingsPanel.signatureComboBox.rawItem=\u30d0\u30a4\u30c8(16\u9032\u6570) -FileTypeIdGlobalSettingsPanel.signatureComboBox.asciiItem=\u6587\u5b57\u5217(ASCII) -FileTypeIdGlobalSettingsPanel.offsetComboBox.startItem=\u958b\u59cb -FileTypeIdGlobalSettingsPanel.offsetComboBox.endItem=\u7d42\u4e86 +FileTypeIdGlobalSettingsPanel.JOptionPane.invalidInterestingFilesSetName.message= +FileTypeIdGlobalSettingsPanel.JOptionPane.invalidInterestingFilesSetName.title=\u8208\u5473\u6df1\u3044\u30d5\u30a1\u30a4\u30eb\u30bb\u30c3\u30c8\u540d\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093 FileTypeIdGlobalSettingsPanel.JOptionPane.invalidMIMEType.message=MIME\u30bf\u30a4\u30d7\u304c\u5fc5\u8981\u3067\u3059\u3002 FileTypeIdGlobalSettingsPanel.JOptionPane.invalidMIMEType.title=MIME\u30bf\u30a4\u30d7\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093 -FileTypeIdGlobalSettingsPanel.JOptionPane.invalidSignature.message=\u7f72\u540d\u304c\u5fc5\u8981\u3067\u3059\u3002 -FileTypeIdGlobalSettingsPanel.JOptionPane.invalidSignature.title=\u7f72\u540d\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093 FileTypeIdGlobalSettingsPanel.JOptionPane.invalidOffset.length=\u30aa\u30d5\u30bb\u30c3\u30c8\u306f\u7f72\u540d\u30b5\u30a4\u30ba\u3088\u308a\u3082\u5c0f\u3055\u304f\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 FileTypeIdGlobalSettingsPanel.JOptionPane.invalidOffset.message=\u30aa\u30d5\u30bb\u30c3\u30c8\u306f\u6b63\u306e\u6574\u6570\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 FileTypeIdGlobalSettingsPanel.JOptionPane.invalidOffset.title=\u7121\u52b9\u306a\u30aa\u30d5\u30bb\u30c3\u30c8 FileTypeIdGlobalSettingsPanel.JOptionPane.invalidRawSignatureBytes.message=\u7f72\u540d\u306b1\u3064\u4ee5\u4e0a\u306e\u7121\u52b9\u306a16\u9032\u6570\u306e\u6841\u304c\u3042\u308a\u307e\u3059\u3002 +FileTypeIdGlobalSettingsPanel.JOptionPane.invalidSignature.message=\u7f72\u540d\u304c\u5fc5\u8981\u3067\u3059\u3002 +FileTypeIdGlobalSettingsPanel.JOptionPane.invalidSignature.title=\u7f72\u540d\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093 FileTypeIdGlobalSettingsPanel.JOptionPane.invalidSignatureBytes.title=\u7121\u52b9\u306a\u7f72\u540d -FileTypeIdGlobalSettingsPanel.JOptionPane.invalidInterestingFilesSetName.message= -FileTypeIdGlobalSettingsPanel.JOptionPane.invalidInterestingFilesSetName.title=\u8208\u5473\u6df1\u3044\u30d5\u30a1\u30a4\u30eb\u30bb\u30c3\u30c8\u540d\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093 -FileTypeIdGlobalSettingsPanel.JOptionPane.storeFailed.title=\u4fdd\u5b58\u5931\u6557 FileTypeIdGlobalSettingsPanel.JOptionPane.loadFailed.title=\u8aad\u307f\u8fbc\u307f\u5931\u6557 -FileTypeIdGlobalSettingsPanel.loadFileTypes.errorMessage=\u65e2\u5b58\u306e\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u5b9a\u7fa9\u3092\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\u3067\u3057\u305f\u3002 -FileTypeIdGlobalSettingsPanel.saveFileTypes.errorMessage=\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u5b9a\u7fa9\u3092\u4fdd\u5b58\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002 -FileTypeIdGlobalSettingsPanel.newTypeButton.text=\u65b0\u898f\u30bf\u30a4\u30d7 -FileTypeIdGlobalSettingsPanel.jLabel2.text=\u30ab\u30b9\u30bf\u30e0MIME\u30bf\u30a4\u30d7: -FileTypeIdGlobalSettingsPanel.startUp.fileTypeDetectorInitializationException.msg=\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u691c\u51fa\u30c4\u30fc\u30eb\u306e\u521d\u671f\u5316\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 -AddFileTypeSignaturePanel.offsetLabel.text=\u30d0\u30a4\u30c8\u30aa\u30d5\u30bb\u30c3\u30c8 -AddFileTypeSignaturePanel.signatureTextField.text= -AddFileTypeSignaturePanel.signatureTypeLabel.text=\u7f72\u540d\u30bf\u30a4\u30d7 -AddFileTypeSignaturePanel.signatureLabel.text=\u7f72\u540d -AddFileTypeSignaturePanel.hexPrefixLabel.text=0x -AddFileTypeSignaturePanel.offsetRelativeToLabel.text=\u30aa\u30d5\u30bb\u30c3\u30c8\u76f8\u5bfe\u5148 -AddFileTypeSignaturePanel.offsetTextField.text= -FileTypeIdGlobalSettingsPanel.jLabel1.text=\u7f72\u540d +FileTypeIdGlobalSettingsPanel.JOptionPane.storeFailed.title=\u4fdd\u5b58\u5931\u6557 +FileTypeIdGlobalSettingsPanel.Title=\u30b0\u30ed\u30fc\u30d0\u30eb\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u8b58\u5225\u8a2d\u5b9a +FileTypeIdGlobalSettingsPanel.customTypesLabel.text=\u30ab\u30b9\u30bf\u30e0MIME\u30bf\u30a4\u30d7\uff1a +FileTypeIdGlobalSettingsPanel.deleteTypeButton.text=\u30bf\u30a4\u30d7\u3092\u524a\u9664 +FileTypeIdGlobalSettingsPanel.descriptionLabel.text=Autopsy\u306f\u3001\u591a\u304f\u306e\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u3092\u81ea\u52d5\u7684\u306b\u691c\u51fa\u3067\u304d\u307e\u3059\u3002 \u3053\u3053\u306b\u30ab\u30b9\u30bf\u30e0\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u3092\u8ffd\u52a0\u51fa\u6765\u307e\u3059\u3002 FileTypeIdGlobalSettingsPanel.editTypeButton.text=\u30bf\u30a4\u30d7\u3092\u7de8\u96c6 -AddFileTypePanel.mimeTypeTextField.text= -AddFileTypePanel.mimeTypeLabel.text=MIME\u30bf\u30a4\u30d7 -AddFileTypePanel.deleteSigButton.text=\u7f72\u540d\u3092\u524a\u9664 -AddFileTypePanel.jLabel1.text=\u7f72\u540d -AddFileTypePanel.editSigButton.text=\u7f72\u540d\u3092\u7de8\u96c6 -AddFileTypePanel.addSigButton.text=\u7f72\u540d\u3092\u8ffd\u52a0 -AddFileTypePanel.postHitCheckBox.text=\u691c\u51fa\u6642\u306b"\u8208\u5473\u6df1\u3044\u30d5\u30a1\u30a4\u30eb"\u3068\u3057\u3066\u30a2\u30e9\u30fc\u30c8 -AddFileTypePanel.setNameLabel.text=\u30bb\u30c3\u30c8\u540d -AddFileTypePanel.setNameTextField.text= -FileTypeIdGlobalSettingsPanel.ingestRunningWarningLabel.text=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u5b9f\u884c\u4e2d\u306f\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u5b9a\u7fa9\u3092\u5909\u66f4\u3067\u304d\u307e\u305b\u3093! -FileTypeIdGlobalSettingsPanel.jLabel3.text=Autopsy\u306f\u81ea\u52d5\u7684\u306b\u591a\u304f\u306e\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u3092\u691c\u51fa\u3067\u304d\u307e\u3059\u3002\u3053\u3053\u306b\u30ab\u30b9\u30bf\u30e0\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +FileTypeIdGlobalSettingsPanel.ingestRunningWarningLabel.text=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u5b9f\u884c\u4e2d\u306f\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u5b9a\u7fa9\u3092\u5909\u66f4\u3067\u304d\u307e\u305b\u3093\! +FileTypeIdGlobalSettingsPanel.loadFileTypes.errorMessage=\u65e2\u5b58\u306e\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u5b9a\u7fa9\u3092\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\u3067\u3057\u305f\u3002 +FileTypeIdGlobalSettingsPanel.newTypeButton.text=\u65b0\u898f\u30bf\u30a4\u30d7 +FileTypeIdGlobalSettingsPanel.offsetComboBox.endItem=\u7d42\u4e86 +FileTypeIdGlobalSettingsPanel.offsetComboBox.startItem=\u958b\u59cb +FileTypeIdGlobalSettingsPanel.saveFileTypes.errorMessage=\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u5b9a\u7fa9\u3092\u4fdd\u5b58\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002 +FileTypeIdGlobalSettingsPanel.signatureComboBox.asciiItem=\u6587\u5b57\u5217(ASCII) +FileTypeIdGlobalSettingsPanel.signatureComboBox.rawItem=\u30d0\u30a4\u30c8(16\u9032\u6570) +FileTypeIdGlobalSettingsPanel.signaturesLabel.text=\u7f72\u540d +FileTypeIdGlobalSettingsPanel.startUp.fileTypeDetectorInitializationException.msg=\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u691c\u51fa\u30c4\u30fc\u30eb\u306e\u521d\u671f\u5316\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 +FileTypeIdIngestJobSettingsPanel.skipKnownCheckBox.text=\u65e2\u77e5\u30d5\u30a1\u30a4\u30eb(NSRL)\u3092\u30b9\u30ad\u30c3\u30d7 +FileTypeIdIngestJobSettingsPanel.skipKnownCheckBox.toolTipText=\u65e2\u77e5\u30cf\u30c3\u30b7\u30e5\u3092\u6301\u3064\u30d5\u30a1\u30a4\u30eb\u6570\u306b\u5fdc\u3058\u3066\u3001\u3053\u306e\u30dc\u30c3\u30af\u30b9\u3092\u30c1\u30a7\u30c3\u30af\u3059\u308b\u3068\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u8b58\u5225\u901f\u5ea6\u304c\u5411\u4e0a\u3057\u307e\u3059\u3002 +FileTypeIdIngestModule.complete.srvMsg.text=\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7ID\u7d50\u679c +FileTypeIdIngestModule.complete.totalFiles=\u30d5\u30a1\u30a4\u30eb\u51e6\u7406\u306b\u8cbb\u3084\u3057\u305f\u5408\u8a08\u6642\u9593 +FileTypeIdIngestModule.complete.totalProcTime=\u5408\u8a08\u51e6\u7406\u6642\u9593 +FileTypeIdIngestModule.moduleDesc.text=\u30d0\u30a4\u30ca\u30ea\u30fc\u7f72\u540d\u306b\u57fa\u3065\u304d\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u3092\u7167\u5408\u3057\u307e\u3059\u3002 +FileTypeIdIngestModule.moduleName.text=\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u8b58\u5225 +FileTypeIdModuleFactory.createFileIngestModule.exception.msg=instanceof FileTypeIdModuleSettings\u306b\u306a\u308b\u3068\u4e88\u60f3\u3055\u308c\u308b\u8a2d\u5b9a\u5f15\u6570 +FileTypeIdModuleFactory.getIngestJobSettingsPanel.exception.msg=instanceof FileTypeIdModuleSettings\u306b\u306a\u308b\u3068\u4e88\u60f3\u3055\u308c\u308b\u8a2d\u5b9a\u5f15\u6570 +OpenIDE-Module-Name=FileTypeId +OptionsCategory_Keywords_FileTypeId=FileTypeId +OptionsCategory_Name_FileTypeId=\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7 diff --git a/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/Bundle_ja.properties index c800aca094..3dda1dad7d 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/Bundle_ja.properties +++ b/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/Bundle_ja.properties @@ -1,298 +1,283 @@ -HashDbCreateDatabaseDialog.databaseCreationError=\u65b0\u898f\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306e\u4f5c\u6210\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -HashDbCreateDatabaseDialog.databaseLookupError=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u306b\u30a2\u30af\u30bb\u30b9\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -HashDbCreateDatabaseDialog.duplicateName=\u3053\u306e\u540d\u524d\u306e\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306f\u3059\u3067\u306b\u5b58\u5728\u3057\u307e\u3059 -HashDbCreateDatabaseDialog.missingOrg=\u7d44\u7e54\u3092\u9078\u629e\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 -HashDbCreateDatabaseDialog.populateOrgsError.message=\u7d44\u7e54\u306e\u8aad\u307f\u8fbc\u307f\u4e2d\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002 -HashDbImportDatabaseDialog.databaseLookupError=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u306b\u30a2\u30af\u30bb\u30b9\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -HashDbImportDatabaseDialog.duplicateName=\u3053\u306e\u540d\u524d\u3068\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306f\u30d0\u30fc\u30b8\u30e7\u30f3\u3059\u3067\u306b\u5b58\u5728\u3057\u307e\u3059 -HashDbImportDatabaseDialog.missingOrg=\u7d44\u7e54\u3092\u9078\u629e\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 -HashDbImportDatabaseDialog.missingVersion=\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u5165\u529b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 -HashDbImportDatabaseDialog.mustEnterHashSetNameMsg=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u540d\u3092\u5165\u529b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 -HashDbImportDatabaseDialog.populateOrgsError.message=\u7d44\u7e54\u306e\u8aad\u307f\u8fbc\u307f\u4e2d\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002 -# {0} - \u30d5\u30a1\u30a4\u30eb\u540d -HashDbIngestModule.dialogTitle.errorFindingArtifacts=\u6b21\u306e\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u306e\u691c\u7d22\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: {0} -# {0} - \u30d5\u30a1\u30a4\u30eb\u540d -HashDbIngestModule.errorMessage.lookingForFileArtifacts={0} \u306e\u65e2\u5b58\u306e\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u306e\u691c\u7d22\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 -HashDbIngestModule.indexError.message=\u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u691c\u7d22\u3059\u308b\u305f\u3081\u306e\u3001\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306e\u30d2\u30c3\u30c8\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u3092\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002 -HashDbIngestModule.knownBadFileSearchWillNotExecuteWarn=\u9855\u8457\u306a\u30d5\u30a1\u30a4\u30eb\u306e\u691c\u7d22\u306f\u5b9f\u884c\u3055\u308c\u307e\u305b\u3093\u3002 -HashDbIngestModule.knownFileSearchWillNotExecuteWarn=\u65e2\u77e5\u30d5\u30a1\u30a4\u30eb\u306e\u691c\u7d22\u306f\u5b9f\u884c\u3055\u308c\u307e\u305b\u3093\u3002 -HashDbIngestModule.noKnownBadHashDbSetMsg=\u9855\u8457\u306a\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306f\u3042\u308a\u307e\u305b\u3093\u3002 -HashDbIngestModule.noKnownHashDbSetMsg=\u65e2\u77e5\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306f\u3042\u308a\u307e\u305b\u3093\u3002 -HashDbManager.CentralRepoHashDb.orgError=\u7d44\u7e54\u306e\u8aad\u307f\u8fbc\u307f\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -HashDbManager.centralRepoLoadError.message=\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306e\u8aad\u307f\u8fbc\u307f\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -# {0} - \u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u540d -HashDbManager.noDbPath.message=\u6b21\u306e\u305f\u3081\u306e\u6709\u52b9\u306a\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u30d1\u30b9\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f: {0} -HashDbSearchAction.noOpenCase.errMsg=\u958b\u3044\u3066\u3044\u308b\u30b1\u30fc\u30b9\u306f\u3042\u308a\u307e\u305b\u3093\u3002 -HashDbSearchPanel.noOpenCase.errMsg=\u958b\u3044\u3066\u3044\u308b\u30b1\u30fc\u30b9\u306f\u3042\u308a\u307e\u305b\u3093\u3002 -HashLookupSettingsPanel.centralRepo=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc -HashLookupSettingsPanel.editable=\u7de8\u96c6\u53ef\u80fd -HashLookupSettingsPanel.indexNsrl.text=\u3053\u306e\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306fNSRL\u306e\u3088\u3046\u306b\u898b\u3048\u308b\u305f\u3081\u3001\u30ea\u30b9\u30c8\u304b\u3089\u524a\u9664\u3055\u308c\u307e\u3059\u3002\n -HashLookupSettingsPanel.indexNsrl.title=NSRL\u306f\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u307e\u305b\u3093\u3002 -HashLookupSettingsPanel.notApplicable=N/A -HashLookupSettingsPanel.promptMessage.deleteHashDb=\u3053\u308c\u306b\u3088\u308a\u3001\u30cf\u30c3\u30b7\u30e5\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30eb\u30c3\u30af\u30a2\u30c3\u30d7\u306b\u5229\u7528\u3067\u304d\u306a\u304f\u306a\u308a\u307e\u3059\u3002\u7d9a\u884c\u3057\u307e\u3059\u304b?\n\n\u6ce8: \u30cf\u30c3\u30b7\u30e5\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306f\u5f8c\u304b\u3089\u3067\u3082\u518d\u30a4\u30f3\u30dd\u30fc\u30c8\u3067\u304d\u307e\u3059\u3002 -HashLookupSettingsPanel.promptTitle.deleteHashDb=\u69cb\u6210\u304b\u3089\u30cf\u30c3\u30b7\u30e5\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u524a\u9664 -HashLookupSettingsPanel.readOnly=\u8aad\u307f\u53d6\u308a\u5c02\u7528 -# {0} - \u30cf\u30c3\u30b7\u30e5\u30eb\u30c3\u30af\u30a2\u30c3\u30d7\u540d -HashLookupSettingsPanel.removeDatabaseFailure.message=\u30cf\u30c3\u30b7\u30e5\u30eb\u30c3\u30af\u30a2\u30c3\u30d7\u3092\u524a\u9664\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f: {0} -# {0} - nsrlUrlAddress -HashLookupSettingsPanel.removeUnindexedNsrl.text=NSRL\u3092\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3059\u308b\u4ee3\u308f\u308a\u306b\u3001\u3053\u3053\u3067\u5165\u624b\u53ef\u80fd\u306a\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u6e08\u307f\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u304f\u3060\u3055\u3044:\n{0} -HashLookupSettingsPanel.removeUnindexedNsrl.title=\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u3066\u3044\u306a\u3044NSRL(s)\u306f\u524a\u9664\u3055\u308c\u307e\u3059 -HashLookupSettingsPanel.saveFail.message=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u8a2d\u5b9a\u3092\u4fdd\u5b58\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002 -HashLookupSettingsPanel.saveFail.title=\u4fdd\u5b58\u5931\u6557 -HashLookupSettingsPanel.Title=\u30b0\u30ed\u30fc\u30d0\u30eb\u30cf\u30c3\u30b7\u30e5\u30eb\u30c3\u30af\u30a2\u30c3\u30d7\u8a2d\u5b9a -# {0} - nsrlHashSet -HashLookupSettingsPanel.unindexedNsrl.base=\u6b21\u306e\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306f\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u3066\u3044\u306a\u3044\u30d0\u30fc\u30b8\u30e7\u30f3\u306eNSRL\u306e\u3088\u3046\u306b\u898b\u3048\u308b\u305f\u3081\u3001\u30ea\u30b9\u30c8\u304b\u3089\u524a\u9664\u3055\u308c\u307e\u3059\u3002\nHash set:{0}\n -# {0} - nsrlHashSets -HashLookupSettingsPanel.unindexedNsrls.base=\u6b21\u306e\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306f\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u3066\u3044\u306a\u3044\u30d0\u30fc\u30b8\u30e7\u30f3\u306eNSRL\u306e\u3088\u3046\u306b\u898b\u3048\u308b\u305f\u3081\u3001\u30ea\u30b9\u30c8\u304b\u3089\u524a\u9664\u3055\u308c\u307e\u3059\u3002\nHash sets:{0}\n -HashLookupSettingsPanel.updateStatusError=\u30b9\u30c6\u30fc\u30bf\u30b9\u306e\u8aad\u307f\u53d6\u308a\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -ImportCentralRepoDbProgressDialog.errorParsingFile.message=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u30d5\u30a1\u30a4\u30eb\u306e\u89e3\u6790\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -ImportCentralRepoDbProgressDialog.linesProcessed.message=\ \u51e6\u7406\u3055\u308c\u305f\u30cf\u30c3\u30b7\u30e5 -ImportCentralRepoDbProgressDialog.title.text=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u306e\u30a4\u30f3\u30dd\u30fc\u30c8\u304c\u9032\u884c\u4e2d\u3067\u3059 -OpenIDE-Module-Display-Category=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb -OpenIDE-Module-Long-Description=\ - \u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u3067\u3059\u3002 \n\n\ - \u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u306f\u30c7\u30a3\u30b9\u30af\u30a4\u30e1\u30fc\u30b8\u5185\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u89e3\u6790\u3057\u3001\u300c\u65e2\u77e5\u300d(\u300c\u65e2\u77e5\u300d\u30d5\u30a1\u30a4\u30eb\u306eNSRL\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u30eb\u30c3\u30af\u30a2\u30c3\u30d7\u306b\u57fa\u3065\u304f)\u304a\u3088\u3073\u300c\u4e0d\u6b63 / \u8208\u5473\u6df1\u3044\u300d(\u30e6\u30fc\u30b6\u30fc\u304c\u63d0\u4f9b\u3059\u308b1\u3064\u4ee5\u4e0a\u306e\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306b\u57fa\u3065\u304f)\u3068\u30de\u30fc\u30af\u4ed8\u3051\u3057\u307e\u3059\u3002\n\n\ - \u3053\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u306b\u306f\u3001\u30cf\u30c3\u30b7\u30e5\u3084\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u69cb\u6210\u5225\u306e\u30d5\u30a1\u30a4\u30eb\u30eb\u30c3\u30af\u30a2\u30c3\u30d7\u306a\u3069\u306e\u3001GUI\u306b\u7d71\u5408\u3055\u308c\u3066\u3044\u308b\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30c4\u30fc\u30eb\u4ee5\u5916\u306e\u305d\u306e\u4ed6\u306e\u30c4\u30fc\u30eb\u3082\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002 -OpenIDE-Module-Name=HashDatabases -OptionsCategory_Name_HashDatabase=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8 -OptionsCategory_Keywords_HashDatabase=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8 -HashDbSearchPanel.hashTable.columnModel.title0=MD5\u30cf\u30c3\u30b7\u30e5 -HashDbSearchPanel.addButton.text=\u30cf\u30c3\u30b7\u30e5\u3092\u8ffd\u52a0 -HashDbSearchPanel.hashField.text= -HashDbSearchPanel.hashLabel.text=MD5\u30cf\u30c3\u30b7\u30e5: -HashDbSearchPanel.searchButton.text=\u691c\u7d22 -HashDbSearchPanel.removeButton.text=\u9078\u629e\u3055\u308c\u305f\u9805\u76ee\u3092\u524a\u9664 -HashDbSearchPanel.titleLabel.text=\u6b21\u306eMD5\u30cf\u30c3\u30b7\u30e5\u3067\u30d5\u30a1\u30a4\u30eb\u3092\u691c\u7d22: -HashDbSearchPanel.errorField.text=\u30a8\u30e9\u30fc: \u3059\u3079\u3066\u306e\u30d5\u30a1\u30a4\u30eb\u304c\u30cf\u30c3\u30b7\u30e5\u3055\u308c\u3066\u3044\u308b\u308f\u3051\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 -HashDbSearchPanel.saveBox.text=\u30cf\u30c3\u30b7\u30e5\u3092\u8a18\u61b6 -HashDbSearchPanel.cancelButton.text=\u53d6\u308a\u6d88\u3057 -OpenIDE-Module-Short-Description=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u3068\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u30c4\u30fc\u30eb -HashDbImportDatabaseDialog.jLabel1.text=\u540d\u524d: -HashDbImportDatabaseDialog.databasePathTextField.text= -HashDbImportDatabaseDialog.knownBadRadioButton.text=\u9855\u8457 -HashDbImportDatabaseDialog.jLabel2.text=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u30bf\u30a4\u30d7: -HashDbImportDatabaseDialog.okButton.text=OK -HashDbImportDatabaseDialog.cancelButton.text=\u53d6\u308a\u6d88\u3057 -HashDbCreateDatabaseDialog.jLabel2.text=\u30bf\u30a4\u30d7: -HashDbCreateDatabaseDialog.knownBadRadioButton.text=\u9855\u8457 -HashDbCreateDatabaseDialog.cancelButton.text=\u53d6\u308a\u6d88\u3057 -ModalNoButtons.CURRENTDB_LABEL.text=(CurrentDb) -ModalNoButtons.CURRENTLYON_LABEL.text=\u73fe\u5728y\u306ex\u3092\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u4e2d\u3067\u3059 -ModalNoButtons.GO_GET_COFFEE_LABEL.text=\u73fe\u5728\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u3092\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u4e2d\u3067\u3059\u3002\u3053\u308c\u306b\u306f\u6642\u9593\u304c\u304b\u304b\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002 -ModalNoButtons.CANCEL_BUTTON.text=\u53d6\u308a\u6d88\u3057 -HashDbImportDatabaseDialog.knownRadioButton.text=\u65e2\u77e5(NSRL\u307e\u305f\u306f\u305d\u306e\u4ed6) -HashDbCreateDatabaseDialog.knownRadioButton.text=\u65e2\u77e5 -HashDbCreateDatabaseDialog.saveAsButton.text=\u540d\u524d\u3092\u4ed8\u3051\u3066\u4fdd\u5b58... -HashDbCreateDatabaseDialog.hashSetNameTextField.text= -HashDbImportDatabaseDialog.jLabel3.text=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u30d1\u30b9: -HashDbCreateDatabaseDialog.sendIngestMessagesCheckbox.text=\u30d2\u30c3\u30c8\u3054\u3068\u306b\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u53d7\u4fe1\u7bb1\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u9001\u4fe1 -HashDbImportDatabaseDialog.sendIngestMessagesCheckbox.text=\u30d2\u30c3\u30c8\u3054\u3068\u306b\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u53d7\u4fe1\u7bb1\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u9001\u4fe1 -HashDbImportDatabaseDialog.hashSetNameTextField.text= -HashDbImportDatabaseDialog.openButton.text=\u958b\u304f... -HashDbCreateDatabaseDialog.jLabel3.text=\u540d\u524d: -HashDbCreateDatabaseDialog.okButton.text=OK -HashDbCreateDatabaseDialog.databasePathTextField.text= -AddContentToHashDbAction.ContentMenu.noHashDbsConfigd=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u304c\u69cb\u6210\u3055\u308c\u3066\u3044\u307e\u305b\u3093 +#Tue Aug 18 18:09:21 UTC 2020 AddContentToHashDbAction.ContentMenu.createDbItem=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u3092\u4f5c\u6210... +AddContentToHashDbAction.ContentMenu.noHashDbsConfigd=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u304c\u69cb\u6210\u3055\u308c\u3066\u3044\u307e\u305b\u3093 AddContentToHashDbAction.addFilesToHashSet.addToHashDbErr1.text=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u30a8\u30e9\u30fc\u306b\u8ffd\u52a0 AddContentToHashDbAction.addFilesToHashSet.addToHashDbErr2.text=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u30a8\u30e9\u30fc\u306b\u8ffd\u52a0 AddContentToHashDbAction.addFilesToHashSet.addToHashDbErr3.text=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u30a8\u30e9\u30fc\u306b\u8ffd\u52a0 -AddContentToHashDbAction.addFilesToHashSet.unableToAddFileMsg={0} \u3092\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306b\u8ffd\u52a0\u3067\u304d\u307e\u305b\u3093\u3002 -AddContentToHashDbAction.addFilesToHashSet.unableToAddFileEmptyMsg={0} \u3092\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306b\u8ffd\u52a0\u3067\u304d\u307e\u305b\u3093\u3002\u30d5\u30a1\u30a4\u30eb\u306b\u30b3\u30f3\u30c6\u30f3\u30c4\u304c\u3042\u308a\u307e\u305b\u3093\u3002 -AddContentToHashDbAction.addFilesToHashSet.unableToAddFileSzMsg={0} \u3092\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306b\u8ffd\u52a0\u3067\u304d\u307e\u305b\u3093\u3002\u30cf\u30c3\u30b7\u30e5\u304c\u8a08\u7b97\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u9069\u5207\u306a\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u69cb\u6210\u3057\u3066\u5b9f\u884c\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -HashDatabaseOptionsPanelController.moduleErr=\u30e2\u30b8\u30e5\u30fc\u30eb\u30a8\u30e9\u30fc -HashDatabaseOptionsPanelController.moduleErrMsg=HashDatabaseOptionsPanelController\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 -HashDbConfigPanel.noSelectionText= -HashDbConfigPanel.errorGettingPathText=\u30d1\u30b9\u306e\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -HashDbConfigPanel.errorGettingIndexStatusText=\u30b9\u30c6\u30fc\u30bf\u30b9\u306e\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -HashDbConfigPanel.indexButtonText.index=\u7d22\u5f15 -HashDbConfigPanel.indexButtonText.indexing=\u7d22\u5f15\u751f\u6210 -HashDbConfigPanel.indexStatusText.indexGen=\u73fe\u5728\u7d22\u5f15\u3092\u751f\u6210\u4e2d\u3067\u3059 -HashDbConfigPanel.indexStatusText.indexOnly=\u7d22\u5f15\u306e\u307f -HashDbConfigPanel.indexButtonText.indexing=\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u6e08\u307f -HashDbConfigPanel.indexButtonText.reIndex=\u518d\u30a4\u30f3\u30c7\u30c3\u30af\u30b9 -HashDbConfigPanel.indexStatusText.noIndex=\u7d22\u5f15\u304c\u3042\u308a\u307e\u305b\u3093 -HashDbConfigPanel.dbsNotIndexedMsg=\u6b21\u306e\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u304c\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u4eca\u3059\u3050\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3057\u307e\u3059\u304b? \n {0} -HashDbConfigPanel.dbNotIndexedMsg=\u6b21\u306e\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u304c\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u4eca\u3059\u3050\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3057\u307e\u3059\u304b? \n{0} -HashDbConfigPanel.unindexedDbsMsg=\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u3066\u3044\u306a\u3044\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8 -HashDbConfigPanel.allUnindexedDbsRmFromListMsg=\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u3066\u3044\u306a\u3044\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u304c\u30ea\u30b9\u30c8\u304b\u3089\u3059\u3079\u3066\u524a\u9664\u3055\u308c\u307e\u3059 -HashDbConfigPanel.nameColLbl=\u540d\u524d -HashDbConfigPanel.editingCellsNotSupportedMsg=\u30bb\u30eb\u306e\u7de8\u96c6\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093 -HashDbCreateDatabaseDialog.defaultFileName=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8 -HashDbCreateDatabaseDialog.createHashDbMsg=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u3092\u4f5c\u6210 -HashDbCreateDatabaseDialog.hashDbMustHaveFileExtensionMsg=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u30d5\u30a1\u30a4\u30eb\u306b\u306f .{0} \u62e1\u5f35\u5b50\u304c\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 -HashDbCreateDatabaseDialog.fileNameErr=\u30d5\u30a1\u30a4\u30eb\u540d\u30a8\u30e9\u30fc -HashDbCreateDatabaseDialog.fileNameAlreadyExistsMsg=\u3053\u306e\u540d\u524d\u306e\u30d5\u30a1\u30a4\u30eb\u306f\u3059\u3067\u306b\u5b58\u5728\u3057\u307e\u3059\u3002\u65b0\u3057\u3044\u30d5\u30a1\u30a4\u30eb\u540d\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -HashDbCreateDatabaseDialog.fileExistsErr=\u30d5\u30a1\u30a4\u30eb\u304c\u3059\u3067\u306b\u5b58\u5728\u3059\u308b\u5834\u5408\u306e\u30a8\u30e9\u30fc -HashDbCreateDatabaseDialog.mustEnterHashSetNameMsg=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u540d\u3092\u5165\u529b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 -HashDbCreateDatabaseDialog.createHashDbErr=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u4f5c\u6210\u30a8\u30e9\u30fc -HashDbCreateDatabaseDialog.mustEnterHashDbPathMsg=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u30d1\u30b9\u3092\u5165\u529b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 -HashDbCreateDatabaseDialog.errMsg.hashDbCreationErr=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u4f5c\u6210\u30a8\u30e9\u30fc -HashDbCreateDatabaseDialog.cannotCreateFileAtLocMsg=\u9078\u629e\u3057\u305f\u5834\u6240\u3067\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3002 -HashDbCreateDatabaseDialog.failedToCreateHashDbMsg=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002 -HashDbImportDatabaseDialog.importHashDbMsg=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u3092\u30a4\u30f3\u30dd\u30fc\u30c8 -HashDbImportDatabaseDialog.fileNameExtFilter.text=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u30d5\u30a1\u30a4\u30eb -HashDbImportDatabaseDialog.failedToGetDbPathMsg=\u9078\u629e\u3057\u305f\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306e\u30d1\u30b9\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002 -HashDbImportDatabaseDialog.importHashDbErr=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u30a4\u30f3\u30dd\u30fc\u30c8\u30a8\u30e9\u30fc -HashDbImportDatabaseDialog.mustSelectHashDbFilePathMsg=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u30d5\u30a1\u30a4\u30eb\u306e\u30d1\u30b9\u3092\u9078\u629e\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 -HashDbImportDatabaseDialog.hashDbDoesNotExistMsg=\u9078\u629e\u3057\u305f\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u304c\u5b58\u5728\u3057\u307e\u305b\u3093\u3002 -HashDbImportDatabaseDialog.unableToCopyToUserDirMsg=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u3092\u30e6\u30fc\u30b6\u30fc\u69cb\u6210\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc {0} \u306b\u30b3\u30d4\u30fc\u3067\u304d\u307e\u305b\u3093\u3002 -HashDbImportDatabaseDialog.errorMessage.failedToOpenHashDbMsg={0} \u306b\u3042\u308b\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u3092\u958b\u3051\u307e\u305b\u3093\u3067\u3057\u305f\u3002 -HashLookupModuleFactory.moduleName.text=\u30cf\u30c3\u30b7\u30e5\u30eb\u30c3\u30af\u30a2\u30c3\u30d7 -HashLookupModuleFactory.moduleDescription.text=\u6a19\u6e96\u306eNSRL\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306a\u3069\u306e\u63d0\u4f9b\u3055\u308c\u305f\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u3092\u4f7f\u3063\u3066\u3001\u65e2\u77e5\u30d5\u30a1\u30a4\u30eb\u3068\u9855\u8457\u306a\u30d5\u30a1\u30a4\u30eb\u3092\u8b58\u5225\u3057\u307e\u3059\u3002 -HashDbIngestModule.fileReadErrorMsg=\u8aad\u307f\u53d6\u308a\u30a8\u30e9\u30fc: {0} -HashDbIngestModule.calcHashValueErr={0} ({1}) \u306e\u30cf\u30c3\u30b7\u30e5\u5024\u306e\u8a08\u7b97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 -HashDbIngestModule.hashLookupErrorMsg=\u30cf\u30c3\u30b7\u30e5\u30eb\u30c3\u30af\u30a2\u30c3\u30d7\u30a8\u30e9\u30fc: {0} -HashDbIngestModule.settingKnownBadStateErr={0} \u306e\u9855\u8457\u306a\u72b6\u614b\u306e\u8a2d\u5b9a\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 -HashDbIngestModule.lookingUpKnownBadHashValueErr={0} \u306e\u9855\u8457\u306a\u30cf\u30c3\u30b7\u30e5\u5024\u306e\u30eb\u30c3\u30af\u30a2\u30c3\u30d7\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 -HashDbIngestModule.lookingUpKnownHashValueErr={0} \u306e\u65e2\u77e5\u30cf\u30c3\u30b7\u30e5\u5024\u306e\u30eb\u30c3\u30af\u30a2\u30c3\u30d7\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 -HashDbIngestModule.postToBB.fileName=\u30d5\u30a1\u30a4\u30eb\u540d -HashDbIngestModule.postToBB.md5Hash=MD5\u30cf\u30c3\u30b7\u30e5 -HashDbIngestModule.postToBB.hashsetName=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u540d -HashDbIngestModule.postToBB.knownBadMsg=\u9855\u8457: {0} -HashDbIngestModule.complete.knownBadsFound=\u898b\u3064\u304b\u3063\u305f\u9855\u8457\u6027: -HashDbIngestModule.complete.totalCalcTime=\u5408\u8a08\u8a08\u7b97\u6642\u9593 -HashDbIngestModule.complete.totalLookupTime=\u5408\u8a08\u30eb\u30c3\u30af\u30a2\u30c3\u30d7\u6642\u9593 -HashDbIngestModule.complete.databasesUsed=\u4f7f\u7528\u3057\u305f\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8: -HashDbIngestModule.complete.hashLookupResults=\u30cf\u30c3\u30b7\u30e5\u30eb\u30c3\u30af\u30a2\u30c3\u30d7\u7d50\u679c -HashDbManager.moduleErrorListeningToUpdatesMsg=HashDbManager\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 -HashDbManager.replacingDuplicateHashsetNameMsg=\u691c\u51fa\u3055\u308c\u305f\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u540d {0} \u3092\u8907\u88fd\u3057\u307e\u3059\u3002\n{1} \u3067\u7f6e\u304d\u63db\u3048\u4e2d\u3067\u3059\u3002 -HashDbManager.openHashDbErr=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u30a4\u30f3\u30aa\u30fc\u30d7\u30f3\u30a8\u30e9\u30fc -HashDbManager.unableToOpenHashDbMsg={0} \u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u3092\u958b\u3051\u307e\u305b\u3093\u3002 -HashDbManager.savedBackupOfOldConfigMsg={0}\n\u53e4\u3044\u69cb\u6210\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30b3\u30d4\u30fc\u304c \n{1} \u3068\u3057\u3066\u4fdd\u5b58\u3055\u308c\u307e\u3057\u305f -HashDbManager.baseMessage.updatedFormatHashDbConfig=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u69cb\u6210\u30d5\u30a1\u30a4\u30eb\u306e\u5f62\u5f0f\u304c\u66f4\u65b0\u3055\u308c\u307e\u3057\u305f\u3002 -HashDbManager.msgBoxTitle.confFileFmtChanged=\u69cb\u6210\u30d5\u30a1\u30a4\u30eb\u306e\u5f62\u5f0f\u304c\u5909\u66f4\u3055\u308c\u307e\u3057\u305f -HashDbManager.dlgMsg.dbNotFoundAtLoc=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8 {0} \u304c\n{1}\u306e\u5834\u6240\u3067\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\n\u30d5\u30a1\u30a4\u30eb\u3092\u691c\u7d22\u3057\u307e\u3059\u304b? -HashDbManager.dlgTitle.MissingDb=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093 -HashDbManager.progress.indexingHashSet={0} \u306e\u7d22\u5f15\u751f\u6210\u4e2d\u3067\u3059 -HashDbManager.dlgMsg.errorIndexingHashSet={0} \u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306e\u7d22\u5f15\u751f\u6210\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 -HashDbManager.hashDbIndexingErr=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u30a8\u30e9\u30fc -HashDbPanelSearchAction.actionName=MD5\u30cf\u30c3\u30b7\u30e5\u306b\u3088\u308b\u30d5\u30a1\u30a4\u30eb\u691c\u7d22 -HashDbSearchAction.dlgMsg.noFilesHaveMD5Calculated=\u73fe\u5728MD5\u30cf\u30c3\u30b7\u30e5\u304c\u8a08\u7b97\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u304c\u3042\u308a\u307e\u305b\u3093\u3002\u6700\u521d\u306bHashDB\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002 -HashDbSearchManager.MD5HashSearch=MD5\u30cf\u30c3\u30b7\u30e5\u691c\u7d22 -HashDbSearchManager.noResultsFoundMsg=\u8a72\u5f53\u3059\u308b\u7d50\u679c\u304c\u3042\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002 -HashDbSearchPanel.titleText.ingestOngoing=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u304c\u9032\u884c\u4e2d\u3067\u3059\u3002\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u304c\u5b8c\u4e86\u3059\u308b\u307e\u3067\u3053\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u5229\u7528\u3067\u304d\u307e\u305b\u3093\u3002 -HashDbSearchPanel.noFilesHaveMD5HashMsg=\u73fe\u5728MD5\u30cf\u30c3\u30b7\u30e5\u304c\u8a08\u7b97\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u304c\u3042\u308a\u307e\u305b\u3093\u3002 -HashDbSearchPanel.errorText.noHashesAddedMsg=\u30a8\u30e9\u30fc: \u30cf\u30c3\u30b7\u30e5\u304c\u8ffd\u52a0\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 -HashDbSearchPanel.errorText.hashAlreadyAddedMsg=\u30a8\u30e9\u30fc: \u30cf\u30c3\u30b7\u30e5\u304c\u3059\u3067\u306b\u8ffd\u52a0\u3055\u308c\u3066\u3044\u307e\u3059\u3002 -HashDbSearchPanel.errorText.invalidMD5HashMsg=\u30a8\u30e9\u30fc: \u305d\u308c\u306f\u6709\u52b9\u306aMD5\u30cf\u30c3\u30b7\u30e5\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 -HashDbSearchThread.progress.cancellingSearch={0} (\u53d6\u308a\u6d88\u3057\u4e2d\u3067\u3059...) -HashDbSearchThread.name.searching=\u691c\u7d22\u4e2d\u3067\u3059 -HashDbSearchThread.noMoreFilesWithMD5Msg=\u540c\u3058MD5\u30cf\u30c3\u30b7\u30e5\u3092\u6301\u3064\u4ed6\u306e\u30d5\u30a1\u30a4\u30eb\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002 -ModalNoButtons.indexingDbsTitle=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306e\u7d22\u5f15\u751f\u6210\u4e2d\u3067\u3059 -ModalNoButtons.indexingDbTitle=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306e\u7d22\u5f15\u751f\u6210\u4e2d\u3067\u3059 -ModalNoButtons.exitHashDbIndexingMsg=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306e\u7d22\u5f15\u751f\u6210\u3092\u7d42\u4e86\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u307e\u3059\u3002\n\ -\u751f\u6210\u3055\u308c\u305f\u7d22\u5f15\u306f\u4f7f\u7528\u3067\u304d\u306a\u3044\u72b6\u614b\u306e\u307e\u307e\u306b\u306a\u308a\u307e\u3059\u3002\u7d9a\u884c\u3092\u9078\u629e\u3059\u308b\u5834\u5408\u3001\n\ - \u30cf\u30c3\u30b7\u30e5\u30d5\u30a9\u30eb\u30c0\u30fc\u5185\u306e\u8a72\u5f53\u3059\u308b-md5.idx\u30d5\u30a1\u30a4\u30eb\u3092\u524a\u9664\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n\ - \u7d22\u5f15\u751f\u6210\u3092\u7d42\u4e86\u3057\u307e\u3059\u304b? -ModalNoButtons.dlgTitle.unfinishedIndexing=\u5b8c\u4e86\u3057\u3066\u3044\u306a\u3044\u7d22\u5f15\u751f\u6210 -ModalNoButtons.indexThis.currentlyIndexing1Db=\u73fe\u57281\u3064\u306e\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u3092\u7d22\u5f15\u751f\u6210\u4e2d\u3067\u3059 -ModalNoButtons.indexThese.currentlyIndexing1OfNDbs=\u73fe\u5728 {0} \u306e1\u3064\u3092\u7d22\u5f15\u751f\u6210\u4e2d\u3067\u3059 -ModalNoButtons.propChg.currentlyIndexingXofN=\u73fe\u5728 {1} \u306e {0} \u3092\u7d22\u5f15\u751f\u6210\u4e2d\u3067\u3059 -HashDbManager.duplicateHashSetNameExceptionMsg=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u540d ''{0}'' \u306f\u3059\u3067\u306b\u4ed6\u306e\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306b\u4f7f\u7528\u3055\u308c\u3066\u3044\u307e\u3059\u3002 -HashDbManager.hashDbDoesNotExistExceptionMsg=\n{0} \u306b\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306f\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f -HashDbManager.hashDbFileExistsExceptionMsg=at\n{0} \u306b\u30d5\u30a1\u30a4\u30eb\u304c\u3059\u3067\u306b\u5b58\u5728\u3057\u307e\u3059 -HashDbManager.hashDbAlreadyAddedExceptionMsg=\n{0}\n \u306b\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u304c\u3059\u3067\u306b\u4f5c\u6210\u307e\u305f\u306f\u30a4\u30f3\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u3059\u3002 -HashDbManager.illegalHashDbFileNameExtensionMsg=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u30d5\u30a1\u30a4\u30eb\u540d\u306b\u306f .{0} \u62e1\u5f35\u5b50\u304c\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 -HashDbManager.moduleErr=\u30e2\u30b8\u30e5\u30fc\u30eb\u30a8\u30e9\u30fc -HashDbManager.knownBad.text=\u9855\u8457 -HashDbManager.known.text=\u65e2\u77e5 -HashDbManager.fileNameExtensionFilter.title=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u30d5\u30a1\u30a4\u30eb -HashDbSearchAction.dlgMsg.title=MD5\u30cf\u30c3\u30b7\u30e5\u306b\u3088\u308b\u30d5\u30a1\u30a4\u30eb\u691c\u7d22 -HashDbSearchAction.getName.text=\u30cf\u30c3\u30b7\u30e5\u691c\u7d22 -HashDbSearchPanel.dlgMsg.title=MD5\u30cf\u30c3\u30b7\u30e5\u306b\u3088\u308b\u30d5\u30a1\u30a4\u30eb\u691c\u7d22 -AddContentToHashDbAction.singleSelectionName=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u8ffd\u52a0 -AddContentToHashDbAction.multipleSelectionName=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u8ffd\u52a0 -AddContentToHashDbAction.singleSelectionNameDuringIngest=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u8ffd\u52a0(\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u306e\u5b9f\u884c\u4e2d) -AddContentToHashDbAction.multipleSelectionNameDuringIngest=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u8ffd\u52a0(\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u306e\u5b9f\u884c\u4e2d) -AddContentToHashDbAction.singleSelectionNameNoMD5=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u8ffd\u52a0(MD5\u30cf\u30c3\u30b7\u30e5\u306a\u3057) -AddContentToHashDbAction.multipleSelectionNameNoMD5=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u8ffd\u52a0(MD5\u30cf\u30c3\u30b7\u30e5\u306a\u3057) -AddContentToHashDbAction.singleSelectionNameEmpty=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u8ffd\u52a0(\u7a7a(\u672a\u8a18\u5165)\u306e\u30d5\u30a1\u30a4\u30eb) -AddContentToHashDbAction.multipleSelectionNameEmpty=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u8ffd\u52a0(\u7a7a(\u672a\u8a18\u5165)\u306e\u30d5\u30a1\u30a4\u30eb) -HashDbManager.ingestRunningExceptionMsg=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u304c\u9032\u884c\u4e2d\u3067\u3059\u3002\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u304c\u5b8c\u4e86\u3059\u308b\u307e\u3067\u3053\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u5229\u7528\u3067\u304d\u307e\u305b\u3093\u3002 -HashDbManager.saveErrorExceptionMsg=\u30cf\u30c3\u30b7\u30e5\u69cb\u6210\u306e\u4fdd\u5b58\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -HashLookupSettingsPanel.jButton3.text=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u3092\u30a4\u30f3\u30dd\u30fc\u30c8 -HashLookupSettingsPanel.jLabel6.text=\u30bf\u30a4\u30d7: -HashLookupSettingsPanel.jLabel4.text=\u5834\u6240: -HashLookupSettingsPanel.jLabel2.text=\u540d\u524d: -HashLookupModuleSettingsPanel.alwaysCalcHashesCheckbox.text=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u304c\u9078\u629e\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u3067\u3082MD5\u3092\u8a08\u7b97 -AddContentToHashDbAction.addFilesToHashSet.files=\u30d5\u30a1\u30a4\u30eb AddContentToHashDbAction.addFilesToHashSet.file=\u30d5\u30a1\u30a4\u30eb -HashDbManager.errCreatingIndex.title=\u7d22\u5f15\u306e\u4f5c\u6210\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -HashDbManager.errCreatingIndex.msg=\u6b21\u306e\u7d22\u5f15\u3092\u4f5c\u6210\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: {0} -HashLookupModuleFactory.getIngestJobSettingsPanel.exception.msg=instanceof HashLookupModuleSettings\u306b\u306a\u308b\u3068\u4e88\u60f3\u3055\u308c\u308b\u8a2d\u5b9a\u5f15\u6570 -HashLookupModuleFactory.createFileIngestModule.exception.msg=instanceof HashLookupModuleSettings\u306b\u306a\u308b\u3068\u4e88\u60f3\u3055\u308c\u308b\u8a2d\u5b9a\u5f15\u6570 -HashLookupModuleSettingsPanel.alwaysCalcHashesCheckbox.toolTipText=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u304c\u9078\u629e\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u3067\u3082MD5\u3092\u8a08\u7b97 -HashDbSearchPanel.hashTable.defaultModel.title.text=MD5\u30cf\u30c3\u30b7\u30e5 +AddContentToHashDbAction.addFilesToHashSet.files=\u30d5\u30a1\u30a4\u30eb +AddContentToHashDbAction.addFilesToHashSet.unableToAddFileEmptyMsg={0} \u3092\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306b\u8ffd\u52a0\u3067\u304d\u307e\u305b\u3093\u3002\u30d5\u30a1\u30a4\u30eb\u306b\u30b3\u30f3\u30c6\u30f3\u30c4\u304c\u3042\u308a\u307e\u305b\u3093\u3002 +AddContentToHashDbAction.addFilesToHashSet.unableToAddFileMsg={0} \u3092\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306b\u8ffd\u52a0\u3067\u304d\u307e\u305b\u3093\u3002 +AddContentToHashDbAction.addFilesToHashSet.unableToAddFileSzMsg={0} \u3092\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306b\u8ffd\u52a0\u3067\u304d\u307e\u305b\u3093\u3002\u30cf\u30c3\u30b7\u30e5\u304c\u8a08\u7b97\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u9069\u5207\u306a\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u69cb\u6210\u3057\u3066\u5b9f\u884c\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +AddContentToHashDbAction.multipleSelectionName=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u8ffd\u52a0 +AddContentToHashDbAction.multipleSelectionNameDuringIngest=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u8ffd\u52a0(\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u306e\u5b9f\u884c\u4e2d) +AddContentToHashDbAction.multipleSelectionNameEmpty=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u8ffd\u52a0(\u7a7a(\u672a\u8a18\u5165)\u306e\u30d5\u30a1\u30a4\u30eb) +AddContentToHashDbAction.multipleSelectionNameNoMD5=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u8ffd\u52a0(MD5\u30cf\u30c3\u30b7\u30e5\u306a\u3057) +AddContentToHashDbAction.singleSelectionName=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u8ffd\u52a0 +AddContentToHashDbAction.singleSelectionNameDuringIngest=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u8ffd\u52a0(\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u306e\u5b9f\u884c\u4e2d) +AddContentToHashDbAction.singleSelectionNameEmpty=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u8ffd\u52a0(\u7a7a(\u672a\u8a18\u5165)\u306e\u30d5\u30a1\u30a4\u30eb) +AddContentToHashDbAction.singleSelectionNameNoMD5=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u8ffd\u52a0(MD5\u30cf\u30c3\u30b7\u30e5\u306a\u3057) AddHashValuesToDatabaseDialog.JDialog.Title=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306b\u30cf\u30c3\u30b7\u30e5\u3092\u8ffd\u52a0 -AddHashValuesToDatabaseDialog.instructionLabel.text_1=\u4ee5\u4e0b\u306eMD5\u30cf\u30c3\u30b7\u30e5\u5024(1\u30e9\u30a4\u30f3\u306b\u3064\u304d1\u3064)\u3092\u8cbc\u308a\u4ed8\u3051: AddHashValuesToDatabaseDialog.cancelButton.text_2=\u53d6\u308a\u6d88\u3057 +AddHashValuesToDatabaseDialog.instructionLabel.text_1=\u4ee5\u4e0b\u306eMD5\u30cf\u30c3\u30b7\u30e5\u5024(1\u30e9\u30a4\u30f3\u306b\u3064\u304d1\u3064)\u3092\u8cbc\u308a\u4ed8\u3051\: +AddHashValuesToDatabaseDialog.okButton.text_2=OK AddHashValuesToDatabaseDialog.pasteFromClipboardButton.text_2=\u30af\u30ea\u30c3\u30d7\u30dc\u30fc\u30c9\u304b\u3089\u8cbc\u308a\u4ed8\u3051 +AddHashValuesToDatabaseDialog.title=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306b\u30cf\u30c3\u30b7\u30e5\u3092\u8ffd\u52a0 +AddHashValuesToDatabaseProgressDialog.addHashValuesToDatabase.errorAddingValidHash=\u6709\u52b9\u306a\u30cf\u30c3\u30b7\u30e5\u306e\u8ffd\u52a0\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 +AddHashValuesToDatabaseProgressDialog.addHashValuesToDatabase.errorAddingValidHash.msg=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306b\u6709\u52b9\u306a\u30cf\u30c3\u30b7\u30e5\u306e\u8ffd\u52a0\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\: +AddHashValuesToDatabaseProgressDialog.addHashValuesToDatabase.invaliHash.msg=\u7121\u52b9\u306a\u30cf\u30c3\u30b7\u30e5\: +AddHashValuesToDatabaseProgressDialog.addHashValuesToDatabase.invalidHash=\u5165\u529b\u306b\u7121\u52b9\u306a\u30cf\u30c3\u30b7\u30e5\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002 +AddHashValuesToDatabaseProgressDialog.addHashValuesToDatabase.noHashesToAdd=\u8ffd\u52a0\u3059\u308b\u30cf\u30c3\u30b7\u30e5\u304c\u3042\u308a\u307e\u305b\u3093\u3002 +AddHashValuesToDatabaseProgressDialog.addHashValuesToDatabase.parsing=MD5\u30cf\u30c3\u30b7\u30e5\u306e\u30c6\u30ad\u30b9\u30c8\u306e\u89e3\u6790\u4e2d\u3067\u3059... +AddHashValuesToDatabaseProgressDialog.addHashValuesToDatabase.success={0} \u30cf\u30c3\u30b7\u30e5\u304c\u6b63\u5e38\u306b\u8ffd\u52a0\u3055\u308c\u307e\u3057\u305f\u3002 AddHashValuesToDatabaseProgressDialog.okButton.text=OK +AddHashValuesToDatabaseProgressDialog.showErrorsButton.text=\u30a8\u30e9\u30fc\u3092\u8868\u793a AddHashValuesToDatabaseProgressDialog.statusLabel.text=\u30b9\u30c6\u30fc\u30bf\u30b9 AddHashValuesToDatabaseProgressDialog.title=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u3078\u306e\u30cf\u30c3\u30b7\u30e5\u8ffd\u52a0\u306e\u9032\u6357\u72b6\u6cc1 -AddHashValuesToDatabaseDialog.title=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306b\u30cf\u30c3\u30b7\u30e5\u3092\u8ffd\u52a0 -AddHashValuesToDatabaseProgressDialog.showErrorsButton.text=\u30a8\u30e9\u30fc\u3092\u8868\u793a -AddHashValuesToDatabaseProgressDialog.addHashValuesToDatabase.parsing=MD5\u30cf\u30c3\u30b7\u30e5\u306e\u30c6\u30ad\u30b9\u30c8\u306e\u89e3\u6790\u4e2d\u3067\u3059... -AddHashValuesToDatabaseProgressDialog.addHashValuesToDatabase.invalidHash=\u5165\u529b\u306b\u7121\u52b9\u306a\u30cf\u30c3\u30b7\u30e5\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002 -AddHashValuesToDatabaseProgressDialog.addHashValuesToDatabase.invaliHash.msg=\u7121\u52b9\u306a\u30cf\u30c3\u30b7\u30e5: -AddHashValuesToDatabaseProgressDialog.addHashValuesToDatabase.noHashesToAdd=\u8ffd\u52a0\u3059\u308b\u30cf\u30c3\u30b7\u30e5\u304c\u3042\u308a\u307e\u305b\u3093\u3002 -AddHashValuesToDatabaseProgressDialog.addHashValuesToDatabase.success={0} \u30cf\u30c3\u30b7\u30e5\u304c\u6b63\u5e38\u306b\u8ffd\u52a0\u3055\u308c\u307e\u3057\u305f\u3002 -AddHashValuesToDatabaseProgressDialog.addHashValuesToDatabase.errorAddingValidHash=\u6709\u52b9\u306a\u30cf\u30c3\u30b7\u30e5\u306e\u8ffd\u52a0\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 -AddHashValuesToDatabaseProgressDialog.addHashValuesToDatabase.errorAddingValidHash.msg=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306b\u6709\u52b9\u306a\u30cf\u30c3\u30b7\u30e5\u306e\u8ffd\u52a0\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: -HashLookupSettingsPanel.ingestWarningLabel.text=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u304c\u9032\u884c\u4e2d\u3067\u3059\u3002\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u304c\u5b8c\u4e86\u3059\u308b\u307e\u3067\u4e00\u90e8\u306e\u8a2d\u5b9a\u3092\u5229\u7528\u3067\u304d\u307e\u305b\u3093\u3002 -HashLookupSettingsPanel.addHashesToDatabaseButton.text=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306b\u30cf\u30c3\u30b7\u30e5\u3092\u8ffd\u52a0 -HashLookupSettingsPanel.indexPathLabelLabel.text=\u7d22\u5f15\u30d1\u30b9: -HashLookupSettingsPanel.createDatabaseButton.toolTipText= -HashLookupSettingsPanel.createDatabaseButton.text=\u65b0\u898f\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8 -HashLookupSettingsPanel.informationLabel.text=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u8a73\u7d30 -HashLookupSettingsPanel.sendIngestMessagesCheckBox.text=\u30d2\u30c3\u30c8\u3054\u3068\u306b\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u53d7\u4fe1\u7bb1\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u9001\u4fe1 -HashLookupSettingsPanel.indexButton.text=\u7d22\u5f15 -HashLookupSettingsPanel.indexLabel.text=\u7d22\u5f15\u30b9\u30c6\u30fc\u30bf\u30b9: -HashLookupSettingsPanel.hashDbIndexStatusLabel.text= -HashLookupSettingsPanel.hashDbTypeLabel.text= -HashLookupSettingsPanel.typeLabel.text=\u30bf\u30a4\u30d7: -HashLookupSettingsPanel.locationLabel.text=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u30d1\u30b9: -HashLookupSettingsPanel.hashDbLocationLabel.text= -HashLookupSettingsPanel.hashDbNameLabel.text= -HashLookupSettingsPanel.nameLabel.text=\u540d\u524d: -HashLookupSettingsPanel.hashDatabasesLabel.text=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8: -HashLookupSettingsPanel.importDatabaseButton.toolTipText= -HashLookupSettingsPanel.importDatabaseButton.text=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u3092\u30a4\u30f3\u30dd\u30fc\u30c8 -HashLookupSettingsPanel.deleteDatabaseButton.text=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u3092\u524a\u9664 -ImportHashDatabaseDialog.lbFilePath.text=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\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 -ImportCentralRepoDbProgressDialog.lbProgress.text=\u30a4\u30f3\u30dd\u30fc\u30c8\u3092\u958b\u59cb\u3057\u307e\u3059... -ImportCentralRepoDbProgressDialog.bnOk.text=OK -ImportCentralRepoDbProgressDialog.bnCancel.text=\u53d6\u308a\u6d88\u3057 -HashLookupSettingsPanel.versionLabel.text_1=\u30d0\u30fc\u30b8\u30e7\u30f3: -HashLookupSettingsPanel.hashDbVersionLabel.text_1= -HashLookupSettingsPanel.orgLabel.text_1=\u7d44\u7e54: -HashLookupSettingsPanel.hashDbOrgLabel.text_1= -HashLookupSettingsPanel.readOnlyLabel.text_1=\u8aad\u307f\u53d6\u308a\u5c02\u7528: -HashLookupSettingsPanel.hashDbReadOnlyLabel.text_1= -ImportCentralRepoDbProgressDialog.jLabel1.text=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u3092\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u306b\u30a4\u30f3\u30dd\u30fc\u30c8\u4e2d\u3067\u3059 -HashDbImportDatabaseDialog.lbVersion.text=\u30d0\u30fc\u30b8\u30e7\u30f3: -HashDbImportDatabaseDialog.lbOrg.text=\u30bd\u30fc\u30b9\u7d44\u7e54: -HashDbImportDatabaseDialog.readOnlyCheckbox.text=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u3092\u8aad\u307f\u53d6\u308a\u5c02\u7528\u306b\u3059\u308b -HashDbImportDatabaseDialog.orgButton.text=\u7d44\u7e54\u3092\u7ba1\u7406 -HashDbImportDatabaseDialog.versionTextField.text=1.0 -HashDbImportDatabaseDialog.fileTypeRadioButton.text=\u30ed\u30fc\u30ab\u30eb -HashDbImportDatabaseDialog.centralRepoRadioButton.text=\u30ea\u30e2\u30fc\u30c8(\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc) -HashDbImportDatabaseDialog.jLabel4.text=\u5b9b\u5148: -HashDbCreateDatabaseDialog.jLabel4.text=\u5b9b\u5148: -HashDbCreateDatabaseDialog.fileTypeRadioButton.text=\u30ed\u30fc\u30ab\u30eb +HashDatabaseOptionsPanelController.moduleErr=\u30e2\u30b8\u30e5\u30fc\u30eb\u30a8\u30e9\u30fc +HashDatabaseOptionsPanelController.moduleErrMsg=HashDatabaseOptionsPanelController\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 +HashDbConfigPanel.allUnindexedDbsRmFromListMsg=\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u3066\u3044\u306a\u3044\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u304c\u30ea\u30b9\u30c8\u304b\u3089\u3059\u3079\u3066\u524a\u9664\u3055\u308c\u307e\u3059 +HashDbConfigPanel.dbNotIndexedMsg=\u6b21\u306e\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u304c\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u4eca\u3059\u3050\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3057\u307e\u3059\u304b? \n{0} +HashDbConfigPanel.dbsNotIndexedMsg=\u6b21\u306e\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u304c\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u4eca\u3059\u3050\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3057\u307e\u3059\u304b? \n {0} +HashDbConfigPanel.editingCellsNotSupportedMsg=\u30bb\u30eb\u306e\u7de8\u96c6\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093 +HashDbConfigPanel.errorGettingIndexStatusText=\u30b9\u30c6\u30fc\u30bf\u30b9\u306e\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f +HashDbConfigPanel.errorGettingPathText=\u30d1\u30b9\u306e\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f +HashDbConfigPanel.indexButtonText.index=\u7d22\u5f15 +HashDbConfigPanel.indexButtonText.indexing=\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u6e08\u307f +HashDbConfigPanel.indexButtonText.reIndex=\u518d\u30a4\u30f3\u30c7\u30c3\u30af\u30b9 +HashDbConfigPanel.indexStatusText.indexGen=\u73fe\u5728\u7d22\u5f15\u3092\u751f\u6210\u4e2d\u3067\u3059 +HashDbConfigPanel.indexStatusText.indexOnly=\u7d22\u5f15\u306e\u307f +HashDbConfigPanel.indexStatusText.noIndex=\u7d22\u5f15\u304c\u3042\u308a\u307e\u305b\u3093 +HashDbConfigPanel.nameColLbl=\u540d\u524d +HashDbConfigPanel.noSelectionText= +HashDbConfigPanel.unindexedDbsMsg=\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u3066\u3044\u306a\u3044\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8 +HashDbCreateDatabaseDialog.cancelButton.text=\u53d6\u308a\u6d88\u3057 +HashDbCreateDatabaseDialog.cannotCreateFileAtLocMsg=\u9078\u629e\u3057\u305f\u5834\u6240\u3067\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3002 HashDbCreateDatabaseDialog.centralRepoRadioButton.text=\u30ea\u30e2\u30fc\u30c8(\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc) -HashDbCreateDatabaseDialog.lbOrg.text=\u30bd\u30fc\u30b9\u7d44\u7e54: +HashDbCreateDatabaseDialog.createHashDbErr=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u4f5c\u6210\u30a8\u30e9\u30fc +HashDbCreateDatabaseDialog.createHashDbMsg=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u3092\u4f5c\u6210 +HashDbCreateDatabaseDialog.databaseCreationError=\u65b0\u898f\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306e\u4f5c\u6210\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f +HashDbCreateDatabaseDialog.databaseLookupError=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u306b\u30a2\u30af\u30bb\u30b9\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f +HashDbCreateDatabaseDialog.databasePathLabel.text=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u30d1\u30b9\: +HashDbCreateDatabaseDialog.databasePathTextField.text= +HashDbCreateDatabaseDialog.defaultFileName=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8 +HashDbCreateDatabaseDialog.duplicateName=\u3053\u306e\u540d\u524d\u306e\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306f\u3059\u3067\u306b\u5b58\u5728\u3057\u307e\u3059 +HashDbCreateDatabaseDialog.errMsg.hashDbCreationErr=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u4f5c\u6210\u30a8\u30e9\u30fc +HashDbCreateDatabaseDialog.failedToCreateHashDbMsg=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002 +HashDbCreateDatabaseDialog.fileExistsErr=\u30d5\u30a1\u30a4\u30eb\u304c\u3059\u3067\u306b\u5b58\u5728\u3059\u308b\u5834\u5408\u306e\u30a8\u30e9\u30fc +HashDbCreateDatabaseDialog.fileNameAlreadyExistsMsg=\u3053\u306e\u540d\u524d\u306e\u30d5\u30a1\u30a4\u30eb\u306f\u3059\u3067\u306b\u5b58\u5728\u3057\u307e\u3059\u3002\u65b0\u3057\u3044\u30d5\u30a1\u30a4\u30eb\u540d\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +HashDbCreateDatabaseDialog.fileNameErr=\u30d5\u30a1\u30a4\u30eb\u540d\u30a8\u30e9\u30fc +HashDbCreateDatabaseDialog.fileTypeRadioButton.text=\u30ed\u30fc\u30ab\u30eb +HashDbCreateDatabaseDialog.hashDbMustHaveFileExtensionMsg=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u30d5\u30a1\u30a4\u30eb\u306b\u306f .{0} \u62e1\u5f35\u5b50\u304c\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 +HashDbCreateDatabaseDialog.hashSetNameTextField.text= +HashDbCreateDatabaseDialog.jLabel2.text=\u30bf\u30a4\u30d7\: +HashDbCreateDatabaseDialog.jLabel3.text=\u540d\u524d\: +HashDbCreateDatabaseDialog.jLabel4.text=\u5b9b\u5148\: +HashDbCreateDatabaseDialog.knownBadRadioButton.text=\u9855\u8457 +HashDbCreateDatabaseDialog.knownRadioButton.text=\u65e2\u77e5 +HashDbCreateDatabaseDialog.lbOrg.text=\u30bd\u30fc\u30b9\u7d44\u7e54\: +HashDbCreateDatabaseDialog.missingOrg=\u7d44\u7e54\u3092\u9078\u629e\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 +HashDbCreateDatabaseDialog.mustEnterHashDbPathMsg=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u30d1\u30b9\u3092\u5165\u529b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 +HashDbCreateDatabaseDialog.mustEnterHashSetNameMsg=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u540d\u3092\u5165\u529b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 +HashDbCreateDatabaseDialog.noChangeRadioButton.text=\u5909\u5316\u306a\u3057 +HashDbCreateDatabaseDialog.okButton.text=OK HashDbCreateDatabaseDialog.orgButton.text=\u7d44\u7e54\u3092\u7ba1\u7406 -HashDbCreateDatabaseDialog.databasePathLabel.text=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u30d1\u30b9: -AddHashValuesToDatabaseDialog.okButton.text_2=OK +HashDbCreateDatabaseDialog.populateOrgsError.message=\u7d44\u7e54\u306e\u8aad\u307f\u8fbc\u307f\u4e2d\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002 +HashDbCreateDatabaseDialog.saveAsButton.text=\u540d\u524d\u3092\u4ed8\u3051\u3066\u4fdd\u5b58... +HashDbCreateDatabaseDialog.sendIngestMessagesCheckbox.text=\u30d2\u30c3\u30c8\u3054\u3068\u306b\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u53d7\u4fe1\u7bb1\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u9001\u4fe1 +HashDbImportDatabaseDialog.cancelButton.text=\u53d6\u308a\u6d88\u3057 +HashDbImportDatabaseDialog.centralRepoRadioButton.text=\u30ea\u30e2\u30fc\u30c8(\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc) +HashDbImportDatabaseDialog.databaseLookupError=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u306b\u30a2\u30af\u30bb\u30b9\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f +HashDbImportDatabaseDialog.databasePathTextField.text= +HashDbImportDatabaseDialog.duplicateName=\u3053\u306e\u540d\u524d\u3068\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306f\u30d0\u30fc\u30b8\u30e7\u30f3\u3059\u3067\u306b\u5b58\u5728\u3057\u307e\u3059 +HashDbImportDatabaseDialog.errorMessage.failedToOpenHashDbMsg={0} \u306b\u3042\u308b\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u3092\u958b\u3051\u307e\u305b\u3093\u3067\u3057\u305f\u3002 +HashDbImportDatabaseDialog.failedToGetDbPathMsg=\u9078\u629e\u3057\u305f\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306e\u30d1\u30b9\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002 +HashDbImportDatabaseDialog.fileNameExtFilter.text=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u30d5\u30a1\u30a4\u30eb +HashDbImportDatabaseDialog.fileTypeRadioButton.text=\u30ed\u30fc\u30ab\u30eb +HashDbImportDatabaseDialog.hashDbDoesNotExistMsg=\u9078\u629e\u3057\u305f\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u304c\u5b58\u5728\u3057\u307e\u305b\u3093\u3002 +HashDbImportDatabaseDialog.hashSetNameTextField.text= +HashDbImportDatabaseDialog.importHashDbErr=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u30a4\u30f3\u30dd\u30fc\u30c8\u30a8\u30e9\u30fc +HashDbImportDatabaseDialog.importHashDbMsg=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u3092\u30a4\u30f3\u30dd\u30fc\u30c8 +HashDbImportDatabaseDialog.jLabel1.text=\u540d\u524d\: +HashDbImportDatabaseDialog.jLabel2.text=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u30bf\u30a4\u30d7\: +HashDbImportDatabaseDialog.jLabel3.text=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u30d1\u30b9\: +HashDbImportDatabaseDialog.jLabel4.text=\u5b9b\u5148\: +HashDbImportDatabaseDialog.knownBadRadioButton.text=\u9855\u8457 +HashDbImportDatabaseDialog.knownRadioButton.text=\u65e2\u77e5(NSRL\u307e\u305f\u306f\u305d\u306e\u4ed6) +HashDbImportDatabaseDialog.lbOrg.text=\u30bd\u30fc\u30b9\u7d44\u7e54\: +HashDbImportDatabaseDialog.lbVersion.text=\u30d0\u30fc\u30b8\u30e7\u30f3\: +HashDbImportDatabaseDialog.missingOrg=\u7d44\u7e54\u3092\u9078\u629e\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 +HashDbImportDatabaseDialog.missingVersion=\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u5165\u529b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 +HashDbImportDatabaseDialog.mustEnterHashSetNameMsg=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u540d\u3092\u5165\u529b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 +HashDbImportDatabaseDialog.mustSelectHashDbFilePathMsg=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u30d5\u30a1\u30a4\u30eb\u306e\u30d1\u30b9\u3092\u9078\u629e\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 +HashDbImportDatabaseDialog.noChangeRadioButton.text=\u5909\u5316\u306a\u3057 +HashDbImportDatabaseDialog.okButton.text=OK +HashDbImportDatabaseDialog.openButton.text=\u958b\u304f... +HashDbImportDatabaseDialog.orgButton.text=\u7d44\u7e54\u3092\u7ba1\u7406 +HashDbImportDatabaseDialog.populateOrgsError.message=\u7d44\u7e54\u306e\u8aad\u307f\u8fbc\u307f\u4e2d\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002 +HashDbImportDatabaseDialog.readOnlyCheckbox.text=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u3092\u8aad\u307f\u53d6\u308a\u5c02\u7528\u306b\u3059\u308b HashDbImportDatabaseDialog.saveInUserConfigFolderCheckbox.text=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u3092\u30e6\u30fc\u30b6\u30fc\u69cb\u6210\u30d5\u30a1\u30a4\u30eb\u306b\u30b3\u30d4\u30fc HashDbImportDatabaseDialog.saveInUserConfigFolderCheckbox.toolTipText=\u30e9\u30a4\u30d6\u30c8\u30ea\u30a2\u30fc\u30b8\u306e\u72b6\u6cc1\u3067\u306f\u3001\u3053\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u306b\u3088\u3063\u3066\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u3078\u306e\u30d1\u30b9\u304c\u6709\u52b9\u3067\u3042\u308b\u3053\u3068\u304c\u4fdd\u8a3c\u3055\u308c\u307e\u3059\u3002 +HashDbImportDatabaseDialog.sendIngestMessagesCheckbox.text=\u30d2\u30c3\u30c8\u3054\u3068\u306b\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u53d7\u4fe1\u7bb1\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u9001\u4fe1 +HashDbImportDatabaseDialog.unableToCopyToUserDirMsg=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u3092\u30e6\u30fc\u30b6\u30fc\u69cb\u6210\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc {0} \u306b\u30b3\u30d4\u30fc\u3067\u304d\u307e\u305b\u3093\u3002 +HashDbImportDatabaseDialog.versionTextField.text=1.0 +HashDbIngestModule.calcHashValueErr={0} ({1}) \u306e\u30cf\u30c3\u30b7\u30e5\u5024\u306e\u8a08\u7b97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 +HashDbIngestModule.complete.databasesUsed=\u4f7f\u7528\u3057\u305f\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\: +HashDbIngestModule.complete.hashLookupResults=\u30cf\u30c3\u30b7\u30e5\u30eb\u30c3\u30af\u30a2\u30c3\u30d7\u7d50\u679c +HashDbIngestModule.complete.knownBadsFound=\u898b\u3064\u304b\u3063\u305f\u9855\u8457\u6027\: +HashDbIngestModule.complete.noChangesFound=\u5909\u66f4\u30a2\u30a4\u30c6\u30e0\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\uff1a +HashDbIngestModule.complete.totalCalcTime=\u5408\u8a08\u8a08\u7b97\u6642\u9593 +HashDbIngestModule.complete.totalLookupTime=\u5408\u8a08\u30eb\u30c3\u30af\u30a2\u30c3\u30d7\u6642\u9593 +HashDbIngestModule.dialogTitle.errorFindingArtifacts=\u6b21\u306e\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u306e\u691c\u7d22\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\: {0} +HashDbIngestModule.errorMessage.lookingForFileArtifacts={0} \u306e\u65e2\u5b58\u306e\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u306e\u691c\u7d22\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 +HashDbIngestModule.fileReadErrorMsg=\u8aad\u307f\u53d6\u308a\u30a8\u30e9\u30fc\: {0} +HashDbIngestModule.hashLookupErrorMsg=\u30cf\u30c3\u30b7\u30e5\u30eb\u30c3\u30af\u30a2\u30c3\u30d7\u30a8\u30e9\u30fc\: {0} +HashDbIngestModule.indexError.message=\u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u691c\u7d22\u3059\u308b\u305f\u3081\u306e\u3001\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306e\u30d2\u30c3\u30c8\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u3092\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002 +HashDbIngestModule.knownBadFileSearchWillNotExecuteWarn=\u9855\u8457\u306a\u30d5\u30a1\u30a4\u30eb\u306e\u691c\u7d22\u306f\u5b9f\u884c\u3055\u308c\u307e\u305b\u3093\u3002 +HashDbIngestModule.knownFileSearchWillNotExecuteWarn=\u65e2\u77e5\u30d5\u30a1\u30a4\u30eb\u306e\u691c\u7d22\u306f\u5b9f\u884c\u3055\u308c\u307e\u305b\u3093\u3002 +HashDbIngestModule.lookingUpKnownBadHashValueErr={0} \u306e\u9855\u8457\u306a\u30cf\u30c3\u30b7\u30e5\u5024\u306e\u30eb\u30c3\u30af\u30a2\u30c3\u30d7\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 +HashDbIngestModule.lookingUpKnownHashValueErr={0} \u306e\u65e2\u77e5\u30cf\u30c3\u30b7\u30e5\u5024\u306e\u30eb\u30c3\u30af\u30a2\u30c3\u30d7\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 +HashDbIngestModule.lookingUpNoChangeHashValueErr={0}\u306e\u5909\u66f4\u30cf\u30c3\u30b7\u30e5\u5024\u3092\u691c\u7d22\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 +HashDbIngestModule.noKnownBadHashDbSetMsg=\u9855\u8457\u306a\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306f\u3042\u308a\u307e\u305b\u3093\u3002 +HashDbIngestModule.noKnownHashDbSetMsg=\u65e2\u77e5\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306f\u3042\u308a\u307e\u305b\u3093\u3002 +HashDbIngestModule.postToBB.fileName=\u30d5\u30a1\u30a4\u30eb\u540d +HashDbIngestModule.postToBB.hashsetName=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u540d +HashDbIngestModule.postToBB.knownBadMsg=\u9855\u8457\: {0} +HashDbIngestModule.postToBB.md5Hash=MD5\u30cf\u30c3\u30b7\u30e5 +HashDbIngestModule.settingKnownBadStateErr={0} \u306e\u9855\u8457\u306a\u72b6\u614b\u306e\u8a2d\u5b9a\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 +HashDbManager.CentralRepoHashDb.orgError=\u7d44\u7e54\u306e\u8aad\u307f\u8fbc\u307f\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f +HashDbManager.baseMessage.updatedFormatHashDbConfig=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u69cb\u6210\u30d5\u30a1\u30a4\u30eb\u306e\u5f62\u5f0f\u304c\u66f4\u65b0\u3055\u308c\u307e\u3057\u305f\u3002 +HashDbManager.centralRepoLoadError.message=\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306e\u8aad\u307f\u8fbc\u307f\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f +HashDbManager.dlgMsg.dbNotFoundAtLoc=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8 {0} \u304c\n{1}\u306e\u5834\u6240\u3067\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\n\u30d5\u30a1\u30a4\u30eb\u3092\u691c\u7d22\u3057\u307e\u3059\u304b? +HashDbManager.dlgMsg.errorIndexingHashSet={0} \u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306e\u7d22\u5f15\u751f\u6210\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 +HashDbManager.dlgTitle.MissingDb=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093 +HashDbManager.duplicateHashSetNameExceptionMsg=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u540d ''{0}'' \u306f\u3059\u3067\u306b\u4ed6\u306e\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306b\u4f7f\u7528\u3055\u308c\u3066\u3044\u307e\u3059\u3002 +HashDbManager.errCreatingIndex.msg=\u6b21\u306e\u7d22\u5f15\u3092\u4f5c\u6210\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\: {0} +HashDbManager.errCreatingIndex.title=\u7d22\u5f15\u306e\u4f5c\u6210\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f +HashDbManager.fileNameExtensionFilter.title=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u30d5\u30a1\u30a4\u30eb +HashDbManager.hashDbAlreadyAddedExceptionMsg=\n{0}\n \u306b\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u304c\u3059\u3067\u306b\u4f5c\u6210\u307e\u305f\u306f\u30a4\u30f3\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u3059\u3002 +HashDbManager.hashDbDoesNotExistExceptionMsg=\n{0} \u306b\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306f\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f +HashDbManager.hashDbFileExistsExceptionMsg=at\n{0} \u306b\u30d5\u30a1\u30a4\u30eb\u304c\u3059\u3067\u306b\u5b58\u5728\u3057\u307e\u3059 +HashDbManager.hashDbIndexingErr=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u30a8\u30e9\u30fc +HashDbManager.illegalHashDbFileNameExtensionMsg=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u30d5\u30a1\u30a4\u30eb\u540d\u306b\u306f .{0} \u62e1\u5f35\u5b50\u304c\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 +HashDbManager.ingestRunningExceptionMsg=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u304c\u9032\u884c\u4e2d\u3067\u3059\u3002\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u304c\u5b8c\u4e86\u3059\u308b\u307e\u3067\u3053\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u5229\u7528\u3067\u304d\u307e\u305b\u3093\u3002 +HashDbManager.known.text=\u65e2\u77e5 +HashDbManager.knownBad.text=\u9855\u8457 +HashDbManager.moduleErr=\u30e2\u30b8\u30e5\u30fc\u30eb\u30a8\u30e9\u30fc +HashDbManager.moduleErrorListeningToUpdatesMsg=HashDbManager\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 +HashDbManager.msgBoxTitle.confFileFmtChanged=\u69cb\u6210\u30d5\u30a1\u30a4\u30eb\u306e\u5f62\u5f0f\u304c\u5909\u66f4\u3055\u308c\u307e\u3057\u305f +HashDbManager.noChange.text=\u5909\u5316\u306a\u3057 +HashDbManager.noDbPath.message=\u6b21\u306e\u305f\u3081\u306e\u6709\u52b9\u306a\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u30d1\u30b9\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\: {0} +HashDbManager.openHashDbErr=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u30a4\u30f3\u30aa\u30fc\u30d7\u30f3\u30a8\u30e9\u30fc +HashDbManager.progress.indexingHashSet={0} \u306e\u7d22\u5f15\u751f\u6210\u4e2d\u3067\u3059 +HashDbManager.replacingDuplicateHashsetNameMsg=\u691c\u51fa\u3055\u308c\u305f\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u540d {0} \u3092\u8907\u88fd\u3057\u307e\u3059\u3002\n{1} \u3067\u7f6e\u304d\u63db\u3048\u4e2d\u3067\u3059\u3002 +HashDbManager.saveErrorExceptionMsg=\u30cf\u30c3\u30b7\u30e5\u69cb\u6210\u306e\u4fdd\u5b58\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f +HashDbManager.savedBackupOfOldConfigMsg={0}\n\u53e4\u3044\u69cb\u6210\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30b3\u30d4\u30fc\u304c \n{1} \u3068\u3057\u3066\u4fdd\u5b58\u3055\u308c\u307e\u3057\u305f +HashDbManager.unableToOpenHashDbMsg={0} \u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u3092\u958b\u3051\u307e\u305b\u3093\u3002 +HashDbManager_handleNameConflict_conflictSuffix={0}\uff08\u30ab\u30b9\u30bf\u30e0\uff09 +HashDbPanelSearchAction.actionName=MD5\u30cf\u30c3\u30b7\u30e5\u306b\u3088\u308b\u30d5\u30a1\u30a4\u30eb\u691c\u7d22 +HashDbSearchAction.dlgMsg.noFilesHaveMD5Calculated=\u73fe\u5728MD5\u30cf\u30c3\u30b7\u30e5\u304c\u8a08\u7b97\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u304c\u3042\u308a\u307e\u305b\u3093\u3002\u6700\u521d\u306bHashDB\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002 +HashDbSearchAction.dlgMsg.title=MD5\u30cf\u30c3\u30b7\u30e5\u306b\u3088\u308b\u30d5\u30a1\u30a4\u30eb\u691c\u7d22 +HashDbSearchAction.getName.text=\u30cf\u30c3\u30b7\u30e5\u691c\u7d22 +HashDbSearchAction.noOpenCase.errMsg=\u958b\u3044\u3066\u3044\u308b\u30b1\u30fc\u30b9\u306f\u3042\u308a\u307e\u305b\u3093\u3002 +HashDbSearchManager.MD5HashSearch=MD5\u30cf\u30c3\u30b7\u30e5\u691c\u7d22 +HashDbSearchManager.noResultsFoundMsg=\u8a72\u5f53\u3059\u308b\u7d50\u679c\u304c\u3042\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002 +HashDbSearchPanel.addButton.text=\u30cf\u30c3\u30b7\u30e5\u3092\u8ffd\u52a0 +HashDbSearchPanel.cancelButton.text=\u53d6\u308a\u6d88\u3057 +HashDbSearchPanel.dlgMsg.title=MD5\u30cf\u30c3\u30b7\u30e5\u306b\u3088\u308b\u30d5\u30a1\u30a4\u30eb\u691c\u7d22 +HashDbSearchPanel.errorField.text=\u30a8\u30e9\u30fc\: \u3059\u3079\u3066\u306e\u30d5\u30a1\u30a4\u30eb\u304c\u30cf\u30c3\u30b7\u30e5\u3055\u308c\u3066\u3044\u308b\u308f\u3051\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 +HashDbSearchPanel.errorText.hashAlreadyAddedMsg=\u30a8\u30e9\u30fc\: \u30cf\u30c3\u30b7\u30e5\u304c\u3059\u3067\u306b\u8ffd\u52a0\u3055\u308c\u3066\u3044\u307e\u3059\u3002 +HashDbSearchPanel.errorText.invalidMD5HashMsg=\u30a8\u30e9\u30fc\: \u305d\u308c\u306f\u6709\u52b9\u306aMD5\u30cf\u30c3\u30b7\u30e5\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 +HashDbSearchPanel.errorText.noHashesAddedMsg=\u30a8\u30e9\u30fc\: \u30cf\u30c3\u30b7\u30e5\u304c\u8ffd\u52a0\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 +HashDbSearchPanel.hashField.text= +HashDbSearchPanel.hashLabel.text=MD5\u30cf\u30c3\u30b7\u30e5\: +HashDbSearchPanel.hashTable.columnModel.title0=MD5\u30cf\u30c3\u30b7\u30e5 +HashDbSearchPanel.hashTable.defaultModel.title.text=MD5\u30cf\u30c3\u30b7\u30e5 +HashDbSearchPanel.noFilesHaveMD5HashMsg=\u73fe\u5728MD5\u30cf\u30c3\u30b7\u30e5\u304c\u8a08\u7b97\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u304c\u3042\u308a\u307e\u305b\u3093\u3002 +HashDbSearchPanel.noOpenCase.errMsg=\u958b\u3044\u3066\u3044\u308b\u30b1\u30fc\u30b9\u306f\u3042\u308a\u307e\u305b\u3093\u3002 +HashDbSearchPanel.removeButton.text=\u9078\u629e\u3055\u308c\u305f\u9805\u76ee\u3092\u524a\u9664 +HashDbSearchPanel.saveBox.text=\u30cf\u30c3\u30b7\u30e5\u3092\u8a18\u61b6 +HashDbSearchPanel.searchButton.text=\u691c\u7d22 +HashDbSearchPanel.titleLabel.text=\u6b21\u306eMD5\u30cf\u30c3\u30b7\u30e5\u3067\u30d5\u30a1\u30a4\u30eb\u3092\u691c\u7d22\: +HashDbSearchPanel.titleText.ingestOngoing=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u304c\u9032\u884c\u4e2d\u3067\u3059\u3002\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u304c\u5b8c\u4e86\u3059\u308b\u307e\u3067\u3053\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u5229\u7528\u3067\u304d\u307e\u305b\u3093\u3002 +HashDbSearchThread.name.searching=\u691c\u7d22\u4e2d\u3067\u3059 +HashDbSearchThread.noMoreFilesWithMD5Msg=\u540c\u3058MD5\u30cf\u30c3\u30b7\u30e5\u3092\u6301\u3064\u4ed6\u306e\u30d5\u30a1\u30a4\u30eb\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002 +HashDbSearchThread.progress.cancellingSearch={0} (\u53d6\u308a\u6d88\u3057\u4e2d\u3067\u3059...) +HashLookupModuleFactory.createFileIngestModule.exception.msg=instanceof HashLookupModuleSettings\u306b\u306a\u308b\u3068\u4e88\u60f3\u3055\u308c\u308b\u8a2d\u5b9a\u5f15\u6570 +HashLookupModuleFactory.getIngestJobSettingsPanel.exception.msg=instanceof HashLookupModuleSettings\u306b\u306a\u308b\u3068\u4e88\u60f3\u3055\u308c\u308b\u8a2d\u5b9a\u5f15\u6570 +HashLookupModuleFactory.moduleDescription.text=\u6a19\u6e96\u306eNSRL\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306a\u3069\u306e\u63d0\u4f9b\u3055\u308c\u305f\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u3092\u4f7f\u3063\u3066\u3001\u65e2\u77e5\u30d5\u30a1\u30a4\u30eb\u3068\u9855\u8457\u306a\u30d5\u30a1\u30a4\u30eb\u3092\u8b58\u5225\u3057\u307e\u3059\u3002 +HashLookupModuleFactory.moduleName.text=\u30cf\u30c3\u30b7\u30e5\u30eb\u30c3\u30af\u30a2\u30c3\u30d7 +HashLookupModuleSettingsPanel.alwaysCalcHashesCheckbox.text=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u304c\u9078\u629e\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u3067\u3082MD5\u3092\u8a08\u7b97 +HashLookupModuleSettingsPanel.alwaysCalcHashesCheckbox.toolTipText=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u304c\u9078\u629e\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u3067\u3082MD5\u3092\u8a08\u7b97 +HashLookupModuleSettingsPanel.hashDbsLabel.text=\u4f7f\u7528\u3059\u308b\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u3092\u9078\u629e\uff1a +HashLookupSettingsPanel.Title=\u30b0\u30ed\u30fc\u30d0\u30eb\u30cf\u30c3\u30b7\u30e5\u30eb\u30c3\u30af\u30a2\u30c3\u30d7\u8a2d\u5b9a +HashLookupSettingsPanel.addHashesToDatabaseButton.text=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306b\u30cf\u30c3\u30b7\u30e5\u3092\u8ffd\u52a0 +HashLookupSettingsPanel.centralRepo=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc +HashLookupSettingsPanel.createDatabaseButton.text=\u65b0\u898f\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8 +HashLookupSettingsPanel.createDatabaseButton.toolTipText= +HashLookupSettingsPanel.deleteDatabaseButton.text=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u3092\u524a\u9664 +HashLookupSettingsPanel.editable=\u7de8\u96c6\u53ef\u80fd +HashLookupSettingsPanel.hashDatabasesLabel.text=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\: +HashLookupSettingsPanel.hashDbIndexStatusLabel.text= +HashLookupSettingsPanel.hashDbLocationLabel.text= +HashLookupSettingsPanel.hashDbNameLabel.text= +HashLookupSettingsPanel.hashDbOrgLabel.text_1= +HashLookupSettingsPanel.hashDbReadOnlyLabel.text_1= +HashLookupSettingsPanel.hashDbTypeLabel.text= +HashLookupSettingsPanel.hashDbVersionLabel.text_1= +HashLookupSettingsPanel.importDatabaseButton.text=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u3092\u30a4\u30f3\u30dd\u30fc\u30c8 +HashLookupSettingsPanel.importDatabaseButton.toolTipText= +HashLookupSettingsPanel.indexButton.text=\u7d22\u5f15 +HashLookupSettingsPanel.indexLabel.text=\u7d22\u5f15\u30b9\u30c6\u30fc\u30bf\u30b9\: +HashLookupSettingsPanel.indexNsrl.text=\u3053\u306e\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306fNSRL\u306e\u3088\u3046\u306b\u898b\u3048\u308b\u305f\u3081\u3001\u30ea\u30b9\u30c8\u304b\u3089\u524a\u9664\u3055\u308c\u307e\u3059\u3002\n +HashLookupSettingsPanel.indexNsrl.title=NSRL\u306f\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u307e\u305b\u3093\u3002 HashLookupSettingsPanel.indexPathLabel.text= -HashLookupModuleSettingsPanel.hashDbsLabel.text=\u4f7f\u7528\u3059\u308b\u65e2\u77e5\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u3092\u9078\u629e: -HashDbCreateDatabaseDialog.noChangeRadioButton.text=\u9855\u8457 -HashDbImportDatabaseDialog.noChangeRadioButton.text=\u9855\u8457 +HashLookupSettingsPanel.indexPathLabelLabel.text=\u7d22\u5f15\u30d1\u30b9\: +HashLookupSettingsPanel.informationLabel.text=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u8a73\u7d30 +HashLookupSettingsPanel.ingestWarningLabel.text=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u304c\u9032\u884c\u4e2d\u3067\u3059\u3002\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u304c\u5b8c\u4e86\u3059\u308b\u307e\u3067\u4e00\u90e8\u306e\u8a2d\u5b9a\u3092\u5229\u7528\u3067\u304d\u307e\u305b\u3093\u3002 +HashLookupSettingsPanel.locationLabel.text=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u30d1\u30b9\: +HashLookupSettingsPanel.nameLabel.text=\u540d\u524d\: +HashLookupSettingsPanel.notApplicable=N/A +HashLookupSettingsPanel.orgLabel.text_1=\u7d44\u7e54\: +HashLookupSettingsPanel.promptMessage.deleteHashDb=\u3053\u308c\u306b\u3088\u308a\u3001\u30cf\u30c3\u30b7\u30e5\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30eb\u30c3\u30af\u30a2\u30c3\u30d7\u306b\u5229\u7528\u3067\u304d\u306a\u304f\u306a\u308a\u307e\u3059\u3002\u7d9a\u884c\u3057\u307e\u3059\u304b?\n\n\u6ce8\: \u30cf\u30c3\u30b7\u30e5\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306f\u5f8c\u304b\u3089\u3067\u3082\u518d\u30a4\u30f3\u30dd\u30fc\u30c8\u3067\u304d\u307e\u3059\u3002 +HashLookupSettingsPanel.promptTitle.deleteHashDb=\u69cb\u6210\u304b\u3089\u30cf\u30c3\u30b7\u30e5\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u524a\u9664 +HashLookupSettingsPanel.readOnly=\u8aad\u307f\u53d6\u308a\u5c02\u7528 +HashLookupSettingsPanel.readOnlyLabel.text_1=\u8aad\u307f\u53d6\u308a\u5c02\u7528\: +HashLookupSettingsPanel.removeDatabaseFailure.message=\u30cf\u30c3\u30b7\u30e5\u30eb\u30c3\u30af\u30a2\u30c3\u30d7\u3092\u524a\u9664\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\: {0} +HashLookupSettingsPanel.removeUnindexedNsrl.text=NSRL\u3092\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3059\u308b\u4ee3\u308f\u308a\u306b\u3001\u3053\u3053\u3067\u5165\u624b\u53ef\u80fd\u306a\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u6e08\u307f\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u304f\u3060\u3055\u3044\:\n{0} +HashLookupSettingsPanel.removeUnindexedNsrl.title=\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u3066\u3044\u306a\u3044NSRL(s)\u306f\u524a\u9664\u3055\u308c\u307e\u3059 +HashLookupSettingsPanel.saveFail.message=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u8a2d\u5b9a\u3092\u4fdd\u5b58\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002 +HashLookupSettingsPanel.saveFail.title=\u4fdd\u5b58\u5931\u6557 +HashLookupSettingsPanel.sendIngestMessagesCheckBox.text=\u30d2\u30c3\u30c8\u3054\u3068\u306b\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u53d7\u4fe1\u7bb1\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u9001\u4fe1 +HashLookupSettingsPanel.typeLabel.text=\u30bf\u30a4\u30d7\: +HashLookupSettingsPanel.unindexedNsrl.base=\u6b21\u306e\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306f\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u3066\u3044\u306a\u3044\u30d0\u30fc\u30b8\u30e7\u30f3\u306eNSRL\u306e\u3088\u3046\u306b\u898b\u3048\u308b\u305f\u3081\u3001\u30ea\u30b9\u30c8\u304b\u3089\u524a\u9664\u3055\u308c\u307e\u3059\u3002\nHash set\:{0}\n +HashLookupSettingsPanel.unindexedNsrls.base=\u6b21\u306e\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306f\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u3066\u3044\u306a\u3044\u30d0\u30fc\u30b8\u30e7\u30f3\u306eNSRL\u306e\u3088\u3046\u306b\u898b\u3048\u308b\u305f\u3081\u3001\u30ea\u30b9\u30c8\u304b\u3089\u524a\u9664\u3055\u308c\u307e\u3059\u3002\nHash sets\:{0}\n +HashLookupSettingsPanel.updateStatusError=\u30b9\u30c6\u30fc\u30bf\u30b9\u306e\u8aad\u307f\u53d6\u308a\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f +HashLookupSettingsPanel.versionLabel.text_1=\u30d0\u30fc\u30b8\u30e7\u30f3\: +ImportCentralRepoDbProgressDialog.bnCancel.text=\u53d6\u308a\u6d88\u3057 +ImportCentralRepoDbProgressDialog.bnOk.text=OK +ImportCentralRepoDbProgressDialog.errorParsingFile.message=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u30d5\u30a1\u30a4\u30eb\u306e\u89e3\u6790\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f +ImportCentralRepoDbProgressDialog.jLabel1.text=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u3092\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u306b\u30a4\u30f3\u30dd\u30fc\u30c8\u4e2d\u3067\u3059 +ImportCentralRepoDbProgressDialog.lbProgress.text=\u30a4\u30f3\u30dd\u30fc\u30c8\u3092\u958b\u59cb\u3057\u307e\u3059... +ImportCentralRepoDbProgressDialog.linesProcessed.message=\ \u51e6\u7406\u3055\u308c\u305f\u30cf\u30c3\u30b7\u30e5 +ImportCentralRepoDbProgressDialog.title.text=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u306e\u30a4\u30f3\u30dd\u30fc\u30c8\u304c\u9032\u884c\u4e2d\u3067\u3059 +ImportHashDatabaseDialog.lbFilePath.text=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\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 +ModalNoButtons.CANCEL_BUTTON.text=\u53d6\u308a\u6d88\u3057 +ModalNoButtons.CURRENTDB_LABEL.text=(CurrentDb) +ModalNoButtons.CURRENTLYON_LABEL.text=\u73fe\u5728y\u306ex\u3092\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u4e2d\u3067\u3059 +ModalNoButtons.GO_GET_COFFEE_LABEL.text=\u73fe\u5728\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u3092\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u4e2d\u3067\u3059\u3002\u3053\u308c\u306b\u306f\u6642\u9593\u304c\u304b\u304b\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002 +ModalNoButtons.dlgTitle.unfinishedIndexing=\u5b8c\u4e86\u3057\u3066\u3044\u306a\u3044\u7d22\u5f15\u751f\u6210 +ModalNoButtons.exitHashDbIndexingMsg=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306e\u7d22\u5f15\u751f\u6210\u3092\u7d42\u4e86\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u307e\u3059\u3002\n\u751f\u6210\u3055\u308c\u305f\u7d22\u5f15\u306f\u4f7f\u7528\u3067\u304d\u306a\u3044\u72b6\u614b\u306e\u307e\u307e\u306b\u306a\u308a\u307e\u3059\u3002\u7d9a\u884c\u3092\u9078\u629e\u3059\u308b\u5834\u5408\u3001\n\u30cf\u30c3\u30b7\u30e5\u30d5\u30a9\u30eb\u30c0\u30fc\u5185\u306e\u8a72\u5f53\u3059\u308b-md5.idx\u30d5\u30a1\u30a4\u30eb\u3092\u524a\u9664\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n\u7d22\u5f15\u751f\u6210\u3092\u7d42\u4e86\u3057\u307e\u3059\u304b? +ModalNoButtons.indexThese.currentlyIndexing1OfNDbs=\u73fe\u5728 {0} \u306e1\u3064\u3092\u7d22\u5f15\u751f\u6210\u4e2d\u3067\u3059 +ModalNoButtons.indexThis.currentlyIndexing1Db=\u73fe\u57281\u3064\u306e\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u3092\u7d22\u5f15\u751f\u6210\u4e2d\u3067\u3059 +ModalNoButtons.indexingDbTitle=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306e\u7d22\u5f15\u751f\u6210\u4e2d\u3067\u3059 +ModalNoButtons.indexingDbsTitle=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306e\u7d22\u5f15\u751f\u6210\u4e2d\u3067\u3059 +ModalNoButtons.propChg.currentlyIndexingXofN=\u73fe\u5728 {1} \u306e {0} \u3092\u7d22\u5f15\u751f\u6210\u4e2d\u3067\u3059 +OpenIDE-Module-Display-Category=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb +OpenIDE-Module-Long-Description=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u3067\u3059\u3002 \n\n\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u306f\u30c7\u30a3\u30b9\u30af\u30a4\u30e1\u30fc\u30b8\u5185\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u89e3\u6790\u3057\u3001\u300c\u65e2\u77e5\u300d(\u300c\u65e2\u77e5\u300d\u30d5\u30a1\u30a4\u30eb\u306eNSRL\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u30eb\u30c3\u30af\u30a2\u30c3\u30d7\u306b\u57fa\u3065\u304f)\u304a\u3088\u3073\u300c\u4e0d\u6b63 / \u8208\u5473\u6df1\u3044\u300d(\u30e6\u30fc\u30b6\u30fc\u304c\u63d0\u4f9b\u3059\u308b1\u3064\u4ee5\u4e0a\u306e\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306b\u57fa\u3065\u304f)\u3068\u30de\u30fc\u30af\u4ed8\u3051\u3057\u307e\u3059\u3002\n\n\u3053\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u306b\u306f\u3001\u30cf\u30c3\u30b7\u30e5\u3084\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u69cb\u6210\u5225\u306e\u30d5\u30a1\u30a4\u30eb\u30eb\u30c3\u30af\u30a2\u30c3\u30d7\u306a\u3069\u306e\u3001GUI\u306b\u7d71\u5408\u3055\u308c\u3066\u3044\u308b\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30c4\u30fc\u30eb\u4ee5\u5916\u306e\u305d\u306e\u4ed6\u306e\u30c4\u30fc\u30eb\u3082\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002 +OpenIDE-Module-Name=HashDatabases +OpenIDE-Module-Short-Description=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u3068\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u30c4\u30fc\u30eb +OptionsCategory_Keywords_HashDatabase=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8 +OptionsCategory_Name_HashDatabase=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8 diff --git a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/Bundle_ja.properties index 5a940ca1fd..f1379958cd 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/Bundle_ja.properties +++ b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/Bundle_ja.properties @@ -1,21 +1,51 @@ +#Tue Aug 18 18:09:21 UTC 2020 +FilesIdentifierIngestJobSettingsPanel.border.title=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u4e2d\u306b\u6709\u52b9\u5316\u3059\u308b\u8208\u5473\u6df1\u3044\u30d5\u30a1\u30a4\u30eb\u30bb\u30c3\u30c8\u3092\u9078\u629e\: FilesIdentifierIngestJobSettingsPanel.getError=\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u8208\u5473\u6df1\u3044\u30d5\u30a1\u30a4\u30eb\u30bb\u30c3\u30c8\u3092\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 FilesIdentifierIngestJobSettingsPanel.updateError=\u8208\u5473\u6df1\u3044\u30d5\u30a1\u30a4\u30eb\u30bb\u30c3\u30c8\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u66f4\u65b0\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 FilesIdentifierIngestModule.getFilesError=\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u8208\u5473\u6df1\u3044\u30d5\u30a1\u30a4\u30eb\u30bb\u30c3\u30c8\u3092\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 FilesIdentifierIngestModule.indexError.message=\u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u691c\u7d22\u3059\u308b\u305f\u3081\u306e\u3001\u8208\u5473\u6df1\u3044\u30d5\u30a1\u30a4\u30eb\u306e\u30d2\u30c3\u30c8\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u3092\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002 -# {0} - daysIncluded FilesSet.rule.dateRule.toString=({0} \u65e5\u4ee5\u5185\u306b\u4fee\u6b63) +FilesSetDefsPanel.Ingest.Title=\u30d5\u30a1\u30a4\u30eb\u30d5\u30a3\u30eb\u30bf\u30fc\u8a2d\u5b9a +FilesSetDefsPanel.Interesting.Title=\u8208\u5473\u6df1\u3044\u9805\u76ee\u306e\u30b0\u30ed\u30fc\u30d0\u30eb\u8a2d\u5b9a +FilesSetDefsPanel.allRadioButton.text=\u3059\u3079\u3066 FilesSetDefsPanel.bytes=\u30d0\u30a4\u30c8 FilesSetDefsPanel.cancelImportMsg=\u30a4\u30f3\u30dd\u30fc\u30c8\u3092\u53d6\u308a\u6d88\u3059 -# {0} - \u30d5\u30a1\u30a4\u30eb\u540d +FilesSetDefsPanel.cancelNewSetMsg=\u30ad\u30e3\u30f3\u30bb\u30eb +FilesSetDefsPanel.daysIncludedLabel.text=\u65e5 +FilesSetDefsPanel.daysIncludedTextField.text= +FilesSetDefsPanel.deleteRuleButton.text=\u30eb\u30fc\u30eb\u3092\u524a\u9664 +FilesSetDefsPanel.descriptionLabel.text=\u8aac\u660e\uff1a +FilesSetDefsPanel.dirsRadioButton.text=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc +FilesSetDefsPanel.doFileSetsDialog.duplicateRuleSet.text={0} \u306e\u540d\u524d\u306e\u30eb\u30fc\u30eb\u30bb\u30c3\u30c8\u306f\u3059\u3067\u306b\u5b58\u5728\u3057\u307e\u3059\u3002 +FilesSetDefsPanel.editRuleButton.text=\u30eb\u30fc\u30eb\u3092\u7de8\u96c6 FilesSetDefsPanel.exportButtonActionPerformed.fileExistPrompt=\u30d5\u30a1\u30a4\u30eb {0} \u304c\u5b58\u5728\u3057\u307e\u3059\u3002\u4e0a\u66f8\u304d\u3057\u307e\u3059\u304b? +FilesSetDefsPanel.fileNameExtensionRadioButton.text=\u62e1\u5f35\u5b50\u306e\u307f +FilesSetDefsPanel.fileNameRadioButton.text=\u5b8c\u5168\u306a\u540d\u524d +FilesSetDefsPanel.fileNameRegexCheckbox.text=\u5f93\u5c5e\u6587\u5b57\u5217 / \u6b63\u898f\u8868\u73fe +FilesSetDefsPanel.fileNameTextField.text= +FilesSetDefsPanel.fileSizeLabel.text=\u30d5\u30a1\u30a4\u30eb\u30b5\u30a4\u30ba\uff1a +FilesSetDefsPanel.fileTypeLabel.text=\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\uff1a +FilesSetDefsPanel.filesRadioButton.text=\u30d5\u30a1\u30a4\u30eb FilesSetDefsPanel.gigaBytes=\u30ae\u30ac\u30d0\u30a4\u30c8 -# {0} - \u30d5\u30a3\u30eb\u30bf\u30fc\u540d -# {1} - \u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u540d +FilesSetDefsPanel.ignoreKnownFilesCheckbox.text=\u65e2\u77e5\u30d5\u30a1\u30a4\u30eb\u3092\u7121\u8996 +FilesSetDefsPanel.importSetButtonActionPerformed.importError="\u30eb\u30fc\u30eb\u30d5\u30a1\u30a4\u30eb" "{0}" "\u3092\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\u3067\u3057\u305f\uff1a\n{1} +FilesSetDefsPanel.importSetButtonActionPerformed.noFiles=\u9078\u629e\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u306b\u30d5\u30a1\u30a4\u30eb\u30bb\u30c3\u30c8\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002 +FilesSetDefsPanel.importSetButtonActionPerformed.noFilesSelected=\u30d5\u30a1\u30a4\u30eb\u30bb\u30c3\u30c8\u304c\u9078\u629e\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 +FilesSetDefsPanel.ingest.deleteSetButton.text=\u30d5\u30a3\u30eb\u30bf\u30fc\u3092\u524a\u9664 +FilesSetDefsPanel.ingest.editSetButton.text=\u7de8\u96c6\u30d5\u30a3\u30eb\u30bf\u30fc FilesSetDefsPanel.ingest.fileFilterInUseError=\u9078\u629e\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u30d5\u30a3\u30eb\u30bf\u30fc {0} \u3092\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb {1} \u304c\u4f7f\u7528\u4e2d\u3067\u3059\u3002\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u304c\u4f7f\u7528\u3057\u3066\u3044\u308b\u9593\u306f\u524a\u9664\u3067\u304d\u307e\u305b\u3093\u3002 -FilesSetDefsPanel.Ingest.Title=\u30d5\u30a1\u30a4\u30eb\u30d5\u30a3\u30eb\u30bf\u30fc\u8a2d\u5b9a -FilesSetDefsPanel.interesting.copySetButton.text=\u30bb\u30c3\u30c8\u3092\u30b3\u30d4\u30fc -FilesSetDefsPanel.interesting.exportButtonAction.featureName=\u8208\u5473\u6df1\u3044\u30d5\u30a1\u30a4\u30eb\u30bb\u30c3\u30c8\u306e\u30a8\u30af\u30b9\u30dd\u30fc\u30c8 +FilesSetDefsPanel.ingest.jLabel6.text=\u30d5\u30a3\u30eb\u30bf\u30fc\u8a73\u7d30 +FilesSetDefsPanel.ingest.jTextArea1.text=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u5185\u306e\u30d5\u30a1\u30a4\u30eb\u306e\u30b5\u30d6\u30bb\u30c3\u30c8\u306e\u307f\u3092\u5206\u6790\u3059\u308b\u3088\u3046\u30eb\u30fc\u30eb\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002\u30eb\u30fc\u30eb\u3092\u30bb\u30c3\u30c8\u306b\u69cb\u9020\u5316\u3057\u307e\u3059\u3002\u4e00\u5ea6\u306b1\u3064\u306e\u30bb\u30c3\u30c8\u306e\u307f\u3092\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002\u30d5\u30a1\u30a4\u30eb\u306f\u5206\u6790\u5bfe\u8c61\u3068\u306a\u308b1\u3064\u306e\u30eb\u30fc\u30eb\u3068\u4e00\u81f4\u3059\u308b\u3060\u3051\u3067\u5341\u5206\u3067\u3059\u3002 +FilesSetDefsPanel.ingest.newSetButton.text=\u65b0\u898f\u30d5\u30a3\u30eb\u30bf\u30fc +FilesSetDefsPanel.ingest.setsListLabel.text=\u30d5\u30a1\u30a4\u30eb\u30d5\u30a3\u30eb\u30bf\u30fc\: +FilesSetDefsPanel.ingestWarningLabel.text=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u304c\u9032\u884c\u4e2d\u3067\u3059\u3002\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u304c\u5b8c\u4e86\u3059\u308b\u307e\u3067\u4e00\u90e8\u306e\u8a2d\u5b9a\u3092\u5229\u7528\u3067\u304d\u307e\u305b\u3093\u3002 +FilesSetDefsPanel.ingoreUnallocCheckbox.text=\u672a\u4f7f\u7528\u9818\u57df\u3092\u7121\u8996 +FilesSetDefsPanel.ingoreUnallocCheckbox.toolTipText=\u524a\u9664\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u306a\u3069\u3001\u672a\u4f7f\u7528\u9818\u57df\u3092\u7121\u8996\u3057\u307e\u3059\u3002\u5b9f\u884c\u901f\u5ea6\u304c\u901f\u304f\u306a\u308a\u3001\u3088\u308a\u5b8c\u5168\u3067\u306f\u306a\u3044\u7d50\u679c\u304c\u751f\u6210\u3055\u308c\u307e\u3059\u3002 FilesSetDefsPanel.interesting.ExportedMsg=\u8208\u5473\u6df1\u3044\u30d5\u30a1\u30a4\u30eb\u30bb\u30c3\u30c8\u304c\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u3055\u308c\u307e\u3057\u305f +FilesSetDefsPanel.interesting.copySetButton.text=\u30bb\u30c3\u30c8\u3092\u30b3\u30d4\u30fc +FilesSetDefsPanel.interesting.deleteSetButton.text=\u30bb\u30c3\u30c8\u3092\u524a\u9664 +FilesSetDefsPanel.interesting.editSetButton.text=\u30bb\u30c3\u30c8\u3092\u7de8\u96c6 +FilesSetDefsPanel.interesting.exportButtonAction.featureName=\u8208\u5473\u6df1\u3044\u30d5\u30a1\u30a4\u30eb\u30bb\u30c3\u30c8\u306e\u30a8\u30af\u30b9\u30dd\u30fc\u30c8 FilesSetDefsPanel.interesting.exportSetButton.text=\u30bb\u30c3\u30c8\u3092\u30a8\u30af\u30b9\u30dd\u30fc\u30c8 FilesSetDefsPanel.interesting.failExportMsg=\u8208\u5473\u6df1\u3044\u30d5\u30a1\u30a4\u30eb\u30bb\u30c3\u30c8\u306e\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u306b\u5931\u6557\u3057\u307e\u3057\u305f FilesSetDefsPanel.interesting.failImportMsg=\u8208\u5473\u6df1\u3044\u30d5\u30a1\u30a4\u30eb\u30bb\u30c3\u30c8\u304c\u30a4\u30f3\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093 @@ -23,120 +53,107 @@ FilesSetDefsPanel.interesting.fileExtensionFilterLbl=Autopsy\u306e\u8208\u5473\u FilesSetDefsPanel.interesting.importButtonAction.featureName=\u8208\u5473\u6df1\u3044\u30d5\u30a1\u30a4\u30eb\u30bb\u30c3\u30c8\u306e\u30a4\u30f3\u30dd\u30fc\u30c8 FilesSetDefsPanel.interesting.importOwConflict=\u8208\u5473\u6df1\u3044\u30d5\u30a1\u30a4\u30eb\u30bb\u30c3\u30c8\u306e\u30b3\u30f3\u30d5\u30ea\u30af\u30c8\u3092\u30a4\u30f3\u30dd\u30fc\u30c8 FilesSetDefsPanel.interesting.importSetButton.text=\u30bb\u30c3\u30c8\u3092\u30a4\u30f3\u30dd\u30fc\u30c8 -# {0} - \u30d5\u30a1\u30a4\u30eb\u30bb\u30c3\u30c8\u540d -FilesSetDefsPanel.interesting.overwriteSetPrompt=\u8208\u5473\u6df1\u3044\u30d5\u30a1\u30a4\u30eb\u30bb\u30c3\u30c8 <{0}> \u304c\u3059\u3067\u306b\u30ed\u30fc\u30ab\u30eb\u306b\u5b58\u5728\u3057\u307e\u3059\u3002\u4e0a\u66f8\u304d\u3057\u307e\u3059\u304b? -FilesSetDefsPanel.Interesting.Title=\u8208\u5473\u6df1\u3044\u9805\u76ee\u306e\u30b0\u30ed\u30fc\u30d0\u30eb\u8a2d\u5b9a +FilesSetDefsPanel.interesting.jLabel6.text=\u8a73\u7d30\u3092\u8a2d\u5b9a +FilesSetDefsPanel.interesting.jTextArea1.text=\u3053\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u4f7f\u7528\u3059\u308b\u3068\u3001\u6307\u5b9a\u3057\u305f\u6761\u4ef6\u3068\u4e00\u81f4\u3059\u308b\u30d5\u30a1\u30a4\u30eb\u3092\u691c\u7d22\u3067\u304d\u307e\u3059\u3002\u5404\u30bb\u30c3\u30c8\u306b\u3001\u9078\u629e\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u306e\u7279\u5fb4\u3068\u4e00\u81f4\u3059\u308b\u30eb\u30fc\u30eb\u30ea\u30b9\u30c8\u304c\u7528\u610f\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u30d5\u30a1\u30a4\u30eb\u306f\u691c\u7d22\u5bfe\u8c61\u3068\u306a\u308b1\u3064\u306e\u30eb\u30fc\u30eb\u3068\u4e00\u81f4\u3059\u308b\u3060\u3051\u3067\u5341\u5206\u3067\u3059\u3002 +FilesSetDefsPanel.interesting.newOwConflict=\u8208\u5473\u6df1\u3044\u30d5\u30a1\u30a4\u30eb\u30bb\u30c3\u30c8\u306e\u7af6\u5408 +FilesSetDefsPanel.interesting.newSetButton.text=\u65b0\u898f\u30bb\u30c3\u30c8 +FilesSetDefsPanel.interesting.overwriteSetPrompt=\u8208\u5473\u6df1\u3044\u30d5\u30a1\u30a4\u30eb\u30bb\u30c3\u30c8 "{0}"\u306f\u65e2\u306b\u30ed\u30fc\u30ab\u30eb\u306b\u5b58\u5728\u3057\u3066\u3044\u307e\u3059\u3002\u4e0a\u66f8\u304d\u3057\u307e\u3059\u304b\uff1f +FilesSetDefsPanel.interesting.setsListLabel.text=\u30eb\u30fc\u30eb\u30bb\u30c3\u30c8\: +FilesSetDefsPanel.interesting.standardFileConflict=\u300c{0}\u300d\u3068\u3044\u3046\u540d\u524d\u306e\u6a19\u6e96\u306e\u8208\u5473\u6df1\u3044\u30d5\u30a1\u30a4\u30eb\u30bb\u30c3\u30c8\u304c\u3059\u3067\u306b\u5b58\u5728\u3057\u3066\u3044\u307e\u3059\u3002 \u30bb\u30c3\u30c8\u306e\u540d\u524d\u3092\u300c{1}\u300d\u306b\u5909\u66f4\u3057\u307e\u3059\u304b\uff1f FilesSetDefsPanel.kiloBytes=\u30ad\u30ed\u30d0\u30a4\u30c8 FilesSetDefsPanel.loadError=\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u8208\u5473\u6df1\u3044\u30d5\u30a1\u30a4\u30eb\u30bb\u30c3\u30c8\u3092\u8aad\u307f\u8fbc\u307f\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 FilesSetDefsPanel.megaBytes=\u30e1\u30ac\u30d0\u30a4\u30c8 +FilesSetDefsPanel.mimeTypeLabel.text=MIME\u30bf\u30a4\u30d7\uff1a +FilesSetDefsPanel.modifiedDateLabel.text=\u6b21\u306e\u4e2d\u3067\u4fee\u6b63\u6e08\u307f\: +FilesSetDefsPanel.nameLabel.text=\u540d\u524d\uff1a +FilesSetDefsPanel.newRuleButton.text=\u65b0\u898f\u30eb\u30fc\u30eb FilesSetDefsPanel.noSkipMsg=\u3044\u3044\u3048\u3001\u30b9\u30ad\u30c3\u30d7\u3057\u307e\u3059 +FilesSetDefsPanel.pathLabel.text=\u30d1\u30b9\u30fb\u30b5\u30d6\u30b9\u30c8\u30ea\u30f3\u30b0\uff1a +FilesSetDefsPanel.ruleLabel.text=\u30eb\u30fc\u30eb\u306e\u8a73\u7d30 +FilesSetDefsPanel.rulePathConditionRegexCheckBox.text=\u6b63\u898f\u8868\u73fe +FilesSetDefsPanel.rulePathConditionTextField.text= +FilesSetDefsPanel.rulesListLabel.text=\u30eb\u30fc\u30eb\: FilesSetDefsPanel.saveError=\u30d5\u30a1\u30a4\u30eb\u306b\u8208\u5473\u6df1\u3044\u30d5\u30a1\u30a4\u30eb\u30bb\u30c3\u30c8\u3092\u4fdd\u5b58\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 FilesSetDefsPanel.yesOwMsg=\u306f\u3044\u3001\u4e0a\u66f8\u304d\u3057\u307e\u3059 +FilesSetDefsPanel.yesStandardFileConflictCreate=\u306f\u3044\u3001\u4f5c\u6210\u5b9f\u884c +FilesSetPanel.descPanel.border.title=\u8aac\u660e +FilesSetPanel.descriptionPanel.border.title=\u8aac\u660e FilesSetPanel.filter.title=\u30d5\u30a1\u30a4\u30eb\u30d5\u30a3\u30eb\u30bf\u30fc +FilesSetPanel.ignoreKnownFilesCheckbox.text=\u65e2\u77e5\u30d5\u30a1\u30a4\u30eb\u3092\u7121\u8996 +FilesSetPanel.ignoreUnallocCheckbox.text=\u672a\u4f7f\u7528\u9818\u57df\u3092\u7121\u8996 +FilesSetPanel.ignoreUnallocCheckbox.toolTipText=\u524a\u9664\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u306a\u3069\u3001\u672a\u4f7f\u7528\u9818\u57df\u3092\u7121\u8996\u3057\u307e\u3059\u3002\u5b9f\u884c\u901f\u5ea6\u304c\u901f\u304f\u306a\u308a\u3001\u3088\u308a\u5b8c\u5168\u3067\u306f\u306a\u3044\u7d50\u679c\u304c\u751f\u6210\u3055\u308c\u307e\u3059\u3002 FilesSetPanel.ingest.createNewFilter=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30d5\u30a3\u30eb\u30bf\u30fc\u3092\u4f5c\u6210/\u7de8\u96c6... FilesSetPanel.ingest.messages.filtersMustBeNamed=\u30d5\u30a1\u30a4\u30eb\u306e\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30d5\u30a3\u30eb\u30bf\u30fc\u306b\u540d\u524d\u3092\u4ed8\u3051\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 +FilesSetPanel.ingest.nameLabel.text=\u30d5\u30a3\u30eb\u30bf\u30fc\u540d\: +FilesSetPanel.interesting.messages.filesSetsMustBeNamed=\u8208\u5473\u6df1\u3044\u30d5\u30a1\u30a4\u30eb\u30bb\u30c3\u30c8\u306e\u540d\u524d\u3092\u4ed8\u3051\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 +FilesSetPanel.interesting.nameLabel.text=\u30bb\u30c3\u30c8\u540d\: +FilesSetPanel.interesting.title=\u8208\u5473\u6df1\u3044\u30d5\u30a1\u30a4\u30eb\u30bb\u30c3\u30c8\u306e\u30eb\u30fc\u30eb +FilesSetPanel.messages.filesSetsReservedName=\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u304c\u30ea\u30b6\u30fc\u30d6\u3059\u308b\u540d\u524d\u3092\u9078\u629e\u3057\u307e\u3057\u305f\u3002\u5225\u306e\u540d\u524d\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002 FilesSetPanel.rule.title=\u30d5\u30a1\u30a4\u30eb\u30d5\u30a3\u30eb\u30bf\u30fc\u30eb\u30fc\u30eb -FilesSetRulePanel.bytes=\u30d0\u30a4\u30c8 -# {0} - \u6b63\u898f\u8868\u73fe -FilesSetRulePanel.CommaInRegexWarning=\u8b66\u544a: \u30d5\u30a1\u30a4\u30eb\u62e1\u5f35\u5b50\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u30ab\u30f3\u30de\u306f\u6b63\u898f\u8868\u73fe\u306e\u4e00\u90e8\u3068\u3057\u3066\u89e3\u91c8\u3055\u308c\u3001\u8907\u6570\u306e\u62e1\u5f35\u5b50 (\u5165\u529b\u6570: "{0}") \u306b\u5165\u529b\u3092\u5206\u5272\u3057\u307e\u305b\u3093\u3002 -FilesSetRulePanel.DaysIncludedEmptyError=\u542b\u307e\u308c\u308b\u65e5\u6570\u306f\u7a7a(\u672a\u5165\u529b)\u306b\u3067\u304d\u307e\u305b\u3093\u3002 +FilesSetRulePanel.CommaInRegexWarning=\u8b66\u544a\: \u30d5\u30a1\u30a4\u30eb\u62e1\u5f35\u5b50\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u30ab\u30f3\u30de\u306f\u6b63\u898f\u8868\u73fe\u306e\u4e00\u90e8\u3068\u3057\u3066\u89e3\u91c8\u3055\u308c\u3001\u8907\u6570\u306e\u62e1\u5f35\u5b50 (\u5165\u529b\u6570\: "{0}") \u306b\u5165\u529b\u3092\u5206\u5272\u3057\u307e\u305b\u3093\u3002 FilesSetRulePanel.DaysIncludedEmptyError=\u542b\u307e\u308c\u308b\u65e5\u6570\u306f\u6b63\u306e\u6574\u6570\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 -FilesSetRulePanel.gigaBytes=\u30ae\u30ac\u30d0\u30a4\u30c8 -FilesSetRulePanel.kiloBytes=\u30ad\u30ed\u30d0\u30a4\u30c8 -FilesSetRulePanel.megaBytes=\u30e1\u30ac\u30d0\u30a4\u30c8 -FilesSetRulePanel.nameTextField.extensionExample=\u4f8b: "jpg" \u307e\u305f\u306f "jpg,jpeg,gif" -FilesSetRulePanel.nameTextField.fullNameExample=\u4f8b: "file.exe" FilesSetRulePanel.NoConditionError=\u30eb\u30fc\u30eb\u3092\u4f5c\u308b\u305f\u3081\u306e\u6761\u4ef6\u304c\u5c11\u306a\u304f\u3068\u30821\u3064\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 FilesSetRulePanel.NoMimeTypeError=\u6709\u52b9\u306aMIME\u30bf\u30a4\u30d7\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002 FilesSetRulePanel.NoNameError=\u540d\u524d\u306f\u7a7a(\u672a\u5165\u529b)\u306b\u3067\u304d\u307e\u305b\u3093 FilesSetRulePanel.NoPathError=\u30d1\u30b9\u306f\u7a7a(\u672a\u5165\u529b)\u306b\u3067\u304d\u307e\u305b\u3093 -FilesSetRulePanel.ZeroFileSizeError=\u30d5\u30a1\u30a4\u30eb\u30b5\u30a4\u30ba\u306e\u6761\u4ef6\u5024\u306f0\u306b\u3067\u304d\u307e\u305b\u3093(= \u3092\u9078\u629e\u3059\u308b\u5834\u5408\u3092\u9664\u304f)\u3002 +FilesSetRulePanel.ZeroFileSizeError=\u30d5\u30a1\u30a4\u30eb\u30b5\u30a4\u30ba\u306e\u6761\u4ef6\u5024\u306f0\u306b\u3067\u304d\u307e\u305b\u3093(\= \u3092\u9078\u629e\u3059\u308b\u5834\u5408\u3092\u9664\u304f)\u3002 +FilesSetRulePanel.allRadioButton.text=\u3059\u3079\u3066 +FilesSetRulePanel.bytes=\u30d0\u30a4\u30c8 +FilesSetRulePanel.dateCheck.text=\u6b21\u306e\u4e2d\u3067\u4fee\u6b63\u6e08\u307f\: +FilesSetRulePanel.daysIncludedLabel.text=\u65e5 +FilesSetRulePanel.dirsRadioButton.text=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc +FilesSetRulePanel.extensionRadioButton.text=\u62e1\u5f35\u5b50\u306e\u307f +FilesSetRulePanel.fileSizeCheck.text=\u30d5\u30a1\u30a4\u30eb\u30b5\u30a4\u30ba\: +FilesSetRulePanel.filesRadioButton.text=\u30d5\u30a1\u30a4\u30eb +FilesSetRulePanel.fullNameRadioButton.text=\u5b8c\u5168\u306a\u540d\u524d +FilesSetRulePanel.gigaBytes=\u30ae\u30ac\u30d0\u30a4\u30c8 +FilesSetRulePanel.ingest.jLabel5.text=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u3092\u5b9f\u884c\u3057\u305f\u3044\u30d5\u30a1\u30a4\u30eb\u306b\u95a2\u3059\u308b\u60c5\u5831\u3092\u5165\u529b\u3057\u307e\u3059\u3002 +FilesSetRulePanel.interesting.jLabel5.text=\u691c\u7d22\u3057\u305f\u3044\u30d5\u30a1\u30a4\u30eb\u306b\u95a2\u3059\u308b\u60c5\u5831\u3092\u5165\u529b\u3057\u307e\u3059\u3002 +FilesSetRulePanel.jLabel1.text=\u30bf\u30a4\u30d7\: +FilesSetRulePanel.kiloBytes=\u30ad\u30ed\u30d0\u30a4\u30c8 +FilesSetRulePanel.megaBytes=\u30e1\u30ac\u30d0\u30a4\u30c8 +FilesSetRulePanel.messages.emptyNameCondition=\u3053\u306e\u30eb\u30fc\u30eb\u306e\u540d\u524d\u30d1\u30bf\u30fc\u30f3\u3092\u6307\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 +FilesSetRulePanel.messages.invalidCharInName=\u540d\u524d\u306b\u306f \\\u3001/\u3001 \:\u3001*\u3001?\u3001"\u3001 <\u3001> \u3092\u542b\u3081\u3089\u308c\u307e\u305b\u3093(\u6b63\u898f\u8868\u73fe\u306e\u5834\u5408\u3092\u9664\u304f)\u3002 +FilesSetRulePanel.messages.invalidCharInPath=\u30d1\u30b9\u306b\u306f \\\u3001/\u3001 \:\u3001*\u3001?\u3001"\u3001 <\u3001> \u3092\u542b\u3081\u3089\u308c\u307e\u305b\u3093(\u6b63\u898f\u8868\u73fe\u306e\u5834\u5408\u3092\u9664\u304f)\u3002 +FilesSetRulePanel.messages.invalidNameRegex=\u540d\u524d\u306e\u6b63\u898f\u8868\u73fe\u304c\u6709\u52b9\u3067\u306f\u3042\u308a\u307e\u305b\u3093\:\n\n{0} +FilesSetRulePanel.messages.invalidPathRegex=\u30d1\u30b9\u306e\u6b63\u898f\u8868\u73fe\u304c\u6709\u52b9\u3067\u306f\u3042\u308a\u307e\u305b\u3093\:\n\n{0} +FilesSetRulePanel.mimeCheck.text=MIME\u30bf\u30a4\u30d7\: +FilesSetRulePanel.nameCheck.text=\u540d\u524d\: +FilesSetRulePanel.nameRegexCheckbox.text=\u5f93\u5c5e\u6587\u5b57\u5217 / \u6b63\u898f\u8868\u73fe +FilesSetRulePanel.nameTextField.extensionExample=\u4f8b\: "jpg" \u307e\u305f\u306f "jpg,jpeg,gif" +FilesSetRulePanel.nameTextField.fullNameExample=\u4f8b\: "file.exe" +FilesSetRulePanel.nameTextField.text= +FilesSetRulePanel.pathCheck.text=\u30d5\u30a9\u30eb\u30c0\u30fc\u540d\: +FilesSetRulePanel.pathRegexCheckBox.text=\u6b63\u898f\u8868\u73fe +FilesSetRulePanel.pathSeparatorInfoLabel.text=\u30d5\u30a9\u30eb\u30c0\u30fc\u304c\u89aa\u30d1\u30b9\u306b\u542b\u307e\u308c\u3066\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002'/\u2019 \u3092\u4f7f\u7528\u3057\u3066\u9023\u7d9a\u3059\u308b\u540d\u524d\u3092\u53d6\u5f97 +FilesSetRulePanel.pathTextField.text= +FilesSetRulePanel.ruleNameLabel.text=\u30eb\u30fc\u30eb\u540d(\u4efb\u610f)\: +FilesSetRulePanel.ruleNameTextField.text= +FilesSetRulePanel.title=\u8208\u5473\u6df1\u3044\u30d5\u30a1\u30a4\u30eb\u30bb\u30c3\u30c8\u306e\u30eb\u30fc\u30eb FilesSetsManager.allFilesAndDirectories=\u3059\u3079\u3066\u306e\u30d5\u30a1\u30a4\u30eb\u3068\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc(\u672a\u4f7f\u7528\u9818\u57df\u4ee5\u5916) FilesSetsManager.allFilesDirectoriesAndUnallocated=\u3059\u3079\u3066\u306e\u30d5\u30a1\u30a4\u30eb\u3001\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u3001\u672a\u4f7f\u7528\u9818\u57df +InterestingItemsFilesSetSettings.readDateCondition.failedCompiledRegex=' {0} ''\u756a\u53f7\u306e\u5224\u5225\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f +InterestingItemsFilesSetSettings.readMetaTypeCondition.malformedXml=\u30eb\u30fc\u30eb '' {1} ''\u306e\u30e1\u30bf\u30bf\u30a4\u30d7\u6761\u4ef6 '' {0} ''\u306e\u30d5\u30a1\u30a4\u30eb\u30bb\u30c3\u30c8\u306e\u5f62\u5f0f\u304c\u6b63\u3057\u304f\u3042\u308a\u307e\u305b\u3093 +InterestingItemsFilesSetSettings.readNameCondition.errorCompilingRegex=\u30eb\u30fc\u30eb '' {1} ''\u306e '' {0} ''\u6b63\u898f\u8868\u73fe\u306e\u30b3\u30f3\u30d1\u30a4\u30eb\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f +InterestingItemsFilesSetSettings.readNameCondition.illegalChar=\u30eb\u30fc\u30eb '' {1} ''\u306e\u30d5\u30a1\u30a4\u30eb\u540d\u306b\u7121\u52b9\u306a\u6587\u5b57 '' {0} ''\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059 +InterestingItemsFilesSetSettings.readNameCondition.invalidTag=\u540d\u524d\u6761\u4ef6\u306b\u3001\u30eb\u30fc\u30eb '' {1} ''\u306b\u306f\u7121\u52b9\u306a\u30bf\u30b0\u540d '' {0} ''\u304c\u3042\u308a\u307e\u3059 +InterestingItemsFilesSetSettings.readPathCondition.failedCompiledRegex=' {0} ''\u6b63\u898f\u8868\u73fe\u306e\u30b3\u30f3\u30d1\u30a4\u30eb\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f +InterestingItemsFilesSetSettings.readPathCondition.pathConditionCreationError=\u30eb\u30fc\u30eb '' {0} ''\u306e\u30d1\u30b9\u6761\u4ef6\u306e\u4f5c\u6210\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f +InterestingItemsFilesSetSettings.readRule.missingNecessary=\ '' {0} ''\u306b\u5fc5\u8981\u306a\u6761\u4ef6\u304c\u3042\u308a\u307e\u305b\u3093\u3001\u30d5\u30a1\u30a4\u30eb\u30bb\u30c3\u30c8\u306b\u7121\u52b9\u306a\u30eb\u30fc\u30eb\u304c\u3042\u308a\u307e\u3059 +InterestingItemsFilesSetSettings.readSerializedDefinitions.failedReadSettings=' {0} ''\u304b\u3089\u8a2d\u5b9a\u3092\u8aad\u307f\u53d6\u308c\u307e\u305b\u3093\u3067\u3057\u305f +InterestingItemsFilesSetSettings.readSizeCondition.invalidComparator=\u30eb\u30fc\u30eb '' {0} ''\u306b\u8a2d\u5b9a\u3055\u308c\u305f\u30b5\u30a4\u30ba\u5358\u4f4d\u307e\u305f\u306f\u30b3\u30f3\u30d1\u30ec\u30fc\u30bf\u30fc\u307e\u305f\u306f\u6bd4\u8f03\u6a5f\u80fd\u304c\u7121\u52b9\u3067\u3059\u3002 +InterestingItemsFilesSetSettings.readSizeCondition.malformedXml=\u30eb\u30fc\u30eb '' {0} '\u306e\u5f62\u5f0f\u304c\u4e0d\u6b63\u3067\u3059\u3001\u5c11\u306a\u304f\u3068\u30821\u3064\u306e 'fileSize'\u304c\u6b20\u843d\u3057\u3066\u3044\u307e\u3059\u3002 +InterestingItemsFilesSetSettings.readSizeCondition.notIntegerValue=\u30eb\u30fc\u30eb '' {0} ''\u306b\u8a2d\u5b9a\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u30b5\u30a4\u30ba\u304c\u6574\u6570\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 +InterestingItemsIdentifierIngestModule.moduleDescription=\u8208\u5473\u6df1\u3044\u9805\u76ee\u306e\u30eb\u30fc\u30eb\u30bb\u30c3\u30c8\u3067\u5b9a\u3081\u308b\u3068\u304a\u308a\u306b\u8208\u5473\u6df1\u3044\u9805\u76ee\u3092\u8b58\u5225\u3057\u307e\u3059\u3002 +InterestingItemsIdentifierIngestModule.moduleName=\u8208\u5473\u6df1\u3044\u30d5\u30a1\u30a4\u30eb\u8b58\u5225\u5b50 InterestingItemsIngestModuleFactory.defaultSettingsError=\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u8208\u5473\u6df1\u3044\u30d5\u30a1\u30a4\u30eb\u30bb\u30c3\u30c8\u3092\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 OpenIDE-Module-Display-Category=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb OpenIDE-Module-Long-Description=\u8208\u5473\u6df1\u3044\u30d5\u30a1\u30a4\u30eb\u8b58\u5225\u5b50\u306e\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u3067\u3059\u3002\n\n \u8208\u5473\u6df1\u3044\u30d5\u30a1\u30a4\u30eb\u306e\u30eb\u30fc\u30eb\u30bb\u30c3\u30c8\u3067\u5b9a\u3081\u308b\u3068\u304a\u308a\u306b\u8208\u5473\u6df1\u3044\u30d5\u30a1\u30a4\u30eb\u3092\u8b58\u5225\u3057\u307e\u3059\u3002 -OpenIDE-Module-Short-Description=\u8208\u5473\u6df1\u3044\u30d5\u30a1\u30a4\u30eb\u8b58\u5225\u5b50\u306e\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u3067\u3059\u3002 OpenIDE-Module-Name=\u8208\u5473\u6df1\u3044\u30d5\u30a1\u30a4\u30eb\u8b58\u5225\u5b50 -OptionsCategory_Name_InterestingItemDefinitions=\u8208\u5473\u6df1\u3044\u30d5\u30a1\u30a4\u30eb +OpenIDE-Module-Short-Description=\u8208\u5473\u6df1\u3044\u30d5\u30a1\u30a4\u30eb\u8b58\u5225\u5b50\u306e\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u3067\u3059\u3002 OptionsCategory_Keywords_InterestingItemDefinitions=InterestingItemDefinitions -InterestingItemsIdentifierIngestModule.moduleName=\u8208\u5473\u6df1\u3044\u30d5\u30a1\u30a4\u30eb\u8b58\u5225\u5b50 -InterestingItemsIdentifierIngestModule.moduleDescription=\u8208\u5473\u6df1\u3044\u9805\u76ee\u306e\u30eb\u30fc\u30eb\u30bb\u30c3\u30c8\u3067\u5b9a\u3081\u308b\u3068\u304a\u308a\u306b\u8208\u5473\u6df1\u3044\u9805\u76ee\u3092\u8b58\u5225\u3057\u307e\u3059\u3002 -FilesSetPanel.interesting.title=\u8208\u5473\u6df1\u3044\u30d5\u30a1\u30a4\u30eb\u30bb\u30c3\u30c8\u306e\u30eb\u30fc\u30eb -FilesSetPanel.interesting.messages.filesSetsMustBeNamed=\u8208\u5473\u6df1\u3044\u30d5\u30a1\u30a4\u30eb\u30bb\u30c3\u30c8\u306e\u540d\u524d\u3092\u4ed8\u3051\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 -FilesSetPanel.messages.filesSetsReservedName=\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u304c\u30ea\u30b6\u30fc\u30d6\u3059\u308b\u540d\u524d\u3092\u9078\u629e\u3057\u307e\u3057\u305f\u3002\u5225\u306e\u540d\u524d\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -FilesSetPanel.ignoreKnownFilesCheckbox.text=\u65e2\u77e5\u30d5\u30a1\u30a4\u30eb\u3092\u7121\u8996 -FilesSetPanel.descriptionPanel.border.title=\u8aac\u660e -FilesSetPanel.interesting.nameLabel.text=\u30bb\u30c3\u30c8\u540d: -FilesSetPanel.ingest.nameLabel.text=\u30d5\u30a3\u30eb\u30bf\u30fc\u540d: -FilesSetPanel.descPanel.border.title=\u8aac\u660e -FilesSetPanel.ignoreUnallocCheckbox.toolTipText=\u524a\u9664\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u306a\u3069\u3001\u672a\u4f7f\u7528\u9818\u57df\u3092\u7121\u8996\u3057\u307e\u3059\u3002\u5b9f\u884c\u901f\u5ea6\u304c\u901f\u304f\u306a\u308a\u3001\u3088\u308a\u5b8c\u5168\u3067\u306f\u306a\u3044\u7d50\u679c\u304c\u751f\u6210\u3055\u308c\u307e\u3059\u3002 -FilesSetPanel.ignoreUnallocCheckbox.text=\u672a\u4f7f\u7528\u9818\u57df\u3092\u7121\u8996 -FilesSetRulePanel.title=\u8208\u5473\u6df1\u3044\u30d5\u30a1\u30a4\u30eb\u30bb\u30c3\u30c8\u306e\u30eb\u30fc\u30eb -FilesSetRulePanel.extensionRadioButton.text=\u62e1\u5f35\u5b50\u306e\u307f -FilesSetRulePanel.pathRegexCheckBox.text=\u6b63\u898f\u8868\u73fe -FilesSetRulePanel.pathTextField.text= -FilesSetRulePanel.fullNameRadioButton.text=\u5b8c\u5168\u306a\u540d\u524d -FilesSetRulePanel.nameRegexCheckbox.text=\u5f93\u5c5e\u6587\u5b57\u5217 / \u6b63\u898f\u8868\u73fe -FilesSetRulePanel.ruleNameTextField.text= -FilesSetRulePanel.nameTextField.text= -FilesSetRulePanel.ruleNameLabel.text=\u30eb\u30fc\u30eb\u540d(\u4efb\u610f): -FilesSetRulePanel.messages.emptyNameCondition=\u3053\u306e\u30eb\u30fc\u30eb\u306e\u540d\u524d\u30d1\u30bf\u30fc\u30f3\u3092\u6307\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 -FilesSetRulePanel.messages.invalidNameRegex=\u540d\u524d\u306e\u6b63\u898f\u8868\u73fe\u304c\u6709\u52b9\u3067\u306f\u3042\u308a\u307e\u305b\u3093:\n\n{0} -FilesSetRulePanel.messages.invalidCharInName=\u540d\u524d\u306b\u306f \\\u3001/\u3001 :\u3001*\u3001?\u3001\"\u3001 <\u3001> \u3092\u542b\u3081\u3089\u308c\u307e\u305b\u3093(\u6b63\u898f\u8868\u73fe\u306e\u5834\u5408\u3092\u9664\u304f)\u3002 -FilesSetRulePanel.messages.invalidCharInPath=\u30d1\u30b9\u306b\u306f \\\u3001/\u3001 :\u3001*\u3001?\u3001\"\u3001 <\u3001> \u3092\u542b\u3081\u3089\u308c\u307e\u305b\u3093(\u6b63\u898f\u8868\u73fe\u306e\u5834\u5408\u3092\u9664\u304f)\u3002 -FilesSetRulePanel.messages.invalidPathRegex=\u30d1\u30b9\u306e\u6b63\u898f\u8868\u73fe\u304c\u6709\u52b9\u3067\u306f\u3042\u308a\u307e\u305b\u3093:\n\n{0} -FilesSetDefsPanel.doFileSetsDialog.duplicateRuleSet.text= {0} \u306e\u540d\u524d\u306e\u30eb\u30fc\u30eb\u30bb\u30c3\u30c8\u306f\u3059\u3067\u306b\u5b58\u5728\u3057\u307e\u3059\u3002 -FilesSetRulePanel.pathSeparatorInfoLabel.text=\u30d5\u30a9\u30eb\u30c0\u30fc\u304c\u89aa\u30d1\u30b9\u306b\u542b\u307e\u308c\u3066\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002'/\u2019 \u3092\u4f7f\u7528\u3057\u3066\u9023\u7d9a\u3059\u308b\u540d\u524d\u3092\u53d6\u5f97 -FilesIdentifierIngestJobSettingsPanel.border.title=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u4e2d\u306b\u6709\u52b9\u5316\u3059\u308b\u8208\u5473\u6df1\u3044\u30d5\u30a1\u30a4\u30eb\u30bb\u30c3\u30c8\u3092\u9078\u629e: -FilesSetRulePanel.jLabel1.text=\u30bf\u30a4\u30d7: -FilesSetRulePanel.interesting.jLabel5.text=\u691c\u7d22\u3057\u305f\u3044\u30d5\u30a1\u30a4\u30eb\u306b\u95a2\u3059\u308b\u60c5\u5831\u3092\u5165\u529b\u3057\u307e\u3059\u3002 -FilesSetRulePanel.ingest.jLabel5.text=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u3092\u5b9f\u884c\u3057\u305f\u3044\u30d5\u30a1\u30a4\u30eb\u306b\u95a2\u3059\u308b\u60c5\u5831\u3092\u5165\u529b\u3057\u307e\u3059\u3002 -FilesSetRulePanel.nameCheck.text=\u540d\u524d: -FilesSetRulePanel.pathCheck.text=\u30d5\u30a9\u30eb\u30c0\u30fc\u540d: -FilesSetRulePanel.filesRadioButton.text=\u30d5\u30a1\u30a4\u30eb -FilesSetRulePanel.dirsRadioButton.text=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc -FilesSetDefsPanel.interesting.setsListLabel.text=\u30eb\u30fc\u30eb\u30bb\u30c3\u30c8: -FilesSetDefsPanel.ingest.setsListLabel.text=\u30d5\u30a1\u30a4\u30eb\u30d5\u30a3\u30eb\u30bf\u30fc: -FilesSetDefsPanel.interesting.jTextArea1.text=\u3053\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u4f7f\u7528\u3059\u308b\u3068\u3001\u6307\u5b9a\u3057\u305f\u6761\u4ef6\u3068\u4e00\u81f4\u3059\u308b\u30d5\u30a1\u30a4\u30eb\u3092\u691c\u7d22\u3067\u304d\u307e\u3059\u3002\u5404\u30bb\u30c3\u30c8\u306b\u3001\u9078\u629e\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u306e\u7279\u5fb4\u3068\u4e00\u81f4\u3059\u308b\u30eb\u30fc\u30eb\u30ea\u30b9\u30c8\u304c\u7528\u610f\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u30d5\u30a1\u30a4\u30eb\u306f\u691c\u7d22\u5bfe\u8c61\u3068\u306a\u308b1\u3064\u306e\u30eb\u30fc\u30eb\u3068\u4e00\u81f4\u3059\u308b\u3060\u3051\u3067\u5341\u5206\u3067\u3059\u3002 -FilesSetDefsPanel.ingest.jTextArea1.text=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u5185\u306e\u30d5\u30a1\u30a4\u30eb\u306e\u30b5\u30d6\u30bb\u30c3\u30c8\u306e\u307f\u3092\u5206\u6790\u3059\u308b\u3088\u3046\u30eb\u30fc\u30eb\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002\u30eb\u30fc\u30eb\u3092\u30bb\u30c3\u30c8\u306b\u69cb\u9020\u5316\u3057\u307e\u3059\u3002\u4e00\u5ea6\u306b1\u3064\u306e\u30bb\u30c3\u30c8\u306e\u307f\u3092\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002\u30d5\u30a1\u30a4\u30eb\u306f\u5206\u6790\u5bfe\u8c61\u3068\u306a\u308b1\u3064\u306e\u30eb\u30fc\u30eb\u3068\u4e00\u81f4\u3059\u308b\u3060\u3051\u3067\u5341\u5206\u3067\u3059\u3002 -FilesSetDefsPanel.interesting.editSetButton.text=\u30bb\u30c3\u30c8\u3092\u7de8\u96c6 -FilesSetDefsPanel.ingest.editSetButton.text=\u7de8\u96c6\u30d5\u30a3\u30eb\u30bf\u30fc -FilesSetDefsPanel.interesting.newSetButton.text=\u65b0\u898f\u30bb\u30c3\u30c8 -FilesSetDefsPanel.ingest.newSetButton.text=\u65b0\u898f\u30d5\u30a3\u30eb\u30bf\u30fc -FilesSetDefsPanel.interesting.deleteSetButton.text=\u30bb\u30c3\u30c8\u3092\u524a\u9664 -FilesSetDefsPanel.ingest.deleteSetButton.text=\u30d5\u30a3\u30eb\u30bf\u30fc\u3092\u524a\u9664 -FilesSetDefsPanel.interesting.jLabel6.text=\u8a73\u7d30\u3092\u8a2d\u5b9a -FilesSetDefsPanel.ingest.jLabel6.text=\u30d5\u30a3\u30eb\u30bf\u30fc\u8a73\u7d30 -FilesSetDefsPanel.newRuleButton.text=\u65b0\u898f\u30eb\u30fc\u30eb -FilesSetDefsPanel.jLabel8.text=\u30d5\u30a1\u30a4\u30eb\u30b5\u30a4\u30ba: -FilesSetDefsPanel.jLabel7.text=MIME\u30bf\u30a4\u30d7: -FilesSetDefsPanel.rulePathConditionRegexCheckBox.text=\u6b63\u898f\u8868\u73fe -FilesSetDefsPanel.jLabel4.text=\u30d1\u30b9\u306e\u5f93\u5c5e\u6587\u5b57\u5217: -FilesSetDefsPanel.jLabel1.text=\u30eb\u30fc\u30eb\u8a73\u7d30 -FilesSetDefsPanel.dirsRadioButton.text=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc -FilesSetDefsPanel.jLabel2.text=\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7: -FilesSetDefsPanel.deleteRuleButton.text=\u30eb\u30fc\u30eb\u3092\u524a\u9664 -FilesSetDefsPanel.fileNameRegexCheckbox.text=\u5f93\u5c5e\u6587\u5b57\u5217 / \u6b63\u898f\u8868\u73fe -FilesSetDefsPanel.ignoreKnownFilesCheckbox.text=\u65e2\u77e5\u30d5\u30a1\u30a4\u30eb\u3092\u7121\u8996 -FilesSetDefsPanel.rulePathConditionTextField.text= -FilesSetDefsPanel.fileNameRadioButton.text=\u5b8c\u5168\u306a\u540d\u524d -FilesSetDefsPanel.jLabel5.text=\u8aac\u660e: -FilesSetDefsPanel.fileNameTextField.text= -FilesSetDefsPanel.jLabel3.text=\u540d\u524d: -FilesSetDefsPanel.fileNameExtensionRadioButton.text=\u62e1\u5f35\u5b50\u306e\u307f -FilesSetDefsPanel.rulesListLabel.text=\u30eb\u30fc\u30eb: -FilesSetDefsPanel.editRuleButton.text=\u30eb\u30fc\u30eb\u3092\u7de8\u96c6 -FilesSetDefsPanel.filesRadioButton.text=\u30d5\u30a1\u30a4\u30eb -FilesSetRulePanel.allRadioButton.text=\u3059\u3079\u3066 -FilesSetDefsPanel.ingoreUnallocCheckbox.text=\u672a\u4f7f\u7528\u9818\u57df\u3092\u7121\u8996 -FilesSetDefsPanel.ingoreUnallocCheckbox.toolTipText=\u524a\u9664\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u306a\u3069\u3001\u672a\u4f7f\u7528\u9818\u57df\u3092\u7121\u8996\u3057\u307e\u3059\u3002\u5b9f\u884c\u901f\u5ea6\u304c\u901f\u304f\u306a\u308a\u3001\u3088\u308a\u5b8c\u5168\u3067\u306f\u306a\u3044\u7d50\u679c\u304c\u751f\u6210\u3055\u308c\u307e\u3059\u3002 -FilesSetDefsPanel.ingestWarningLabel.text=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u304c\u9032\u884c\u4e2d\u3067\u3059\u3002\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u304c\u5b8c\u4e86\u3059\u308b\u307e\u3067\u4e00\u90e8\u306e\u8a2d\u5b9a\u3092\u5229\u7528\u3067\u304d\u307e\u305b\u3093\u3002 -FilesSetDefsPanel.allRadioButton.text=\u3059\u3079\u3066 -FilesSetRulePanel.dateCheck.text=\u6b21\u306e\u4e2d\u3067\u4fee\u6b63\u6e08\u307f: -FilesSetRulePanel.fileSizeCheck.text=\u30d5\u30a1\u30a4\u30eb\u30b5\u30a4\u30ba: -FilesSetRulePanel.mimeCheck.text=MIME\u30bf\u30a4\u30d7: -FilesSetDefsPanel.modifiedDateLabel.text=\u6b21\u306e\u4e2d\u3067\u4fee\u6b63\u6e08\u307f: -FilesSetDefsPanel.daysIncludedTextField.text= -FilesSetDefsPanel.daysIncludedLabel.text=\u65e5 -FilesSetRulePanel.daysIncludedLabel.text=\u65e5 +OptionsCategory_Name_InterestingItemDefinitions=\u8208\u5473\u6df1\u3044\u30d5\u30a1\u30a4\u30eb +StandardInterestingFileSetsLoader.customSuffixed={0}\uff08\u30ab\u30b9\u30bf\u30e0\uff09 +StandardInterestingFilesSetsLoader_cannotLoadStandard=\u6a19\u6e96\u306e\u8208\u5473\u6df1\u3044\u30d5\u30a1\u30a4\u30eb\u30bb\u30c3\u30c8\u3092\u9069\u5207\u306b\u8aad\u307f\u53d6\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002 +StandardInterestingFilesSetsLoader_cannotLoadUserConfigured=\u30e6\u30fc\u30b6\u30fc\u304c\u8a2d\u5b9a\u3057\u305f\u8208\u5473\u6df1\u3044\u30d5\u30a1\u30a4\u30eb\u30bb\u30c3\u30c8\u3092\u6b63\u3057\u304f\u8aad\u307f\u53d6\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002 +StandardInterestingFilesSetsLoader_cannotUpdateInterestingFilesSets=\u66f4\u65b0\u3055\u308c\u305f\u8208\u5473\u6df1\u3044\u30d5\u30a1\u30a4\u30eb\u30bb\u30c3\u30c8\u306e\u69cb\u6210\u3092\u69cb\u6210\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u66f8\u304d\u8fbc\u3080\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002 diff --git a/Core/src/org/sleuthkit/autopsy/modules/photoreccarver/Bundle.properties b/Core/src/org/sleuthkit/autopsy/modules/photoreccarver/Bundle.properties index 3a3478ab94..6efe8d9ceb 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/photoreccarver/Bundle.properties +++ b/Core/src/org/sleuthkit/autopsy/modules/photoreccarver/Bundle.properties @@ -24,5 +24,5 @@ PhotoRecCarverIngestJobSettingsPanel.fullListOfTypesLabel.text=Full List of Type PhotoRecCarverIngestJobSettingsPanel.exampleLabel.text=Example: jpg,png,zip PhotoRecCarverIngestJobSettingsPanel.extensionListTextfield.text= PhotoRecCarverIngestJobSettingsPanel.extensionListLabel.text=Types (comma separated list of extensions) -PhotoRecCarverIngestJobSettingsPanel.excludeRadioButton.text=Ignore the specified types -PhotoRecCarverIngestJobSettingsPanel.includeRadioButton.text=Carve only the specified types +PhotoRecCarverIngestJobSettingsPanel.excludeRadioButton.text=Exclude the specified types +PhotoRecCarverIngestJobSettingsPanel.includeRadioButton.text=Include only the specified types diff --git a/Core/src/org/sleuthkit/autopsy/modules/photoreccarver/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/modules/photoreccarver/Bundle.properties-MERGED index c107f8f0fb..1d07988e4c 100755 --- a/Core/src/org/sleuthkit/autopsy/modules/photoreccarver/Bundle.properties-MERGED +++ b/Core/src/org/sleuthkit/autopsy/modules/photoreccarver/Bundle.properties-MERGED @@ -34,7 +34,7 @@ PhotoRecCarverIngestJobSettingsPanel.fullListOfTypesLabel.text=Full List of Type PhotoRecCarverIngestJobSettingsPanel.exampleLabel.text=Example: jpg,png,zip PhotoRecCarverIngestJobSettingsPanel.extensionListTextfield.text= PhotoRecCarverIngestJobSettingsPanel.extensionListLabel.text=Types (comma separated list of extensions) -PhotoRecCarverIngestJobSettingsPanel.excludeRadioButton.text=Ignore the specified types -PhotoRecCarverIngestJobSettingsPanel.includeRadioButton.text=Carve only the specified types +PhotoRecCarverIngestJobSettingsPanel.excludeRadioButton.text=Exclude the specified types +PhotoRecCarverIngestJobSettingsPanel.includeRadioButton.text=Include only the specified types unallocatedSpaceProcessingSettingsError.message=The selected file ingest filter ignores unallocated space. This module carves unallocated space. Please choose a filter which does not ignore unallocated space or disable this module. unsupportedOS.message=PhotoRec module is supported on Windows platforms only. diff --git a/Core/src/org/sleuthkit/autopsy/modules/photoreccarver/PhotoRecCarverFileIngestModule.java b/Core/src/org/sleuthkit/autopsy/modules/photoreccarver/PhotoRecCarverFileIngestModule.java index c5e6c496ad..7b9a6db4c7 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/photoreccarver/PhotoRecCarverFileIngestModule.java +++ b/Core/src/org/sleuthkit/autopsy/modules/photoreccarver/PhotoRecCarverFileIngestModule.java @@ -81,11 +81,12 @@ import org.sleuthkit.datamodel.TskData; final class PhotoRecCarverFileIngestModule implements FileIngestModule { static final boolean DEFAULT_CONFIG_KEEP_CORRUPTED_FILES = false; - static final PhotoRecCarverIngestJobSettings.ExtensionFilterOption DEFAULT_CONFIG_EXTENSION_FILTER = - PhotoRecCarverIngestJobSettings.ExtensionFilterOption.NO_FILTER; - + static final PhotoRecCarverIngestJobSettings.ExtensionFilterOption DEFAULT_CONFIG_EXTENSION_FILTER + = PhotoRecCarverIngestJobSettings.ExtensionFilterOption.NO_FILTER; + static final boolean DEFAULT_CONFIG_INCLUDE_ELSE_EXCLUDE = false; + private static final String PHOTOREC_TEMP_SUBDIR = "Photorec"; private static final String PHOTOREC_DIRECTORY = "photorec_exec"; //NON-NLS private static final String PHOTOREC_SUBDIRECTORY = "bin"; //NON-NLS private static final String PHOTOREC_EXECUTABLE = "photorec_win.exe"; //NON-NLS @@ -94,7 +95,6 @@ final class PhotoRecCarverFileIngestModule implements FileIngestModule { private static final String PHOTOREC_RESULTS_EXTENDED = "results.1"; //NON-NLS private static final String PHOTOREC_REPORT = "report.xml"; //NON-NLS private static final String LOG_FILE = "run_log.txt"; //NON-NLS - private static final String TEMP_DIR_NAME = "temp"; // NON-NLS private static final String SEP = System.getProperty("line.separator"); private static final Logger logger = Logger.getLogger(PhotoRecCarverFileIngestModule.class.getName()); private static final HashMap totalsForIngestJobs = new HashMap<>(); @@ -102,6 +102,7 @@ final class PhotoRecCarverFileIngestModule implements FileIngestModule { private static final Map pathsByJob = new ConcurrentHashMap<>(); private IngestJobContext context; private Path rootOutputDirPath; + private Path rootTempDirPath; private File executableFile; private IngestServices services; private final UNCPathUtilities uncPathUtilities = new UNCPathUtilities(); @@ -141,9 +142,9 @@ final class PhotoRecCarverFileIngestModule implements FileIngestModule { toRet.addAll(Arrays.asList("options", "keep_corrupted_file")); } - if (settings.getExtensionFilterOption() != - PhotoRecCarverIngestJobSettings.ExtensionFilterOption.NO_FILTER) { - + if (settings.getExtensionFilterOption() + != PhotoRecCarverIngestJobSettings.ExtensionFilterOption.NO_FILTER) { + // add the file opt menu item toRet.add("fileopt"); @@ -152,15 +153,15 @@ final class PhotoRecCarverFileIngestModule implements FileIngestModule { // if we are including file extensions, then we are excluding // everything else and vice-versa. - String everythingEnable = settings.getExtensionFilterOption() == - PhotoRecCarverIngestJobSettings.ExtensionFilterOption.INCLUDE - ? disable : enable; + String everythingEnable = settings.getExtensionFilterOption() + == PhotoRecCarverIngestJobSettings.ExtensionFilterOption.INCLUDE + ? disable : enable; toRet.addAll(Arrays.asList("everything", everythingEnable)); - final String itemEnable = settings.getExtensionFilterOption() == - PhotoRecCarverIngestJobSettings.ExtensionFilterOption.INCLUDE - ? enable : disable; + final String itemEnable = settings.getExtensionFilterOption() + == PhotoRecCarverIngestJobSettings.ExtensionFilterOption.INCLUDE + ? enable : disable; settings.getExtensions().forEach((extension) -> { toRet.addAll(Arrays.asList(extension, itemEnable)); @@ -197,13 +198,13 @@ final class PhotoRecCarverFileIngestModule implements FileIngestModule { public void startUp(IngestJobContext context) throws IngestModule.IngestModuleException { // validate settings if (this.settings.getExtensionFilterOption() != PhotoRecCarverIngestJobSettings.ExtensionFilterOption.NO_FILTER) { - if (this.settings.getExtensions().isEmpty() && - this.settings.getExtensionFilterOption() == PhotoRecCarverIngestJobSettings.ExtensionFilterOption.INCLUDE) { - + if (this.settings.getExtensions().isEmpty() + && this.settings.getExtensionFilterOption() == PhotoRecCarverIngestJobSettings.ExtensionFilterOption.INCLUDE) { + throw new IngestModule.IngestModuleException( Bundle.PhotoRecCarverFileIngestModule_startUp_noExtensionsProvided_description()); } - + List invalidExtensions = this.settings.getExtensions().stream() .filter((ext) -> !PhotoRecCarverFileOptExtensions.isValidExtension(ext)) .collect(Collectors.toList()); @@ -212,11 +213,11 @@ final class PhotoRecCarverFileIngestModule implements FileIngestModule { throw new IngestModule.IngestModuleException( Bundle.PhotoRecCarverFileIngestModule_startUp_invalidExtensions_description( String.join(",", invalidExtensions))); - } + } } - + this.optionsString = getPhotorecOptions(this.settings); - + this.context = context; this.services = IngestServices.getInstance(); this.jobId = this.context.getJobId(); @@ -230,6 +231,7 @@ final class PhotoRecCarverFileIngestModule implements FileIngestModule { } this.rootOutputDirPath = createModuleOutputDirectoryForCase(); + this.rootTempDirPath = createTempOutputDirectoryForCase(); //Set photorec executable directory based on operating system. executableFile = locateExecutable(); @@ -244,7 +246,7 @@ final class PhotoRecCarverFileIngestModule implements FileIngestModule { Files.createDirectories(outputDirPath); // A temp subdirectory is also created as a location for writing unallocated space files to disk. - Path tempDirPath = Paths.get(outputDirPath.toString(), PhotoRecCarverFileIngestModule.TEMP_DIR_NAME); + Path tempDirPath = Paths.get(this.rootTempDirPath.toString(), folder); Files.createDirectory(tempDirPath); // Save the directories for the current job. @@ -466,8 +468,7 @@ final class PhotoRecCarverFileIngestModule implements FileIngestModule { try { // The last instance of this module for an ingest job cleans out // the working paths map entry for the job and deletes the temp dir. - WorkingPaths paths = PhotoRecCarverFileIngestModule.pathsByJob.remove(this.jobId); - FileUtil.deleteDir(new File(paths.getTempDirPath().toString())); + FileUtil.deleteDir(this.rootTempDirPath.toFile()); postSummary(jobId); } catch (SecurityException ex) { logger.log(Level.SEVERE, "Error shutting down PhotoRec carver module", ex); // NON-NLS @@ -495,20 +496,51 @@ final class PhotoRecCarverFileIngestModule implements FileIngestModule { } /** - * Creates the output directory for this module for the current case, if it - * does not already exist. + * Creates the output directory for this module for the current case's temp + * directory, if it does not already exist. + * + * @return The absolute path of the output directory. + * + * @throws org.sleuthkit.autopsy.ingest.IngestModule.IngestModuleException + */ + synchronized Path createTempOutputDirectoryForCase() throws IngestModule.IngestModuleException { + try { + Path path = Paths.get(Case.getCurrentCaseThrows().getTempDirectory(), PHOTOREC_TEMP_SUBDIR); + return createOutputDirectoryForCase(path); + } catch (NoCurrentCaseException ex) { + throw new IngestModule.IngestModuleException(Bundle.cannotCreateOutputDir_message(ex.getLocalizedMessage()), ex); + } + } + + /** + * Creates the output directory for this module for the current case's + * module directory, if it does not already exist. * * @return The absolute path of the output directory. * * @throws org.sleuthkit.autopsy.ingest.IngestModule.IngestModuleException */ synchronized Path createModuleOutputDirectoryForCase() throws IngestModule.IngestModuleException { - Path path; try { - path = Paths.get(Case.getCurrentCaseThrows().getModuleDirectory(), PhotoRecCarverIngestModuleFactory.getModuleName()); + Path path = Paths.get(Case.getCurrentCaseThrows().getModuleDirectory(), PhotoRecCarverIngestModuleFactory.getModuleName()); + return createOutputDirectoryForCase(path); } catch (NoCurrentCaseException ex) { throw new IngestModule.IngestModuleException(Bundle.cannotCreateOutputDir_message(ex.getLocalizedMessage()), ex); } + } + + /** + * Creates the output directory for this module for the current case, if it + * does not already exist. + * + * @param providedPath The absolute path to be created. + * + * @return The absolute path of the output directory. + * + * @throws org.sleuthkit.autopsy.ingest.IngestModule.IngestModuleException + */ + private synchronized Path createOutputDirectoryForCase(Path providedPath) throws IngestModule.IngestModuleException { + Path path = providedPath; try { Files.createDirectory(path); if (UNCPathUtilities.isUNC(path)) { diff --git a/Core/src/org/sleuthkit/autopsy/modules/pictureanalyzer/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/modules/pictureanalyzer/Bundle.properties-MERGED new file mode 100755 index 0000000000..47473cdb93 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/modules/pictureanalyzer/Bundle.properties-MERGED @@ -0,0 +1,3 @@ +PictureAnalyzerIngestModule.cannot_run_file_type=Cannot run file type detection. +PictureAnalyzerIngestModuleFactory.module_description=Performs general analysis on picture files, including extracting EXIF metadata and converting between formats. +PictureAnalyzerIngestModuleFactory.module_name=Picture Analyzer diff --git a/Core/src/org/sleuthkit/autopsy/modules/pictureanalyzer/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/modules/pictureanalyzer/Bundle_ja.properties new file mode 100755 index 0000000000..0a785a163b --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/modules/pictureanalyzer/Bundle_ja.properties @@ -0,0 +1 @@ +PictureAnalyzerIngestModule.cannot_run_file_type=\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u306e\u691c\u51fa\u3092\u5b9f\u884c\u3067\u304d\u307e\u305b\u3093\u3002 diff --git a/Core/src/org/sleuthkit/autopsy/modules/pictureanalyzer/PictureAnalyzerIngestModule.java b/Core/src/org/sleuthkit/autopsy/modules/pictureanalyzer/PictureAnalyzerIngestModule.java new file mode 100755 index 0000000000..77d8a51df4 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/modules/pictureanalyzer/PictureAnalyzerIngestModule.java @@ -0,0 +1,86 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2020 Basis Technology Corp. + * Contact: carrier sleuthkit 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.modules.pictureanalyzer; + +import java.util.Collection; + +import org.openide.util.Lookup; +import org.openide.util.NbBundle; + +import org.sleuthkit.autopsy.ingest.FileIngestModuleAdapter; +import org.sleuthkit.autopsy.ingest.IngestJobContext; +import org.sleuthkit.autopsy.modules.pictureanalyzer.spi.PictureProcessor; +import org.sleuthkit.autopsy.modules.filetypeid.FileTypeDetector; + +import org.sleuthkit.datamodel.AbstractFile; +import org.sleuthkit.datamodel.TskData; + +/** + * Ingest module to do arbitrary work on image files. Some examples include + * extracting EXIF, converting between formats, and creating thumbnails. This + * module acts as a container for multiple PictureProcessors, which are the + * classes that do the work mentioned in the examples above. + */ +public class PictureAnalyzerIngestModule extends FileIngestModuleAdapter { + + private FileTypeDetector fileTypeDetector; + private Collection registry; + private IngestJobContext context; + + @Override + public ProcessResult process(AbstractFile file) { + // Skip non files, known files, and unallocated/slack files. + if (!file.isFile() || file.getKnown().equals(TskData.FileKnown.KNOWN) || + (file.getType().equals(TskData.TSK_DB_FILES_TYPE_ENUM.UNALLOC_BLOCKS) + || (file.getType().equals(TskData.TSK_DB_FILES_TYPE_ENUM.SLACK)))) { + return ProcessResult.OK; + } + + for (PictureProcessor processor : registry) { + final String fileMimeType = fileTypeDetector.getMIMEType(file); + + for (String supportedMimeType : processor.mimeTypes()) { + + if (context.fileIngestIsCancelled()) { + return ProcessResult.OK; + } + + if (supportedMimeType.equalsIgnoreCase(fileMimeType)) { + processor.process(context, file); + } + } + } + return ProcessResult.OK; + } + + @Override + @NbBundle.Messages({ + "PictureAnalyzerIngestModule.cannot_run_file_type=Cannot run file type detection." + }) + public void startUp(IngestJobContext context) throws IngestModuleException { + registry = Lookup.getDefault().lookupAll(PictureProcessor.class); + this.context = context; + try { + fileTypeDetector = new FileTypeDetector(); + } catch (FileTypeDetector.FileTypeDetectorInitException ex) { + throw new IngestModuleException(Bundle.PictureAnalyzerIngestModule_cannot_run_file_type(), ex); + } + } + +} diff --git a/Core/src/org/sleuthkit/autopsy/modules/exif/ExifParserModuleFactory.java b/Core/src/org/sleuthkit/autopsy/modules/pictureanalyzer/PictureAnalyzerIngestModuleFactory.java old mode 100644 new mode 100755 similarity index 66% rename from Core/src/org/sleuthkit/autopsy/modules/exif/ExifParserModuleFactory.java rename to Core/src/org/sleuthkit/autopsy/modules/pictureanalyzer/PictureAnalyzerIngestModuleFactory.java index 4b18db33c7..3f67994129 --- a/Core/src/org/sleuthkit/autopsy/modules/exif/ExifParserModuleFactory.java +++ b/Core/src/org/sleuthkit/autopsy/modules/pictureanalyzer/PictureAnalyzerIngestModuleFactory.java @@ -1,7 +1,7 @@ /* * Autopsy Forensic Browser * - * Copyright 2014 Basis Technology Corp. + * Copyright 2020 Basis Technology Corp. * Contact: carrier sleuthkit org * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -16,37 +16,42 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.sleuthkit.autopsy.modules.exif; +package org.sleuthkit.autopsy.modules.pictureanalyzer; +import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; import org.sleuthkit.autopsy.coreutils.Version; -import org.sleuthkit.autopsy.ingest.IngestModuleFactoryAdapter; import org.sleuthkit.autopsy.ingest.FileIngestModule; import org.sleuthkit.autopsy.ingest.IngestModuleFactory; +import org.sleuthkit.autopsy.ingest.IngestModuleFactoryAdapter; import org.sleuthkit.autopsy.ingest.IngestModuleIngestJobSettings; -import org.openide.util.NbBundle; /** - * An factory that creates file ingest modules that parse EXIF meta data - * associated with media files (e.g., JPEG format files). + * Factory for the Picture Analysis ingest module. */ @ServiceProvider(service = IngestModuleFactory.class) -public class ExifParserModuleFactory extends IngestModuleFactoryAdapter { +public class PictureAnalyzerIngestModuleFactory extends IngestModuleFactoryAdapter { + @NbBundle.Messages({ + "PictureAnalyzerIngestModuleFactory.module_name=Picture Analyzer" + }) + public static String getModuleName() { + return Bundle.PictureAnalyzerIngestModuleFactory_module_name(); + } + @Override public String getModuleDisplayName() { return getModuleName(); } - public static String getModuleName() { - return NbBundle.getMessage(ExifParserFileIngestModule.class, - "ExifParserFileIngestModule.moduleName.text"); - } - @Override + @NbBundle.Messages({ + "PictureAnalyzerIngestModuleFactory.module_description=Performs general" + + " analysis on picture files, including extracting EXIF metadata" + + " and converting between formats." + }) public String getModuleDescription() { - return NbBundle.getMessage(ExifParserFileIngestModule.class, - "ExifParserFileIngestModule.getDesc.text"); + return Bundle.PictureAnalyzerIngestModuleFactory_module_description(); } @Override @@ -54,13 +59,14 @@ public class ExifParserModuleFactory extends IngestModuleFactoryAdapter { return Version.getVersion(); } + @Override + public FileIngestModule createFileIngestModule(IngestModuleIngestJobSettings ingestOptions) { + return new PictureAnalyzerIngestModule(); + } + @Override public boolean isFileIngestModuleFactory() { return true; } - @Override - public FileIngestModule createFileIngestModule(IngestModuleIngestJobSettings ingestOptions) { - return new ExifParserFileIngestModule(); - } } diff --git a/Core/src/org/sleuthkit/autopsy/modules/pictureanalyzer/impls/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/modules/pictureanalyzer/impls/Bundle.properties-MERGED new file mode 100755 index 0000000000..349e005b1b --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/modules/pictureanalyzer/impls/Bundle.properties-MERGED @@ -0,0 +1,3 @@ +ExifProcessor.indexError.message=Failed to post EXIF Metadata artifact(s). +ExifProcessor.module_name=Exif Parser +ExifProcessor.userContent.description=EXIF metadata exists for this file. diff --git a/Core/src/org/sleuthkit/autopsy/modules/pictureanalyzer/impls/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/modules/pictureanalyzer/impls/Bundle_ja.properties new file mode 100755 index 0000000000..4594945014 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/modules/pictureanalyzer/impls/Bundle_ja.properties @@ -0,0 +1,2 @@ +ExifProcessor.module_name=Exif\u89e3\u6790\u30c4\u30fc\u30eb +ExifProcessor.indexError.message=\u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u691c\u7d22\u3059\u308b\u305f\u3081\u306e\u3001EXIF\u30e1\u30bf\u30c7\u30fc\u30bf\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u3092\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002 diff --git a/Core/src/org/sleuthkit/autopsy/modules/pictureanalyzer/impls/EXIFProcessor.java b/Core/src/org/sleuthkit/autopsy/modules/pictureanalyzer/impls/EXIFProcessor.java new file mode 100755 index 0000000000..c2c5051050 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/modules/pictureanalyzer/impls/EXIFProcessor.java @@ -0,0 +1,193 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011-2020 Basis Technology Corp. + * Contact: carrier sleuthkit 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.modules.pictureanalyzer.impls; + +import com.drew.imaging.ImageMetadataReader; +import com.drew.imaging.ImageProcessingException; +import com.drew.lang.GeoLocation; +import com.drew.lang.Rational; +import com.drew.metadata.Metadata; +import com.drew.metadata.exif.ExifIFD0Directory; +import com.drew.metadata.exif.ExifSubIFDDirectory; +import com.drew.metadata.exif.GpsDirectory; +import java.io.BufferedInputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Date; +import java.util.Set; +import java.util.HashSet; +import java.util.TimeZone; +import java.util.logging.Level; +import org.apache.commons.lang3.StringUtils; +import org.openide.util.NbBundle; +import org.openide.util.lookup.ServiceProvider; +import org.sleuthkit.autopsy.casemodule.Case; +import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException; +import org.sleuthkit.autopsy.ingest.IngestJobContext; +import org.sleuthkit.datamodel.AbstractFile; +import org.sleuthkit.autopsy.coreutils.Logger; +import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; +import org.sleuthkit.datamodel.Blackboard; +import org.sleuthkit.datamodel.BlackboardArtifact; +import static org.sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE.TSK_METADATA_EXIF; +import static org.sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE.TSK_USER_CONTENT_SUSPECTED; +import org.sleuthkit.datamodel.BlackboardAttribute; +import static org.sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE; +import org.sleuthkit.datamodel.Content; +import org.sleuthkit.datamodel.Image; +import org.sleuthkit.datamodel.ReadContentInputStream; +import org.sleuthkit.datamodel.TskCoreException; +import org.sleuthkit.autopsy.modules.pictureanalyzer.spi.PictureProcessor; + +/** + * Extracts EXIF metadata from JPEG, TIFF, and WAV files. Currently only date, + * latitude, longitude, altitude, device model, and device make are extracted. + * + * User content suspected artifacts are also created by this processor. + */ +@ServiceProvider(service = PictureProcessor.class) +public class EXIFProcessor implements PictureProcessor { + + private static final Logger logger = Logger.getLogger(EXIFProcessor.class.getName()); + + @Override + @NbBundle.Messages({ + "ExifProcessor.indexError.message=Failed to post EXIF Metadata artifact(s).", + "ExifProcessor.userContent.description=EXIF metadata exists for this file.", + "ExifProcessor.module_name=Exif Parser" + }) + public void process(IngestJobContext context, AbstractFile file) { + final String MODULE_NAME = Bundle.ExifProcessor_module_name(); + + try (BufferedInputStream bin = new BufferedInputStream(new ReadContentInputStream(file));) { + + final Collection attributes = new ArrayList<>(); + final Metadata metadata = ImageMetadataReader.readMetadata(bin); + + // Date + final ExifSubIFDDirectory exifDir = metadata.getFirstDirectoryOfType(ExifSubIFDDirectory.class); + if (exifDir != null) { + + // set the timeZone for the current datasource. + TimeZone timeZone = null; + try { + Content dataSource = file.getDataSource(); + if ((dataSource != null) && (dataSource instanceof Image)) { + Image image = (Image) dataSource; + timeZone = TimeZone.getTimeZone(image.getTimeZone()); + } + } catch (TskCoreException ex) { + logger.log(Level.INFO, "Error getting time zones", ex); //NON-NLS + } + + final Date date = exifDir.getDate(ExifSubIFDDirectory.TAG_DATETIME_ORIGINAL, timeZone); + if (date != null) { + attributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_DATETIME_CREATED, MODULE_NAME, date.getTime() / 1000)); + } + } + + if (context.fileIngestIsCancelled()) { + return; + } + + // GPS Stuff + final GpsDirectory gpsDir = metadata.getFirstDirectoryOfType(GpsDirectory.class); + if (gpsDir != null) { + final GeoLocation loc = gpsDir.getGeoLocation(); + if (loc != null) { + attributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_GEO_LATITUDE, MODULE_NAME, loc.getLatitude())); + attributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_GEO_LONGITUDE, MODULE_NAME, loc.getLongitude())); + } + + final Rational altitude = gpsDir.getRational(GpsDirectory.TAG_ALTITUDE); + if (altitude != null) { + attributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_GEO_ALTITUDE, MODULE_NAME, altitude.doubleValue())); + } + } + + if (context.fileIngestIsCancelled()) { + return; + } + + // Device info + final ExifIFD0Directory devDir = metadata.getFirstDirectoryOfType(ExifIFD0Directory.class); + if (devDir != null) { + final String model = devDir.getString(ExifIFD0Directory.TAG_MODEL); + if (StringUtils.isNotBlank(model)) { + attributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_DEVICE_MODEL, MODULE_NAME, model)); + } + + final String make = devDir.getString(ExifIFD0Directory.TAG_MAKE); + if (StringUtils.isNotBlank(make)) { + attributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_DEVICE_MAKE, MODULE_NAME, make)); + } + } + + if (context.fileIngestIsCancelled()) { + return; + } + + final Blackboard blackboard = Case.getCurrentCaseThrows().getSleuthkitCase().getBlackboard(); + + if (!attributes.isEmpty() && !blackboard.artifactExists(file, TSK_METADATA_EXIF, attributes)) { + + final BlackboardArtifact exifArtifact = file.newArtifact(TSK_METADATA_EXIF); + final BlackboardArtifact userSuspectedArtifact = file.newArtifact(TSK_USER_CONTENT_SUSPECTED); + exifArtifact.addAttributes(attributes); + userSuspectedArtifact.addAttribute(new BlackboardAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_COMMENT, + MODULE_NAME, Bundle.ExifProcessor_userContent_description())); + try { + // index the artifact for keyword search + blackboard.postArtifact(exifArtifact, MODULE_NAME); + blackboard.postArtifact(userSuspectedArtifact, MODULE_NAME); + } catch (Blackboard.BlackboardException ex) { + logger.log(Level.SEVERE, "Unable to index blackboard artifact " + exifArtifact.getArtifactID(), ex); //NON-NLS + MessageNotifyUtil.Notify.error( + Bundle.ExifProcessor_indexError_message(), exifArtifact.getDisplayName()); + } + } + } catch (TskCoreException ex) { + logger.log(Level.WARNING, "Failed to create blackboard artifact for " //NON-NLS + + "exif metadata ({0}).", ex.getLocalizedMessage()); //NON-NLS + } catch (ImageProcessingException ex) { + logger.log(Level.WARNING, String.format("Failed to process the image " //NON-NLS + + "file '%s/%s' (id=%d).", file.getParentPath(), file.getName(), file.getId()), ex); + } catch (ReadContentInputStream.ReadContentInputStreamException ex) { + logger.log(Level.WARNING, String.format("Error while trying to read " //NON-NLS + + "image file '%s/%s' (id=%d).", file.getParentPath(), file.getName(), file.getId()), ex); //NON-NLS + } catch (IOException ex) { + logger.log(Level.WARNING, String.format("IOException when parsing " //NON-NLS + + "image file '%s/%s' (id=%d).", file.getParentPath(), file.getName(), file.getId()), ex); //NON-NLS + } catch (NoCurrentCaseException ex) { + logger.log(Level.INFO, "Exception while getting open case.", ex); //NON-NLS + } + } + + @Override + public Set mimeTypes() { + return new HashSet() { + { + add("audio/x-wav"); + add("image/jpeg"); + add("image/tiff"); + } + }; + } +} diff --git a/Core/src/org/sleuthkit/autopsy/modules/pictureanalyzer/impls/HEICProcessor.java b/Core/src/org/sleuthkit/autopsy/modules/pictureanalyzer/impls/HEICProcessor.java new file mode 100755 index 0000000000..8d4588aa98 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/modules/pictureanalyzer/impls/HEICProcessor.java @@ -0,0 +1,252 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2020 Basis Technology Corp. + * Contact: carrier sleuthkit 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.modules.pictureanalyzer.impls; + +import java.util.HashSet; +import java.util.Set; +import java.util.logging.Level; +import java.util.Arrays; +import java.util.concurrent.TimeUnit; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.IOException; + +import java.nio.file.DirectoryIteratorException; +import java.nio.file.DirectoryStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; +import java.nio.file.attribute.BasicFileAttributes; + +import org.apache.commons.io.FilenameUtils; + +import org.openide.modules.InstalledFileLocator; +import org.openide.util.lookup.ServiceProvider; + +import org.sleuthkit.autopsy.modules.pictureanalyzer.spi.PictureProcessor; +import org.sleuthkit.autopsy.casemodule.Case; +import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException; +import org.sleuthkit.autopsy.coreutils.ExecUtil; +import org.sleuthkit.autopsy.coreutils.FileUtil; +import org.sleuthkit.autopsy.coreutils.Logger; +import org.sleuthkit.autopsy.coreutils.PlatformUtil; +import org.sleuthkit.autopsy.ingest.IngestJobContext; +import org.sleuthkit.autopsy.ingest.IngestServices; +import org.sleuthkit.autopsy.ingest.ModuleContentEvent; + +import org.sleuthkit.datamodel.AbstractFile; +import org.sleuthkit.datamodel.DerivedFile; +import org.sleuthkit.datamodel.ReadContentInputStream; +import org.sleuthkit.datamodel.TskCoreException; +import org.sleuthkit.datamodel.TskData; + +/** + * Processes HEIC containers by extracting and converting all internal photos to + * JPEGs, which are then added as derived files of the container. + * + * All of this work is serviced by ImageMagick, a third party executable. + */ +@ServiceProvider(service = PictureProcessor.class) +public class HEICProcessor implements PictureProcessor { + + private static final Logger logger = Logger.getLogger(HEICProcessor.class.getName()); + + private static final int EXIT_SUCCESS = 0; + private static final String HEIC_MODULE_FOLDER = "HEIC"; + private static final long TIMEOUT_IN_MS = TimeUnit.MILLISECONDS.convert(2, TimeUnit.MINUTES); + + // Windows location + private static final String IMAGE_MAGICK_FOLDER = "ImageMagick-7.0.10-27-portable-Q16-x64"; + private static final String IMAGE_MAGICK_EXE = "magick.exe"; + private static final String IMAGE_MAGICK_ERROR_FILE = "magick_error.txt"; + + // Actual path of ImageMagick on the system + private final Path IMAGE_MAGICK_PATH; + + public HEICProcessor() { + IMAGE_MAGICK_PATH = findImageMagick(); + + if (IMAGE_MAGICK_PATH == null) { + logger.log(Level.WARNING, "ImageMagick executable not found. " + + "HEIC functionality will be automatically disabled."); + } + } + + private Path findImageMagick() { + final Path windowsLocation = Paths.get(IMAGE_MAGICK_FOLDER, IMAGE_MAGICK_EXE); + final Path macAndLinuxLocation = Paths.get("/usr", "local", "bin", "magick"); + + final String osName = PlatformUtil.getOSName().toLowerCase(); + + if (PlatformUtil.isWindowsOS() && PlatformUtil.is64BitJVM()) { + final File locatedExec = InstalledFileLocator.getDefault().locate( + windowsLocation.toString(), HEICProcessor.class.getPackage().getName(), false); + + return (locatedExec != null) ? locatedExec.toPath() : null; + } else if ((osName.equals("linux") || osName.startsWith("mac")) && + Files.isExecutable(macAndLinuxLocation) && + !Files.isDirectory(macAndLinuxLocation)) { + return macAndLinuxLocation; + } else { + return null; + } + } + + /** + * Give each file its own folder in module output. This makes scanning for + * ImageMagick output fast. + */ + private Path getModuleOutputFolder(AbstractFile file) throws NoCurrentCaseException { + final String moduleOutputDirectory = Case.getCurrentCaseThrows().getModuleDirectory(); + + return Paths.get(moduleOutputDirectory, + HEIC_MODULE_FOLDER, + String.valueOf(file.getId())); + } + + /** + * Create any sub directories within the module output folder. + */ + private void createModuleOutputFolder(AbstractFile file) throws IOException, NoCurrentCaseException { + final Path moduleOutputFolder = getModuleOutputFolder(file); + + if (!Files.exists(moduleOutputFolder)) { + Files.createDirectories(moduleOutputFolder); + } + } + + @Override + public void process(IngestJobContext context, AbstractFile file) { + try { + if (IMAGE_MAGICK_PATH == null) { + return; + } + createModuleOutputFolder(file); + + if (context.fileIngestIsCancelled()) { + return; + } + + final Path localDiskCopy = extractToDisk(file); + + convertToJPEG(context, localDiskCopy, file); + } catch (IOException ex) { + logger.log(Level.WARNING, "I/O error encountered during HEIC photo processing.", ex); + } catch (TskCoreException ex) { + logger.log(Level.SEVERE, "Unable to add pictures as derived files.", ex); + } catch (NoCurrentCaseException ex) { + logger.log(Level.WARNING, "No open case!", ex); + } + } + + /** + * Copies the HEIC container to disk in order to run ImageMagick. + */ + private Path extractToDisk(AbstractFile heicFile) throws IOException, NoCurrentCaseException { + final String tempDir = Case.getCurrentCaseThrows().getTempDirectory(); + final String heicFileName = FileUtil.escapeFileName(heicFile.getName()); + + final Path localDiskCopy = Paths.get(tempDir, heicFileName); + + try (BufferedInputStream heicInputStream = new BufferedInputStream(new ReadContentInputStream(heicFile))) { + Files.copy(heicInputStream, localDiskCopy, StandardCopyOption.REPLACE_EXISTING); + return localDiskCopy; + } + } + + private void convertToJPEG(IngestJobContext context, Path localDiskCopy, + AbstractFile heicFile) throws IOException, TskCoreException, NoCurrentCaseException { + + // First step, run ImageMagick against this heic container. + final Path moduleOutputFolder = getModuleOutputFolder(heicFile); + + final String baseFileName = FilenameUtils.getBaseName(FileUtil.escapeFileName(heicFile.getName())); + final Path outputFile = moduleOutputFolder.resolve(baseFileName + ".jpg"); + + final Path imageMagickErrorOutput = moduleOutputFolder.resolve(IMAGE_MAGICK_ERROR_FILE); + Files.createFile(imageMagickErrorOutput); + + // ImageMagick will write the primary image to the output file. + // Any additional images found within the HEIC container will be + // formatted as fileName-1.jpg, fileName-2.jpg, etc. + final ProcessBuilder processBuilder = new ProcessBuilder() + .command(IMAGE_MAGICK_PATH.toString(), + localDiskCopy.toString(), + outputFile.toString()); + + processBuilder.redirectError(imageMagickErrorOutput.toFile()); + + final long startTime = System.currentTimeMillis(); + final int exitStatus = ExecUtil.execute(processBuilder, () -> { + return context.fileIngestIsCancelled() || System.currentTimeMillis() - startTime >= TIMEOUT_IN_MS; + }); + + if (context.fileIngestIsCancelled()) { + return; + } + + if (exitStatus != EXIT_SUCCESS) { + logger.log(Level.INFO, "Non-zero exit status for HEIC file [id: {0}]. Skipping...", heicFile.getId()); + return; + } + + // Second step, visit all the output files and create derived files. + // Glob for the pattern mentioned above. + final String glob = String.format("{%1$s.jpg,%1$s-*.jpg}", baseFileName); + try (DirectoryStream stream = Files.newDirectoryStream(moduleOutputFolder, glob)) { + + final Path caseDirectory = Paths.get(Case.getCurrentCaseThrows().getCaseDirectory()); + for (Path candidate : stream) { + if (context.fileIngestIsCancelled()) { + return; + } + + final BasicFileAttributes attrs = Files.readAttributes(candidate, BasicFileAttributes.class); + final Path localCasePath = caseDirectory.relativize(candidate); + + final DerivedFile jpegFile = Case.getCurrentCaseThrows().getSleuthkitCase() + .addDerivedFile(candidate.getFileName().toString(), + localCasePath.toString(), attrs.size(), 0L, + attrs.creationTime().to(TimeUnit.SECONDS), + attrs.lastAccessTime().to(TimeUnit.SECONDS), + attrs.lastModifiedTime().to(TimeUnit.SECONDS), + attrs.isRegularFile(), heicFile, "", + "", "", "", TskData.EncodingType.NONE); + + context.addFilesToJob(Arrays.asList(jpegFile)); + IngestServices.getInstance().fireModuleContentEvent(new ModuleContentEvent(jpegFile)); + } + + } catch (DirectoryIteratorException ex) { + throw ex.getCause(); + } + } + + @Override + public Set mimeTypes() { + return new HashSet() { + { + add("image/heif"); + add("image/heic"); + } + }; + } +} diff --git a/Core/src/org/sleuthkit/autopsy/modules/pictureanalyzer/spi/PictureProcessor.java b/Core/src/org/sleuthkit/autopsy/modules/pictureanalyzer/spi/PictureProcessor.java new file mode 100755 index 0000000000..8c66504e7c --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/modules/pictureanalyzer/spi/PictureProcessor.java @@ -0,0 +1,45 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2020 Basis Technology Corp. + * Contact: carrier sleuthkit 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.modules.pictureanalyzer.spi; + +import java.util.Set; +import org.sleuthkit.autopsy.ingest.IngestJobContext; +import org.sleuthkit.datamodel.AbstractFile; + +/** + * SPI for doing work on picture files. ServiceProviders of this + * interface will be picked up and run by the PictureAnalysisIngestModule. + */ +public interface PictureProcessor { + + /** + * Perform work on the image file. + * + * @param context Job context to check for cancellation or add files to + * the pipeline + * @param file The image file to process + */ + void process(IngestJobContext context, AbstractFile file); + + /** + * Indicates the MIME types this processor supports. + */ + Set mimeTypes(); + +} diff --git a/Core/src/org/sleuthkit/autopsy/modules/plaso/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/modules/plaso/Bundle_ja.properties new file mode 100644 index 0000000000..4049f253b3 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/modules/plaso/Bundle_ja.properties @@ -0,0 +1,3 @@ +#Tue Aug 18 18:09:21 UTC 2020 +PlasoIngestModule.dataSource.not.an.image=\u975e\u30c7\u30a3\u30b9\u30af\u30a4\u30e1\u30fc\u30b8\u30fb\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3092\u30b9\u30ad\u30c3\u30d7\u3057\u307e\u3059 +PlasoIngestModule.has.run=Plaso diff --git a/Core/src/org/sleuthkit/autopsy/report/infrastructure/Bundle.properties b/Core/src/org/sleuthkit/autopsy/report/infrastructure/Bundle.properties index cdab8b0cfa..3c5130c22e 100755 --- a/Core/src/org/sleuthkit/autopsy/report/infrastructure/Bundle.properties +++ b/Core/src/org/sleuthkit/autopsy/report/infrastructure/Bundle.properties @@ -199,3 +199,4 @@ FileReportDataTypes.hash.text=Hash Value FileReportDataTypes.knownStatus.text=Known Status FileReportDataTypes.perms.text=Permissions FileReportDataTypes.path.text=Full Path +ReportWizardPortableCaseOptionsVisualPanel.includeAppCheckbox.text=Include application in folder (may add up to 1GB of files) diff --git a/Core/src/org/sleuthkit/autopsy/report/infrastructure/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/report/infrastructure/Bundle.properties-MERGED index 40dc146e1d..5dcbb7f7dd 100755 --- a/Core/src/org/sleuthkit/autopsy/report/infrastructure/Bundle.properties-MERGED +++ b/Core/src/org/sleuthkit/autopsy/report/infrastructure/Bundle.properties-MERGED @@ -220,4 +220,5 @@ FileReportDataTypes.knownStatus.text=Known Status FileReportDataTypes.perms.text=Permissions FileReportDataTypes.path.text=Full Path ReportWizardPortableCaseOptionsVisualPanel.getName.title=Choose Portable Case settings +ReportWizardPortableCaseOptionsVisualPanel.includeAppCheckbox.text=Include application in folder (may add up to 1GB of files) TableReportGenerator.StatusColumn.Header=Review Status diff --git a/Core/src/org/sleuthkit/autopsy/report/infrastructure/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/report/infrastructure/Bundle_ja.properties index c278634512..48742dc04b 100644 --- a/Core/src/org/sleuthkit/autopsy/report/infrastructure/Bundle_ja.properties +++ b/Core/src/org/sleuthkit/autopsy/report/infrastructure/Bundle_ja.properties @@ -1,137 +1,99 @@ -CTL_ReportWizardAction=\u30ec\u30dd\u30fc\u30c8\u3092\u5b9f\u884c -ReportWizardFileOptionsVisualPanel.selectAllButton.text=\u5168\u3066\u9078\u629e -ReportWizardFileOptionsVisualPanel.jLabel1.text=\u30d5\u30a1\u30a4\u30eb\u30ec\u30dd\u30fc\u30c8\u306b\u542b\u3081\u308b\u30a2\u30a4\u30c6\u30e0\u3092\u9078\u629e\u3057\u3066\u4e0b\u3055\u3044\uff1a -ReportWizardFileOptionsVisualPanel.deselectAllButton.text=\u5168\u3066\u9078\u629e\u89e3\u9664 -ReportGenerationPanel.closeButton.text=\u9589\u3058\u308b -ReportGenerationPanel.cancelButton.actionCommand=\u30ad\u30e3\u30f3\u30bb\u30eb -ReportGenerationPanel.cancelButton.text=\u30ad\u30e3\u30f3\u30bb\u30eb -ReportVisualPanel2.allResultsRadioButton.text=\u5168\u3066\u306e\u7d50\u679c -ReportVisualPanel2.advancedButton.text=\u30c7\u30fc\u30bf\u30bf\u30a4\u30d7 -ReportVisualPanel2.deselectAllButton.text=\u5168\u3066\u9078\u629e\u89e3\u9664 -ReportVisualPanel2.selectAllButton.text=\u5168\u3066\u9078\u629e -ReportVisualPanel2.dataLabel.text=\u3069\u306e\u30c7\u30fc\u30bf\u306b\u3064\u3044\u3066\u30ec\u30dd\u30fc\u30c8\u3059\u308b\u304b\u9078\u629e\u3057\u3066\u4e0b\u3055\u3044\uff1a -ReportVisualPanel1.reportModulesLabel.text=\u30ec\u30dd\u30fc\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\uff1a +#Tue Aug 18 18:09:21 UTC 2020 ArtifactSelectionDialog.deselectAllButton.text=\u5168\u3066\u9078\u629e\u89e3\u9664 +ArtifactSelectionDialog.dlgTitle.text=\u30a2\u30c9\u30d0\u30f3\u30b9\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u9078\u629e +ArtifactSelectionDialog.okButton.text=OK ArtifactSelectionDialog.selectAllButton.text=\u5168\u3066\u9078\u629e ArtifactSelectionDialog.titleLabel.text=\u3069\u306e\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u306b\u3064\u3044\u3066\u30ec\u30dd\u30fc\u30c8\u3059\u308b\u304b\u9078\u629e\u3057\u3066\u4e0b\u3055\u3044\uff1a -ArtifactSelectionDialog.okButton.text=OK -ReportGenerationPanel.titleLabel.text=\u30ec\u30dd\u30fc\u30c8\u751f\u6210\u30d7\u30ed\u30b0\u30ec\u30b9 -ArtifactSelectionDialog.dlgTitle.text=\u30a2\u30c9\u30d0\u30f3\u30b9\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u9078\u629e +CTL_ReportWizardAction=\u30ec\u30dd\u30fc\u30c8\u3092\u5b9f\u884c +FileReportDataTypes.aTime.text=\u6700\u5f8c\u306e\u30a2\u30af\u30bb\u30b9 +FileReportDataTypes.address.text=\u30a2\u30c9\u30ec\u30b9 +FileReportDataTypes.crTime.text=\u4f5c\u6210\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb +FileReportDataTypes.fileExt.text=\u30d5\u30a1\u30a4\u30eb\u62e1\u5f35\u5b50 +FileReportDataTypes.fileType.text=\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7 +FileReportDataTypes.filename.text=\u540d\u524d +FileReportDataTypes.hash.text=\u30cf\u30c3\u30b7\u30e5\u5024 +FileReportDataTypes.isDel.text=\u306f\u524a\u9664\u3055\u308c\u307e\u3057\u305f +FileReportDataTypes.knownStatus.text=\u65e2\u77e5\u30b9\u30c6\u30fc\u30bf\u30b9 +FileReportDataTypes.mTime.text=\u6700\u5f8c\u306e\u4fee\u6b63 +FileReportDataTypes.path.text=\u30d5\u30eb\u30d1\u30b9 +FileReportDataTypes.perms.text=\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3 +FileReportDataTypes.size.text=\u30b5\u30a4\u30ba +ReportGenerationPanel.cancelButton.actionCommand=\u30ad\u30e3\u30f3\u30bb\u30eb +ReportGenerationPanel.cancelButton.text=\u30ad\u30e3\u30f3\u30bb\u30eb +ReportGenerationPanel.closeButton.text=\u9589\u3058\u308b +ReportGenerationPanel.confDlg.cancelReport.msg=\u672c\u5f53\u306b\u30ec\u30dd\u30fc\u30c8\u3092\u30ad\u30e3\u30f3\u30bb\u30eb\u3057\u307e\u3059\u304b\uff1f ReportGenerationPanel.confDlg.sureToClose.msg=\u3053\u306e\u30c0\u30a4\u30a2\u30ed\u30b0\u3092\u672c\u5f53\u306b\u9589\u3058\u307e\u3059\u304b\uff1f\n\u5168\u3066\u306e\u30ec\u30dd\u30fc\u30c8\u304c\u30ad\u30e3\u30f3\u30bb\u30eb\u3055\u308c\u307e\u3059\u3002 ReportGenerationPanel.confDlg.title.closing=\u9589\u3058\u3066\u3044\u307e\u3059 -ReportGenerator.displayProgress.title.text=\u30ec\u30dd\u30fc\u30c8\u751f\u6210\u30d7\u30ed\u30b0\u30ec\u30b9\u2026 -ReportGenerator.progress.queryingDb.text=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30af\u30a8\u30ea\u3092\u5b9f\u884c\u4e2d\u2026 -ReportGenerator.progress.processingFile.text={0}\u3092\u51e6\u7406\u4e2d -ReportGenerator.artifactTable.taggedResults.text=\u6b21\u306e\u4e2d\u306e\u4e00\u3064\u3067\u30bf\u30b0\u3055\u308c\u305f\u7d50\u679c\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\uff1a -ReportGenerator.progress.processing={0}\u3092\u51e6\u7406\u4e2d\u2026 -ReportGenerator.msgShow.skippingArtType.title=\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u30bf\u30a4\u30d7{0}\u3092\u30ec\u30dd\u30fc\u30c8\u3067\u30b9\u30ad\u30c3\u30d7\u3057\u3066\u3044\u307e\u3059 -ReportGenerator.msgShow.skippingArtType.msg=\u30ec\u30dd\u30fc\u30c8\u751f\u6210\u3059\u308b\u306e\u306b\u4e0d\u660e\u306a\u30b3\u30e9\u30e0 -ReportGenerator.msgShow.skippingArtRow.title=\u30bf\u30a4\u30d7{0}\u306e\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u884c\u3092\u30ec\u30dd\u30fc\u30c8\u3067\u30b9\u30ad\u30c3\u30d7\u3057\u3066\u3044\u307e\u3059 -ReportGenerator.msgShow.skippingArtRow.msg=\u30ec\u30dd\u30fc\u30c8\u751f\u6210\u3059\u308b\u306e\u306b\u4e0d\u660e\u306a\u30b3\u30e9\u30e0 -ReportGenerator.makeContTagTab.taggedFiles.msg=\u306e\u4e2d\u306e\u4e00\u3064\u3067\u30bf\u30b0\u3055\u308c\u305f\u7d50\u679c\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\uff1a -ReportGenerator.makeBbArtTagTab.taggedRes.msg=\u3053\u306e\u30ec\u30dd\u30fc\u30c8\u306b\u306f\u6b21\u3067\u30bf\u30b0\u3055\u308c\u305f\u7d50\u679c\u3057\u304b\u542b\u307e\u308c\u307e\u305b\u3093\uff1a -ReportGenerator.tagTable.header.resultType=\u7d50\u679c\u30bf\u30a4\u30d7 -ReportGenerator.tagTable.header.tag=\u30bf\u30b0 -ReportGenerator.tagTable.header.comment=\u30b3\u30e1\u30f3\u30c8 -ReportGenerator.tagTable.header.srcFile=\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb -ReportGenerator.progress.createdThumb.text=\u30b5\u30e0\u30cd\u30a4\u30eb\u3092\u4f5c\u6210\u4e2d\u2026 -ReportGenerator.thumbnailTable.name=\u30b5\u30e0\u30cd\u30a4\u30eb -ReportGenerator.thumbnailTable.desc=\u30bf\u30b0\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u3084\u7d50\u679c\u306b\u95a2\u9023\u3059\u308b\u30a4\u30e1\u30fc\u30b8\u306e\u30b5\u30e0\u30cd\u30a4\u30eb\u304c\u542b\u307e\u308c\u307e\u3059\u3002 -ReportGenerator.writeKwHits.userSrchs=\u30e6\u30fc\u30b6\u691c\u7d22 -ReportGenerator.progress.processingList={0} ({1})\u3092\u51e6\u7406\u4e2d\u2026 -ReportGenerator.artTableColHdr.url=URL -ReportGenerator.artTableColHdr.title=\u30bf\u30a4\u30c8\u30eb -ReportGenerator.artTableColHdr.dateCreated=\u4f5c\u6210\u65e5\u4ed8 -ReportGenerator.artTableColHdr.program=\u30d7\u30ed\u30b0\u30e9\u30e0 -ReportGenerator.artTableColHdr.srcFile=\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb -ReportGenerator.artTableColHdr.dateTime=\u65e5\u4ed8\uff0f\u6642\u523b -ReportGenerator.artTableColHdr.name=\u540d\u524d -ReportGenerator.artTableColHdr.value=\u30d0\u30ea\u30e5\u30fc -ReportGenerator.artTableColHdr.dateAccessed=\u30a2\u30af\u30bb\u30b9\u65e5\u4ed8 -ReportGenerator.artTableColHdr.referrer=\u30ea\u30d5\u30a1\u30e9 -ReportGenerator.artTableColHdr.dest=\u30c7\u30b9\u30c6\u30a3\u30cd\u30fc\u30b7\u30e7\u30f3 -ReportGenerator.artTableColHdr.sourceUrl=\u30bd\u30fc\u30b9URL -ReportGenerator.artTableColHdr.path=\u30d1\u30b9 -ReportGenerator.artTableColHdr.progName=\u30d7\u30ed\u30b0\u30e9\u30e0\u540d -ReportGenerator.artTableColHdr.instDateTime=\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u65e5\u4ed8\uff0f\u6642\u523b -ReportGenerator.artTableColHdr.preview=\u30d7\u30ec\u30d3\u30e5\u30fc -ReportGenerator.artTableColHdr.file=\u30d5\u30a1\u30a4\u30eb -ReportGenerator.artTableColHdr.size=\u30b5\u30a4\u30ba -ReportGenerator.artTableColHdr.deviceId=\u6a5f\u5668ID -ReportGenerator.artTableColHdr.text=\u30c6\u30ad\u30b9\u30c8 -ReportGenerator.artTableColHdr.domain=\u30c9\u30e1\u30a4\u30f3 -ReportGenerator.artTableColHdr.devManufacturer=\u6a5f\u5668\u30e1\u30fc\u30ab\u30fc -ReportGenerator.artTableColHdr.devModel=\u6a5f\u5668\u30e2\u30c7\u30eb -ReportGenerator.artTableColHdr.personName=\u4eba\u540d -ReportGenerator.artTableColHdr.phoneNumber=\u96fb\u8a71\u756a\u53f7 -ReportGenerator.artTableColHdr.phoneNumHome=\u96fb\u8a71\u756a\u53f7\uff08\u81ea\u5b85\uff09 -ReportGenerator.artTableColHdr.phoneNumOffice=\u96fb\u8a71\u756a\u53f7\uff08\u4f1a\u793e\uff09 -ReportGenerator.artTableColHdr.phoneNumMobile=\u96fb\u8a71\u756a\u53f7\uff08\u643a\u5e2f\uff09 -ReportGenerator.artTableColHdr.email=Email -ReportGenerator.artTableColHdr.msgType=\u30e1\u30c3\u30bb\u30fc\u30b8\u30bf\u30a4\u30d7 -ReportGenerator.artTableColHdr.latitude=\u7def\u5ea6 -ReportGenerator.artTableColHdr.longitude=\u7d4c\u5ea6 -ReportGenerator.artTableColHdr.dateTaken=\u64ae\u5f71\u65e5\u4ed8 -ReportGenerator.artTableColHdr.subject=\u30b5\u30d6\u30b8\u30a7\u30af\u30c8 -ReportGenerator.artTableColHdr.calendarEntryType=\u30ab\u30ec\u30f3\u30c0\u30fc\u30a8\u30f3\u30c8\u30ea\u30bf\u30a4\u30d7 -ReportGenerator.artTableColHdr.description=\u8aac\u660e -ReportGenerator.artTableColHdr.startDateTime=\u958b\u59cb\u65e5\u4ed8\uff0f\u6642\u523b -ReportGenerator.artTableColHdr.shortCut=\u30b7\u30e7\u30fc\u30c8\u30ab\u30c3\u30c8 -ReportGenerator.artTableColHdr.endDateTime=\u4fee\u4e86\u65e5\u4ed8\uff0f\u6642\u523b -ReportGenerator.artTableColHdr.location=\u30ed\u30b1\u30fc\u30b7\u30e7\u30f3 -ReportGenerator.artTableColHdr.deviceName=\u6a5f\u5668\u540d -ReportGenerator.artTableColHdr.deviceAddress=\u6a5f\u5668\u30a2\u30c9\u30ec\u30b9 +ReportGenerationPanel.titleLabel.text=\u30ec\u30dd\u30fc\u30c8\u751f\u6210\u30d7\u30ed\u30b0\u30ec\u30b9 ReportGenerator.artTableColHdr.altitude=\u6a19\u9ad8 -ReportGenerator.artTableColHdr.locationAddress=\u30ed\u30b1\u30fc\u30b7\u30e7\u30f3\u30a2\u30c9\u30ec\u30b9 -ReportGenerator.artTableColHdr.category=\u30ab\u30c6\u30b4\u30ea\u30fc -ReportGenerator.artTableColHdr.userId=\u30e6\u30fc\u30b6ID -ReportGenerator.artTableColHdr.password=\u30d1\u30b9\u30ef\u30fc\u30c9 -ReportGenerator.artTableColHdr.replytoAddress=\u8fd4\u4fe1\u30a2\u30c9\u30ec\u30b9 -ReportGenerator.artTableColHdr.mailServer=\u30e1\u30fc\u30eb\u30b5\u30fc\u30d0 -ReportGenerator.artTableColHdr.tags=\u30bf\u30b0 -ReportProgressPanel.start.cancelButton.text=\u30ad\u30e3\u30f3\u30bb\u30eb -ReportProgressPanel.complete.processLbl.text=\u5b8c\u4e86 -ReportProgressPanel.complete.cancelButton.text=\u5b8c\u4e86 -ReportProgressPanel.cancel.cancelButton.toolTipText=\u30ad\u30e3\u30f3\u30bb\u30eb\u3055\u308c\u307e\u3057\u305f -ReportWizardAction.actionName.text=\u30ec\u30dd\u30fc\u30c8\u3092\u751f\u6210 -ReportWizardAction.reportWiz.title=\u30ec\u30dd\u30fc\u30c8\u3092\u751f\u6210 -ReportWizardAction.toolBarButton.text=\u30ec\u30dd\u30fc\u30c8\u3092\u751f\u6210 -ReportWizardPanel1.nextButton.text=\u6b21 > -ReportWizardPanel2.nextButton.text=\u6b21 > -ReportGenerator.artTableColHdr.direction=\u65b9\u5411 -ReportGenerator.artTableColHdr.fromEmail=\u9001\u4fe1\u5143E\u30e1\u30fc\u30eb -ReportGenerator.artTableColHdr.toEmail=\u9001\u4fe1\u5148E\u30e1\u30fc\u30eb -ReportGenerator.artTableColHdr.fromPhoneNum=\u767a\u4fe1\u8005\u96fb\u8a71\u756a\u53f7 -ReportGenerator.artTableColHdr.toPhoneNum=\u7740\u4fe1\u8005\u96fb\u8a71\u756a\u53f7 ReportGenerator.artTableColHdr.appName=\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u540d ReportGenerator.artTableColHdr.appPath=\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30d1\u30b9 -ReportProgressPanel.progress.queuing=\u30ad\u30e5\u30fc\u30a4\u30f3\u30b0\u2026 -ReportProgressPanel.initPathLabel.noFile=\u30ec\u30dd\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u7121\u3057 -ReportProgressPanel.start.progress.text=\u30ec\u30dd\u30fc\u30c8\u958b\u59cb\u4e2d\u2026 -ReportProgressPanel.cancel.procLbl.text=\u30ad\u30e3\u30f3\u30bb\u30eb\u3055\u308c\u307e\u3057\u305f -ReportVisualPanel1.getName.text=\u30ec\u30dd\u30fc\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u9078\u629e\u304a\u3088\u3073\u8a2d\u5b9a -ReportVisualPanel2.getName.text=\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u30ec\u30dd\u30fc\u30c8\u3092\u8a2d\u5b9a -ReportWizardFileOptionsPanel.finishButton.text=\u7d42\u4e86 -ReportWizardFileOptionsVisualPanel.getName.text=\u30d5\u30a1\u30a4\u30eb\u30ec\u30dd\u30fc\u30c8\u3092\u8a2d\u5b9a -ReportWizardPanel1.finishButton.text=\u7d42\u4e86 -ReportWizardPanel2.finishButton.text=\u7d42\u4e86 -ReportGenerator.errors.reportErrorTitle=\u30ec\u30dd\u30fc\u30c8\u751f\u6210\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -ReportGenerator.errors.reportErrorText=\u30ec\u30dd\u30fc\u30c8\u751f\u6210\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\uff1a -ReportGenerator.artTableColHdr.extension.text=\u62e1\u5f35\u5b50 -ReportGenerator.artTableColHdr.mimeType.text=MIME\u30bf\u30a4\u30d7 ReportGenerator.artTableColHdr.associatedArtifact=\u95a2\u4fc2\u3059\u308b\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8 +ReportGenerator.artTableColHdr.calendarEntryType=\u30ab\u30ec\u30f3\u30c0\u30fc\u30a8\u30f3\u30c8\u30ea\u30bf\u30a4\u30d7 +ReportGenerator.artTableColHdr.category=\u30ab\u30c6\u30b4\u30ea\u30fc ReportGenerator.artTableColHdr.count=\u30ab\u30a6\u30f3\u30c8 +ReportGenerator.artTableColHdr.dateAccessed=\u30a2\u30af\u30bb\u30b9\u65e5\u4ed8 +ReportGenerator.artTableColHdr.dateCreated=\u4f5c\u6210\u65e5\u4ed8 +ReportGenerator.artTableColHdr.dateTaken=\u64ae\u5f71\u65e5\u4ed8 +ReportGenerator.artTableColHdr.dateTime=\u65e5\u4ed8\uff0f\u6642\u523b +ReportGenerator.artTableColHdr.description=\u8aac\u660e +ReportGenerator.artTableColHdr.dest=\u30c7\u30b9\u30c6\u30a3\u30cd\u30fc\u30b7\u30e7\u30f3 ReportGenerator.artTableColHdr.devMake=\u6a5f\u5668\u578b\u540d +ReportGenerator.artTableColHdr.devManufacturer=\u6a5f\u5668\u30e1\u30fc\u30ab\u30fc +ReportGenerator.artTableColHdr.devModel=\u6a5f\u5668\u30e2\u30c7\u30eb +ReportGenerator.artTableColHdr.deviceAddress=\u6a5f\u5668\u30a2\u30c9\u30ec\u30b9 +ReportGenerator.artTableColHdr.deviceId=\u6a5f\u5668ID +ReportGenerator.artTableColHdr.deviceName=\u6a5f\u5668\u540d +ReportGenerator.artTableColHdr.direction=\u65b9\u5411 +ReportGenerator.artTableColHdr.domain=\u30c9\u30e1\u30a4\u30f3 +ReportGenerator.artTableColHdr.email=Email +ReportGenerator.artTableColHdr.endDateTime=\u4fee\u4e86\u65e5\u4ed8\uff0f\u6642\u523b +ReportGenerator.artTableColHdr.extension.text=\u62e1\u5f35\u5b50 +ReportGenerator.artTableColHdr.file=\u30d5\u30a1\u30a4\u30eb +ReportGenerator.artTableColHdr.fromEmail=\u9001\u4fe1\u5143E\u30e1\u30fc\u30eb +ReportGenerator.artTableColHdr.fromPhoneNum=\u767a\u4fe1\u8005\u96fb\u8a71\u756a\u53f7 +ReportGenerator.artTableColHdr.instDateTime=\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u65e5\u4ed8\uff0f\u6642\u523b +ReportGenerator.artTableColHdr.latitude=\u7def\u5ea6 ReportGenerator.artTableColHdr.latitudeEnd=\u5230\u7740\u7def\u5ea6 ReportGenerator.artTableColHdr.latitudeStart=\u51fa\u767a\u7def\u5ea6 ReportGenerator.artTableColHdr.localPath=\u30ed\u30fc\u30ab\u30eb\u30d1\u30b9 +ReportGenerator.artTableColHdr.location=\u30ed\u30b1\u30fc\u30b7\u30e7\u30f3 +ReportGenerator.artTableColHdr.locationAddress=\u30ed\u30b1\u30fc\u30b7\u30e7\u30f3\u30a2\u30c9\u30ec\u30b9 +ReportGenerator.artTableColHdr.longitude=\u7d4c\u5ea6 ReportGenerator.artTableColHdr.longitudeEnd=\u5230\u7740\u7d4c\u5ea6 ReportGenerator.artTableColHdr.longitudeStart=\u51fa\u767a\u7d4c\u5ea6 +ReportGenerator.artTableColHdr.mailServer=\u30e1\u30fc\u30eb\u30b5\u30fc\u30d0 +ReportGenerator.artTableColHdr.mimeType.text=MIME\u30bf\u30a4\u30d7 +ReportGenerator.artTableColHdr.msgType=\u30e1\u30c3\u30bb\u30fc\u30b8\u30bf\u30a4\u30d7 +ReportGenerator.artTableColHdr.name=\u540d\u524d ReportGenerator.artTableColHdr.osInstallDate.text=\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u65e5\u4ed8 ReportGenerator.artTableColHdr.osName.text=\u30aa\u30da\u30ec\u30fc\u30c6\u30a3\u30f3\u30b0\u30b7\u30b9\u30c6\u30e0\u540d +ReportGenerator.artTableColHdr.password=\u30d1\u30b9\u30ef\u30fc\u30c9 +ReportGenerator.artTableColHdr.path=\u30d1\u30b9 +ReportGenerator.artTableColHdr.personName=\u4eba\u540d +ReportGenerator.artTableColHdr.phoneNumHome=\u96fb\u8a71\u756a\u53f7\uff08\u81ea\u5b85\uff09 +ReportGenerator.artTableColHdr.phoneNumMobile=\u96fb\u8a71\u756a\u53f7\uff08\u643a\u5e2f\uff09 +ReportGenerator.artTableColHdr.phoneNumOffice=\u96fb\u8a71\u756a\u53f7\uff08\u4f1a\u793e\uff09 +ReportGenerator.artTableColHdr.phoneNumber=\u96fb\u8a71\u756a\u53f7 +ReportGenerator.artTableColHdr.preview=\u30d7\u30ec\u30d3\u30e5\u30fc ReportGenerator.artTableColHdr.processorArchitecture.text=\u30d7\u30ed\u30bb\u30c3\u30b5\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3 +ReportGenerator.artTableColHdr.progName=\u30d7\u30ed\u30b0\u30e9\u30e0\u540d +ReportGenerator.artTableColHdr.program=\u30d7\u30ed\u30b0\u30e9\u30e0 ReportGenerator.artTableColHdr.readStatus=\u8aad\u307f\u53d6\u308a\u4e2d\u30b9\u30c6\u30fc\u30bf\u30b9 +ReportGenerator.artTableColHdr.referrer=\u30ea\u30d5\u30a1\u30e9 ReportGenerator.artTableColHdr.remotePath=\u30ea\u30e2\u30fc\u30c8\u30d1\u30b9 +ReportGenerator.artTableColHdr.replytoAddress=\u8fd4\u4fe1\u30a2\u30c9\u30ec\u30b9 +ReportGenerator.artTableColHdr.shortCut=\u30b7\u30e7\u30fc\u30c8\u30ab\u30c3\u30c8 +ReportGenerator.artTableColHdr.size=\u30b5\u30a4\u30ba +ReportGenerator.artTableColHdr.sourceUrl=\u30bd\u30fc\u30b9URL +ReportGenerator.artTableColHdr.srcFile=\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb +ReportGenerator.artTableColHdr.startDateTime=\u958b\u59cb\u65e5\u4ed8\uff0f\u6642\u523b +ReportGenerator.artTableColHdr.subject=\u30b5\u30d6\u30b8\u30a7\u30af\u30c8 +ReportGenerator.artTableColHdr.tags=\u30bf\u30b0 +ReportGenerator.artTableColHdr.text=\u30c6\u30ad\u30b9\u30c8 +ReportGenerator.artTableColHdr.title=\u30bf\u30a4\u30c8\u30eb +ReportGenerator.artTableColHdr.toEmail=\u9001\u4fe1\u5148E\u30e1\u30fc\u30eb +ReportGenerator.artTableColHdr.toPhoneNum=\u7740\u4fe1\u8005\u96fb\u8a71\u756a\u53f7 ReportGenerator.artTableColHdr.tskDateTimeRcvd=\u53d7\u4fe1\u65e5 ReportGenerator.artTableColHdr.tskDateTimeSent=\u9001\u4fe1\u65e5 ReportGenerator.artTableColHdr.tskEmailBcc=E-Mail BCC @@ -144,11 +106,18 @@ ReportGenerator.artTableColHdr.tskMsgId=\u30e1\u30c3\u30bb\u30fc\u30b8ID ReportGenerator.artTableColHdr.tskPath=\u30d1\u30b9 ReportGenerator.artTableColHdr.tskSetName=\u30bb\u30c3\u30c8\u540d ReportGenerator.artTableColHdr.tskSubject=\u30b5\u30d6\u30b8\u30a7\u30af\u30c8 +ReportGenerator.artTableColHdr.url=URL ReportGenerator.artTableColHdr.urlDomainDecoded=URL\u30c9\u30e1\u30a4\u30f3 +ReportGenerator.artTableColHdr.userId=\u30e6\u30fc\u30b6ID ReportGenerator.artTableColHdr.userName=\u30e6\u30fc\u30b6\u540d +ReportGenerator.artTableColHdr.value=\u30d0\u30ea\u30e5\u30fc +ReportGenerator.artifactTable.taggedResults.text=\u6b21\u306e\u4e2d\u306e\u4e00\u3064\u3067\u30bf\u30b0\u3055\u308c\u305f\u7d50\u679c\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\uff1a +ReportGenerator.displayProgress.title.text=\u30ec\u30dd\u30fc\u30c8\u751f\u6210\u30d7\u30ed\u30b0\u30ec\u30b9\u2026 ReportGenerator.errList.coreExceptionWhileGenRptRow=\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u30ec\u30dd\u30fc\u30c8\u7528\u30ed\u30fc\u30c7\u30fc\u30bf\u306e\u751f\u6210\u4e2d\u306b\u30b3\u30a2\u30a8\u30af\u30bb\u30d7\u30b7\u30e7\u30f3\uff08\u4f8b\u5916\uff09\u304c\u691c\u51fa\u3055\u308c\u307e\u3057\u305f ReportGenerator.errList.errGetContentFromBBArtifact=Blackboard\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u304b\u3089\u30ec\u30dd\u30fc\u30c8\u7528\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 ReportGenerator.errList.failedGetAbstractFileByID=ID\u306b\u57fa\u3065\u304d\u30a2\u30d6\u30b9\u30c8\u30e9\u30af\u30c8\u30d5\u30a1\u30a4\u30eb\u3092\u53d6\u5f97\u3059\u308b\u306e\u3092\u5931\u6557\u3057\u307e\u3057\u305f +ReportGenerator.errList.failedGetAbstractFileFromID=ID\u306b\u57fa\u3065\u304d\u30a2\u30d6\u30b9\u30c8\u30e9\u30af\u30c8\u30d5\u30a1\u30a4\u30eb\u3092\u53d6\u5f97\u3059\u308b\u306e\u3092\u5931\u6557\u3057\u307e\u3057\u305f +ReportGenerator.errList.failedGetBBArtifactTags=\u7d50\u679c\u30bf\u30b0\u306e\u53d6\u5f97\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002 ReportGenerator.errList.failedGetBBArtifacts=\u30ec\u30dd\u30fc\u30c8\u751f\u6210\u4e2d\u306bBlackboard\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u306e\u53d6\u5f97\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002 ReportGenerator.errList.failedGetBBAttribs=\u30ec\u30dd\u30fc\u30c8\u751f\u6210\u4e2d\u306bBlackboard\u5c5e\u6027\u306e\u53d6\u5f97\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002 ReportGenerator.errList.failedGetContentTags=\u30b3\u30f3\u30c6\u30f3\u30c4\u30bf\u30b0\u306e\u53d6\u5f97\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002 @@ -157,6 +126,8 @@ ReportGenerator.errList.failedQueryHashsetHits=\u30cf\u30c3\u30b7\u30e5\u30bb\u3 ReportGenerator.errList.failedQueryHashsetLists=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u30ea\u30b9\u30c8\u3092\u30af\u30a8\u30ea\u3059\u308b\u306e\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002 ReportGenerator.errList.failedQueryKWLists=\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u3092\u30af\u30a8\u30ea\u3059\u308b\u306e\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002 ReportGenerator.errList.failedQueryKWs=\u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u30af\u30a8\u30ea\u3059\u308b\u306e\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002 +ReportGenerator.errors.reportErrorText=\u30ec\u30dd\u30fc\u30c8\u751f\u6210\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\uff1a +ReportGenerator.errors.reportErrorTitle=\u30ec\u30dd\u30fc\u30c8\u751f\u6210\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f ReportGenerator.htmlOutput.header.comment=\u30b3\u30e1\u30f3\u30c8 ReportGenerator.htmlOutput.header.file=\u30d5\u30a1\u30a4\u30eb ReportGenerator.htmlOutput.header.hash=\u30cf\u30c3\u30b7\u30e5 @@ -165,21 +136,56 @@ ReportGenerator.htmlOutput.header.tag=\u30bf\u30b0 ReportGenerator.htmlOutput.header.timeAccessed=\u30a2\u30af\u30bb\u30b9\u65e5\u6642 ReportGenerator.htmlOutput.header.timeCreated=\u4f5c\u6210\u65e5\u6642 ReportGenerator.htmlOutput.header.timeModified=\u4fee\u6b63\u65e5\u6642 +ReportGenerator.makeBbArtTagTab.taggedRes.msg=\u3053\u306e\u30ec\u30dd\u30fc\u30c8\u306b\u306f\u6b21\u3067\u30bf\u30b0\u3055\u308c\u305f\u7d50\u679c\u3057\u304b\u542b\u307e\u308c\u307e\u305b\u3093\uff1a +ReportGenerator.makeContTagTab.taggedFiles.msg=\u306e\u4e2d\u306e\u4e00\u3064\u3067\u30bf\u30b0\u3055\u308c\u305f\u7d50\u679c\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\uff1a +ReportGenerator.msgShow.skippingArtRow.msg=\u30ec\u30dd\u30fc\u30c8\u751f\u6210\u3059\u308b\u306e\u306b\u4e0d\u660e\u306a\u30b3\u30e9\u30e0 +ReportGenerator.msgShow.skippingArtRow.title=\u30bf\u30a4\u30d7{0}\u306e\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u884c\u3092\u30ec\u30dd\u30fc\u30c8\u3067\u30b9\u30ad\u30c3\u30d7\u3057\u3066\u3044\u307e\u3059 +ReportGenerator.msgShow.skippingArtType.msg=\u30ec\u30dd\u30fc\u30c8\u751f\u6210\u3059\u308b\u306e\u306b\u4e0d\u660e\u306a\u30b3\u30e9\u30e0 +ReportGenerator.msgShow.skippingArtType.title=\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u30bf\u30a4\u30d7{0}\u3092\u30ec\u30dd\u30fc\u30c8\u3067\u30b9\u30ad\u30c3\u30d7\u3057\u3066\u3044\u307e\u3059 ReportGenerator.notifyErr.errsDuringRptGen=\u30ec\u30dd\u30fc\u30c8\u751f\u6210\u4e2d\u306e\u30a8\u30e9\u30fc\uff1a -ReportGenerator.errList.failedGetAbstractFileFromID=ID\u306b\u57fa\u3065\u304d\u30a2\u30d6\u30b9\u30c8\u30e9\u30af\u30c8\u30d5\u30a1\u30a4\u30eb\u3092\u53d6\u5f97\u3059\u308b\u306e\u3092\u5931\u6557\u3057\u307e\u3057\u305f -ReportVisualPanel1.invalidModuleWarning=\u7121\u52b9\u306a\u30ec\u30dd\u30fc\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb({0})\u306b\u906d\u9047\u3057\u307e\u3057\u305f -ReportGenerationPanel.confDlg.cancelReport.msg=\u672c\u5f53\u306b\u30ec\u30dd\u30fc\u30c8\u3092\u30ad\u30e3\u30f3\u30bb\u30eb\u3057\u307e\u3059\u304b\uff1f +ReportGenerator.progress.createdThumb.text=\u30b5\u30e0\u30cd\u30a4\u30eb\u3092\u4f5c\u6210\u4e2d\u2026 +ReportGenerator.progress.processing={0}\u3092\u51e6\u7406\u4e2d\u2026 +ReportGenerator.progress.processingFile.text={0}\u3092\u51e6\u7406\u4e2d +ReportGenerator.progress.processingList={0} ({1})\u3092\u51e6\u7406\u4e2d\u2026 +ReportGenerator.progress.queryingDb.text=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30af\u30a8\u30ea\u3092\u5b9f\u884c\u4e2d\u2026 +ReportGenerator.tagTable.header.comment=\u30b3\u30e1\u30f3\u30c8 +ReportGenerator.tagTable.header.resultType=\u7d50\u679c\u30bf\u30a4\u30d7 +ReportGenerator.tagTable.header.srcFile=\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb +ReportGenerator.tagTable.header.tag=\u30bf\u30b0 +ReportGenerator.thumbnailTable.desc=\u30bf\u30b0\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u3084\u7d50\u679c\u306b\u95a2\u9023\u3059\u308b\u30a4\u30e1\u30fc\u30b8\u306e\u30b5\u30e0\u30cd\u30a4\u30eb\u304c\u542b\u307e\u308c\u307e\u3059\u3002 +ReportGenerator.thumbnailTable.name=\u30b5\u30e0\u30cd\u30a4\u30eb +ReportGenerator.writeKwHits.userSrchs=\u30e6\u30fc\u30b6\u691c\u7d22 +ReportProgressPanel.cancel.cancelButton.toolTipText=\u30ad\u30e3\u30f3\u30bb\u30eb\u3055\u308c\u307e\u3057\u305f +ReportProgressPanel.cancel.procLbl.text=\u30ad\u30e3\u30f3\u30bb\u30eb\u3055\u308c\u307e\u3057\u305f +ReportProgressPanel.complete.cancelButton.text=\u5b8c\u4e86 ReportProgressPanel.complete.processLb2.text=\u5b8c\u4e86\u3057\u307e\u3057\u305f\u304c\u3001\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -FileReportDataTypes.filename.text=\u540d\u524d -FileReportDataTypes.fileExt.text=\u30d5\u30a1\u30a4\u30eb\u62e1\u5f35\u5b50 -FileReportDataTypes.fileType.text=\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7 -FileReportDataTypes.isDel.text=\u306f\u524a\u9664\u3055\u308c\u307e\u3057\u305f -FileReportDataTypes.aTime.text=\u6700\u5f8c\u306e\u30a2\u30af\u30bb\u30b9 -FileReportDataTypes.crTime.text=\u4f5c\u6210\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb -FileReportDataTypes.mTime.text=\u6700\u5f8c\u306e\u4fee\u6b63 -FileReportDataTypes.size.text=\u30b5\u30a4\u30ba -FileReportDataTypes.address.text=\u30a2\u30c9\u30ec\u30b9 -FileReportDataTypes.hash.text=\u30cf\u30c3\u30b7\u30e5\u5024 -FileReportDataTypes.knownStatus.text=\u65e2\u77e5\u30b9\u30c6\u30fc\u30bf\u30b9 -FileReportDataTypes.perms.text=\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3 -FileReportDataTypes.path.text=\u30d5\u30eb\u30d1\u30b9 +ReportProgressPanel.complete.processLbl.text=\u5b8c\u4e86 +ReportProgressPanel.initPathLabel.noFile=\u30ec\u30dd\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u7121\u3057 +ReportProgressPanel.progress.queuing=\u30ad\u30e5\u30fc\u30a4\u30f3\u30b0\u2026 +ReportProgressPanel.start.cancelButton.text=\u30ad\u30e3\u30f3\u30bb\u30eb +ReportProgressPanel.start.progress.text=\u30ec\u30dd\u30fc\u30c8\u958b\u59cb\u4e2d\u2026 +ReportVisualPanel1.getName.text=\u30ec\u30dd\u30fc\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u9078\u629e\u304a\u3088\u3073\u8a2d\u5b9a +ReportVisualPanel1.invalidModuleWarning=\u7121\u52b9\u306a\u30ec\u30dd\u30fc\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb({0})\u306b\u906d\u9047\u3057\u307e\u3057\u305f +ReportVisualPanel1.reportModulesLabel.text=\u30ec\u30dd\u30fc\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\uff1a +ReportVisualPanel2.advancedButton.text=\u7d50\u679c\u30bf\u30a4\u30d7\u3092\u9078\u629e\u2026 +ReportVisualPanel2.allResultsRadioButton.text=\u5168\u3066\u306e\u7d50\u679c +ReportVisualPanel2.dataLabel.text=\u3069\u306e\u30c7\u30fc\u30bf\u306b\u3064\u3044\u3066\u30ec\u30dd\u30fc\u30c8\u3059\u308b\u304b\u9078\u629e\u3057\u3066\u4e0b\u3055\u3044\uff1a +ReportVisualPanel2.deselectAllButton.text=\u5168\u3066\u9078\u629e\u89e3\u9664 +ReportVisualPanel2.getName.text=\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u30ec\u30dd\u30fc\u30c8\u3092\u8a2d\u5b9a +ReportVisualPanel2.selectAllButton.text=\u5168\u3066\u9078\u629e +ReportWizardAction.actionName.text=\u30ec\u30dd\u30fc\u30c8\u3092\u751f\u6210 +ReportWizardAction.reportWiz.title=\u30ec\u30dd\u30fc\u30c8\u3092\u751f\u6210 +ReportWizardAction.toolBarButton.text=\u30ec\u30dd\u30fc\u30c8\u3092\u751f\u6210 +ReportWizardDataSourceSelectionPanel.confirmEmptySelection=\u9078\u629e\u305b\u305a\u306b\u7d9a\u884c\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b\uff1f +ReportWizardDataSourceSelectionPanel.finishButton.text=\u7d42\u4e86 +ReportWizardDataSourceSelectionPanel.nextButton.text=\u6b21 +ReportWizardDataSourceSelectionPanel.title=\u542b\u3081\u308b\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044 +ReportWizardFileOptionsPanel.finishButton.text=\u7d42\u4e86 +ReportWizardFileOptionsVisualPanel.deselectAllButton.text=\u5168\u3066\u9078\u629e\u89e3\u9664 +ReportWizardFileOptionsVisualPanel.getName.text=\u30d5\u30a1\u30a4\u30eb\u30ec\u30dd\u30fc\u30c8\u3092\u8a2d\u5b9a +ReportWizardFileOptionsVisualPanel.jLabel1.text=\u30d5\u30a1\u30a4\u30eb\u30ec\u30dd\u30fc\u30c8\u306b\u542b\u3081\u308b\u30a2\u30a4\u30c6\u30e0\u3092\u9078\u629e\u3057\u3066\u4e0b\u3055\u3044\uff1a +ReportWizardFileOptionsVisualPanel.selectAllButton.text=\u5168\u3066\u9078\u629e +ReportWizardPanel1.finishButton.text=\u7d42\u4e86 +ReportWizardPanel1.nextButton.text=\u6b21 > +ReportWizardPanel2.finishButton.text=\u7d42\u4e86 +ReportWizardPanel2.nextButton.text=\u6b21 > diff --git a/Core/src/org/sleuthkit/autopsy/report/infrastructure/ReportVisualPanel1.java b/Core/src/org/sleuthkit/autopsy/report/infrastructure/ReportVisualPanel1.java index 79680178e1..e98f0b7984 100644 --- a/Core/src/org/sleuthkit/autopsy/report/infrastructure/ReportVisualPanel1.java +++ b/Core/src/org/sleuthkit/autopsy/report/infrastructure/ReportVisualPanel1.java @@ -59,11 +59,13 @@ final class ReportVisualPanel1 extends JPanel implements ListSelectionListener { private PortableCaseReportModule portableCaseModule; private Map moduleConfigs; private Integer selectedIndex; + private final boolean displayCaseSpecificData; /** * Creates new form ReportVisualPanel1 */ - public ReportVisualPanel1(ReportWizardPanel1 wizPanel, Map moduleConfigs) { + ReportVisualPanel1(ReportWizardPanel1 wizPanel, Map moduleConfigs, boolean displayCaseSpecificData) { + this.displayCaseSpecificData = displayCaseSpecificData; this.wizPanel = wizPanel; this.moduleConfigs = moduleConfigs; initComponents(); @@ -371,7 +373,7 @@ final class ReportVisualPanel1 extends JPanel implements ListSelectionListener { // General modules that support data source selection will be presented // a data source selection panel, so they should not be finished immediately. - boolean generalModuleSelected = (module instanceof GeneralReportModule) && !((GeneralReportModule)module).supportsDataSourceSelection(); + boolean generalModuleSelected = (module instanceof GeneralReportModule) && (!((GeneralReportModule)module).supportsDataSourceSelection() || !displayCaseSpecificData); wizPanel.setNext(!generalModuleSelected); wizPanel.setFinish(generalModuleSelected); diff --git a/Core/src/org/sleuthkit/autopsy/report/infrastructure/ReportWizardAction.java b/Core/src/org/sleuthkit/autopsy/report/infrastructure/ReportWizardAction.java index fd03660e51..f2c419eee7 100644 --- a/Core/src/org/sleuthkit/autopsy/report/infrastructure/ReportWizardAction.java +++ b/Core/src/org/sleuthkit/autopsy/report/infrastructure/ReportWizardAction.java @@ -33,6 +33,7 @@ import java.text.MessageFormat; import java.util.EnumSet; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.concurrent.ExecutionException; import java.util.logging.Level; import javax.swing.ImageIcon; @@ -203,6 +204,21 @@ public final class ReportWizardAction extends CallableSystemAction implements Pr toolbarButton.setText(NbBundle.getMessage(this.getClass(), "ReportWizardAction.toolBarButton.text")); return toolbarButton; } + + /** + * Returns a set of the existing report profile names, removing the special + * named ReportAction. + * + * @return A set of user configurable report profiles, empty list is + * returned if none were found. + */ + public static Set getReportConfigNames() { + Set nameList = ReportingConfigLoader.getListOfReportConfigs(); + //Remove this default name, users cannot change this report. + nameList.remove(REPORTING_CONFIGURATION_NAME); + + return nameList; + } /** * Set this action to be enabled/disabled diff --git a/Core/src/org/sleuthkit/autopsy/report/infrastructure/ReportWizardIterator.java b/Core/src/org/sleuthkit/autopsy/report/infrastructure/ReportWizardIterator.java index 52d15149a7..92de2926bc 100644 --- a/Core/src/org/sleuthkit/autopsy/report/infrastructure/ReportWizardIterator.java +++ b/Core/src/org/sleuthkit/autopsy/report/infrastructure/ReportWizardIterator.java @@ -64,18 +64,20 @@ final class ReportWizardIterator implements WizardDescriptor.Iterator moduleConfigs; private final JButton nextButton; private final JButton finishButton; + private final boolean displayCaseSpecificData; - ReportWizardPanel1(Map moduleConfigs) { + ReportWizardPanel1(Map moduleConfigs, boolean displayCaseSpecificData) { this.moduleConfigs = moduleConfigs; + this.displayCaseSpecificData = displayCaseSpecificData; nextButton = new JButton(NbBundle.getMessage(this.getClass(), "ReportWizardPanel1.nextButton.text")); finishButton = new JButton(NbBundle.getMessage(this.getClass(), "ReportWizardPanel1.finishButton.text")); finishButton.setEnabled(false); @@ -63,7 +65,7 @@ class ReportWizardPanel1 implements WizardDescriptor.FinishablePanel - + @@ -26,27 +26,32 @@ - +
    - + - + + - - - - - + + + + + + + + + + - @@ -60,6 +65,8 @@ + + @@ -106,11 +113,21 @@ - + + + + + + + + + + + diff --git a/Core/src/org/sleuthkit/autopsy/report/infrastructure/ReportWizardPortableCaseOptionsVisualPanel.java b/Core/src/org/sleuthkit/autopsy/report/infrastructure/ReportWizardPortableCaseOptionsVisualPanel.java index 72ffd4b8de..4967431884 100644 --- a/Core/src/org/sleuthkit/autopsy/report/infrastructure/ReportWizardPortableCaseOptionsVisualPanel.java +++ b/Core/src/org/sleuthkit/autopsy/report/infrastructure/ReportWizardPortableCaseOptionsVisualPanel.java @@ -33,11 +33,13 @@ import org.sleuthkit.autopsy.report.modules.portablecase.PortableCaseReportModul @SuppressWarnings("PMD.SingularField") // UI widgets cause lots of false positives class ReportWizardPortableCaseOptionsVisualPanel extends javax.swing.JPanel { + private static final long serialVersionUID = 1L; + private final ReportWizardPortableCaseOptionsPanel wizPanel; private PortableCaseReportModuleSettings settings = null; - private Map moduleConfigs; + private final Map moduleConfigs; private final boolean useCaseSpecificData; - + /** * Creates new form ReportWizardPortableCaseOptionsVisualPanel */ @@ -48,9 +50,9 @@ class ReportWizardPortableCaseOptionsVisualPanel extends javax.swing.JPanel { initComponents(); customizeComponents(); } - + private void customizeComponents() { - + if (!PlatformUtil.isWindowsOS()) { errorLabel.setVisible(true); compressCheckbox.setEnabled(false); @@ -61,7 +63,7 @@ class ReportWizardPortableCaseOptionsVisualPanel extends javax.swing.JPanel { for (ChunkSize chunkSize : ChunkSize.values()) { chunkSizeComboBox.addItem(chunkSize); } - + // initialize settings if (moduleConfigs != null) { // get configuration for this module @@ -75,42 +77,42 @@ class ReportWizardPortableCaseOptionsVisualPanel extends javax.swing.JPanel { } } } - + if (settings == null) { // get default module configuration settings = new PortableCaseReportModuleSettings(); } - + // update according to input configuration compressCheckbox.setSelected(settings.shouldCompress()); chunkSizeComboBox.setEnabled(settings.shouldCompress()); chunkSizeComboBox.setSelectedItem(settings.getChunkSize()); - + // initialize other panels and pass them the settings - listPanel.setLayout(new GridLayout(1,2)); + listPanel.setLayout(new GridLayout(1, 2)); listPanel.add(new PortableCaseTagsListPanel(wizPanel, settings, useCaseSpecificData)); listPanel.add(new PortableCaseInterestingItemsListPanel(wizPanel, settings, useCaseSpecificData)); } - + @NbBundle.Messages({ - "ReportWizardPortableCaseOptionsVisualPanel.getName.title=Choose Portable Case settings", - }) + "ReportWizardPortableCaseOptionsVisualPanel.getName.title=Choose Portable Case settings",}) @Override public String getName() { return Bundle.ReportWizardPortableCaseOptionsVisualPanel_getName_title(); } - + /** * Get the selected chunk size - * + * * @return the chunk size that was selected */ private ChunkSize getChunkSize() { return (ChunkSize) chunkSizeComboBox.getSelectedItem(); } - + /** - * Update the selected compression options and enable/disable the finish button + * Update the selected compression options and enable/disable the finish + * button */ private void updateCompression() { if (settings != null) { @@ -118,7 +120,16 @@ class ReportWizardPortableCaseOptionsVisualPanel extends javax.swing.JPanel { wizPanel.setFinish(settings.isValid()); } } - + + /** + * Update the include application option. + */ + private void updateIncludeApplication() { + if (settings != null) { + settings.setIncludeApplication(includeAppCheckbox.isSelected()); + } + } + /** * Get the user-selected settings. * @@ -126,7 +137,7 @@ class ReportWizardPortableCaseOptionsVisualPanel extends javax.swing.JPanel { */ PortableCaseReportModuleSettings getPortableCaseReportSettings() { return settings; - } + } /** * This method is called from within the constructor to initialize the form. @@ -137,11 +148,12 @@ class ReportWizardPortableCaseOptionsVisualPanel extends javax.swing.JPanel { // //GEN-BEGIN:initComponents private void initComponents() { - jPanel1 = new javax.swing.JPanel(); + mainPanel = new javax.swing.JPanel(); chunkSizeComboBox = new javax.swing.JComboBox<>(); compressCheckbox = new javax.swing.JCheckBox(); errorLabel = new javax.swing.JLabel(); listPanel = new javax.swing.JPanel(); + includeAppCheckbox = new javax.swing.JCheckBox(); chunkSizeComboBox.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { @@ -168,32 +180,44 @@ class ReportWizardPortableCaseOptionsVisualPanel extends javax.swing.JPanel { ); listPanelLayout.setVerticalGroup( listPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 217, Short.MAX_VALUE) + .addGap(0, 190, Short.MAX_VALUE) ); - javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); - jPanel1.setLayout(jPanel1Layout); - jPanel1Layout.setHorizontalGroup( - jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(jPanel1Layout.createSequentialGroup() - .addContainerGap() - .addComponent(compressCheckbox) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(chunkSizeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 187, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(errorLabel) - .addContainerGap(41, Short.MAX_VALUE)) + org.openide.awt.Mnemonics.setLocalizedText(includeAppCheckbox, org.openide.util.NbBundle.getMessage(ReportWizardPortableCaseOptionsVisualPanel.class, "ReportWizardPortableCaseOptionsVisualPanel.includeAppCheckbox.text")); // NOI18N + includeAppCheckbox.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + includeAppCheckboxActionPerformed(evt); + } + }); + + javax.swing.GroupLayout mainPanelLayout = new javax.swing.GroupLayout(mainPanel); + mainPanel.setLayout(mainPanelLayout); + mainPanelLayout.setHorizontalGroup( + mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(listPanel, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(mainPanelLayout.createSequentialGroup() + .addContainerGap() + .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(mainPanelLayout.createSequentialGroup() + .addComponent(compressCheckbox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(chunkSizeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 187, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(errorLabel)) + .addComponent(includeAppCheckbox)) + .addContainerGap(41, Short.MAX_VALUE)) ); - jPanel1Layout.setVerticalGroup( - jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(jPanel1Layout.createSequentialGroup() + mainPanelLayout.setVerticalGroup( + mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(mainPanelLayout.createSequentialGroup() .addComponent(listPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(compressCheckbox) .addComponent(chunkSizeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(errorLabel)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(includeAppCheckbox) .addContainerGap()) ); @@ -203,13 +227,13 @@ class ReportWizardPortableCaseOptionsVisualPanel extends javax.swing.JPanel { layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 463, Short.MAX_VALUE) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addComponent(mainPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 259, Short.MAX_VALUE) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addComponent(mainPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); }// //GEN-END:initComponents @@ -218,16 +242,27 @@ class ReportWizardPortableCaseOptionsVisualPanel extends javax.swing.JPanel { }//GEN-LAST:event_chunkSizeComboBoxActionPerformed private void compressCheckboxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_compressCheckboxActionPerformed - chunkSizeComboBox.setEnabled(compressCheckbox.isSelected()); + chunkSizeComboBox.setEnabled(compressCheckbox.isSelected() && !includeAppCheckbox.isSelected()); updateCompression(); }//GEN-LAST:event_compressCheckboxActionPerformed + private void includeAppCheckboxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_includeAppCheckboxActionPerformed + if (includeAppCheckbox.isSelected()) { + chunkSizeComboBox.setEnabled(false); + chunkSizeComboBox.setSelectedItem(ChunkSize.NONE); + } else { + chunkSizeComboBox.setEnabled(compressCheckbox.isSelected()); + } + updateIncludeApplication(); + }//GEN-LAST:event_includeAppCheckboxActionPerformed + // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JComboBox chunkSizeComboBox; private javax.swing.JCheckBox compressCheckbox; private javax.swing.JLabel errorLabel; - private javax.swing.JPanel jPanel1; + private javax.swing.JCheckBox includeAppCheckbox; private javax.swing.JPanel listPanel; + private javax.swing.JPanel mainPanel; // End of variables declaration//GEN-END:variables } diff --git a/Core/src/org/sleuthkit/autopsy/report/infrastructure/ReportingConfigLoader.java b/Core/src/org/sleuthkit/autopsy/report/infrastructure/ReportingConfigLoader.java index 7f1ee8fc87..8fa54138f0 100755 --- a/Core/src/org/sleuthkit/autopsy/report/infrastructure/ReportingConfigLoader.java +++ b/Core/src/org/sleuthkit/autopsy/report/infrastructure/ReportingConfigLoader.java @@ -29,6 +29,8 @@ import java.nio.file.Paths; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; +import java.util.Set; +import java.util.TreeSet; import java.util.logging.Level; import org.openide.util.io.NbObjectInputStream; import org.openide.util.io.NbObjectOutputStream; @@ -73,7 +75,7 @@ final class ReportingConfigLoader { // Return null if a reporting configuration for the given name does not exist. if (!reportDirectory.exists()) { - return null; + throw new ReportConfigException("Unable to find report configuration folder for " + reportDirPath.toString() + ". Please configure in the application Options panel."); } if (!reportDirectory.isDirectory() || !reportDirectory.canRead()) { @@ -219,5 +221,44 @@ final class ReportingConfigLoader { } } } + + /** + * Return a list of the names of the report profiles in the + * REPORT_CONFIG_FOLDER_PATH. + * + * @return Naturally ordered list of report profile names. If none were found + * the list will be empty. + */ + static synchronized Set getListOfReportConfigs() { + File reportDirPath = new File(ReportingConfigLoader.REPORT_CONFIG_FOLDER_PATH); + Set reportNameList = new TreeSet<>(); + + if (!reportDirPath.exists()) { + return reportNameList; + } + + for (File file : reportDirPath.listFiles()) { + reportNameList.add(file.getName()); + } + + return reportNameList; + } + + /** + * Returns whether or not a config with the given name exists. The config is + * assumed to exist if there is a folder in + * ReportingConfigLoader.REPORT_CONFIG_FOLDER_PATH with the given name. + * + * @param configName Name of the report config. + * + * @return True if the report config exists. + */ + static synchronized boolean configExists(String configName) { + // construct the configuration directory path + Path reportDirPath = Paths.get(ReportingConfigLoader.REPORT_CONFIG_FOLDER_PATH, configName); + File reportDirectory = reportDirPath.toFile(); + + return reportDirectory.exists(); + } } diff --git a/Core/src/org/sleuthkit/autopsy/report/modules/caseuco/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/report/modules/caseuco/Bundle_ja.properties new file mode 100644 index 0000000000..a6c430b198 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/report/modules/caseuco/Bundle_ja.properties @@ -0,0 +1,12 @@ +#Tue Aug 18 18:09:21 UTC 2020 +CaseUcoReportModule.getDesc.text=\u3059\u3079\u3066\u306e\u30d5\u30a1\u30a4\u30eb\u306e\u57fa\u672c\u7684\u306a\u30d7\u30ed\u30d1\u30c6\u30a3\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u542b\u3080CASE-UCO\u5f62\u5f0f\u306e\u30ec\u30dd\u30fc\u30c8\u3002 +CaseUcoReportModule.getName.text=CASE-UCO +CaseUcoReportModule.ingestWarning=\u8b66\u544a\u3001\u3053\u306e\u30ec\u30dd\u30fc\u30c8\u306f\u53d6\u308a\u8fbc\u307f\u30b5\u30fc\u30d3\u30b9\u304c\u5b8c\u4e86\u3059\u308b\u524d\u306b\u4f5c\u6210\u3055\u308c\u307e\u3059 +CaseUcoReportModule.ioError=\u30ec\u30dd\u30fc\u30c8\u306e\u751f\u6210\u4e2d\u306bI / O\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f +CaseUcoReportModule.noCaseOpen=\u73fe\u5728\u958b\u3044\u3066\u3044\u308b\u30b1\u30fc\u30b9\u306f\u3042\u308a\u307e\u305b\u3093 +CaseUcoReportModule.noDataSourceSelected=CASE-UCO\u30ec\u30dd\u30fc\u30c8\u306e\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u304c\u9078\u629e\u3055\u308c\u3066\u3044\u307e\u305b\u3093 +CaseUcoReportModule.notInitialized=CASE-UCO\u8a2d\u5b9a\u30d1\u30cd\u30eb\u304c\u521d\u671f\u5316\u3055\u308c\u3066\u3044\u307e\u305b\u3093 +CaseUcoReportModule.processingDataSource=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3092\u51e6\u7406\u3057\u3066\u3044\u307e\u3059\uff1a%s +CaseUcoReportModule.srcModuleName=CASE-UCO\u30ec\u30dd\u30fc\u30c8 +CaseUcoReportModule.tskCoreException=\u30ec\u30dd\u30fc\u30c8\u306e\u751f\u6210\u4e2d\u306bTskCoreException [%s]\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 \u8a73\u7d30\u306b\u3064\u3044\u3066\u306f\u3001\u30ed\u30b0\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +CaseUcoReportModule.unableToCreateDirectories=CASE-UCO\u30ec\u30dd\u30fc\u30c8\u7528\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093 diff --git a/Core/src/org/sleuthkit/autopsy/report/modules/excel/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/report/modules/excel/Bundle_ja.properties index fd9a57fb2a..6d014b6647 100644 --- a/Core/src/org/sleuthkit/autopsy/report/modules/excel/Bundle_ja.properties +++ b/Core/src/org/sleuthkit/autopsy/report/modules/excel/Bundle_ja.properties @@ -1,10 +1,12 @@ -ReportExcel.numAartifacts.text=\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u6570\uff1a -ReportExcel.getName.text=\u7d50\u679c - Excel -ReportExcel.getDesc.text=\u7d50\u679c\u306b\u95a2\u3059\u308b\u30ec\u30dd\u30fc\u30c8\u3002Excel(XLS)\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3067\u30a2\u30a4\u30c6\u30e0\u306e\u30bf\u30b0\u4ed8\u3051\u304c\u3055\u308c\u3066\u3044\u307e\u3059\u3002 -ReportExcel.sheetName.text=\u30b5\u30de\u30ea\u30fc -ReportExcel.cellVal.summary=\u30b5\u30de\u30ea\u30fc +#Tue Aug 18 18:09:21 UTC 2020 ReportExcel.cellVal.caseName=\u30b1\u30fc\u30b9\u540d\uff1a ReportExcel.cellVal.caseNum=\u30b1\u30fc\u30b9\u756a\u53f7\uff1a ReportExcel.cellVal.examiner=\u8abf\u67fb\u62c5\u5f53\u8005\uff1a ReportExcel.cellVal.numImages=\u30a4\u30e1\u30fc\u30b8\u6570\uff1a +ReportExcel.cellVal.summary=\u30b5\u30de\u30ea\u30fc ReportExcel.endReport.srcModuleName.text=Excel\u30ec\u30dd\u30fc\u30c8 +ReportExcel.getDesc.text=\u7d50\u679c\u306b\u95a2\u3059\u308b\u30ec\u30dd\u30fc\u30c8\u3002Excel(XLS)\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3067\u30a2\u30a4\u30c6\u30e0\u306e\u30bf\u30b0\u4ed8\u3051\u304c\u3055\u308c\u3066\u3044\u307e\u3059\u3002 +ReportExcel.getName.text=\u7d50\u679c - Excel +ReportExcel.numAartifacts.text=\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u6570\uff1a +ReportExcel.sheetName.text=\u30b5\u30de\u30ea\u30fc +ReportExcel.writeSummary.numImages=\u30b1\u30fc\u30b9\u306e\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u6570\uff1a diff --git a/Core/src/org/sleuthkit/autopsy/report/modules/html/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/report/modules/html/Bundle_ja.properties index f05aa0e273..2d587dafab 100644 --- a/Core/src/org/sleuthkit/autopsy/report/modules/html/Bundle_ja.properties +++ b/Core/src/org/sleuthkit/autopsy/report/modules/html/Bundle_ja.properties @@ -1,25 +1,27 @@ -ReportHTML.addThumbRows.dataType.title=\u30bf\u30b0\u4ed8\u3051\u3055\u308c\u305f\u30a4\u30e1\u30fc\u30b8 - {0} +#Tue Aug 18 18:09:21 UTC 2020 ReportHTML.addThumbRows.dataType.msg=\u30a4\u30e1\u30fc\u30b8\u3092\u542b\u3080\u30bf\u30b0\u4ed8\u3051\u3055\u308c\u305f\u7d50\u679c\u304a\u3088\u3073\u30b3\u30f3\u30c6\u30f3\u30c4\u3002 -ReportHTML.thumbLink.tags=\u30bf\u30b0\uff1a -ReportHTML.getName.text=\u7d50\u679c - HTML +ReportHTML.addThumbRows.dataType.title=\u30bf\u30b0\u4ed8\u3051\u3055\u308c\u305f\u30a4\u30e1\u30fc\u30b8 - {0} ReportHTML.getDesc.text=HTML\u5f62\u5f0f\u306e\u7d50\u679c\u304a\u3088\u3073\u30bf\u30b0\u4ed8\u3051\u3055\u308c\u305f\u30a2\u30a4\u30c6\u30e0\u306e\u30ec\u30dd\u30fc\u30c8 -ReportHTML.writeIndex.title=\u30b1\u30fc\u30b9{0}\u306eAutopsy\u30ec\u30dd\u30fc\u30c8 -ReportHTML.writeNav.title=\u30ec\u30dd\u30fc\u30c8\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3 -ReportHTML.writeNav.h1=\u30ec\u30dd\u30fc\u30c8\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3 -ReportHTML.writeNav.summary=\u30b1\u30fc\u30b9\u30b5\u30de\u30ea\u30fc -ReportHTML.writeSum.title=\u30b1\u30fc\u30b9\u30b5\u30de\u30ea\u30fc -ReportHTML.writeSum.caseName=\u30b1\u30fc\u30b9\uff1a -ReportHTML.writeSum.caseNum=\u30b1\u30fc\u30b9\u756a\u53f7\uff1a -ReportHTML.writeSum.examiner=\u8abf\u67fb\u62c5\u5f53\u8005\uff1a -ReportHTML.writeSum.numImages=\u30a4\u30e1\u30fc\u30b8\u6570\uff1a -ReportHTML.writeSum.path=\u30d1\u30b9\uff1a +ReportHTML.getName.text=\u7d50\u679c - HTML +ReportHTML.thumbLink.tags=\u30bf\u30b0\uff1a ReportHTML.writeIndex.noFrames.msg=\u4f7f\u7528\u3057\u3066\u3044\u308b\u30d6\u30e9\u30a6\u30b6\u306f\u5f0a\u793e\u306e\u30d5\u30ec\u30fc\u30e0\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3068\u306e\u4e92\u63db\u6027\u304c\u3042\u308a\u307e\u305b\u3093\u3002 ReportHTML.writeIndex.noFrames.seeNav=\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u30ea\u30f3\u30af\u306f\u4e0b\u8a18\u306e\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3\u30da\u30fc\u30b8\u3092\u3054\u89a7\u4e0b\u3055\u3044 ReportHTML.writeIndex.seeSum=\u307e\u305f\u3001\u30b1\u30fc\u30b9\u30b5\u30de\u30ea\u30fc\u306f\u4e0b\u8a18\u306e\u30b5\u30de\u30ea\u30fc\u30da\u30fc\u30b8\u3092\u3054\u89a7\u4e0b\u3055\u3044\u3002 -ReportHTML.writeSum.warningMsg=\u8b66\u544a\u3001\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30b5\u30fc\u30d3\u30b9\u304c\u5b8c\u4e86\u3059\u308b\u524d\u306b\u30ec\u30dd\u30fc\u30c8\u304c\u5b9f\u884c\u3055\u308c\u307e\u3057\u305f\uff01 -ReportHTML.writeSum.noExaminer=\u8abf\u67fb\u62c5\u5f53\u8005\u7121\u3057 -ReportHTML.writeSum.imageInfoHeading=

    \u30a4\u30e1\u30fc\u30b8\u60c5\u5831\uff1a

    -ReportHTML.writeSum.timezone=\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\uff1a -ReportHTML.writeSum.reportGenOn.text={0}\u306bHTML\u30ec\u30dd\u30fc\u30c8\u306f\u751f\u6210\u3055\u308c\u307e\u3057\u305f -ReportHTML.writeSum.noCaseNum=\u30b1\u30fc\u30b9\u756a\u53f7\u304c\u3042\u308a\u307e\u305b\u3093 ReportHTML.writeIndex.srcModuleName.text=HTML\u30ec\u30dd\u30fc\u30c8 +ReportHTML.writeIndex.title=\u30b1\u30fc\u30b9{0}\u306eAutopsy\u30ec\u30dd\u30fc\u30c8 +ReportHTML.writeNav.h1=\u30ec\u30dd\u30fc\u30c8\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3 +ReportHTML.writeNav.summary=\u30b1\u30fc\u30b9\u30b5\u30de\u30ea\u30fc +ReportHTML.writeNav.title=\u30ec\u30dd\u30fc\u30c8\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3 +ReportHTML.writeSum.caseName=\u30b1\u30fc\u30b9\uff1a +ReportHTML.writeSum.caseNum=\u30b1\u30fc\u30b9\u756a\u53f7\uff1a +ReportHTML.writeSum.caseNumImages=\u30b1\u30fc\u30b9\u306e\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u6570\uff1a +ReportHTML.writeSum.examiner=\u8abf\u67fb\u62c5\u5f53\u8005\uff1a +ReportHTML.writeSum.imageInfoHeading=

    \u30a4\u30e1\u30fc\u30b8\u60c5\u5831\uff1a

    +ReportHTML.writeSum.noCaseNum=\u30b1\u30fc\u30b9\u756a\u53f7\u304c\u3042\u308a\u307e\u305b\u3093 +ReportHTML.writeSum.noExaminer=\u8abf\u67fb\u62c5\u5f53\u8005\u7121\u3057 +ReportHTML.writeSum.numImages=\u30a4\u30e1\u30fc\u30b8\u6570\uff1a +ReportHTML.writeSum.path=\u30d1\u30b9\uff1a +ReportHTML.writeSum.reportGenOn.text={0}\u306bHTML\u30ec\u30dd\u30fc\u30c8\u306f\u751f\u6210\u3055\u308c\u307e\u3057\u305f +ReportHTML.writeSum.timezone=\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\uff1a +ReportHTML.writeSum.title=\u30b1\u30fc\u30b9\u30b5\u30de\u30ea\u30fc +ReportHTML.writeSum.warningMsg=\u8b66\u544a\u3001\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30b5\u30fc\u30d3\u30b9\u304c\u5b8c\u4e86\u3059\u308b\u524d\u306b\u30ec\u30dd\u30fc\u30c8\u304c\u5b9f\u884c\u3055\u308c\u307e\u3057\u305f\uff01 diff --git a/Core/src/org/sleuthkit/autopsy/report/modules/kml/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/report/modules/kml/Bundle_ja.properties index 4593a4b4b6..1ecb353a02 100644 --- a/Core/src/org/sleuthkit/autopsy/report/modules/kml/Bundle_ja.properties +++ b/Core/src/org/sleuthkit/autopsy/report/modules/kml/Bundle_ja.properties @@ -1,6 +1,12 @@ +#Tue Aug 18 18:09:21 UTC 2020 +KMLReport.failedToCompleteReport=\u30ec\u30dd\u30fc\u30c8\u3092\u5b8c\u4e86\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002 +KMLReport.partialFailure=\u30ec\u30dd\u30fc\u30c8\u306e\u4f5c\u6210\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 \u4e00\u90e8\u306e\u30a2\u30a4\u30c6\u30e0\u306f\u51fa\u529b\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f\u3002 +ReportBodyFile.ingestWarning.text=\u8aad\u8fbc\u8b66\u544a\u30e1\u30c3\u30bb\u30fc\u30b8 +ReportKML.genReport.reportName=KML\u30ec\u30dd\u30fc\u30c8 ReportKML.getDesc.text=\u95a2\u9023\u30d5\u30a1\u30a4\u30eb\u306e\u5ea7\u6a19\u3092\u542b\u3080KML\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306e\u30ec\u30dd\u30fc\u30c8\u3002\u3053\u306e\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306fGoogle Earth\u30d3\u30e5\u30fc\u306b\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002 +ReportKML.getFilePath.text=\u30ec\u30dd\u30fc\u30c8KML.kml ReportKML.getName.text=Google Earth/KML ReportKML.progress.loading=\u30d5\u30a1\u30a4\u30eb\u306e\u8aad\u307f\u8fbc\u307f\u4e2d\u2026 ReportKML.progress.querying=\u30d5\u30a1\u30a4\u30eb\u306e\u30af\u30a8\u30ea\u3092\u5b9f\u884c\u4e2d\u2026 -ReportKML.genReport.reportName=KML\u30ec\u30dd\u30fc\u30c8 -ReportKML.getFilePath.text=\u30ec\u30dd\u30fc\u30c8KML.kml +Waypoint_Track_Display_String=GPS\u30c8\u30e9\u30c3\u30af +Waypoint_Track_Point_Display_String=GPS\u500b\u5225\u30c8\u30e9\u30c3\u30af\u30dd\u30a4\u30f3\u30c8 diff --git a/Core/src/org/sleuthkit/autopsy/report/modules/portablecase/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/report/modules/portablecase/Bundle.properties-MERGED index ba4b89820d..d114cbad3b 100755 --- a/Core/src/org/sleuthkit/autopsy/report/modules/portablecase/Bundle.properties-MERGED +++ b/Core/src/org/sleuthkit/autopsy/report/modules/portablecase/Bundle.properties-MERGED @@ -24,6 +24,7 @@ PortableCaseReportModule.generateReport.copyingFiles=Copying files tagged as {0} PortableCaseReportModule.generateReport.copyingTags=Copying tags... PortableCaseReportModule.generateReport.creatingCase=Creating portable case database... PortableCaseReportModule.generateReport.errorCopyingArtifacts=Error copying tagged artifacts +PortableCaseReportModule.generateReport.errorCopyingAutopsy=Error copying application PortableCaseReportModule.generateReport.errorCopyingFiles=Error copying tagged files PortableCaseReportModule.generateReport.errorCopyingInterestingFiles=Error copying interesting files PortableCaseReportModule.generateReport.errorCopyingInterestingResults=Error copying interesting results @@ -42,3 +43,4 @@ PortableCaseReportModule.generateReport.outputDirIsNotDir=Output folder {0} is n PortableCaseReportModule.generateReport.verifying=Verifying selected parameters... PortableCaseReportModule.getDescription.description=Copies selected items to a new single-user case that can be easily shared PortableCaseReportModule.getName.name=Portable Case +PortableCaseReportModule_generateReport_copyingAutopsy=Copying application... diff --git a/Core/src/org/sleuthkit/autopsy/report/modules/portablecase/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/report/modules/portablecase/Bundle_ja.properties new file mode 100644 index 0000000000..f935a447ae --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/report/modules/portablecase/Bundle_ja.properties @@ -0,0 +1,5 @@ +#Tue Aug 18 18:09:21 UTC 2020 +PortableCaseReportModule.generateCaseUcoReport.errorCreatingReportFolder=\u30ec\u30dd\u30fc\u30c8\u30d5\u30a9\u30eb\u30c0\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f +PortableCaseReportModule.generateCaseUcoReport.errorGeneratingCaseUcoReport=CASE-UCO\u30ec\u30dd\u30fc\u30c8\u306e\u751f\u6210\u4e2d\u306e\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f +PortableCaseReportModule.generateCaseUcoReport.startCaseUcoReportGeneration=\u643a\u5e2f\u7528\u30b1\u30fc\u30b9\u306eCASE-UCO\u30ec\u30dd\u30fc\u30c8\u306e\u4f5c\u6210\u4e2d +PortableCaseReportModule.generateCaseUcoReport.successCaseUcoReportGeneration=\u30dd\u30fc\u30bf\u30d6\u30eb\u30b1\u30fc\u30b9\u306eCASE-UCO\u30ec\u30dd\u30fc\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3057\u305f diff --git a/Core/src/org/sleuthkit/autopsy/report/modules/portablecase/PortableCaseReportModule.java b/Core/src/org/sleuthkit/autopsy/report/modules/portablecase/PortableCaseReportModule.java index c97183c31a..3843eb29f4 100644 --- a/Core/src/org/sleuthkit/autopsy/report/modules/portablecase/PortableCaseReportModule.java +++ b/Core/src/org/sleuthkit/autopsy/report/modules/portablecase/PortableCaseReportModule.java @@ -29,6 +29,7 @@ import java.util.logging.Level; import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; +import java.io.FileWriter; import java.io.InputStreamReader; import java.io.IOException; import java.io.OutputStream; @@ -50,6 +51,7 @@ import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException; import org.sleuthkit.autopsy.casemodule.services.TagsManager; import org.sleuthkit.autopsy.casemodule.services.contentviewertags.ContentViewerTagManager; +import org.sleuthkit.autopsy.core.UserPreferences; import org.sleuthkit.autopsy.coreutils.FileUtil; import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.PlatformUtil; @@ -167,9 +169,9 @@ public class PortableCaseReportModule implements ReportModule { * exception is supplied then the error is SEVERE. Otherwise it is logged as * a WARNING. * - * @param logWarning Warning to write to the log + * @param logWarning Warning to write to the log * @param dialogWarning Warning to write to a pop-up window - * @param ex The exception (can be null) + * @param ex The exception (can be null) * @param progressPanel The report progress panel */ private void handleError(String logWarning, String dialogWarning, Exception ex, ReportProgressPanel progressPanel) { @@ -206,9 +208,11 @@ public class PortableCaseReportModule implements ReportModule { "PortableCaseReportModule.generateReport.errorCopyingInterestingFiles=Error copying interesting files", "PortableCaseReportModule.generateReport.errorCopyingInterestingResults=Error copying interesting results", "PortableCaseReportModule.generateReport.errorCreatingImageTagTable=Error creating image tags table", + "PortableCaseReportModule.generateReport.errorCopyingAutopsy=Error copying application", "# {0} - attribute type name", "PortableCaseReportModule.generateReport.errorLookingUpAttrType=Error looking up attribute type {0}", - "PortableCaseReportModule.generateReport.compressingCase=Compressing case..." + "PortableCaseReportModule.generateReport.compressingCase=Compressing case...", + "PortableCaseReportModule_generateReport_copyingAutopsy=Copying application..." }) public void generateReport(String reportPath, PortableCaseReportModuleSettings options, ReportProgressPanel progressPanel) { @@ -244,6 +248,10 @@ public class PortableCaseReportModule implements ReportModule { return; } + // If the applciation is included add an extra level to the directory structure + if (options.includeApplication()) { + outputDir = Paths.get(outputDir.toString(), caseName).toFile(); + } // Check that there will be something to copy List tagNames; if (options.areAllTagsSelected()) { @@ -419,22 +427,30 @@ public class PortableCaseReportModule implements ReportModule { //Attempt to generate and included the CASE-UCO report. generateCaseUcoReport(tagNames, setNames, progressPanel); + if (options.includeApplication()) { + try { + progressPanel.updateStatusLabel(Bundle.PortableCaseReportModule_generateReport_copyingAutopsy()); + copyApplication(getApplicationBasePath(), outputDir.getAbsolutePath()); + createAppLaunchBatFile(outputDir.getAbsolutePath()); + } catch (IOException ex) { + handleError("Error copying autopsy", Bundle.PortableCaseReportModule_generateReport_errorCopyingAutopsy(), ex, progressPanel); // NON-NLS + } + } + // Compress the case (if desired) if (options.shouldCompress()) { progressPanel.updateStatusLabel(Bundle.PortableCaseReportModule_generateReport_compressingCase()); - boolean success = compressCase(progressPanel); + if(!compressCase(progressPanel, options.includeApplication() ? outputDir.getAbsolutePath() : caseFolder.getAbsolutePath())){ + // Errors have been handled already + return; + } // Check for cancellation if (progressPanel.getStatus() == ReportProgressPanel.ReportStatus.CANCELED) { handleCancellation(progressPanel); return; } - - if (!success) { - // Errors have been handled already - return; - } } // Close the case connections and clear out the maps @@ -451,8 +467,8 @@ public class PortableCaseReportModule implements ReportModule { * Only one copy of the file will be saved in the report if it is the source * of more than one of the above. * - * @param tagNames TagNames to included in the report. - * @param setNames SET_NAMEs to include in the report. + * @param tagNames TagNames to included in the report. + * @param setNames SET_NAMEs to include in the report. * @param progressPanel ProgressPanel to relay progress messages. */ @NbBundle.Messages({ @@ -506,7 +522,7 @@ public class PortableCaseReportModule implements ReportModule { // Helper flag to ensure each data source is only written once in // a report. boolean dataSourceHasBeenIncluded = false; - + //Search content tags and artifact tags that match for (TagName tagName : tagNames) { for (ContentTag ct : tagsManager.getContentTagsByTagName(tagName, dataSource.getId())) { @@ -565,16 +581,19 @@ public class PortableCaseReportModule implements ReportModule { /** * Adds the content if and only if it has not already been seen. * - * @param content Content to add to the report. - * @param dataSource Parent dataSource of the content instance. - * @param tmpDir Path to the tmpDir to enforce uniqueness + * @param content Content to add to the report. + * @param dataSource Parent dataSource of the content + * instance. + * @param tmpDir Path to the tmpDir to enforce uniqueness * @param gson * @param exporter - * @param reportWriter Report generator instance to add the content to + * @param reportWriter Report generator instance to add the + * content to * @param dataSourceHasBeenIncluded Flag determining if the data source - * should be written to the report (false indicates that it should be written). - * - * @throws IOException If an I/O error occurs. + * should be written to the report (false + * indicates that it should be written). + * + * @throws IOException If an I/O error occurs. * @throws TskCoreException If an internal database error occurs. * * return True if the file was written during this operation. @@ -630,7 +649,7 @@ public class PortableCaseReportModule implements ReportModule { * Create the case directory and case database. portableSkCase will be set * if this completes without error. * - * @param outputDir The parent for the case folder + * @param outputDir The parent for the case folder * @param progressPanel */ @NbBundle.Messages({ @@ -734,7 +753,7 @@ public class PortableCaseReportModule implements ReportModule { /** * Add all files with a given tag to the portable case. * - * @param oldTagName The TagName object from the current case + * @param oldTagName The TagName object from the current case * @param progressPanel The progress panel * * @throws TskCoreException @@ -779,7 +798,7 @@ public class PortableCaseReportModule implements ReportModule { * @param tag The ContentTag in the current case * * @return The app_data string for this content tag or an empty string if - * there was none + * there was none * * @throws TskCoreException */ @@ -828,7 +847,7 @@ public class PortableCaseReportModule implements ReportModule { * Add an image tag to the portable case. * * @param newContentTag The content tag in the portable case - * @param appData The string to copy into app_data + * @param appData The string to copy into app_data * * @throws TskCoreException */ @@ -840,7 +859,7 @@ public class PortableCaseReportModule implements ReportModule { /** * Add all artifacts with a given tag to the portable case. * - * @param oldTagName The TagName object from the current case + * @param oldTagName The TagName object from the current case * @param progressPanel The progress panel * * @throws TskCoreException @@ -876,8 +895,8 @@ public class PortableCaseReportModule implements ReportModule { * Copy an artifact into the new case. Will also copy any associated * artifacts * - * @param newContentId The content ID (in the portable case) of the source - * content + * @param newContentId The content ID (in the portable case) of the source + * content * @param artifactToCopy The artifact to copy * * @return The new artifact in the portable case @@ -1000,7 +1019,7 @@ public class PortableCaseReportModule implements ReportModule { /** * Top level method to copy a content object to the portable case. * - * @param content The content object to copy + * @param content The content object to copy * @param progressPanel The progress panel * * @return The object ID of the copied content in the portable case @@ -1143,6 +1162,76 @@ public class PortableCaseReportModule implements ReportModule { return UNKNOWN_FILE_TYPE_FOLDER; } + /** + * Returns base path of the users autopsy installation. + * + * @return Path of autopsy installation. + */ + private Path getApplicationBasePath() { + return getAutopsyExePath().getParent().getParent(); + } + + /** + * Find the path of the installed version of autopsy. + * + * @return Path to the installed autopsy.exe. + */ + private Path getAutopsyExePath() { + // If this is an installed version, there should be an 64.exe file in the bin folder + String exeName = getAutopsyExeName(); + String installPath = PlatformUtil.getInstallPath(); + + return Paths.get(installPath, "bin", exeName); + } + + /** + * Generate the name of the autopsy exe. + * + * @return The name of the autopsy exe. + */ + private String getAutopsyExeName() { + String appName = UserPreferences.getAppName(); + return appName + "64.exe"; + } + + /** + * Copy the sorceFolder to destBaseFolder\appName. + * + * @param sourceFolder Autopsy installation directory. + * @param destBaseFolder Report base direction. + * @param appName Name of the application being copied. + * + * @throws IOException + */ + private void copyApplication(Path sourceFolder, String destBaseFolder) throws IOException { + + // Create an appName folder in the destination + Path destAppFolder = Paths.get(destBaseFolder, UserPreferences.getAppName()); + if (!destAppFolder.toFile().exists() && !destAppFolder.toFile().mkdirs()) { + throw new IOException("Failed to create directory " + destAppFolder.toString()); + } + + // Now copy the files + FileUtils.copyDirectory(sourceFolder.toFile(), destAppFolder.toFile()); + } + + /** + * Create a bat file at destBaseFolder that will launch the portable case. + * + * @param destBaseFolder Folder to create the bat file in. + * + * @throws IOException + */ + private void createAppLaunchBatFile(String destBaseFolder) throws IOException { + Path filePath = Paths.get(destBaseFolder, "open.bat"); + String appName = UserPreferences.getAppName(); + String exePath = "\"%~dp0" + appName + "\\bin\\" + getAutopsyExeName() + "\""; + String casePath = "..\\" + caseName; + try (FileWriter writer = new FileWriter(filePath.toFile())) { + writer.write(exePath + " \"" + casePath + "\""); + } + } + /** * Clear out the maps and other fields and close the database connections. */ @@ -1171,11 +1260,10 @@ public class PortableCaseReportModule implements ReportModule { } } - /*@Override - public JPanel getConfigurationPanel() { - configPanel = new CreatePortableCasePanel(); - return configPanel; - } */ + /* + * @Override public JPanel getConfigurationPanel() { configPanel = new + * CreatePortableCasePanel(); return configPanel; } + */ private class StoreMaxIdCallback implements CaseDbAccessManager.CaseDbAccessQueryCallback { private final String tableName; @@ -1213,14 +1301,14 @@ public class PortableCaseReportModule implements ReportModule { "PortableCaseReportModule.compressCase.errorCreatingTempFolder=Could not create temporary folder {0}", "PortableCaseReportModule.compressCase.errorCompressingCase=Error compressing case", "PortableCaseReportModule.compressCase.canceled=Compression canceled by user",}) - private boolean compressCase(ReportProgressPanel progressPanel) { - - // Close the portable case database (we still need some of the variables that would be cleared by cleanup()) + private boolean compressCase(ReportProgressPanel progressPanel, String folderToCompress) { + closePortableCaseDatabase(); // Make a temporary folder for the compressed case - File tempZipFolder = Paths.get(currentCase.getTempDirectory(), "portableCase" + System.currentTimeMillis()).toFile(); // NON-NLS - if (!tempZipFolder.mkdir()) { + Path dirToCompress = Paths.get(folderToCompress); + File tempZipFolder = Paths.get(dirToCompress.getParent().toString(), "temp", "portableCase" + System.currentTimeMillis()).toFile(); + if (!tempZipFolder.mkdirs()) { handleError("Error creating temporary folder " + tempZipFolder.toString(), Bundle.PortableCaseReportModule_compressCase_errorCreatingTempFolder(tempZipFolder.toString()), null, progressPanel); // NON-NLS return false; @@ -1245,7 +1333,7 @@ public class PortableCaseReportModule implements ReportModule { sevenZipExe.getAbsolutePath(), "a", // Add to archive zipFile.getAbsolutePath(), - caseFolder.getAbsolutePath(), + dirToCompress.toAbsolutePath().toString(), chunkOption ); @@ -1280,9 +1368,9 @@ public class PortableCaseReportModule implements ReportModule { // Delete everything in the case folder then copy over the compressed file(s) try { - FileUtils.cleanDirectory(caseFolder); - FileUtils.copyDirectory(tempZipFolder, caseFolder); - FileUtils.deleteDirectory(tempZipFolder); + FileUtils.cleanDirectory(dirToCompress.toFile()); + FileUtils.copyDirectory(tempZipFolder, dirToCompress.toFile()); + FileUtils.deleteDirectory(new File(tempZipFolder.getParent())); } catch (IOException ex) { handleError("Error compressing case", Bundle.PortableCaseReportModule_compressCase_errorCompressingCase(), ex, progressPanel); // NON-NLS return false; diff --git a/Core/src/org/sleuthkit/autopsy/report/modules/portablecase/PortableCaseReportModuleSettings.java b/Core/src/org/sleuthkit/autopsy/report/modules/portablecase/PortableCaseReportModuleSettings.java index b3d1dea9e0..1f37b7fd9d 100755 --- a/Core/src/org/sleuthkit/autopsy/report/modules/portablecase/PortableCaseReportModuleSettings.java +++ b/Core/src/org/sleuthkit/autopsy/report/modules/portablecase/PortableCaseReportModuleSettings.java @@ -1,7 +1,7 @@ /* * Autopsy Forensic Browser * - * Copyright 2019 Basis Technology Corp. + * Copyright 2019-2020 Basis Technology Corp. * Contact: carrier sleuthkit org * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -36,6 +36,7 @@ public class PortableCaseReportModuleSettings implements ReportModuleSettings { private ChunkSize chunkSize; private boolean allTagsSelected; private boolean allSetsSelected; + private boolean shouldIncludeApplication; /** * Enum for storing the display name for each chunk type and the @@ -141,6 +142,10 @@ public class PortableCaseReportModuleSettings implements ReportModuleSettings { public boolean areAllSetsSelected() { return allSetsSelected; } + + public boolean includeApplication() { + return shouldIncludeApplication; + } /** * @param allTagsSelected the allTagsSelected to set @@ -155,5 +160,9 @@ public class PortableCaseReportModuleSettings implements ReportModuleSettings { public void setAllSetsSelected(boolean allSetsSelected) { this.allSetsSelected = allSetsSelected; } + + public void setIncludeApplication(boolean includeApplication) { + this.shouldIncludeApplication = includeApplication; + } } diff --git a/Core/src/org/sleuthkit/autopsy/resultviewers/summary/DataSourceSummaryResultViewer.java b/Core/src/org/sleuthkit/autopsy/resultviewers/summary/DataSourceSummaryResultViewer.java index 1b1b3cb127..4cc90e9843 100644 --- a/Core/src/org/sleuthkit/autopsy/resultviewers/summary/DataSourceSummaryResultViewer.java +++ b/Core/src/org/sleuthkit/autopsy/resultviewers/summary/DataSourceSummaryResultViewer.java @@ -26,7 +26,7 @@ import org.openide.explorer.ExplorerManager; import org.openide.nodes.Node; import org.openide.util.NbBundle.Messages; import org.openide.util.lookup.ServiceProvider; -import org.sleuthkit.autopsy.casemodule.datasourcesummary.DataSourceSummaryTabbedPane; +import org.sleuthkit.autopsy.datasourcesummary.ui.DataSourceSummaryTabbedPane; import org.sleuthkit.autopsy.corecomponentinterfaces.DataResultViewer; import org.sleuthkit.autopsy.corecomponents.AbstractDataResultViewer; import org.sleuthkit.datamodel.DataSource; diff --git a/Core/src/org/sleuthkit/autopsy/texttranslation/translators/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/texttranslation/translators/Bundle_ja.properties index 6ad3b7e741..3a2cd47a80 100644 --- a/Core/src/org/sleuthkit/autopsy/texttranslation/translators/Bundle_ja.properties +++ b/Core/src/org/sleuthkit/autopsy/texttranslation/translators/Bundle_ja.properties @@ -1,9 +1,18 @@ +#Tue Aug 18 18:09:21 UTC 2020 BingTranslator.name.text=Bing\u3067\u7ffb\u8a33\u8005\u3092\u691c\u7d22 +BingTranslatorSettingsPanel.authenticationKeyField.toolTipText=\u6b21\u306e\u30cf\u30c3\u30b7\u30e5\u3092\u5165\u529b\u3059\u308b +BingTranslatorSettingsPanel.authenticationKeyLabel.text=\u8a8d\u8a3c\u30ad\u30fc\: +BingTranslatorSettingsPanel.instructionsTextArea.text_1=
    Microsoft Translator\u30a2\u30ab\u30a6\u30f3\u30c8\u306bMicrosoft Translator\u8a8d\u8a3c\u30ad\u30fc\u3092\u63d0\u4f9b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 \u5165\u624b\u65b9\u6cd5\u306e\u8aac\u660e\u306f\u6b21\u306e\u5834\u6240\u306b\u3042\u308a\u307e\u3059\uff1a https\://docs.microsoft.com/en-us/ azure / cognitive-services / translator / translator-text-how-to-signup \u3002 +BingTranslatorSettingsPanel.resultLabel.text=\u7d50\u679c\: +BingTranslatorSettingsPanel.targetLanguageLabel.text=\u5bfe\u8c61\u8a00\u8a9e\: +BingTranslatorSettingsPanel.testButton.text=\u30c6\u30b9\u30c8 +BingTranslatorSettingsPanel.testResultValueLabel.text= +BingTranslatorSettingsPanel.untranslatedLabel.text=\u672a\u7ffb\u8a33\: BingTranslatorSettingsPanel.warning.invalidKey=\u7121\u52b9\u306a\u7ffb\u8a33\u8a8d\u8a3c\u30ad\u30fc\u3067\u3059 BingTranslatorSettingsPanel.warning.targetLanguageFailure=\u5bfe\u8c61\u8a00\u8a9e\u306e\u30ea\u30b9\u30c8\u3092\u53d6\u5f97\u3067\u304d\u306a\u3044\u304b\u3001\u53d7\u4fe1\u3057\u305f\u7d50\u679c\u3092\u89e3\u6790\u3067\u304d\u307e\u305b\u3093 GoogleTranslator.name.text=Google\u7ffb\u8a33 GoogleTranslatorSettingsPanel.browseButton.text=\u53c2\u7167 -GoogleTranslatorSettingsPanel.credentialsLabel.text=\u8cc7\u683c\u60c5\u5831\u306e\u30d1\u30b9: +GoogleTranslatorSettingsPanel.credentialsLabel.text=\u8cc7\u683c\u60c5\u5831\u306e\u30d1\u30b9\: GoogleTranslatorSettingsPanel.errorMessage.fileNotFound=\u8cc7\u683c\u60c5\u5831\u30d5\u30a1\u30a4\u30eb\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002\u6709\u52b9\u306aJSON\u8cc7\u683c\u60c5\u5831\u30d5\u30a1\u30a4\u30eb\u306e\u3042\u308b\u5834\u6240\u3092\u8a2d\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002 GoogleTranslatorSettingsPanel.errorMessage.noFileSelected=Google\u7ffb\u8a33\u306b\u8cc7\u683c\u60c5\u5831\u3092\u63d0\u4f9b\u3059\u308b\u305f\u3081\u306b\u30011\u3064\u306eJSON\u30d5\u30a1\u30a4\u30eb\u3092\u9078\u629e\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 GoogleTranslatorSettingsPanel.errorMessage.translationFailure=\u6307\u5b9a\u3057\u305f\u8cc7\u683c\u60c5\u5831\u3067\u306f\u7ffb\u8a33\u3067\u304d\u307e\u305b\u3093 @@ -12,19 +21,11 @@ GoogleTranslatorSettingsPanel.errorMessage.unableToReadCredentials=\u8cc7\u683c\ GoogleTranslatorSettingsPanel.errorMessage.unknownFailureGetting=\u73fe\u5728\u306e\u8cc7\u683c\u60c5\u5831\u30d5\u30a1\u30a4\u30eb\u3067\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u8a00\u8a9e\u306e\u30ea\u30b9\u30c8\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3002 GoogleTranslatorSettingsPanel.errorMessage.unknownFailurePopulating=\u73fe\u5728\u306e\u8cc7\u683c\u60c5\u5831\u30d5\u30a1\u30a4\u30eb\u3067\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u8a00\u8a9e\u306e\u30ea\u30b9\u30c8\u3092\u5165\u529b\u3067\u304d\u307e\u305b\u3093\u3002 GoogleTranslatorSettingsPanel.fileChooser.confirmButton=\u9078\u629e +GoogleTranslatorSettingsPanel.instructionsTextArea.text=
    Google\u7ffb\u8a33\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u30b5\u30fc\u30d3\u30b9\u30fb\u30a2\u30ab\u30a6\u30f3\u30c8\u30ad\u30fc\u3092\u542b\u3080JSON\u8a8d\u8a3c\u60c5\u5831\u30d5\u30a1\u30a4\u30eb\u304c\u5fc5\u8981\u306b\u306a\u308a\u307e\u3059\u3002 \u30b5\u30fc\u30d3\u30b9\u30a2\u30fb\u30ab\u30a6\u30f3\u30c8\u30ad\u30fc\u306e\u4f5c\u6210\u65b9\u6cd5\u306b\u3064\u3044\u3066\u306f\u3001\u3053\u3061\u3089\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002 https\://cloud.google.com/iam/docs/creating-managing-service-account-keys\u3002 GoogleTranslatorSettingsPanel.json.description=JSON\u30d5\u30a1\u30a4\u30eb -GoogleTranslatorSettingsPanel.warningLabel.text= -GoogleTranslatorSettingsPanel.targetLanguageLabel.text=\u5bfe\u8c61\u8a00\u8a9e: -BingTranslatorSettingsPanel.testButton.text=\u30c6\u30b9\u30c8 -BingTranslatorSettingsPanel.testResultValueLabel.text= -BingTranslatorSettingsPanel.resultLabel.text=\u7d50\u679c: -BingTranslatorSettingsPanel.untranslatedLabel.text=\u672a\u7ffb\u8a33: -BingTranslatorSettingsPanel.targetLanguageLabel.text=\u5bfe\u8c61\u8a00\u8a9e: -BingTranslatorSettingsPanel.authenticationKeyField.toolTipText=\u6b21\u306e\u30cf\u30c3\u30b7\u30e5\u3092\u5165\u529b\u3059\u308b +GoogleTranslatorSettingsPanel.resultLabel.text=\u7d50\u679c\: +GoogleTranslatorSettingsPanel.targetLanguageLabel.text=\u5bfe\u8c61\u8a00\u8a9e\: GoogleTranslatorSettingsPanel.testButton.text=\u30c6\u30b9\u30c8 -GoogleTranslatorSettingsPanel.untranslatedLabel.text=\u672a\u7ffb\u8a33: -GoogleTranslatorSettingsPanel.resultLabel.text=\u7d50\u679c: GoogleTranslatorSettingsPanel.testResultValueLabel.text= -BingTranslatorSettingsPanel.authenticationKeyLabel.text=\u8a8d\u8a3c\u30ad\u30fc: -GoogleTranslatorSettingsPanel.instructionsTextArea.text=\u304a\u4f7f\u3044\u306eGoogle\u7ffb\u8a33\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u30b5\u30fc\u30d3\u30b9\u30a2\u30ab\u30a6\u30f3\u30c8\u30ad\u30fc\u306b\u542b\u307e\u308c\u308bJSON\u8cc7\u683c\u60c5\u5831\u30d5\u30a1\u30a4\u30eb\u304c\u5fc5\u8981\u306b\u306a\u308a\u307e\u3059\u3002\u30b5\u30fc\u30d3\u30b9\u30a2\u30ab\u30a6\u30f3\u30c8\u30ad\u30fc\u306e\u4f5c\u6210\u65b9\u6cd5\u306b\u95a2\u3059\u308b\u60c5\u5831\u306f\u3053\u3061\u3089\u306b\u3042\u308a\u3042\u307e\u3059: https://cloud.google.com/iam/docs/creating-managing-service-account-keys -BingTranslatorSettingsPanel.instructionsTextArea.text=\u304a\u4f7f\u3044\u306eMicrosoft Translator\u30a2\u30ab\u30a6\u30f3\u30c8\u306bMicrosoft Translator\u8a8d\u8a3c\u30ad\u30fc\u3092\u63d0\u4f9b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u30ad\u30fc\u306e\u53d6\u5f97\u65b9\u6cd5\u306b\u95a2\u3059\u308b\u624b\u9806\u306f\u3053\u3061\u3089\u306b\u3042\u308a\u307e\u3059: https://docs.microsoft.com/en-us/azure/cognitive-services/translator/translator-text-how-to-signup +GoogleTranslatorSettingsPanel.untranslatedLabel.text=\u672a\u7ffb\u8a33\: +GoogleTranslatorSettingsPanel.warningLabel.text= diff --git a/Core/src/org/sleuthkit/autopsy/timeline/OpenTimelineAction.java b/Core/src/org/sleuthkit/autopsy/timeline/OpenTimelineAction.java index d8112fe9fb..202e521dc2 100755 --- a/Core/src/org/sleuthkit/autopsy/timeline/OpenTimelineAction.java +++ b/Core/src/org/sleuthkit/autopsy/timeline/OpenTimelineAction.java @@ -51,7 +51,7 @@ import org.sleuthkit.datamodel.TskCoreException; @ActionID(category = "Tools", id = "org.sleuthkit.autopsy.timeline.Timeline") @ActionRegistration(displayName = "#CTL_MakeTimeline", lazy = false) @ActionReferences(value = { - @ActionReference(path = "Menu/Tools", position = 102) + @ActionReference(path = "Menu/Tools", position = 104) , @ActionReference(path = "Toolbars/Case", position = 104)}) public final class OpenTimelineAction extends CallableSystemAction { diff --git a/Core/src/org/sleuthkit/autopsy/timeline/ui/filtering/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/timeline/ui/filtering/Bundle_ja.properties index 6c9352b270..099dc1c53d 100644 --- a/Core/src/org/sleuthkit/autopsy/timeline/ui/filtering/Bundle_ja.properties +++ b/Core/src/org/sleuthkit/autopsy/timeline/ui/filtering/Bundle_ja.properties @@ -1,7 +1,8 @@ +#Tue Aug 18 18:09:21 UTC 2020 FilsetSetPanel.hiddenDescriptionsPane.displayName=\u975e\u8868\u793a\u306e\u8aac\u660e FilterSetPanel.applyButton.longText=\u30d5\u30a3\u30eb\u30bf\u30fc\u3092(\u6700)\u9069\u7528 FilterSetPanel.applyButton.text=\u9069\u7528 -FilterSetPanel.defaultButton.text=\u30c7\u30d5\u30a9\u30eb\u30c8 +FilterSetPanel.defaultButton.text=\u30ea\u30bb\u30c3\u30c8 FilterSetPanel.hiddenDescriptionsListView.remove=\u30ea\u30b9\u30c8\u304b\u3089\u524a\u9664 FilterSetPanel.hiddenDescriptionsListView.unhideAndRemove=\u975e\u8868\u793a\u306b\u3057\u3066\u30ea\u30b9\u30c8\u304b\u3089\u524a\u9664 Timeline.ui.filtering.menuItem.all=\u3059\u3079\u3066 diff --git a/Core/test/qa-functional/src/org/sleuthkit/autopsy/commonpropertiessearch/InterCaseTestUtils.java b/Core/test/qa-functional/src/org/sleuthkit/autopsy/commonpropertiessearch/InterCaseTestUtils.java index cb270a6082..85fe4d91c7 100644 --- a/Core/test/qa-functional/src/org/sleuthkit/autopsy/commonpropertiessearch/InterCaseTestUtils.java +++ b/Core/test/qa-functional/src/org/sleuthkit/autopsy/commonpropertiessearch/InterCaseTestUtils.java @@ -56,7 +56,6 @@ import org.sleuthkit.autopsy.datamodel.DisplayableItemNode; import org.sleuthkit.autopsy.datamodel.utils.DataSourceLoader; import org.sleuthkit.autopsy.modules.dataSourceIntegrity.DataSourceIntegrityModuleFactory; import org.sleuthkit.autopsy.modules.embeddedfileextractor.EmbeddedFileExtractorModuleFactory; -import org.sleuthkit.autopsy.modules.exif.ExifParserModuleFactory; import org.sleuthkit.autopsy.modules.fileextmismatch.FileExtMismatchDetectorModuleFactory; import org.sleuthkit.autopsy.modules.interestingitems.InterestingItemsIngestModuleFactory; import org.sleuthkit.autopsy.modules.photoreccarver.PhotoRecCarverIngestModuleFactory; @@ -64,6 +63,7 @@ import org.sleuthkit.autopsy.modules.vmextractor.VMExtractorIngestModuleFactory; import org.sleuthkit.datamodel.AbstractFile; import org.sleuthkit.autopsy.centralrepository.datamodel.CentralRepository; import org.sleuthkit.autopsy.centralrepository.datamodel.RdbmsCentralRepoFactory; +import org.sleuthkit.autopsy.modules.pictureanalyzer.PictureAnalyzerIngestModuleFactory; /** * Utilities for testing intercase correlation feature. @@ -168,7 +168,7 @@ class InterCaseTestUtils { this.imageDSProcessor = new ImageDSProcessor(); - final IngestModuleTemplate exifTemplate = IngestUtils.getIngestModuleTemplate(new ExifParserModuleFactory()); + final IngestModuleTemplate pictureAnalyzerTemplate = IngestUtils.getIngestModuleTemplate(new PictureAnalyzerIngestModuleFactory()); final IngestModuleTemplate embeddedFileExtractorTemplate = IngestUtils.getIngestModuleTemplate(new EmbeddedFileExtractorModuleFactory()); final IngestModuleTemplate interestingItemsTemplate = IngestUtils.getIngestModuleTemplate(new InterestingItemsIngestModuleFactory()); final IngestModuleTemplate mimeTypeLookupTemplate = IngestUtils.getIngestModuleTemplate(new FileTypeIdModuleFactory()); @@ -201,7 +201,7 @@ class InterCaseTestUtils { //kitchen sink ArrayList kitchenSink = new ArrayList<>(); - kitchenSink.add(exifTemplate); + kitchenSink.add(pictureAnalyzerTemplate); kitchenSink.add(embeddedFileExtractorTemplate); kitchenSink.add(interestingItemsTemplate); kitchenSink.add(mimeTypeLookupTemplate); diff --git a/CoreLibs/ivy.xml b/CoreLibs/ivy.xml index 813f35fa4d..1c83e48a09 100644 --- a/CoreLibs/ivy.xml +++ b/CoreLibs/ivy.xml @@ -21,7 +21,7 @@ - + - - - - - - - - - - - - + + + + - - + + @@ -46,7 +38,11 @@ + + + + - diff --git a/KeywordSearch/nbproject/project.properties b/KeywordSearch/nbproject/project.properties index 72a5c81ab7..b0c06e183e 100644 --- a/KeywordSearch/nbproject/project.properties +++ b/KeywordSearch/nbproject/project.properties @@ -1,69 +1,27 @@ -file.reference.boilerpipe-1.1.0.jar=release/modules/ext/boilerpipe-1.1.0.jar -file.reference.bzip2-0.9.1.jar=release/modules/ext/bzip2-0.9.1.jar -file.reference.c3p0-0.9.1.1.jar=release/modules/ext/c3p0-0.9.1.1.jar -file.reference.cdm-4.5.5.jar=release/modules/ext/cdm-4.5.5.jar -file.reference.cleartk-util-2.0.0.jar=release/modules/ext/cleartk-util-2.0.0.jar -file.reference.commons-beanutils-1.9.2.jar=release/modules/ext/commons-beanutils-1.9.2.jar -file.reference.commons-collections-3.2.2.jar=release/modules/ext/commons-collections-3.2.2.jar -file.reference.commons-digester-1.8.1.jar=release/modules/ext/commons-digester-1.8.1.jar -file.reference.commons-exec-1.3.jar=release/modules/ext/commons-exec-1.3.jar -file.reference.commons-lang-2.6.jar=release/modules/ext/commons-lang-2.6.jar -file.reference.commons-logging-1.2.jar=release/modules/ext/commons-logging-1.2.jar -file.reference.commons-logging-api-1.1.jar=release/modules/ext/commons-logging-api-1.1.jar -file.reference.commons-validator-1.5.1.jar=release/modules/ext/commons-validator-1.5.1.jar -file.reference.ehcache-core-2.6.2.jar=release/modules/ext/ehcache-core-2.6.2.jar -file.reference.findstructapi-0.0.1.jar=release/modules/ext/findstructapi-0.0.1.jar -file.reference.grib-4.5.5.jar=release/modules/ext/grib-4.5.5.jar -file.reference.guava-17.0.jar=release/modules/ext/guava-17.0.jar -file.reference.hamcrest-core-1.3.jar=release/modules/ext/hamcrest-core-1.3.jar +file.reference.annotations-12.0.jar=release\\modules\\ext\\annotations-12.0.jar +file.reference.commons-beanutils-1.9.2.jar=release\\modules\\ext\\commons-beanutils-1.9.2.jar +file.reference.commons-collections-3.2.2.jar=release\\modules\\ext\\commons-collections-3.2.2.jar +file.reference.commons-digester-1.8.1.jar=release\\modules\\ext\\commons-digester-1.8.1.jar +file.reference.commons-io-2.3.jar=release\\modules\\ext\\commons-io-2.3.jar +file.reference.commons-lang-2.4.jar=release\\modules\\ext\\commons-lang-2.4.jar +file.reference.commons-logging-1.2.jar=release\\modules\\ext\\commons-logging-1.2.jar +file.reference.commons-validator-1.5.1.jar=release\\modules\\ext\\commons-validator-1.5.1.jar +file.reference.guava-18.0.jar=release\\modules\\ext\\guava-18.0.jar file.reference.httpclient-4.5.6.jar=release\\modules\\ext\\httpclient-4.5.6.jar -file.reference.httpcore-4.4.10.jar=release/modules/ext/httpcore-4.4.10.jar +file.reference.httpcore-4.4.10.jar=release\\modules\\ext\\httpcore-4.4.10.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.icu4j-3.8.jar=release/modules/ext/icu4j-3.8.jar -file.reference.java-libpst-0.8.1.jar=release/modules/ext/java-libpst-0.8.1.jar -file.reference.jcip-annotations-1.0.jar=release/modules/ext/jcip-annotations-1.0.jar -file.reference.jcommander-1.35.jar=release/modules/ext/jcommander-1.35.jar -file.reference.jdom-1.0.jar=release/modules/ext/jdom-1.0.jar -file.reference.jericho-html-3.3.jar=release/modules/ext/jericho-html-3.3.jar -file.reference.joda-time-2.2.jar=release/modules/ext/joda-time-2.2.jar -file.reference.json-simple-1.1.1.jar=release/modules/ext/json-simple-1.1.1.jar -file.reference.juniversalchardet-1.0.3.jar=release/modules/ext/juniversalchardet-1.0.3.jar +file.reference.icu4j-3.8.jar=release\\modules\\ext\\icu4j-3.8.jar +file.reference.jericho-html-3.3.jar=release\\modules\\ext\\jericho-html-3.3.jar +file.reference.jsonic-1.2.11.jar=release\\modules\\ext\\jsonic-1.2.11.jar file.reference.language-detector-0.6.jar=release\\modules\\ext\\language-detector-0.6.jar -file.reference.libsvm-3.1.jar=release/modules/ext/libsvm-3.1.jar -file.reference.log4j-1.2.17.jar=release/modules/ext/log4j-1.2.17.jar -file.reference.lucene-core-4.0.0.jar=release/modules/ext/lucene-core-4.0.0.jar -file.reference.lucene-queries-4.0.0.jar=release/modules/ext/lucene-queries-4.0.0.jar -file.reference.lucene-sandbox-4.0.0.jar=release/modules/ext/lucene-sandbox-4.0.0.jar -file.reference.netcdf4-4.5.5.jar=release/modules/ext/netcdf4-4.5.5.jar -file.reference.noggit-0.5.jar=release/modules/ext/noggit-0.5.jar -file.reference.openaifsm-0.0.1.jar=release/modules/ext/openaifsm-0.0.1.jar -file.reference.opennlp-maxent-3.0.3.jar=release/modules/ext/opennlp-maxent-3.0.3.jar -file.reference.poi-4.0.1.jar=release/modules/ext/poi-4.0.1.jar -file.reference.poi-ooxml-4.0.1.jar=release/modules/ext/poi-ooxml-4.0.1.jar -file.reference.poi-ooxml-schemas-4.0.1.jar=release/modules/ext/poi-ooxml-schemas-4.0.1.jar -file.reference.poi-scratchpad-4.0.1.jar=release/modules/ext/poi-scratchpad-4.0.1.jar -file.reference.protobuf-java-2.5.0.jar=release/modules/ext/protobuf-java-2.5.0.jar -file.reference.quartz-2.2.0.jar=release/modules/ext/quartz-2.2.0.jar -file.reference.solr-solrj-4.9.1.jar=release/modules/ext/solr-solrj-4.9.1.jar -file.reference.sqlwrapper-0.0.1.jar=release/modules/ext/sqlwrapper-0.0.1.jar -file.reference.stax2-api-3.1.4.jar=release/modules/ext/stax2-api-3.1.4.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.udunits-4.5.5.jar=release/modules/ext/udunits-4.5.5.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.woodstox-core-asl-4.4.1.jar=release/modules/ext/woodstox-core-asl-4.4.1.jar +file.reference.noggit-0.5.jar=release\\modules\\ext\\noggit-0.5.jar +file.reference.slf4j-api-1.7.6.jar=release\\modules\\ext\\slf4j-api-1.7.6.jar +file.reference.solr-solrj-4.9.1.jar=release\\modules\\ext\\solr-solrj-4.9.1.jar file.reference.wstx-asl-3.2.7.jar=release\\modules\\ext\\wstx-asl-3.2.7.jar -file.reference.xmlbeans-2.6.0.jar=release/modules/ext/xmlbeans-2.6.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 +file.reference.zookeeper-3.4.6.jar=release\\modules\\ext\\zookeeper-3.4.6.jar javac.source=1.8 javac.compilerargs=-Xlint -Xlint:-serial -javadoc.reference.commons-validator-1.5.1.jar=release/modules/ext/commons-validator-1.5.1-javadoc.jar license.file=../LICENSE-2.0.txt nbm.homepage=http://www.sleuthkit.org/autopsy/ nbm.needs.restart=true -source.reference.commons-validator-1.5.1.jar=release/modules/ext/commons-validator-1.5.1-sources.jar spec.version.base=6.6 diff --git a/KeywordSearch/nbproject/project.xml b/KeywordSearch/nbproject/project.xml index bd5072a4be..2df46265fa 100644 --- a/KeywordSearch/nbproject/project.xml +++ b/KeywordSearch/nbproject/project.xml @@ -113,13 +113,21 @@ 6.40.1 + + org.sleuthkit.autopsy.Tika + + + + 1.0 + + org.sleuthkit.autopsy.core 10 - 10.20 + 10.21 @@ -206,7 +214,6 @@ org.apache.solr.common.luke org.apache.solr.common.params org.apache.solr.common.util - org.apache.tika.parser.txt org.apache.zookeeper org.apache.zookeeper.client org.apache.zookeeper.common @@ -232,184 +239,16 @@ org.sleuthkit.autopsy.keywordsearch - ext/commons-digester-1.8.1.jar - release/modules/ext/commons-digester-1.8.1.jar - - - ext/lucene-sandbox-4.0.0.jar - release/modules/ext/lucene-sandbox-4.0.0.jar - - - ext/jericho-html-3.3.jar - release/modules/ext/jericho-html-3.3.jar - - - ext/cdm-4.5.5.jar - release/modules/ext/cdm-4.5.5.jar - - - ext/httpservices-4.5.5.jar - release/modules/ext/httpservices-4.5.5.jar - - - ext/httpcore-4.4.10.jar - release/modules/ext/httpcore-4.4.10.jar - - - ext/hamcrest-core-1.3.jar - release/modules/ext/hamcrest-core-1.3.jar - - - ext/boilerpipe-1.1.0.jar - release/modules/ext/boilerpipe-1.1.0.jar - - - ext/commons-logging-api-1.1.jar - release/modules/ext/commons-logging-api-1.1.jar - - - ext/quartz-2.2.0.jar - release/modules/ext/quartz-2.2.0.jar - - - ext/icu4j-3.8.jar - release/modules/ext/icu4j-3.8.jar - - - ext/guava-19.0.jar - release/modules/ext/guava-19.0.jar - - - ext/language-detector-0.6.jar - release\modules\ext\language-detector-0.6.jar - - - ext/joda-time-2.2.jar - release/modules/ext/joda-time-2.2.jar - - - ext/tika-core-1.20.jar - release/modules/ext/tika-core-1.20.jar - - - ext/tagsoup-1.2.1.jar - release/modules/ext/tagsoup-1.2.1.jar - - - ext/lucene-core-4.0.0.jar - release/modules/ext/lucene-core-4.0.0.jar - - - ext/opennlp-maxent-3.0.3.jar - release/modules/ext/opennlp-maxent-3.0.3.jar - - - ext/poi-scratchpad-4.0.1.jar - release/modules/ext/poi-scratchpad-4.0.1.jar - - - ext/commons-logging-1.2.jar - release/modules/ext/commons-logging-1.2.jar - - - ext/json-simple-1.1.1.jar - release/modules/ext/json-simple-1.1.1.jar - - - ext/c3p0-0.9.1.1.jar - release/modules/ext/c3p0-0.9.1.1.jar - - - ext/poi-ooxml-4.0.1.jar - release/modules/ext/poi-ooxml-4.0.1.jar - - - ext/tika-parsers-1.20.jar - release/modules/ext/tika-parsers-1.20.jar - - - ext/sqlwrapper-0.0.1.jar - release/modules/ext/sqlwrapper-0.0.1.jar - - - ext/log4j-1.2.17.jar - release/modules/ext/log4j-1.2.17.jar - - - ext/udunits-4.5.5.jar - release/modules/ext/udunits-4.5.5.jar - - - ext/commons-collections-3.2.2.jar - release/modules/ext/commons-collections-3.2.2.jar - - - ext/openaifsm-0.0.1.jar - release/modules/ext/openaifsm-0.0.1.jar - - - ext/stax2-api-3.1.4.jar - release/modules/ext/stax2-api-3.1.4.jar - - - ext/solr-solrj-4.9.1.jar - release/modules/ext/solr-solrj-4.9.1.jar - - - ext/xmpcore-5.1.3.jar - release/modules/ext/xmpcore-5.1.3.jar - - - ext/findstructapi-0.0.1.jar - release/modules/ext/findstructapi-0.0.1.jar + ext/guava-18.0.jar + release\modules\ext\guava-18.0.jar ext/zookeeper-3.4.6.jar - release/modules/ext/zookeeper-3.4.6.jar + release\modules\ext\zookeeper-3.4.6.jar - ext/jcommander-1.35.jar - release/modules/ext/jcommander-1.35.jar - - - ext/vorbis-java-core-0.8.jar - release/modules/ext/vorbis-java-core-0.8.jar - - - ext/netcdf4-4.5.5.jar - release/modules/ext/netcdf4-4.5.5.jar - - - ext/java-libpst-0.8.1.jar - release/modules/ext/java-libpst-0.8.1.jar - - - ext/protobuf-java-2.5.0.jar - release/modules/ext/protobuf-java-2.5.0.jar - - - ext/lucene-queries-4.0.0.jar - release/modules/ext/lucene-queries-4.0.0.jar - - - ext/juniversalchardet-1.0.3.jar - release/modules/ext/juniversalchardet-1.0.3.jar - - - ext/commons-lang-2.6.jar - release/modules/ext/commons-lang-2.6.jar - - - ext/libsvm-3.1.jar - release/modules/ext/libsvm-3.1.jar - - - ext/noggit-0.5.jar - release/modules/ext/noggit-0.5.jar - - - ext/poi-4.0.1.jar - release/modules/ext/poi-4.0.1.jar + ext/commons-digester-1.8.1.jar + release\modules\ext\commons-digester-1.8.1.jar ext/httpmime-4.5.6.jar @@ -419,53 +258,69 @@ ext/httpclient-4.5.6.jar release\modules\ext\httpclient-4.5.6.jar - - ext/jcip-annotations-1.0.jar - release/modules/ext/jcip-annotations-1.0.jar - ext/commons-validator-1.5.1.jar - release/modules/ext/commons-validator-1.5.1.jar + release\modules\ext\commons-validator-1.5.1.jar - ext/bzip2-0.9.1.jar - release/modules/ext/bzip2-0.9.1.jar + ext/commons-lang-2.4.jar + release\modules\ext\commons-lang-2.4.jar - ext/cleartk-util-2.0.0.jar - release/modules/ext/cleartk-util-2.0.0.jar + ext/commons-logging-1.2.jar + release\modules\ext\commons-logging-1.2.jar - ext/grib-4.5.5.jar - release/modules/ext/grib-4.5.5.jar + ext/jericho-html-3.3.jar + release\modules\ext\jericho-html-3.3.jar - ext/jdom-1.0.jar - release/modules/ext/jdom-1.0.jar + ext/httpcore-4.4.10.jar + release\modules\ext\httpcore-4.4.10.jar + + + ext/slf4j-api-1.7.6.jar + release\modules\ext\slf4j-api-1.7.6.jar ext/commons-beanutils-1.9.2.jar - release/modules/ext/commons-beanutils-1.9.2.jar + release\modules\ext\commons-beanutils-1.9.2.jar - ext/ehcache-core-2.6.2.jar - release/modules/ext/ehcache-core-2.6.2.jar - - - ext/poi-ooxml-schemas-4.0.1.jar - release/modules/ext/poi-ooxml-schemas-4.0.1.jar + ext/commons-io-2.3.jar + release\modules\ext\commons-io-2.3.jar ext/wstx-asl-3.2.7.jar release\modules\ext\wstx-asl-3.2.7.jar - ext/commons-exec-1.3.jar - release/modules/ext/commons-exec-1.3.jar + ext/annotations-12.0.jar + release\modules\ext\annotations-12.0.jar - ext/vorbis-java-tika-0.8.jar - release/modules/ext/vorbis-java-tika-0.8.jar + ext/commons-collections-3.2.2.jar + release\modules\ext\commons-collections-3.2.2.jar + + + ext/noggit-0.5.jar + release\modules\ext\noggit-0.5.jar + + + ext/icu4j-3.8.jar + release\modules\ext\icu4j-3.8.jar + + + ext/jsonic-1.2.11.jar + release\modules\ext\jsonic-1.2.11.jar + + + ext/language-detector-0.6.jar + release\modules\ext\language-detector-0.6.jar + + + ext/solr-solrj-4.9.1.jar + release\modules\ext\solr-solrj-4.9.1.jar diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Bundle.properties b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Bundle.properties index 19f5a71cb7..84c71a9bf5 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Bundle.properties +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Bundle.properties @@ -193,9 +193,7 @@ Server.openCore.exception.noIndexDir.msg=Index directory could not be created or Server.request.exception.exception.msg=Could not issue Solr request Server.commit.exception.msg=Could not commit index Server.addDoc.exception.msg=Could not add document to index via update handler: {0} -Server.addDoc.exception.msg2=Could not add document to index via update handler: {0} Server.close.exception.msg=Cannot close Core -Server.close.exception.msg2=Cannot close Core Server.solrServerNoPortException.msg=Indexing server could not bind to port {0}, port is not available, consider change the default {1} port. KeywordSearchJobSettingsPanel.keywordSearchEncodings.text=- KeywordSearchJobSettingsPanel.languagesValLabel.toolTipText= diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Bundle.properties-MERGED b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Bundle.properties-MERGED index 7dfb0acb54..44db83039a 100755 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Bundle.properties-MERGED +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Bundle.properties-MERGED @@ -36,7 +36,7 @@ KeywordSearchResultFactory.createNodeForKey.noResultsFound.text=No results found KeywordSearchResultFactory.query.exception.msg=Could not perform the query OpenIDE-Module-Display-Category=Ingest Module -OpenIDE-Module-Long-Description=Keyword Search ingest module.\n\nThe module indexes files found in the disk image at ingest time.\nIt then periodically runs the search on the indexed files using one or more keyword lists (containing pure words and/or regular expressions) and posts results.\n\nThe module also contains additional tools integrated in the main GUI, such as keyword list configuration, keyword search bar in the top-right corner, extracted text viewer and search results viewer showing highlighted keywords found. +OpenIDE-Module-Long-Description=Keyword Search ingest module.\n\nThe module indexes files found in the disk image at ingest time.\nIt then periodically runs the search on the indexed files using one or more keyword lists (containing pure words and/or regular expressions) and posts results.\n\n\The module also contains additional tools integrated in the main GUI, such as keyword list configuration, keyword search bar in the top-right corner, extracted text viewer and search results viewer showing highlighted keywords found. OpenIDE-Module-Name=KeywordSearch OptionsCategory_Name_KeywordSearchOptions=Keyword Search OptionsCategory_Keywords_KeywordSearchOptions=Keyword Search @@ -234,9 +234,7 @@ Server.openCore.exception.noIndexDir.msg=Index directory could not be created or Server.request.exception.exception.msg=Could not issue Solr request Server.commit.exception.msg=Could not commit index Server.addDoc.exception.msg=Could not add document to index via update handler: {0} -Server.addDoc.exception.msg2=Could not add document to index via update handler: {0} Server.close.exception.msg=Cannot close Core -Server.close.exception.msg2=Cannot close Core Server.solrServerNoPortException.msg=Indexing server could not bind to port {0}, port is not available, consider change the default {1} port. KeywordSearchJobSettingsPanel.keywordSearchEncodings.text=- KeywordSearchJobSettingsPanel.languagesValLabel.toolTipText= diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Bundle_ja.properties b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Bundle_ja.properties index b1d833f795..6f7def55a8 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Bundle_ja.properties +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Bundle_ja.properties @@ -1,333 +1,357 @@ +#Tue Aug 18 18:09:21 UTC 2020 +AbstractFileStringContentStream.getSize.exception.msg=\u6587\u5b57\u5217\u5168\u4f53\u304c\u5909\u63db\u3055\u308c\u308b\u307e\u3067\u3001\u5909\u63db\u3055\u308c\u305f\u6587\u5b57\u5217\u306e\u6587\u5b57\u6570\u306f\u308f\u304b\u308a\u307e\u305b\u3093 +AbstractFileStringContentStream.getSrcInfo.text=\u30d5\u30a1\u30a4\u30eb\:{0} +AbstractFileTikaTextExtract.index.exception.tikaParse.msg=\u4f8b\u5916\: \u6b21\u306e\u30d5\u30a1\u30a4\u30eb\u306eTika\u89e3\u6790\u30bf\u30b9\u30af\u5b9f\u884c\u6642\u306e\u4e88\u671f\u305b\u306c\u4f8b\u5916\: {0}\u3001{1} +AbstractFileTikaTextExtract.index.tikaParseTimeout.text=\u4f8b\u5916\: \u6b21\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u306eTika\u89e3\u6790\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\: {0}\u3001{1} +AbstractKeywordSearchPerformer.search.dialogErrorHeader=\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u30a8\u30e9\u30fc +AbstractKeywordSearchPerformer.search.emptyKeywordErrorBody=\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u304c\u7a7a(\u672a\u5165\u529b)\u3067\u3059\u3002\u5c11\u306a\u304f\u3068\u30821\u3064\u306e\u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u30ea\u30b9\u30c8\u306b\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +AbstractKeywordSearchPerformer.search.ingestInProgressBody=\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u304c\u73fe\u5728\u5b9f\u884c\u4e2d\u3067\u3059\u3002
    \u3059\u3079\u3066\u306e\u30d5\u30a1\u30a4\u30eb\u304c\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u306a\u304b\u3063\u305f\u305f\u3081\u3001\u3053\u306e\u691c\u7d22\u306f\u4e0d\u5b8c\u5168\u306a\u7d50\u679c\u3092\u751f\u6210\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002
    \u305d\u308c\u3067\u3082\u3053\u306e\u691c\u7d22\u3092\u7d9a\u884c\u3057\u307e\u3059\u304b? +AbstractKeywordSearchPerformer.search.invalidSyntaxHeader=\u7121\u52b9\u306a\u30af\u30a8\u30ea\u30fb\u30b9\u30c6\u30fc\u30c8\u30e1\u30f3\u30c8\u3002 \u5185\u5bb9\u304c\u6b63\u898f\u8868\u73fe\u306e\u5834\u5408\u3001Lucene\u6b63\u898f\u8868\u73fe\u30d1\u30bf\u30fc\u30f3\u306e\u307f\u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u307e\u3059\u3002 POSIX\u6587\u5b57\u30af\u30e9\u30b9\uff08\\ n\u3084\\ w\u306a\u3069\uff09\u306f\u7121\u52b9\u3067\u3059\u3002 +AbstractKeywordSearchPerformer.search.noFilesIdxdMsg=\u30d5\u30a1\u30a4\u30eb\u304c\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002
    \u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u6709\u52b9\u306b\u3057\u305f\u72b6\u614b\u3067\u30a4\u30e1\u30fc\u30b8\u3092\u518d\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +AbstractKeywordSearchPerformer.search.noFilesInIdxMsg=\u307e\u3060\u30d5\u30a1\u30a4\u30eb\u304c\u7d22\u5f15\u306b\u542b\u307e\u308c\u3066\u3044\u307e\u305b\u3093\u3002
    \u5f8c\u3067\u3082\u3046\u4e00\u5ea6\u304a\u8a66\u3057\u304f\u3060\u3055\u3044\u3002 \u7d22\u5f15\u306f {0} \u5206\u3054\u3068\u306b\u66f4\u65b0\u3055\u308c\u307e\u3059\u3002 +AbstractKeywordSearchPerformer.search.searchIngestInProgressTitle=\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u304c\u9032\u884c\u4e2d\u3067\u3059 AccountsText.creditCardNumber=\u30af\u30ec\u30b8\u30c3\u30c8\u30ab\u30fc\u30c9\u756a\u53f7 AccountsText.creditCardNumbers=\u30af\u30ec\u30b8\u30c3\u30c8\u30ab\u30fc\u30c9\u756a\u53f7 AccountsText.nextItem.exception.msg=\u6b21\u306e\u9805\u76ee\u304c\u3042\u308a\u307e\u305b\u3093\u3002 AccountsText.nextPage.exception.msg=\u6b21\u306e\u30da\u30fc\u30b8\u304c\u3042\u308a\u307e\u305b\u3093\u3002 AccountsText.previousItem.exception.msg=\u524d\u306e\u9805\u76ee\u304c\u3042\u308a\u307e\u305b\u3093\u3002 AccountsText.previousPage.exception.msg=\u524d\u306e\u30da\u30fc\u30b8\u304c\u3042\u308a\u307e\u305b\u3093\u3002 +AddKeywordsDialog.addButton.text=OK +AddKeywordsDialog.addKeywordsTitle.text=\u65b0\u898f\u30ad\u30fc\u30ef\u30fc\u30c9 +AddKeywordsDialog.cancelButton.text=\u53d6\u308a\u6d88\u3057 +AddKeywordsDialog.enterKeywordsLabel.text=\u6b21\u306b\u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u5165\u529b(1\u884c\u306b\u3064\u304d1\u3064)\: +AddKeywordsDialog.exactRadioButton.text=\u5b8c\u5168\u4e00\u81f4 +AddKeywordsDialog.keywordTypeLabel.text=\u30ad\u30fc\u30ef\u30fc\u30c9\u30bf\u30a4\u30d7\u3092\u9078\u629e\: +AddKeywordsDialog.pasteButton.text=\u30af\u30ea\u30c3\u30d7\u30dc\u30fc\u30c9\u304b\u3089\u8cbc\u308a\u4ed8\u3051 +AddKeywordsDialog.regexRadioButton.text=\u6b63\u898f\u8868\u73fe +AddKeywordsDialog.substringRadioButton.text=\u90e8\u5206\u4e00\u81f4 +ByteContentStream.getSrcInfo.text=\u30d5\u30a1\u30a4\u30eb\:{0} CannotRunFileTypeDetection=\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u306e\u691c\u51fa\u3092\u5b9f\u884c\u3067\u304d\u307e\u305b\u3093\u3002 +DropdownListSearchPanel.dataSourceCheckBox.text=\u9078\u629e\u3057\u305f\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u306b\u691c\u7d22\u3092\u5236\u9650\: +DropdownListSearchPanel.jSaveSearchResults.text=\u691c\u7d22\u7d50\u679c\u3092\u4fdd\u5b58 +DropdownListSearchPanel.jSaveSearchResults.toolTipText=\u30ad\u30fc\u30ef\u30fc\u30c9\u30d2\u30c3\u30c8\u306b\u3088\u308b\u904e\u53bb\u306e\u691c\u7d22\u7d50\u679c\u306e\u5f62\u3067\u7d50\u679c\u3092\u4fdd\u5b58\u305b\u305a\u306b\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u3092\u5b9f\u884c DropdownListSearchPanel.selected=\u30a2\u30c9\u30db\u30c3\u30af\u691c\u7d22\u30bd\u30fc\u30b9\u30d5\u30a3\u30eb\u30bf\u30fc\u304c\u9078\u629e\u3055\u308c\u3066\u3044\u307e\u3059 +DropdownSearchPanel.copyMenuItem.text=\u30b3\u30d4\u30fc +DropdownSearchPanel.cutMenuItem.text=\u5207\u308a\u53d6\u308a +DropdownSearchPanel.exactRadioButton.text=\u5b8c\u5168\u4e00\u81f4 +DropdownSearchPanel.keywordTextField.text= +DropdownSearchPanel.pasteMenuItem.text=\u8cbc\u308a\u4ed8\u3051 +DropdownSearchPanel.regexRadioButton.text=\u6b63\u898f\u8868\u73fe +DropdownSearchPanel.searchButton.text=\u691c\u7d22 +DropdownSearchPanel.selectAllMenuItem.text=\u3059\u3079\u3066\u9078\u629e +DropdownSearchPanel.substringRadioButton.text=\u90e8\u5206\u4e00\u81f4 +DropdownSingleTermSearchPanel.dataSourceCheckBox.text=\u9078\u629e\u3057\u305f\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u306b\u691c\u7d22\u3092\u5236\u9650\: +DropdownSingleTermSearchPanel.ingestIndexLabel.text=\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\: +DropdownSingleTermSearchPanel.jSaveSearchResults.text=\u691c\u7d22\u7d50\u679c\u3092\u4fdd\u5b58 +DropdownSingleTermSearchPanel.jSaveSearchResults.toolTipText=\u30ad\u30fc\u30ef\u30fc\u30c9\u30d2\u30c3\u30c8\u306b\u3088\u308b\u904e\u53bb\u306e\u691c\u7d22\u7d50\u679c\u306e\u5f62\u3067\u7d50\u679c\u3092\u4fdd\u5b58\u305b\u305a\u306b\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u3092\u5b9f\u884c DropdownSingleTermSearchPanel.selected=\u30a2\u30c9\u30db\u30c3\u30af\u691c\u7d22\u30bd\u30fc\u30b9\u30d5\u30a3\u30eb\u30bf\u30fc\u304c\u9078\u629e\u3055\u308c\u3066\u3044\u307e\u3059 DropdownSingleTermSearchPanel.warning.text=\u5883\u754c\u6587\u5b57 ^ \u3068 $ \u304c\u5358\u8a9e\u9818\u57df\u3068\u4e00\u81f4\u3057\u307e\u305b\u3093\u3002[ \\.,] \u306a\u3069\u306e\u660e\u793a\u7684\u306a\u5883\u754c\u6587\u5b57\u30ea\u30b9\u30c8\u3068\u306e\u7f6e\u63db\u3092\n\u691c\u8a0e\u3057\u3066\u304f\u3060\u3055\u3044 DropdownSingleTermSearchPanel.warning.title=\u8b66\u544a -ExtractedContentPanel.setMarkup.panelTxt=\u30c6\u30ad\u30b9\u30c8\u3092\u8aad\u307f\u8fbc\u3093\u3067\u3044\u307e\u3059...\u304a\u5f85\u3061\u304f\u3060\u3055\u3044 -# {0} - \u30b3\u30f3\u30c6\u30f3\u30c4\u540d ExtractedContentPanel.SetMarkup.progress.loading={0} \u306e\u30c6\u30ad\u30b9\u30c8\u3092\u8aad\u307f\u8fbc\u3093\u3067\u3044\u307e\u3059 -GlobalEditListPanel.editKeyword.title=\u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u7de8\u96c6 -GlobalEditListPanel.warning.text=\u5883\u754c\u6587\u5b57 ^ \u3068 $ \u304c\u5358\u8a9e\u9818\u57df\u3068\u4e00\u81f4\u3057\u307e\u305b\u3093\u3002[ \\.,] \u306a\u3069\u306e\u660e\u793a\u7684\u306a\u5883\u754c\u6587\u5b57\u30ea\u30b9\u30c8\u3068\u306e\u7f6e\u63db\u3092\n\u691c\u8a0e\u3057\u3066\u304f\u3060\u3055\u3044 -GlobalEditListPanel.warning.title=\u8b66\u544a -IndexedText.errorMessage.errorGettingText=Error \u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u305f\u30c6\u30ad\u30b9\u30c8\u306e\u691c\u7d22\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 -IndexedText.warningMessage.knownFile=\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306f\u65e2\u77e5\u306e\u30d5\u30a1\u30a4\u30eb(MD5\u30cf\u30c3\u30b7\u30e5\u30d9\u30fc\u30b9)\u3067\u3042\u308b\u305f\u3081\u3001\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u305f\u30c6\u30ad\u30b9\u30c8\u306f\u3042\u308a\u307e\u305b\u3093\u3002 -IndexedText.warningMessage.noTextAvailable=\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306b\u306f\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u305f\u30c6\u30ad\u30b9\u30c8\u304c\u3042\u308a\u307e\u305b\u3093\u3002 -KeywordSearchGlobalSettingsPanel.Title=\u30ad\u30fc\u30ef\u30fc\u30c9\u4e00\u62ec\u691c\u7d22\u8a2d\u5b9a -KeywordSearchIngestModule.init.badInitMsg=\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u30b5\u30fc\u30d0\u30fc\u304c\u6b63\u3057\u304f\u521d\u671f\u5316\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u3092\u5b9f\u884c\u3067\u304d\u307e\u305b\u3093\u3002 -# {0} - Solr\u306b\u63a5\u7d9a\u3055\u308c\u3066\u3044\u306a\u3044\u7406\u7531 -KeywordSearchIngestModule.init.exception.errConnToSolr.msg=Error connecting to SOLR\u30b5\u30fc\u30d0\u30fc\u306b\u63a5\u7d9a\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: {0}\u3002 -# {0} - Solr\u304c\u8d77\u52d5\u3057\u306a\u3044\u7406\u7531 -KeywordSearchIngestModule.init.tryStopSolrMsg={0}
    Java Solr\u30d7\u30ed\u30bb\u30b9\u304c\u5b58\u5728\u3059\u308b\u5834\u5408\u306f\u505c\u6b62\u3092\u8a66\u307f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u518d\u8d77\u52d5\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -KeywordSearchIngestModule.metadataTitle=\u30e1\u30bf\u30c7\u30fc\u30bf -KeywordSearchIngestModule.noOpenCase.errMsg=\u958b\u3044\u3066\u3044\u308b\u30b1\u30fc\u30b9\u306f\u3042\u308a\u307e\u305b\u3093\u3002 -KeywordSearchIngestModule.startUp.noOpenCore.msg=\u7d22\u5f15\u3092\u958b\u3051\u306a\u304b\u3063\u305f\u304b\u5b58\u5728\u3057\u307e\u305b\u3093\u3002 -# {0} - \u30b9\u30ad\u30fc\u30de\u30d0\u30fc\u30b8\u30e7\u30f3\u756a\u53f7 -KeywordSearchIngestModule.startupException.indexSchemaNotSupported=\u30c6\u30ad\u30b9\u30c8\u7d22\u5f15\u306e\u30b9\u30ad\u30fc\u30de\u30d0\u30fc\u30b8\u30e7\u30f3 {0} \u3067\u306e\u30c6\u30ad\u30b9\u30c8\u8ffd\u52a0\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u306a\u304f\u306a\u308a\u307e\u3057\u305f\u3002 -# {0} - Solr\u30d0\u30fc\u30b8\u30e7\u30f3\u756a\u53f7 -KeywordSearchIngestModule.startupException.indexSolrVersionNotSupported=\u30c6\u30ad\u30b9\u30c8\u7d22\u5f15\u306eSolr\u30d0\u30fc\u30b8\u30e7\u30f3 {0} \u3067\u306e\u30c6\u30ad\u30b9\u30c8\u8ffd\u52a0\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u306a\u304f\u306a\u308a\u307e\u3057\u305f\u3002 -KeywordSearchIngestModule.startupMessage.failedToGetIndexSchema=\u30c6\u30ad\u30b9\u30c8\u7d22\u5f15\u306e\u30b9\u30ad\u30fc\u30de\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002 -KeywordSearchResultFactory.createNodeForKey.noResultsFound.text=\u8a72\u5f53\u3059\u308b\u7d50\u679c\u304c\u3042\u308a\u307e\u305b\u3093\u3002 -KeywordSearchResultFactory.query.exception.msg=\u30af\u30a8\u30ea\u3092\u5b9f\u884c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f -OpenIDE-Module-Display-Category=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb - -OpenIDE-Module-Long-Description=\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u3002\n\n\u30e2\u30b8\u30e5\u30fc\u30eb\u306f\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u6642\u306b\u30c7\u30a3\u30b9\u30af\u30a4\u30e1\u30fc\u30b8\u3067\u898b\u3064\u304b\u3063\u305f\u30c6\u30ad\u30b9\u30c8\u3092\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3057\u307e\u3059\u3002\n\u6b21\u306b\u30011\u3064\u4ee5\u4e0a\u306e\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8(\u7d14\u7c8b\u8a9e\u304a\u3088\u3073/\u307e\u305f\u306f\u6b63\u898f\u8868\u73fe\u3092\u542b\u3080)\u3067\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u4e0a\u3067\u5b9a\u671f\u7684\u306b\u691c\u7d22\u3092\u5b9f\u65bd\u3057\u3001\u7d50\u679c\u3092\u63b2\u8f09\u3057\u307e\u3059\u3002\n\n\\u30e2\u30b8\u30e5\u30fc\u30eb\u306b\u306f\u3001\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u69cb\u6210\u3001\u53f3\u4e0a\u7aef\u306e\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u30d0\u30fc\u3001\u62bd\u51fa\u30c6\u30ad\u30b9\u30c8\u30d3\u30e5\u30fc\u30ef\u30fc\u3001\u8a72\u5f53\u306e\u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u30cf\u30a4\u30e9\u30a4\u30c8\u8868\u793a\u3059\u308b\u691c\u7d22\u7d50\u679c\u30d3\u30e5\u30fc\u30ef\u30fc\u306a\u3069\u3001\u30e1\u30a4\u30f3GUI\u306b\u7d71\u5408\u3055\u308c\u305f\u8ffd\u52a0\u306e\u30c4\u30fc\u30eb\u3082\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002 -OpenIDE-Module-Name=KeywordSearch -OptionsCategory_Name_KeywordSearchOptions=\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22 -OptionsCategory_Keywords_KeywordSearchOptions=\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22 -ListBundleName=\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8 -ListBundleConfig=\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u69cb\u6210 ExtractedContentPanel.copyMenuItem.text=\u30b3\u30d4\u30fc +ExtractedContentPanel.hitButtonsLabel.text=\u4e00\u81f4\u3059\u308b\u7d50\u679c +ExtractedContentPanel.hitCountLabel.text=- +ExtractedContentPanel.hitLabel.text=\u30da\u30fc\u30b8\u4e0a\u306e\u4e00\u81f4\u3059\u308b\u7d50\u679c\: +ExtractedContentPanel.hitLabel.toolTipText= +ExtractedContentPanel.hitNextButton.text= +ExtractedContentPanel.hitOfLabel.text=/ +ExtractedContentPanel.hitPreviousButton.text= +ExtractedContentPanel.hitTotalLabel.text=- +ExtractedContentPanel.jLabel1.text=\u30c6\u30ad\u30b9\u30c8\u30bd\u30fc\u30b9\: +ExtractedContentPanel.pageButtonsLabel.text=\u30da\u30fc\u30b8 +ExtractedContentPanel.pageCurLabel.text=- +ExtractedContentPanel.pageNextButton.text= +ExtractedContentPanel.pageOfLabel.text=/ +ExtractedContentPanel.pagePreviousButton.actionCommand=pagePreviousButton +ExtractedContentPanel.pagePreviousButton.text= +ExtractedContentPanel.pageTotalLabel.text=- +ExtractedContentPanel.pagesLabel.text=\u30da\u30fc\u30b8\: ExtractedContentPanel.selectAllMenuItem.text=\u3059\u3079\u3066\u9078\u629e -KeywordSearchEditListPanel.saveListButton.text=\u30ea\u30b9\u30c8\u3092\u30b3\u30d4\u30fc -KeywordSearchEditListPanel.addWordField.text= -KeywordSearchEditListPanel.addWordButton.text=\u65b0\u898f\u30ad\u30fc\u30ef\u30fc\u30c9 -KeywordSearchEditListPanel.chRegex.text=\u6b63\u898f\u8868\u73fe -KeywordSearchEditListPanel.deleteWordButton.text=\u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u524a\u9664 -KeywordSearchEditListPanel.cutMenuItem.text=\u5207\u308a\u53d6\u308a -KeywordSearchEditListPanel.selectAllMenuItem.text=\u3059\u3079\u3066\u9078\u629e -KeywordSearchEditListPanel.pasteMenuItem.text=\u8cbc\u308a\u4ed8\u3051 -KeywordSearchEditListPanel.copyMenuItem.text=\u30b3\u30d4\u30fc -KeywordSearchEditListPanel.exportButton.text=\u30ea\u30b9\u30c8\u3092\u30a8\u30af\u30b9\u30dd\u30fc\u30c8 -KeywordSearchEditListPanel.deleteListButton.text=\u30ea\u30b9\u30c8\u3092\u524a\u9664 -KeywordSearchEditListPanel.emptyKeyword.text=\u7a7a(\u672a\u5165\u529b)\u306e\u72b6\u614b\u306e\u30ad\u30fc\u30ef\u30fc\u30c9 -KeywordSearchEditListPanel.errorAddingKeywords.text=\u30ad\u30fc\u30ef\u30fc\u30c9\u306e\u8ffd\u52a0\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -KeywordSearchListsManagementPanel.newListButton.text=\u65b0\u898f\u30ea\u30b9\u30c8 -KeywordSearchListsManagementPanel.importButton.text=\u30ea\u30b9\u30c8\u3092\u30a4\u30f3\u30dd\u30fc\u30c8 -KeywordSearchListsViewerPanel.searchAddButton.text=\u691c\u7d22 -KeywordSearchListsViewerPanel.manageListsButton.text=\u30ea\u30b9\u30c8\u3092\u7ba1\u7406 -KeywordSearchListsViewerPanel.ingestIndexLabel.text=\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb: -KeywordSearchEditListPanel.ingestMessagesCheckbox.text=\u30d2\u30c3\u30c8\u3054\u3068\u306b\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u53d7\u4fe1\u7bb1\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u9001\u4fe1 -KeywordSearchEditListPanel.ingestMessagesCheckbox.toolTipText=\u3053\u306e\u30ea\u30b9\u30c8\u306e\u30ad\u30fc\u30ef\u30fc\u30c9\u3067\u30d2\u30c3\u30c8\u304c\u767a\u751f\u3057\u305f\u3068\u304d\u306b\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u4e2d\u306b\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u9001\u4fe1 -KeywordSearchEditListPanel.keywordOptionsLabel.text=\u30ad\u30fc\u30ef\u30fc\u30c9\u30aa\u30d7\u30b7\u30e7\u30f3 -KeywordSearchEditListPanel.listOptionsLabel.text=\u30ea\u30b9\u30c8\u30aa\u30d7\u30b7\u30e7\u30f3 -KeywordSearchListsManagementPanel.keywordListsLabel.text=\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8: -KeywordSearchEditListPanel.keywordsLabel.text=\u30ad\u30fc\u30ef\u30fc\u30c9: -OpenIDE-Module-Short-Description=\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u3001\u62bd\u51fa\u30c6\u30ad\u30b9\u30c8\u30d3\u30e5\u30fc\u30ef\u30fc\u304a\u3088\u3073\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u30c4\u30fc\u30eb -KeywordSearchListsViewerPanel.manageListsButton.toolTipText=\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u3001\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u306e\u8a2d\u5b9a\u3001\u95a2\u9023\u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u7ba1\u7406\u3057\u307e\u3059\u3002\u8a2d\u5b9a\u306f\u3059\u3079\u3066\u306e\u30b1\u30fc\u30b9\u3067\u5171\u6709\u3055\u308c\u307e\u3059\u3002 -AbstractKeywordSearchPerformer.search.dialogErrorHeader=\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u30a8\u30e9\u30fc -AbstractKeywordSearchPerformer.search.invalidSyntaxHeader=\u7121\u52b9\u306a\u30af\u30a8\u30ea\u69cb\u6587\u3067\u3059\u3002\u3053\u308c\u304c\u6b63\u898f\u8868\u73fe\u306e\u5834\u5408\u306f\u3001Java\u3067\u4e8b\u524d\u5b9a\u7fa9\u6e08\u307f\u306e\u6587\u5b57\u30af\u30e9\u30b9\u3068POSIX\u6587\u5b57\u30af\u30e9\u30b9\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u307e\u305b\u3093\u3002 -AbstractKeywordSearchPerformer.search.searchIngestInProgressTitle=\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u304c\u9032\u884c\u4e2d\u3067\u3059 -AbstractKeywordSearchPerformer.search.ingestInProgressBody=\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u304c\u73fe\u5728\u5b9f\u884c\u4e2d\u3067\u3059\u3002
    \u3059\u3079\u3066\u306e\u30d5\u30a1\u30a4\u30eb\u304c\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u306a\u304b\u3063\u305f\u305f\u3081\u3001\u3053\u306e\u691c\u7d22\u306f\u4e0d\u5b8c\u5168\u306a\u7d50\u679c\u3092\u751f\u6210\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002
    \u305d\u308c\u3067\u3082\u3053\u306e\u691c\u7d22\u3092\u7d9a\u884c\u3057\u307e\u3059\u304b? -AbstractKeywordSearchPerformer.search.emptyKeywordErrorBody=\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u304c\u7a7a(\u672a\u5165\u529b)\u3067\u3059\u3002\u5c11\u306a\u304f\u3068\u30821\u3064\u306e\u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u30ea\u30b9\u30c8\u306b\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -AbstractKeywordSearchPerformer.search.noFilesInIdxMsg=\u307e\u3060\u30d5\u30a1\u30a4\u30eb\u304c\u7d22\u5f15\u306b\u542b\u307e\u308c\u3066\u3044\u307e\u305b\u3093\u3002
    \u5f8c\u3067\u3082\u3046\u4e00\u5ea6\u304a\u8a66\u3057\u304f\u3060\u3055\u3044\u3002 \u7d22\u5f15\u306f {0} \u5206\u3054\u3068\u306b\u66f4\u65b0\u3055\u308c\u307e\u3059\u3002 -AbstractKeywordSearchPerformer.search.noFilesIdxdMsg=\u30d5\u30a1\u30a4\u30eb\u304c\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002
    \u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u6709\u52b9\u306b\u3057\u305f\u72b6\u614b\u3067\u30a4\u30e1\u30fc\u30b8\u3092\u518d\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -ExtractedContentViewer.toolTip=\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u62bd\u51fa\u3055\u308c\u305f\u30c6\u30ad\u30b9\u30c8\u3068\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u7d50\u679c\u3092\u8868\u793a\u3057\u307e\u3059\u3002\u3053\u306e\u30d3\u30e5\u30fc\u30ef\u30fc\u3092\u6709\u52b9\u5316\u3059\u308b\u306b\u306f\u3001\u30d5\u30a1\u30a4\u30eb\u306b\u5bfe\u3057\u3066\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u3092\u5b9f\u884c\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 +ExtractedContentPanel.setMarkup.panelTxt=\u30c6\u30ad\u30b9\u30c8\u3092\u8aad\u307f\u8fbc\u3093\u3067\u3044\u307e\u3059...\u304a\u5f85\u3061\u304f\u3060\u3055\u3044 +ExtractedContentViewer.currentItem.exception.msg=\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u691c\u7d22\u53ef\u80fd\u306a\u30bd\u30fc\u30b9\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 ExtractedContentViewer.getTitle=\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u305f\u30c6\u30ad\u30b9\u30c8 -HighlightedMatchesSource.toString=\u691c\u7d22\u7d50\u679c -Installer.reportPortError=\u7d22\u5f15\u751f\u6210\u30b5\u30fc\u30d0\u30fc\u30dd\u30fc\u30c8 {0} \u3092\u5229\u7528\u3067\u304d\u307e\u305b\u3093\u3002 \u304a\u4f7f\u3044\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u304c {1} \u3092\u30d6\u30ed\u30c3\u30af\u3057\u3066\u3044\u306a\u3044\u304b\u3069\u3046\u304b\u78ba\u8a8d\u3057\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30e6\u30fc\u30b6\u30fc\u30d5\u30a9\u30eb\u30c0\u30fc\u5185\u306e {3} \u30d7\u30ed\u30d1\u30c6\u30a3\u30d5\u30a1\u30a4\u30eb\u3067 {2} \u3092\u5909\u66f4\u3059\u308b\u3053\u3068\u3092\u691c\u8a0e\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u5225\u306e\u30d7\u30ed\u30bb\u30b9\u304c\u77db\u76fe\u3092\u5f15\u304d\u8d77\u3053\u3057\u3066\u3044\u305f\u5834\u5408\u306f\u3001\u305d\u306e\u5f8c\u306b\u30b7\u30b9\u30c6\u30e0\u306e\u518d\u8d77\u52d5\u3092\u8a66\u307f\u3066\u304f\u3060\u3055\u3044\u3002 -Installer.reportStopPortError=\u7d22\u5f15\u751f\u6210\u30b5\u30fc\u30d0\u30fc\u505c\u6b62\u30dd\u30fc\u30c8 {0} \u3092\u5229\u7528\u3067\u304d\u307e\u305b\u3093\u3002 \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30e6\u30fc\u30b6\u30fc\u30d5\u30a9\u30eb\u30c0\u30fc\u5185\u306e {2} \u30d7\u30ed\u30d1\u30c6\u30a3\u30d5\u30a1\u30a4\u30eb\u3067 {1} \u3092\u5909\u66f4\u3059\u308b\u3053\u3068\u3092\u691c\u8a0e\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -Installer.errorInitKsmMsg=\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u521d\u671f\u5316\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -Installer.reportInitError=\u7d22\u5f15\u751f\u6210\u30b5\u30fc\u30d0\u30fc\u30dd\u30fc\u30c8 {0} \u3092\u5229\u7528\u3067\u304d\u307e\u305b\u3093\u3002 \u304a\u4f7f\u3044\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u304c {1} \u3092\u30d6\u30ed\u30c3\u30af\u3057\u3066\u3044\u306a\u3044\u304b\u3069\u3046\u304b\u78ba\u8a8d\u3057\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30e6\u30fc\u30b6\u30fc\u30d5\u30a9\u30eb\u30c0\u30fc\u5185\u306e {3} \u30d7\u30ed\u30d1\u30c6\u30a3\u30d5\u30a1\u30a4\u30eb\u3067 {2} \u3092\u5909\u66f4\u3059\u308b\u3053\u3068\u3092\u691c\u8a0e\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u5225\u306e\u30d7\u30ed\u30bb\u30b9\u304c\u77db\u76fe\u3092\u5f15\u304d\u8d77\u3053\u3057\u3066\u3044\u305f\u5834\u5408\u306f\u3001\u305d\u306e\u5f8c\u306b\u30b7\u30b9\u30c6\u30e0\u306e\u518d\u8d77\u52d5\u3092\u8a66\u307f\u3066\u304f\u3060\u3055\u3044\u3002 -KeywordSearchConfigurationPanel.customizeComponents.listTabTitle=\u30ea\u30b9\u30c8 -KeywordSearchConfigurationPanel.customizeComponents.stringExtTitle=\u6587\u5b57\u5217\u62bd\u51fa -KeywordSearchConfigurationPanel.customizeComponents.genTabTitle=\u5168\u822c -KeywordSearchConfigurationPanel.customizeComponents.listLabToolTip=\u30ea\u30b9\u30c8\u69cb\u6210 -KeywordSearchConfigurationPanel.customizeComponents.stringExtToolTip=\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u306e\u6587\u5b57\u5217\u62bd\u51fa\u69cb\u6210 -KeywordSearchConfigurationPanel.customizeComponents.genTabToolTip=\u69cb\u6210\u5168\u822c -KeywordSearchConfigurationPanel1.customizeComponents.title=\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u3092\u524a\u9664 -KeywordSearchConfigurationPanel1.customizeComponents.body=\u3053\u308c\u306b\u3088\u308a\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u304c\u4e00\u62ec\u524a\u9664\u3055\u308c\u307e\u3059(\u3059\u3079\u3066\u306e\u30b1\u30fc\u30b9)\u3002\u524a\u9664\u3092\u7d9a\u884c\u3057\u307e\u3059\u304b? -KeywordSearchConfigurationPanel1.customizeComponents.keywordListEmptyErr=\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u304c\u7a7a(\u672a\u5165\u529b)\u306e\u305f\u3081\u4fdd\u5b58\u3067\u304d\u307e\u305b\u3093 -KeywordSearch.newKwListTitle=\u65b0\u898f\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u540d: -KeywordSearch.openCore.notification.msg=\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u7d22\u5f15\u3092\u958b\u3051\u307e\u305b\u3093\u3067\u3057\u305f -KeywordSearch.closeCore.notification.msg=\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u7d22\u5f15\u3092\u9589\u3058\u3066\u3044\u308b\u9593\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -KeywordSearchConfigurationPanel1.customizeComponents.noOwDefaultMsg=\u30c7\u30d5\u30a9\u30eb\u30c8\u30ea\u30b9\u30c8\u3092\u4e0a\u66f8\u304d\u3067\u304d\u307e\u305b\u3093 -KeywordSearchConfigurationPanel1.customizeComponents.kwListExistMsg=\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8 <{0}> \u304c\u3059\u3067\u306b\u5b58\u5728\u3057\u307e\u3059\u3002\u7f6e\u304d\u63db\u3048\u307e\u3059\u304b? -KeywordSearchConfigurationPanel1.customizeComponents.kwListSavedMsg=\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8 <{0}> \u3092\u4fdd\u5b58\u3057\u307e\u3057\u305f -KeywordSearchEditListPanel.customizeComponents.kwReToolTip=\u30ad\u30fc\u30ef\u30fc\u30c9\u306f\u6b63\u898f\u8868\u73fe\u3067\u3059 -KeywordSearchEditListPanel.customizeComponents.addWordToolTip=\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u30ea\u30b9\u30c8\u306b\u65b0\u898f\u7528\u8a9e\u3092\u8ffd\u52a0 -KeywordSearchEditListPanel.customizeComponents.enterNewWordToolTip=\u65b0\u898f\u7528\u8a9e\u307e\u305f\u306f\u6b63\u898f\u8868\u73fe\u3092\u5165\u529b\u3057\u3066\u691c\u7d22 -KeywordSearchEditListPanel.customizeComponents.exportToFile=\u73fe\u5728\u306e\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u3092\u30d5\u30a1\u30a4\u30eb\u306b\u30a8\u30af\u30b9\u30dd\u30fc\u30c8 -KeywordSearchEditListPanel.customizeComponents.saveCurrentWIthNewNameToolTip=\u73fe\u5728\u306e\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u3092\u5225\u540d\u3067\u4fdd\u5b58\u3059\u308b -KeywordSearchEditListPanel.customizeComponents.removeSelectedMsg=\u30ea\u30b9\u30c8\u304b\u3089\u9078\u629e\u3057\u305f\u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u524a\u9664 -KeywordSearchEditListPanel.newKwTitle=\u65b0\u898f\u30ad\u30fc\u30ef\u30fc\u30c9\u5165\u529b -KeywordSearchEditListPanel.addWordButtonAction.kwAlreadyExistsMsg=\u30ad\u30fc\u30ef\u30fc\u30c9\u306f\u3059\u3067\u306b\u30ea\u30b9\u30c8\u306b\u5b58\u5728\u3057\u307e\u3059\u3002 -KeywordSearchEditListPanel.invalidKwMsg=\u7121\u52b9\u306a\u30ad\u30fc\u30ef\u30fc\u30c9\u30d1\u30bf\u30fc\u30f3\u3067\u3059\u3002 \u5358\u8a9e\u307e\u305f\u306f\u6b63\u3057\u3044\u6b63\u898f\u8868\u73fe\u30d1\u30bf\u30fc\u30f3\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -KeywordSearchEditListPanel.removeKwMsg=\u30ad\u30fc\u30ef\u30fc\u30c9\u306e\u524a\u9664 -KeywordSearchEditListPanel.deleteWordButtonActionPerformed.delConfirmMsg=\u3053\u308c\u306b\u3088\u308a\u30ad\u30fc\u30ef\u30fc\u30c9\u304c\u30ea\u30b9\u30c8\u304b\u3089\u4e00\u62ec\u524a\u9664\u3055\u308c\u307e\u3059(\u3059\u3079\u3066\u306e\u30b1\u30fc\u30b9)\u3002\u7d9a\u884c\u3057\u307e\u3059\u304b? -KeywordSearchEditListPanel.exportButtonActionPerformed.fileFilterLabel=\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u306eXML\u30d5\u30a1\u30a4\u30eb -KeywordSearchEditListPanel.exportButtonActionPerformed.fileExistPrompt=\u30d5\u30a1\u30a4\u30eb {0} \u304c\u5b58\u5728\u3057\u307e\u3059\u3002\u4e0a\u66f8\u304d\u3057\u307e\u3059\u304b? -KeywordSearchEditListPanel.exportButtonActionPerformed.kwListExportedMsg=\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u3092\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u3057\u307e\u3057\u305f -KeywordSearchEditListPanel.kwColName=\u30ad\u30fc\u30ef\u30fc\u30c9 -KeywordSearchEditListPanel.addKeyword.message=\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u30ea\u30b9\u30c8\u306b\u65b0\u898f\u7528\u8a9e\u3092\u8ffd\u52a0: -KeywordSearchEditListPanel.addKeyword.title=\u65b0\u898f\u30ad\u30fc\u30ef\u30fc\u30c9 -KeywordSearchFilterNode.getFileActions.openExternViewActLbl=\u5916\u90e8\u30d3\u30e5\u30fc\u30ef\u30fc\u3067\u958b\u304f Ctrl+E -KeywordSearchFilterNode.getFileActions.searchSameMd5=\u540c\u3058MD5\u30cf\u30c3\u30b7\u30e5\u3067\u30d5\u30a1\u30a4\u30eb\u3092\u691c\u7d22 -KeywordSearchFilterNode.getFileActions.viewInNewWinActionLbl=\u65b0\u3057\u3044\u30a6\u30a3\u30f3\u30c9\u30a6\u3067\u8868\u793a -KeywordSearchIngestModule.init.noKwInLstMsg=\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u306b\u30ad\u30fc\u30ef\u30fc\u30c9\u304c\u3042\u308a\u307e\u305b\u3093\u3002 -KeywordSearchIngestModule.init.onlyIdxKwSkipMsg=\u7d22\u5f15\u751f\u6210\u306e\u307f\u304c\u5b9f\u884c\u3055\u308c\u3001\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u306f\u30b9\u30ad\u30c3\u30d7\u3055\u308c\u307e\u3059(\u305d\u308c\u3067\u3082 [\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8 - \u8ffd\u52a0\u3057\u3066\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8] \u3092\u7528\u3044\u3066\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u3092\u8ffd\u52a0\u3067\u304d\u307e\u3059)\u3002 -KeywordSearchIngestModule.doInBackGround.displayName=\u30ad\u30fc\u30ef\u30fc\u30c9\u5b9a\u671f\u691c\u7d22 -KeywordSearchIngestModule.doInBackGround.finalizeMsg=\u78ba\u5b9a -KeywordSearchIngestModule.doInBackGround.pendingMsg=(\u4fdd\u7559\u4e2d) -RawText.FileText=\u30d5\u30a1\u30a4\u30eb\u30c6\u30ad\u30b9\u30c8 -RawText.ResultText=\u7d50\u679c\u30c6\u30ad\u30b9\u30c8 -SearchRunner.doInBackGround.cancelMsg=(\u53d6\u308a\u6d88\u3057\u4e2d...) -KeywordSearchIngestModule.postIndexSummary.knowFileHeaderLbl=\u65e2\u77e5\u306e\u30bf\u30a4\u30d7\u306e\u30d5\u30a1\u30a4\u30eb -KeywordSearchIngestModule.postIndexSummary.fileGenStringsHead=\u4e00\u822c\u7684\u306a\u6587\u5b57\u5217\u304c\u62bd\u51fa\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb -KeywordSearchIngestModule.postIndexSummary.mdOnlyLbl=\u30e1\u30bf\u30c7\u30fc\u30bf\u306e\u307f\u3092\u62bd\u51fa\u3057\u307e\u3057\u305f -KeywordSearchIngestModule.postIndexSummary.idxErrLbl=\u30a8\u30e9\u30fc(\u30a4\u30f3\u30c7\u30af\u30b5\u30fc) -KeywordSearchIngestModule.postIndexSummary.errTxtLbl=\u30a8\u30e9\u30fc(\u30c6\u30ad\u30b9\u30c8\u62bd\u51fa) -KeywordSearchIngestModule.postIndexSummary.errIoLbl=\u30a8\u30e9\u30fc(\u5165\u51fa\u529b) -KeywordSearchIngestModule.postIndexSummary.kwIdxResultsLbl=\u30ad\u30fc\u30ef\u30fc\u30c9\u7d22\u5f15\u751f\u6210\u7d50\u679c -KeywordSearchIngestModule.postIndexSummary.kwIdxErrsTitle=\u30ad\u30fc\u30ef\u30fc\u30c9\u7d22\u5f15\u751f\u6210\u30a8\u30e9\u30fc -KeywordSearchIngestModule.postIndexSummary.kwIdxErrMsgFiles= {0} \u30d5\u30a1\u30a4\u30eb\u306e\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u4e2d\u306b\u30ad\u30fc\u30ef\u30fc\u30c9\u7d22\u5f15\u30b5\u30fc\u30d3\u30b9\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 -KeywordSearchIngestModule.postIndexSummary.kwIdxWarnMsgTitle=\u30ad\u30fc\u30ef\u30fc\u30c9\u7d22\u5f15\u751f\u6210\u8b66\u544a -KeywordSearchIngestModule.postIndexSummary.idxErrReadFilesMsg=\u30d5\u30a1\u30a4\u30eb\u306e\u8aad\u307f\u53d6\u308a\u4e2d\u304a\u3088\u3073\u30c6\u30ad\u30b9\u30c8\u62bd\u51fa\u4e2d\u306b\u30ad\u30fc\u30ef\u30fc\u30c9\u7d22\u5f15\u30b5\u30fc\u30d3\u30b9\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u7834\u640d\u3057\u305f\u30e1\u30c7\u30a3\u30a2\u307e\u305f\u306f\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u306e\u3082\u306e\u3067\u3042\u3063\u305f\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002 -KeywordSearchListsViewerPanel.initIngest.addIngestTitle=\u8ffd\u52a0\u3057\u3066\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8 -KeywordSearchListsViewerPanel.initIngest.addIngestMsg=\u8ffd\u52a0\u306e\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u3092\u9078\u629e
    \u3057\u3001\u9032\u884c\u4e2d\u306e\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u306b\u30a8\u30f3\u30ad\u30e5\u30fc\u3067\u304d\u307e\u3059\u3002
    \u9078\u629e\u3057\u305f\u30ea\u30b9\u30c8\u306f\u6b21\u56de\u306e\u30d5\u30a1\u30a4\u30eb\u7d22\u5f15\u518d\u69cb\u7bc9\u6642\u306b\u691c\u7d22\u3055\u308c\u307e\u3059\u3002 -KeywordSearchListsViewerPanel.initIngest.searchIngestTitle=\u691c\u7d22 -KeywordSearchListsViewerPanel.initIngest.addIdxSearchMsg=\u9078\u629e\u3057\u305f\u30ea\u30b9\u30c8\u306e\u30ad\u30fc\u30ef\u30fc\u30c9\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u3092\u691c\u7d22 -KeywordSearchListsViewerPanel.initIngest.ongoingIngestMsg=\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb: {0} (\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u306e\u9032\u884c\u4e2d) -KeywordSearchListsViewerPanel.initIngest.fileIndexCtMsg=\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb: {0} -KeywordSearch.selectedColLbl=\u9078\u629e\u6e08\u307f -KeywordSearch.nameColLbl=\u540d\u524d -KeywordSearch.typeColLbl=\u30ad\u30fc\u30ef\u30fc\u30c9\u30bf\u30a4\u30d7 -KeywordSearchQueryManager.execute.exeWinTitle=\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22 {0} - {1} -KeywordSearch.newKeywordListMsg=\u65b0\u898f\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8 -KeywordSearch.importListFileDialogMsg=\u30d5\u30a1\u30a4\u30eb {0} \u304b\u3089\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -KeywordSearch.yesOwMsg=\u306f\u3044\u3001\u4e0a\u66f8\u304d\u3057\u307e\u3059 -KeywordSearch.noSkipMsg=\u3044\u3044\u3048\u3001\u30b9\u30ad\u30c3\u30d7\u3057\u307e\u3059 -KeywordSearch.cancelImportMsg=\u30a4\u30f3\u30dd\u30fc\u30c8\u3092\u53d6\u308a\u6d88\u3059 -KeywordSearch.overwriteListPrompt=\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8 <{0}> \u306f\u30ed\u30fc\u30ab\u30eb\u306b\u3059\u3067\u306b\u5b58\u5728\u3057\u307e\u3059\u3002\u4e0a\u66f8\u304d\u3057\u307e\u3059\u304b? -KeywordSearch.importOwConflict=\u30ea\u30b9\u30c8\u306e\u30a4\u30f3\u30dd\u30fc\u30c8\u6642\u306e\u77db\u76fe -KeywordSearch.kwListFailImportMsg=\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u304c\u30a4\u30f3\u30dd\u30fc\u30c8\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f -KeywordSearchListsManagementPanel.fileExtensionFilterLbl=Autopsy\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u30d5\u30a1\u30a4\u30eb(xml) -KeywordSearchListsManagementPanel.fileExtensionFilterLb2=\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u30d5\u30a1\u30a4\u30eb(txt)\u3092\u5305\u542b -KeywordSearch.listImportFeatureTitle=\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u306e\u30a4\u30f3\u30dd\u30fc\u30c8 -KeywordSearchIngestModule.moduleName=\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22 -KeywordSearchIngestModule.moduleDescription=\u30ea\u30b9\u30c8\u5185\u306e\u30ad\u30fc\u30ef\u30fc\u30c9\u3068\u6b63\u898f\u8868\u73fe\u3067\u30d5\u30a1\u30a4\u30eb\u7d22\u5f15\u751f\u6210\u3068\u5b9a\u671f\u691c\u7d22\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002 -DropdownSearchPanel.keywordTextField.text= -KeywordSearchPanel.searchDropButton.text=\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22 -DropdownSearchPanel.exactRadioButton.text=\u5b8c\u5168\u4e00\u81f4 -DropdownSearchPanel.substringRadioButton.text=\u90e8\u5206\u4e00\u81f4 -DropdownSearchPanel.regexRadioButton.text=\u6b63\u898f\u8868\u73fe -DropdownSearchPanel.searchButton.text=\u691c\u7d22 -DropdownSearchPanel.cutMenuItem.text=\u5207\u308a\u53d6\u308a -DropdownSearchPanel.selectAllMenuItem.text=\u3059\u3079\u3066\u9078\u629e -DropdownSearchPanel.pasteMenuItem.text=\u8cbc\u308a\u4ed8\u3051 -DropdownSearchPanel.copyMenuItem.text=\u30b3\u30d4\u30fc -AbstractFileStringContentStream.getSize.exception.msg=\u6587\u5b57\u5217\u5168\u4f53\u304c\u5909\u63db\u3055\u308c\u308b\u307e\u3067\u3001\u5909\u63db\u3055\u308c\u305f\u6587\u5b57\u5217\u306e\u6587\u5b57\u6570\u306f\u308f\u304b\u308a\u307e\u305b\u3093 -AbstractFileStringContentStream.getSrcInfo.text=\u30d5\u30a1\u30a4\u30eb:{0} -ByteContentStream.getSrcInfo.text=\u30d5\u30a1\u30a4\u30eb:{0} -ExtractedContentViewer.nextPage.exception.msg=\u6b21\u306e\u30da\u30fc\u30b8\u304c\u3042\u308a\u307e\u305b\u3093\u3002 -ExtractedContentViewer.previousPage.exception.msg=\u524d\u306e\u30da\u30fc\u30b8\u304c\u3042\u308a\u307e\u305b\u3093\u3002 ExtractedContentViewer.hasNextItem.exception.msg=\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u691c\u7d22\u53ef\u80fd\u306a\u30bd\u30fc\u30b9\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 ExtractedContentViewer.hasPreviousItem.exception.msg=\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u691c\u7d22\u53ef\u80fd\u306a\u30bd\u30fc\u30b9\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 ExtractedContentViewer.nextItem.exception.msg=\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u691c\u7d22\u53ef\u80fd\u306a\u30bd\u30fc\u30b9\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 +ExtractedContentViewer.nextPage.exception.msg=\u6b21\u306e\u30da\u30fc\u30b8\u304c\u3042\u308a\u307e\u305b\u3093\u3002 ExtractedContentViewer.previousItem.exception.msg=\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u691c\u7d22\u53ef\u80fd\u306a\u30bd\u30fc\u30b9\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 -ExtractedContentViewer.currentItem.exception.msg=\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u691c\u7d22\u53ef\u80fd\u306a\u30bd\u30fc\u30b9\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 -Ingester.ingest.exception.unknownImgId.msg=\u30d5\u30a1\u30a4\u30eb\u306e\u7d22\u5f15\u751f\u6210\u304c\u30b9\u30ad\u30c3\u30d7\u3055\u308c\u307e\u3059\u3002\u672a\u77e5\u306e\u30a4\u30e1\u30fc\u30b8ID\u3067\u3059\u3002\u5bfe\u8c61\u30d5\u30a1\u30a4\u30eb: {0} -Ingester.ingest.exception.cantReadStream.msg=\u6b21\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u30b9\u30c8\u30ea\u30fc\u30e0\u3092\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\u3067\u3057\u305f: {0} -Ingester.ingest.exception.err.msg=\u6b21\u306e\u6587\u66f8\u306e\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: {0} -Ingester.ingestExtract.exception.solrTimeout.msg=Solr\u7d22\u5f15\u751f\u6210\u30ea\u30af\u30a8\u30b9\u30c8\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u3002\u5bfe\u8c61ID: {0}\u3001\u540d\u524d: {1} -Ingester.ingestExtract.exception.probPostToSolr.msg=Solr\u306b\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u63b2\u8f09\u4e2d\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u5bfe\u8c61ID: {0}\u3001\u540d\u524d: {1} -Ingester.UpReqestTask.run.exception.sorlNotAvail.msg=\u5229\u7528\u53ef\u80fd\u306aSolr\u30b3\u30a2\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3067\u304d\u307e\u305b\u3093 -Ingester.UpRequestTask.run.exception.probReadFile.msg=\u30d5\u30a1\u30a4\u30eb\u306e\u8aad\u307f\u8fbc\u307f\u4e2d\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 -Ingester.UpRequestTask.run.exception.solrProb.msg=Solr\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f -Ingester.UpRequestTask.run.exception.probPostToSolr.msg=Solr\u306b\u30d5\u30a1\u30a4\u30eb\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u63b2\u8f09\u4e2d\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002SolrException\u30a8\u30e9\u30fc\u30b3\u30fc\u30c9: {0} -Ingester.FscContentStream.getSrcInfo=\u30d5\u30a1\u30a4\u30eb:{0} -Ingester.FscContentStream.getReader=\u307e\u3060\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 -Ingester.NullContentStream.getSrcInfo.text=\u30d5\u30a1\u30a4\u30eb:{0} -Ingester.NullContentStream.getReader=\u307e\u3060\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 -KeywordSearch.moduleErr=\u30e2\u30b8\u30e5\u30fc\u30eb\u30a8\u30e9\u30fc -KeywordSearch.fireNumIdxFileChg.moduleErr.msg=KeywordSearch\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 -KeywordSearchListsEncase.save.exception.msg=\u307e\u3060\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 -KeywordSearchListsEncase.save2.exception.msg=\u307e\u3060\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 -KeywordSearchListsEncase.encaseMetaType.exception.msg=\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u306a\u3044EncaseMetaType: {0} -KeywordSearchListsManagementPanel.getColName.text=\u540d\u524d -KeywordSearchListsManagementPanel.setValueAt.exception.msg=\u30bb\u30eb\u306e\u7de8\u96c6\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093 -KeywordSearchOptionsPanelController.moduleErr=\u30e2\u30b8\u30e5\u30fc\u30eb\u30a8\u30e9\u30fc -KeywordSearchOptionsPanelController.moduleErr.msg1=KeywordSearchOptionsPanelController\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 -KeywordSearchOptionsPanelController.moduleErr.msg2=KeywordSearchOptionsPanelController\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 -KeywordSearchQueryManager.pathText.text=\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22 -KeywordSearchResultFactory.progress.saving=\u6b21\u306e\u7d50\u679c\u3092\u4fdd\u5b58: {0} -KeywordSearchSettings.moduleName.text=KeywordSearch -KeywordSearchSettings.properties_options.text={0}_\u30aa\u30d7\u30b7\u30e7\u30f3 -KeywordSearchSettings.propertiesNSRL.text={0}_NSRL -KeywordSearchSettings.propertiesScripts.text={0}_\u6587\u5b57\u5217 -NoOpenCoreException.err.noOpenSorlCore.msg=\u73fe\u5728\u958b\u3044\u3066\u3044\u308bSolr\u306e\u30b3\u30a2\u306f\u3042\u308a\u307e\u305b\u3093\u3002 -SearchRunner.query.exception.msg=\u6b21\u306e\u30af\u30a8\u30ea\u3092\u5b9f\u884c\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: -# {0} - \u30b3\u30a2\u540d -Server.deleteCore.exception.msg=Solr \u30b3\u30a2 {0} \u3092\u524a\u9664\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f -Server.start.exception.cantStartSolr.msg=Solr\u30b5\u30fc\u30d0\u30fc\u30d7\u30ed\u30bb\u30b9\u3092\u958b\u59cb\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f -Server.start.exception.cantStartSolr.msg2=Solr\u30b5\u30fc\u30d0\u30fc\u30d7\u30ed\u30bb\u30b9\u3092\u958b\u59cb\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f -Server.isRunning.exception.errCheckSolrRunning.msg=Solr\u30b5\u30fc\u30d0\u30fc\u304c\u5b9f\u884c\u4e2d\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -Server.isRunning.exception.errCheckSolrRunning.msg2=Solr\u30b5\u30fc\u30d0\u30fc\u304c\u5b9f\u884c\u4e2d\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -Server.openCore.exception.alreadyOpen.msg=\u958b\u3044\u3066\u3044\u308bSolr\u306e\u30b3\u30a2\u304c\u3059\u3067\u306b\u3042\u308a\u307e\u3059\u3002\u6700\u521d\u306b\u30b3\u30a2\u3092\u660e\u793a\u7684\u306b\u9589\u3058\u3066\u304f\u3060\u3055\u3044\u3002 -Server.queryNumIdxFiles.exception.msg=\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u6570\u3092\u30af\u30a8\u30ea\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 -Server.queryNumIdxChunks.exception.msg=\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u305f\u30c1\u30e3\u30f3\u30af\u6570\u3092\u30af\u30a8\u30ea\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 -Server.queryNumIdxDocs.exception.msg=\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u305f\u6587\u66f8\u6570\u3092\u30af\u30a8\u30ea\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 -Server.queryIsIdxd.exception.msg=\u30b3\u30f3\u30c6\u30f3\u30c4\u304c\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u305f\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 -Server.queryNumFileChunks.exception.msg=\u30d5\u30a1\u30a4\u30eb\u30c1\u30e3\u30f3\u30af\u6570\u306e\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 -Server.query.exception.msg=\u6b21\u306e\u30af\u30a8\u30ea\u306e\u5b9f\u884c\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: {0} -Server.query2.exception.msg=\u6b21\u306e\u30af\u30a8\u30ea\u306e\u5b9f\u884c\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: {0} -Server.queryTerms.exception.msg=\u6b21\u306eterms(\u6574\u6570/\u6587\u5b57\u5217/\u914d\u5217)\u30af\u30a8\u30ea\u306e\u5b9f\u884c\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: {0} -Server.connect.exception.msg=\u6b21\u306eSolr\u30b5\u30fc\u30d0\u30fc\u306b\u63a5\u7d9a\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f: {0} -Server.openCore.exception.msg=\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u30b5\u30fc\u30d3\u30b9\u306f\u307e\u3060\u5b9f\u884c\u3057\u3066\u3044\u307e\u305b\u3093 -Server.openCore.exception.cantOpen.msg=\u7d22\u5f15\u3092\u4f5c\u6210\u307e\u305f\u306f\u958b\u3051\u307e\u305b\u3093\u3067\u3057\u305f -Server.openCore.exception.noIndexDir.msg=\u7d22\u5f15\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u3092\u4f5c\u6210\u3067\u304d\u306a\u304b\u3063\u305f\u304b\u3001\u898b\u3064\u304b\u308a\u307e\u305b\u3093 -Server.request.exception.exception.msg=Solr\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u767a\u884c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f -Server.commit.exception.msg=\u7d22\u5f15\u3092\u78ba\u5b9a\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f -Server.addDoc.exception.msg=\u66f4\u65b0\u30cf\u30f3\u30c9\u30e9\u30fc\u7d4c\u7531\u3067\u6b21\u306e\u6587\u66f8\u3092\u8ffd\u52a0\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f: {0} -Server.addDoc.exception.msg2=\u66f4\u65b0\u30cf\u30f3\u30c9\u30e9\u30fc\u7d4c\u7531\u3067\u6b21\u306e\u6587\u66f8\u3092\u8ffd\u52a0\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f: {0} -Server.close.exception.msg=\u30b3\u30a2\u3092\u9589\u3058\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093 -Server.close.exception.msg2=\u30b3\u30a2\u3092\u9589\u3058\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093 -Server.solrServerNoPortException.msg=\u7d22\u5f15\u751f\u6210\u30b5\u30fc\u30d0\u30fc\u306f\u30dd\u30fc\u30c8 {0} \u306b\u30d0\u30a4\u30f3\u30c9\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306e {1} \u30dd\u30fc\u30c8\u306b\u5909\u66f4\u3059\u308b\u3053\u3068\u3092\u691c\u8a0e\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -KeywordSearchJobSettingsPanel.keywordSearchEncodings.text=- -KeywordSearchJobSettingsPanel.languagesValLabel.toolTipText= -KeywordSearchJobSettingsPanel.languagesValLabel.text=- -KeywordSearchJobSettingsPanel.encodingsLabel.text=\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0: -KeywordSearchJobSettingsPanel.titleLabel.text=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u4e2d\u306b\u6709\u52b9\u5316\u3059\u308b\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u3092\u9078\u629e: -KeywordSearchJobSettingsPanel.languagesLabel.toolTipText=\u672a\u77e5\u306e\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u304b\u3089\u306e\u6587\u5b57\u5217\u62bd\u51fa\u306e\u305f\u3081\u306b\u6709\u52b9\u5316\u3055\u308c\u305f\u6587\u5b57\u5217\u3067\u3059\u3002\u8a73\u7d30\u8a2d\u5b9a\u3067\u5909\u66f4\u3092\u884c\u3048\u307e\u3059\u3002 -KeywordSearchJobSettingsPanel.languagesLabel.text=\u672a\u77e5\u306e\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u304b\u3089\u306e\u6587\u5b57\u5217\u62bd\u51fa\u306e\u305f\u3081\u306b\u6709\u52b9\u5316\u3055\u308c\u305f\u6587\u5b57\u5217\u3067\u3059\u3002 -KeywordSearchGlobalLanguageSettingsPanel.enableUTF8Checkbox.text=UTF8\u30c6\u30ad\u30b9\u30c8\u62bd\u51fa\u3092\u6709\u52b9\u5316\u3059\u308b -KeywordSearchGlobalLanguageSettingsPanel.ingestSettingsLabel.text=\u672a\u77e5\u306e\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u304b\u3089\u306e\u6587\u5b57\u5217\u62bd\u51fa\u306e\u305f\u3081\u306e\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u8a2d\u5b9a(\u5909\u66f4\u306f\u6b21\u306e\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u3067\u6709\u52b9\u306b\u306a\u308a\u307e\u3059): -KeywordSearchGlobalLanguageSettingsPanel.enableUTF16Checkbox.text=UTF16LE\u304a\u3088\u3073UTF16BE\u6587\u5b57\u5217\u62bd\u51fa\u3092\u6709\u52b9\u5316 -KeywordSearchGlobalLanguageSettingsPanel.enableOcrCheckbox.text=\u5149\u5b66\u6587\u5b57\u8a8d\u8b58(OCR)\u3092\u6709\u52b9\u5316 -KeywordSearchGlobalLanguageSettingsPanel.languagesLabel.text=\u6709\u52b9\u5316\u3055\u308c\u305f\u6587\u5b57\u5217(\u8a00\u8a9e): -KeywordSearchGlobalSearchSettingsPanel.timeRadioButton1.toolTipText=20\u5206(\u6700\u901f\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u6642\u9593) -KeywordSearchGlobalSearchSettingsPanel.timeRadioButton1.text=20\u5206(\u6700\u9045\u30d5\u30a3\u30fc\u30c9\u30d0\u30c3\u30af\u3001\u6700\u901f\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8) -KeywordSearchGlobalSearchSettingsPanel.timeRadioButton2.toolTipText=10\u5206(\u30c7\u30d5\u30a9\u30eb\u30c8\u3088\u308a\u3082\u901f\u3044\u7dcf\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u6642\u9593) -KeywordSearchGlobalSearchSettingsPanel.timeRadioButton2.text=10\u5206(\u3088\u308a\u9045\u3044\u30d5\u30a3\u30fc\u30c9\u30d0\u30c3\u30af\u3001\u3088\u308a\u901f\u3044\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8) -KeywordSearchGlobalSearchSettingsPanel.frequencyLabel.text=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u4e2d\u306e\u7d50\u679c\u66f4\u65b0\u983b\u5ea6: -KeywordSearchGlobalSearchSettingsPanel.skipNSRLCheckBox.toolTipText=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u30b5\u30fc\u30d3\u30b9\u306b\u4ee5\u524d\u306b\u5b9f\u884c\u6e08\u307f\u3067\u3042\u308b\u3053\u3068\u3001\u307e\u305f\u306f\u6b21\u306e\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u306b\u9078\u629e\u3055\u308c\u308b\u3053\u3068\u3092\u8981\u6c42\u3057\u307e\u3059\u3002 -KeywordSearchGlobalSearchSettingsPanel.skipNSRLCheckBox.text=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u4e2d\u306bNSRL(\u65e2\u77e5\u306e\u30d5\u30a1\u30a4\u30eb)\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u30ad\u30fc\u30ef\u30fc\u30c9\u306b\u8ffd\u52a0\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044 -KeywordSearchGlobalSearchSettingsPanel.informationLabel.text=\u60c5\u5831 -KeywordSearchGlobalSearchSettingsPanel.settingsLabel.text=\u8a2d\u5b9a -KeywordSearchGlobalSearchSettingsPanel.filesIndexedValue.text=0 -KeywordSearchGlobalSearchSettingsPanel.filesIndexedLabel.text=\u30ad\u30fc\u30ef\u30fc\u30c9\u7d22\u5f15\u5185\u306e\u30d5\u30a1\u30a4\u30eb: -KeywordSearchGlobalSearchSettingsPanel.showSnippetsCB.text=\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u7d50\u679c\u306b\u30ad\u30fc\u30ef\u30fc\u30c9\u30d7\u30ec\u30d3\u30e5\u30fc\u3092\u8868\u793a(\u691c\u7d22\u6642\u9593\u304c\u9577\u304f\u306a\u308a\u307e\u3059) -KeywordSearchGlobalSearchSettingsPanel.chunksValLabel.text=0 -KeywordSearchGlobalSearchSettingsPanel.timeRadioButton4.toolTipText=1\u5206(\u7dcf\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u6642\u9593\u306f\u6700\u9577\u306b\u306a\u308a\u307e\u3059) -KeywordSearchGlobalSearchSettingsPanel.timeRadioButton4.text_1=1\u5206(\u3088\u308a\u901f\u3044\u30d5\u30a3\u30fc\u30c9\u30d0\u30c3\u30af\u3001\u6700\u9577\u306e\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8) -KeywordSearchGlobalSearchSettingsPanel.chunksLabel.text=\u30ad\u30fc\u30ef\u30fc\u30c9\u7d22\u5f15\u5185\u306e\u30c1\u30e3\u30f3\u30af: -KeywordSearchGlobalSearchSettingsPanel.timeRadioButton3.toolTipText=5\u5206(\u7dcf\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u6642\u9593\u304c\u9577\u304f\u306a\u308a\u307e\u3059) -KeywordSearchGlobalSearchSettingsPanel.timeRadioButton3.text=5\u5206(\u30c7\u30d5\u30a9\u30eb\u30c8) -KeywordSearchIngestModule.regExpHitLbl=\u6b63\u898f\u8868\u73fe\u30d2\u30c3\u30c8: -KeywordSearchIngestModule.kwHitLbl=\u30ad\u30fc\u30ef\u30fc\u30c9\u30d2\u30c3\u30c8: -KeywordSearchIngestModule.kwHitThLbl=\u30ad\u30fc\u30ef\u30fc\u30c9 -KeywordSearchIngestModule.previewThLbl=\u30d7\u30ec\u30d3\u30e5\u30fc -KeywordSearchIngestModule.fileThLbl=\u30d5\u30a1\u30a4\u30eb -KeywordSearchIngestModule.listThLbl=\u30ea\u30b9\u30c8 -KeywordSearchIngestModule.regExThLbl=\u6b63\u898f\u8868\u73fe -AbstractFileTikaTextExtract.index.tikaParseTimeout.text=\u4f8b\u5916: \u6b21\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u306eTika\u89e3\u6790\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8: {0}\u3001{1} -AbstractFileTikaTextExtract.index.exception.tikaParse.msg=\u4f8b\u5916: \u6b21\u306e\u30d5\u30a1\u30a4\u30eb\u306eTika\u89e3\u6790\u30bf\u30b9\u30af\u5b9f\u884c\u6642\u306e\u4e88\u671f\u305b\u306c\u4f8b\u5916: {0}\u3001{1} -KeywordSearchEditListPanel.exportButtonAction.featureName.text=\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u306e\u30a8\u30af\u30b9\u30dd\u30fc\u30c8 -KeywordSearchGlobalListSettingsPanel.component.featureName.text=\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u3092\u4fdd\u5b58 -KeywordSearchListsAbstract.moduleErr=\u30e2\u30b8\u30e5\u30fc\u30eb\u30a8\u30e9\u30fc -KeywordSearchListsAbstract.addList.errMsg1.msg=KeywordSearchListsAbstract\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 -KeywordSearchListsAbstract.addList.errMsg2.msg=KeywordSearchListsAbstract\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 -SearchRunner.updateTimer.title.text=SearchRunner\u66f4\u65b0\u30bf\u30a4\u30de\u30fc -KeywordSearchListsAbstract.saveList.errMsg1.msg=KeywordSearchListsAbstract\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 -KeywordSearchListsAbstract.saveList.errMsg2.msg=KeywordSearchListsAbstract\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 -KeywordSearchListsAbstract.writeLists.errMsg1.msg=KeywordSearchListsAbstract\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 -KeywordSearchListsAbstract.writeLists.errMsg2.msg=KeywordSearchListsAbstract\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 -KeywordSearchListsAbstract.deleteList.errMsg1.msg=KeywordSearchListsAbstract\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 -KeywordSearchListsManagementPanel.newKeywordListDescription=\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8 <{0}> \u306f\u8aad\u307f\u53d6\u308a\u5c02\u7528\u30ea\u30b9\u30c8\u3068\u3057\u3066\u3059\u3067\u306b\u5b58\u5728\u3057\u307e\u3059\u3002\u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u5b9f\u884c\u4e2d\u306b\u7f6e\u304d\u63db\u3048\u307e\u3059\u304b(\u5909\u66f4\u306f\u6052\u4e45\u7684\u3067\u306f\u3042\u308a\u307e\u305b\u3093)? -KeywordSearchListsManagementPanel.newKeywordListDescription2=\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8 <{0}> \u304c\u3059\u3067\u306b\u5b58\u5728\u3057\u307e\u3059\u3002\u7f6e\u304d\u63db\u3048\u307e\u3059\u304b? -KeywordSearchModuleFactory.getIngestJobSettingsPanel.exception.msg=instanceof KeywordSearchJobSettings\u306b\u306a\u308b\u3068\u4e88\u60f3\u3055\u308c\u308b\u8a2d\u5b9a\u5f15\u6570 -KeywordSearchModuleFactory.createFileIngestModule.exception.msg=instanceof KeywordSearchJobSettings\u306b\u306a\u308b\u3068\u4e88\u60f3\u3055\u308c\u308b\u8a2d\u5b9a\u5f15\u6570 -SearchRunner.Searcher.done.err.msg=\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u306e\u5b9f\u884c\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -KeywordSearchGlobalSearchSettingsPanel.timeRadioButton5.toolTipText=\u5168\u4f53\u3067\u6700\u901f\u3067\u3059\u304c\u3001\u6700\u5f8c\u307e\u3067\u7d50\u679c\u306f\u8868\u793a\u3055\u308c\u307e\u305b\u3093 -KeywordSearchGlobalSearchSettingsPanel.timeRadioButton5.text=\u5b9a\u671f\u691c\u7d22\u306a\u3057 -SolrConnectionCheck.HostnameOrPort=\u7121\u52b9\u306a\u30db\u30b9\u30c8\u540d\u304a\u3088\u3073/\u307e\u305f\u306f\u30dd\u30fc\u30c8\u756a\u53f7\u3067\u3059\u3002 -SolrConnectionCheck.Hostname=\u7121\u52b9\u306a\u30db\u30b9\u30c8\u540d\u3067\u3059\u3002 -SolrConnectionCheck.MissingHostname=\u30db\u30b9\u30c8\u540d\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002 -GlobalListsManagementPanel.newListButton.text=\u65b0\u898f\u30ea\u30b9\u30c8 -GlobalListsManagementPanel.importButton.text=\u30ea\u30b9\u30c8\u3092\u30a4\u30f3\u30dd\u30fc\u30c8 -GlobalListsManagementPanel.keywordListsLabel.text=\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8: -NewKeywordPanel.regexButton.text=\u6b63\u898f\u8868\u73fe -NewKeywordPanel.exactButton.text=\u5b8c\u5168\u4e00\u81f4 -NewKeywordPanel.substringButton.text=\u90e8\u5206\u4e00\u81f4 -NewKeywordPanel.keywordTextField.text= -NewKeywordPanel.newKeywordLabel.text=\u65b0\u898f\u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u5165\u529b: -AddKeywordsDialog.exactRadioButton.text=\u5b8c\u5168\u4e00\u81f4 -AddKeywordsDialog.substringRadioButton.text=\u90e8\u5206\u4e00\u81f4 -AddKeywordsDialog.regexRadioButton.text=\u6b63\u898f\u8868\u73fe -AddKeywordsDialog.keywordTypeLabel.text=\u30ad\u30fc\u30ef\u30fc\u30c9\u30bf\u30a4\u30d7\u3092\u9078\u629e: -AddKeywordsDialog.enterKeywordsLabel.text=\u6b21\u306b\u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u5165\u529b(1\u884c\u306b\u3064\u304d1\u3064): -AddKeywordsDialog.pasteButton.text=\u30af\u30ea\u30c3\u30d7\u30dc\u30fc\u30c9\u304b\u3089\u8cbc\u308a\u4ed8\u3051 -AddKeywordsDialog.addButton.text=OK -AddKeywordsDialog.cancelButton.text=\u53d6\u308a\u6d88\u3057 -AddKeywordsDialog.addKeywordsTitle.text=\u65b0\u898f\u30ad\u30fc\u30ef\u30fc\u30c9 -GlobalEditListPanel.newKeywordsButton.text=\u65b0\u898f\u30ad\u30fc\u30ef\u30fc\u30c9 +ExtractedContentViewer.previousPage.exception.msg=\u524d\u306e\u30da\u30fc\u30b8\u304c\u3042\u308a\u307e\u305b\u3093\u3002 +ExtractedContentViewer.toolTip=\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u62bd\u51fa\u3055\u308c\u305f\u30c6\u30ad\u30b9\u30c8\u3068\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u7d50\u679c\u3092\u8868\u793a\u3057\u307e\u3059\u3002\u3053\u306e\u30d3\u30e5\u30fc\u30ef\u30fc\u3092\u6709\u52b9\u5316\u3059\u308b\u306b\u306f\u3001\u30d5\u30a1\u30a4\u30eb\u306b\u5bfe\u3057\u3066\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u3092\u5b9f\u884c\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 GlobalEditListPanel.addKeywordResults.text=\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u7d50\u679c\u3092\u8ffd\u52a0 -GlobalEditListPanel.keywordsAdded.text={0} \u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u6b63\u5e38\u306b\u8ffd\u52a0\u3057\u307e\u3057\u305f\u3002 -GlobalEditListPanel.keywordsAddedPlural.text={0} \u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u6b63\u5e38\u306b\u8ffd\u52a0\u3057\u307e\u3057\u305f\u3002 +GlobalEditListPanel.editKeyword.title=\u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u7de8\u96c6 +GlobalEditListPanel.editWordButton.text=\u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u7de8\u96c6 +GlobalEditListPanel.ingestWarningLabel.text=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u304c\u9032\u884c\u4e2d\u3067\u3059\u3002\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u304c\u5b8c\u4e86\u3059\u308b\u307e\u3067\u4e00\u90e8\u306e\u8a2d\u5b9a\u3092\u5229\u7528\u3067\u304d\u307e\u305b\u3093\u3002 GlobalEditListPanel.keywordDupesSkipped.text={0} \u30ad\u30fc\u30ef\u30fc\u30c9\u306f\u30ea\u30b9\u30c8\u306b\u3059\u3067\u306b\u5b58\u5728\u3057\u3066\u3044\u307e\u3057\u305f\u3002 GlobalEditListPanel.keywordDupesSkippedPlural.text={0} \u30ad\u30fc\u30ef\u30fc\u30c9\u306f\u30ea\u30b9\u30c8\u306b\u3059\u3067\u306b\u5b58\u5728\u3057\u3066\u3044\u307e\u3057\u305f\u3002 GlobalEditListPanel.keywordErrors.text={0} \u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u89e3\u6790\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u78ba\u8a8d\u3057\u3066\u3082\u3046\u4e00\u5ea6\u304a\u8a66\u3057\u304f\u3060\u3055\u3044\u3002 GlobalEditListPanel.keywordErrorsPlural.text={0} \u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u89e3\u6790\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u78ba\u8a8d\u3057\u3066\u3082\u3046\u4e00\u5ea6\u304a\u8a66\u3057\u304f\u3060\u3055\u3044\u3002 -GlobalListsManagementPanel.exportButton.text=\u30ea\u30b9\u30c8\u3092\u30a8\u30af\u30b9\u30dd\u30fc\u30c8 -GlobalListsManagementPanel.deleteListButton.text=\u30ea\u30b9\u30c8\u3092\u524a\u9664 +GlobalEditListPanel.keywordsAdded.text={0} \u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u6b63\u5e38\u306b\u8ffd\u52a0\u3057\u307e\u3057\u305f\u3002 +GlobalEditListPanel.keywordsAddedPlural.text={0} \u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u6b63\u5e38\u306b\u8ffd\u52a0\u3057\u307e\u3057\u305f\u3002 +GlobalEditListPanel.newKeywordsButton.text=\u65b0\u898f\u30ad\u30fc\u30ef\u30fc\u30c9 +GlobalEditListPanel.warning.text=\u5883\u754c\u6587\u5b57 ^ \u3068 $ \u304c\u5358\u8a9e\u9818\u57df\u3068\u4e00\u81f4\u3057\u307e\u305b\u3093\u3002[ \\.,] \u306a\u3069\u306e\u660e\u793a\u7684\u306a\u5883\u754c\u6587\u5b57\u30ea\u30b9\u30c8\u3068\u306e\u7f6e\u63db\u3092\n\u691c\u8a0e\u3057\u3066\u304f\u3060\u3055\u3044 +GlobalEditListPanel.warning.title=\u8b66\u544a GlobalListsManagementPanel.copyListButton.text=\u30ea\u30b9\u30c8\u3092\u30b3\u30d4\u30fc +GlobalListsManagementPanel.deleteListButton.text=\u30ea\u30b9\u30c8\u3092\u524a\u9664 +GlobalListsManagementPanel.exportButton.text=\u30ea\u30b9\u30c8\u3092\u30a8\u30af\u30b9\u30dd\u30fc\u30c8 +GlobalListsManagementPanel.importButton.text=\u30ea\u30b9\u30c8\u3092\u30a4\u30f3\u30dd\u30fc\u30c8 +GlobalListsManagementPanel.keywordListsLabel.text=\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\: +GlobalListsManagementPanel.newListButton.text=\u65b0\u898f\u30ea\u30b9\u30c8 GlobalListsManagementPanel.renameListButton.text=\u30ea\u30b9\u30c8\u540d\u3092\u7de8\u96c6 -GlobalEditListPanel.editWordButton.text=\u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u7de8\u96c6 +HighlightedMatchesSource.toString=\u691c\u7d22\u7d50\u679c +IndexedText.errorMessage.errorGettingText=Error \u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u305f\u30c6\u30ad\u30b9\u30c8\u306e\u691c\u7d22\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 +IndexedText.warningMessage.knownFile=\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306f\u65e2\u77e5\u306e\u30d5\u30a1\u30a4\u30eb(MD5\u30cf\u30c3\u30b7\u30e5\u30d9\u30fc\u30b9)\u3067\u3042\u308b\u305f\u3081\u3001\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u305f\u30c6\u30ad\u30b9\u30c8\u306f\u3042\u308a\u307e\u305b\u3093\u3002 +IndexedText.warningMessage.noTextAvailable=\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306b\u306f\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u305f\u30c6\u30ad\u30b9\u30c8\u304c\u3042\u308a\u307e\u305b\u3093\u3002 +Ingester.FscContentStream.getReader=\u307e\u3060\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 +Ingester.FscContentStream.getSrcInfo=\u30d5\u30a1\u30a4\u30eb\:{0} +Ingester.NullContentStream.getReader=\u307e\u3060\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 +Ingester.NullContentStream.getSrcInfo.text=\u30d5\u30a1\u30a4\u30eb\:{0} +Ingester.UpReqestTask.run.exception.sorlNotAvail.msg=\u5229\u7528\u53ef\u80fd\u306aSolr\u30b3\u30a2\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3067\u304d\u307e\u305b\u3093 +Ingester.UpRequestTask.run.exception.probPostToSolr.msg=Solr\u306b\u30d5\u30a1\u30a4\u30eb\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u63b2\u8f09\u4e2d\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002SolrException\u30a8\u30e9\u30fc\u30b3\u30fc\u30c9\: {0} +Ingester.UpRequestTask.run.exception.probReadFile.msg=\u30d5\u30a1\u30a4\u30eb\u306e\u8aad\u307f\u8fbc\u307f\u4e2d\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 +Ingester.UpRequestTask.run.exception.solrProb.msg=Solr\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f +Ingester.ingest.exception.cantReadStream.msg=\u6b21\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u30b9\u30c8\u30ea\u30fc\u30e0\u3092\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\u3067\u3057\u305f\: {0} +Ingester.ingest.exception.err.msg=\u6b21\u306e\u6587\u66f8\u306e\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\: {0} +Ingester.ingest.exception.unknownImgId.msg=\u30d5\u30a1\u30a4\u30eb\u306e\u7d22\u5f15\u751f\u6210\u304c\u30b9\u30ad\u30c3\u30d7\u3055\u308c\u307e\u3059\u3002\u672a\u77e5\u306e\u30a4\u30e1\u30fc\u30b8ID\u3067\u3059\u3002\u5bfe\u8c61\u30d5\u30a1\u30a4\u30eb\: {0} +Ingester.ingestExtract.exception.probPostToSolr.msg=Solr\u306b\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u63b2\u8f09\u4e2d\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u5bfe\u8c61ID\: {0}\u3001\u540d\u524d\: {1} +Ingester.ingestExtract.exception.solrTimeout.msg=Solr\u7d22\u5f15\u751f\u6210\u30ea\u30af\u30a8\u30b9\u30c8\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u3002\u5bfe\u8c61ID\: {0}\u3001\u540d\u524d\: {1} +Installer.errorInitKsmMsg=\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u521d\u671f\u5316\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f +Installer.reportInitError=\u7d22\u5f15\u751f\u6210\u30b5\u30fc\u30d0\u30fc\u30dd\u30fc\u30c8 {0} \u3092\u5229\u7528\u3067\u304d\u307e\u305b\u3093\u3002 \u304a\u4f7f\u3044\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u304c {1} \u3092\u30d6\u30ed\u30c3\u30af\u3057\u3066\u3044\u306a\u3044\u304b\u3069\u3046\u304b\u78ba\u8a8d\u3057\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30e6\u30fc\u30b6\u30fc\u30d5\u30a9\u30eb\u30c0\u30fc\u5185\u306e {3} \u30d7\u30ed\u30d1\u30c6\u30a3\u30d5\u30a1\u30a4\u30eb\u3067 {2} \u3092\u5909\u66f4\u3059\u308b\u3053\u3068\u3092\u691c\u8a0e\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u5225\u306e\u30d7\u30ed\u30bb\u30b9\u304c\u77db\u76fe\u3092\u5f15\u304d\u8d77\u3053\u3057\u3066\u3044\u305f\u5834\u5408\u306f\u3001\u305d\u306e\u5f8c\u306b\u30b7\u30b9\u30c6\u30e0\u306e\u518d\u8d77\u52d5\u3092\u8a66\u307f\u3066\u304f\u3060\u3055\u3044\u3002 +Installer.reportPortError=\u7d22\u5f15\u751f\u6210\u30b5\u30fc\u30d0\u30fc\u30dd\u30fc\u30c8 {0} \u3092\u5229\u7528\u3067\u304d\u307e\u305b\u3093\u3002 \u304a\u4f7f\u3044\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u304c {1} \u3092\u30d6\u30ed\u30c3\u30af\u3057\u3066\u3044\u306a\u3044\u304b\u3069\u3046\u304b\u78ba\u8a8d\u3057\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30e6\u30fc\u30b6\u30fc\u30d5\u30a9\u30eb\u30c0\u30fc\u5185\u306e {3} \u30d7\u30ed\u30d1\u30c6\u30a3\u30d5\u30a1\u30a4\u30eb\u3067 {2} \u3092\u5909\u66f4\u3059\u308b\u3053\u3068\u3092\u691c\u8a0e\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u5225\u306e\u30d7\u30ed\u30bb\u30b9\u304c\u77db\u76fe\u3092\u5f15\u304d\u8d77\u3053\u3057\u3066\u3044\u305f\u5834\u5408\u306f\u3001\u305d\u306e\u5f8c\u306b\u30b7\u30b9\u30c6\u30e0\u306e\u518d\u8d77\u52d5\u3092\u8a66\u307f\u3066\u304f\u3060\u3055\u3044\u3002 +Installer.reportStopPortError=\u7d22\u5f15\u751f\u6210\u30b5\u30fc\u30d0\u30fc\u505c\u6b62\u30dd\u30fc\u30c8 {0} \u3092\u5229\u7528\u3067\u304d\u307e\u305b\u3093\u3002 \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30e6\u30fc\u30b6\u30fc\u30d5\u30a9\u30eb\u30c0\u30fc\u5185\u306e {2} \u30d7\u30ed\u30d1\u30c6\u30a3\u30d5\u30a1\u30a4\u30eb\u3067 {1} \u3092\u5909\u66f4\u3059\u308b\u3053\u3068\u3092\u691c\u8a0e\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +KeywordSearch.cancelImportMsg=\u30a4\u30f3\u30dd\u30fc\u30c8\u3092\u53d6\u308a\u6d88\u3059 +KeywordSearch.closeCore.notification.msg=\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u7d22\u5f15\u3092\u9589\u3058\u3066\u3044\u308b\u9593\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f +KeywordSearch.fireNumIdxFileChg.moduleErr.msg=KeywordSearch\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 +KeywordSearch.importListFileDialogMsg=\u30d5\u30a1\u30a4\u30eb {0} \u304b\u3089\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f +KeywordSearch.importOwConflict=\u30ea\u30b9\u30c8\u306e\u30a4\u30f3\u30dd\u30fc\u30c8\u6642\u306e\u77db\u76fe +KeywordSearch.kwListFailImportMsg=\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u304c\u30a4\u30f3\u30dd\u30fc\u30c8\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f +KeywordSearch.listImportFeatureTitle=\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u306e\u30a4\u30f3\u30dd\u30fc\u30c8 +KeywordSearch.moduleErr=\u30e2\u30b8\u30e5\u30fc\u30eb\u30a8\u30e9\u30fc +KeywordSearch.nameColLbl=\u540d\u524d +KeywordSearch.newKeywordListMsg=\u65b0\u898f\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8 +KeywordSearch.newKwListTitle=\u65b0\u898f\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u540d\: +KeywordSearch.noSkipMsg=\u3044\u3044\u3048\u3001\u30b9\u30ad\u30c3\u30d7\u3057\u307e\u3059 +KeywordSearch.openCore.notification.msg=\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u7d22\u5f15\u3092\u958b\u3051\u307e\u305b\u3093\u3067\u3057\u305f +KeywordSearch.overwriteListPrompt=\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8 <{0}> \u306f\u30ed\u30fc\u30ab\u30eb\u306b\u3059\u3067\u306b\u5b58\u5728\u3057\u307e\u3059\u3002\u4e0a\u66f8\u304d\u3057\u307e\u3059\u304b? +KeywordSearch.selectedColLbl=\u9078\u629e\u6e08\u307f +KeywordSearch.typeColLbl=\u30ad\u30fc\u30ef\u30fc\u30c9\u30bf\u30a4\u30d7 +KeywordSearch.yesOwMsg=\u306f\u3044\u3001\u4e0a\u66f8\u304d\u3057\u307e\u3059 +KeywordSearchConfigurationPanel.customizeComponents.genTabTitle=\u5168\u822c +KeywordSearchConfigurationPanel.customizeComponents.genTabToolTip=\u69cb\u6210\u5168\u822c +KeywordSearchConfigurationPanel.customizeComponents.listLabToolTip=\u30ea\u30b9\u30c8\u69cb\u6210 +KeywordSearchConfigurationPanel.customizeComponents.listTabTitle=\u30ea\u30b9\u30c8 +KeywordSearchConfigurationPanel.customizeComponents.stringExtTitle=\u6587\u5b57\u5217\u62bd\u51fa +KeywordSearchConfigurationPanel.customizeComponents.stringExtToolTip=\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u306e\u6587\u5b57\u5217\u62bd\u51fa\u69cb\u6210 +KeywordSearchConfigurationPanel1.customizeComponents.body=\u3053\u308c\u306b\u3088\u308a\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u304c\u4e00\u62ec\u524a\u9664\u3055\u308c\u307e\u3059(\u3059\u3079\u3066\u306e\u30b1\u30fc\u30b9)\u3002\u524a\u9664\u3092\u7d9a\u884c\u3057\u307e\u3059\u304b? +KeywordSearchConfigurationPanel1.customizeComponents.keywordListEmptyErr=\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u304c\u7a7a(\u672a\u5165\u529b)\u306e\u305f\u3081\u4fdd\u5b58\u3067\u304d\u307e\u305b\u3093 +KeywordSearchConfigurationPanel1.customizeComponents.kwListExistMsg=\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8 <{0}> \u304c\u3059\u3067\u306b\u5b58\u5728\u3057\u307e\u3059\u3002\u7f6e\u304d\u63db\u3048\u307e\u3059\u304b? +KeywordSearchConfigurationPanel1.customizeComponents.kwListSavedMsg=\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8 <{0}> \u3092\u4fdd\u5b58\u3057\u307e\u3057\u305f +KeywordSearchConfigurationPanel1.customizeComponents.noOwDefaultMsg=\u30c7\u30d5\u30a9\u30eb\u30c8\u30ea\u30b9\u30c8\u3092\u4e0a\u66f8\u304d\u3067\u304d\u307e\u305b\u3093 +KeywordSearchConfigurationPanel1.customizeComponents.title=\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u3092\u524a\u9664 +KeywordSearchEditListPanel.addKeyword.message=\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u30ea\u30b9\u30c8\u306b\u65b0\u898f\u7528\u8a9e\u3092\u8ffd\u52a0\: +KeywordSearchEditListPanel.addKeyword.title=\u65b0\u898f\u30ad\u30fc\u30ef\u30fc\u30c9 +KeywordSearchEditListPanel.addWordButton.text=\u65b0\u898f\u30ad\u30fc\u30ef\u30fc\u30c9 +KeywordSearchEditListPanel.addWordButtonAction.kwAlreadyExistsMsg=\u30ad\u30fc\u30ef\u30fc\u30c9\u306f\u3059\u3067\u306b\u30ea\u30b9\u30c8\u306b\u5b58\u5728\u3057\u307e\u3059\u3002 +KeywordSearchEditListPanel.addWordField.text= +KeywordSearchEditListPanel.chRegex.text=\u6b63\u898f\u8868\u73fe +KeywordSearchEditListPanel.copyMenuItem.text=\u30b3\u30d4\u30fc +KeywordSearchEditListPanel.customizeComponents.addWordToolTip=\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u30ea\u30b9\u30c8\u306b\u65b0\u898f\u7528\u8a9e\u3092\u8ffd\u52a0 +KeywordSearchEditListPanel.customizeComponents.enterNewWordToolTip=\u65b0\u898f\u7528\u8a9e\u307e\u305f\u306f\u6b63\u898f\u8868\u73fe\u3092\u5165\u529b\u3057\u3066\u691c\u7d22 +KeywordSearchEditListPanel.customizeComponents.exportToFile=\u73fe\u5728\u306e\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u3092\u30d5\u30a1\u30a4\u30eb\u306b\u30a8\u30af\u30b9\u30dd\u30fc\u30c8 +KeywordSearchEditListPanel.customizeComponents.kwReToolTip=\u30ad\u30fc\u30ef\u30fc\u30c9\u306f\u6b63\u898f\u8868\u73fe\u3067\u3059 +KeywordSearchEditListPanel.customizeComponents.removeSelectedMsg=\u30ea\u30b9\u30c8\u304b\u3089\u9078\u629e\u3057\u305f\u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u524a\u9664 +KeywordSearchEditListPanel.customizeComponents.saveCurrentWIthNewNameToolTip=\u73fe\u5728\u306e\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u3092\u5225\u540d\u3067\u4fdd\u5b58\u3059\u308b +KeywordSearchEditListPanel.cutMenuItem.text=\u5207\u308a\u53d6\u308a +KeywordSearchEditListPanel.deleteListButton.text=\u30ea\u30b9\u30c8\u3092\u524a\u9664 +KeywordSearchEditListPanel.deleteWordButton.text=\u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u524a\u9664 +KeywordSearchEditListPanel.deleteWordButtonActionPerformed.delConfirmMsg=\u3053\u308c\u306b\u3088\u308a\u30ad\u30fc\u30ef\u30fc\u30c9\u304c\u30ea\u30b9\u30c8\u304b\u3089\u4e00\u62ec\u524a\u9664\u3055\u308c\u307e\u3059(\u3059\u3079\u3066\u306e\u30b1\u30fc\u30b9)\u3002\u7d9a\u884c\u3057\u307e\u3059\u304b? +KeywordSearchEditListPanel.emptyKeyword.text=\u7a7a(\u672a\u5165\u529b)\u306e\u72b6\u614b\u306e\u30ad\u30fc\u30ef\u30fc\u30c9 +KeywordSearchEditListPanel.errorAddingKeywords.text=\u30ad\u30fc\u30ef\u30fc\u30c9\u306e\u8ffd\u52a0\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f +KeywordSearchEditListPanel.exportButton.text=\u30ea\u30b9\u30c8\u3092\u30a8\u30af\u30b9\u30dd\u30fc\u30c8 +KeywordSearchEditListPanel.exportButtonAction.featureName.text=\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u306e\u30a8\u30af\u30b9\u30dd\u30fc\u30c8 +KeywordSearchEditListPanel.exportButtonActionPerformed.fileExistPrompt=\u30d5\u30a1\u30a4\u30eb {0} \u304c\u5b58\u5728\u3057\u307e\u3059\u3002\u4e0a\u66f8\u304d\u3057\u307e\u3059\u304b? +KeywordSearchEditListPanel.exportButtonActionPerformed.fileFilterLabel=\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u306eXML\u30d5\u30a1\u30a4\u30eb +KeywordSearchEditListPanel.exportButtonActionPerformed.kwListExportedMsg=\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u3092\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u3057\u307e\u3057\u305f +KeywordSearchEditListPanel.ingestMessagesCheckbox.text=\u30d2\u30c3\u30c8\u3054\u3068\u306b\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u53d7\u4fe1\u7bb1\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u9001\u4fe1 +KeywordSearchEditListPanel.ingestMessagesCheckbox.toolTipText=\u3053\u306e\u30ea\u30b9\u30c8\u306e\u30ad\u30fc\u30ef\u30fc\u30c9\u3067\u30d2\u30c3\u30c8\u304c\u767a\u751f\u3057\u305f\u3068\u304d\u306b\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u4e2d\u306b\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u9001\u4fe1 +KeywordSearchEditListPanel.invalidKwMsg=\u7121\u52b9\u306a\u30ad\u30fc\u30ef\u30fc\u30c9\u30d1\u30bf\u30fc\u30f3\u3067\u3059\u3002 \u5358\u8a9e\u307e\u305f\u306f\u6b63\u3057\u3044\u6b63\u898f\u8868\u73fe\u30d1\u30bf\u30fc\u30f3\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +KeywordSearchEditListPanel.keywordOptionsLabel.text=\u30ad\u30fc\u30ef\u30fc\u30c9\u30aa\u30d7\u30b7\u30e7\u30f3 +KeywordSearchEditListPanel.keywordsLabel.text=\u30ad\u30fc\u30ef\u30fc\u30c9\: +KeywordSearchEditListPanel.kwColName=\u30ad\u30fc\u30ef\u30fc\u30c9 +KeywordSearchEditListPanel.listOptionsLabel.text=\u30ea\u30b9\u30c8\u30aa\u30d7\u30b7\u30e7\u30f3 +KeywordSearchEditListPanel.newKwTitle=\u65b0\u898f\u30ad\u30fc\u30ef\u30fc\u30c9\u5165\u529b +KeywordSearchEditListPanel.pasteMenuItem.text=\u8cbc\u308a\u4ed8\u3051 +KeywordSearchEditListPanel.removeKwMsg=\u30ad\u30fc\u30ef\u30fc\u30c9\u306e\u524a\u9664 +KeywordSearchEditListPanel.saveListButton.text=\u30ea\u30b9\u30c8\u3092\u30b3\u30d4\u30fc +KeywordSearchEditListPanel.selectAllMenuItem.text=\u3059\u3079\u3066\u9078\u629e +KeywordSearchFilterNode.getFileActions.openExternViewActLbl=\u5916\u90e8\u30d3\u30e5\u30fc\u30ef\u30fc\u3067\u958b\u304f Ctrl+E +KeywordSearchFilterNode.getFileActions.searchSameMd5=\u540c\u3058MD5\u30cf\u30c3\u30b7\u30e5\u3067\u30d5\u30a1\u30a4\u30eb\u3092\u691c\u7d22 +KeywordSearchFilterNode.getFileActions.viewInNewWinActionLbl=\u65b0\u3057\u3044\u30a6\u30a3\u30f3\u30c9\u30a6\u3067\u8868\u793a +KeywordSearchGlobalLanguageSettingsPanel.enableOcrCheckbox.text=\u5149\u5b66\u6587\u5b57\u8a8d\u8b58(OCR)\u3092\u6709\u52b9\u5316 +KeywordSearchGlobalLanguageSettingsPanel.enableUTF16Checkbox.text=UTF16LE\u304a\u3088\u3073UTF16BE\u6587\u5b57\u5217\u62bd\u51fa\u3092\u6709\u52b9\u5316 +KeywordSearchGlobalLanguageSettingsPanel.enableUTF8Checkbox.text=UTF8\u30c6\u30ad\u30b9\u30c8\u62bd\u51fa\u3092\u6709\u52b9\u5316\u3059\u308b +KeywordSearchGlobalLanguageSettingsPanel.ingestSettingsLabel.text=\u672a\u77e5\u306e\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u304b\u3089\u306e\u6587\u5b57\u5217\u62bd\u51fa\u306e\u305f\u3081\u306e\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u8a2d\u5b9a(\u5909\u66f4\u306f\u6b21\u306e\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u3067\u6709\u52b9\u306b\u306a\u308a\u307e\u3059)\: +KeywordSearchGlobalLanguageSettingsPanel.ingestWarningLabel.text=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u304c\u9032\u884c\u4e2d\u3067\u3059\u3002\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u304c\u5b8c\u4e86\u3059\u308b\u307e\u3067\u4e00\u90e8\u306e\u8a2d\u5b9a\u3092\u5229\u7528\u3067\u304d\u307e\u305b\u3093\u3002 +KeywordSearchGlobalLanguageSettingsPanel.languagesLabel.text=\u6709\u52b9\u5316\u3055\u308c\u305f\u6587\u5b57\u5217(\u8a00\u8a9e)\: +KeywordSearchGlobalListSettingsPanel.component.featureName.text=\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u3092\u4fdd\u5b58 +KeywordSearchGlobalSearchSettingsPanel.chunksLabel.text=\u30ad\u30fc\u30ef\u30fc\u30c9\u7d22\u5f15\u5185\u306e\u30c1\u30e3\u30f3\u30af\: +KeywordSearchGlobalSearchSettingsPanel.chunksValLabel.text=0 +KeywordSearchGlobalSearchSettingsPanel.filesIndexedLabel.text=\u30ad\u30fc\u30ef\u30fc\u30c9\u7d22\u5f15\u5185\u306e\u30d5\u30a1\u30a4\u30eb\: +KeywordSearchGlobalSearchSettingsPanel.filesIndexedValue.text=0 +KeywordSearchGlobalSearchSettingsPanel.frequencyLabel.text=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u4e2d\u306e\u7d50\u679c\u66f4\u65b0\u983b\u5ea6\: +KeywordSearchGlobalSearchSettingsPanel.informationLabel.text=\u60c5\u5831 +KeywordSearchGlobalSearchSettingsPanel.ingestWarningLabel.text=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u304c\u9032\u884c\u4e2d\u3067\u3059\u3002\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u304c\u5b8c\u4e86\u3059\u308b\u307e\u3067\u4e00\u90e8\u306e\u8a2d\u5b9a\u3092\u5229\u7528\u3067\u304d\u307e\u305b\u3093\u3002 +KeywordSearchGlobalSearchSettingsPanel.settingsLabel.text=\u8a2d\u5b9a +KeywordSearchGlobalSearchSettingsPanel.showSnippetsCB.text=\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u7d50\u679c\u306b\u30ad\u30fc\u30ef\u30fc\u30c9\u30d7\u30ec\u30d3\u30e5\u30fc\u3092\u8868\u793a(\u691c\u7d22\u6642\u9593\u304c\u9577\u304f\u306a\u308a\u307e\u3059) +KeywordSearchGlobalSearchSettingsPanel.skipNSRLCheckBox.text=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u4e2d\u306bNSRL(\u65e2\u77e5\u306e\u30d5\u30a1\u30a4\u30eb)\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u30ad\u30fc\u30ef\u30fc\u30c9\u306b\u8ffd\u52a0\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044 +KeywordSearchGlobalSearchSettingsPanel.skipNSRLCheckBox.toolTipText=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u30b5\u30fc\u30d3\u30b9\u306b\u4ee5\u524d\u306b\u5b9f\u884c\u6e08\u307f\u3067\u3042\u308b\u3053\u3068\u3001\u307e\u305f\u306f\u6b21\u306e\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u306b\u9078\u629e\u3055\u308c\u308b\u3053\u3068\u3092\u8981\u6c42\u3057\u307e\u3059\u3002 +KeywordSearchGlobalSearchSettingsPanel.timeRadioButton1.text=20\u5206(\u6700\u9045\u30d5\u30a3\u30fc\u30c9\u30d0\u30c3\u30af\u3001\u6700\u901f\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8) +KeywordSearchGlobalSearchSettingsPanel.timeRadioButton1.toolTipText=20\u5206(\u6700\u901f\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u6642\u9593) +KeywordSearchGlobalSearchSettingsPanel.timeRadioButton2.text=10\u5206(\u3088\u308a\u9045\u3044\u30d5\u30a3\u30fc\u30c9\u30d0\u30c3\u30af\u3001\u3088\u308a\u901f\u3044\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8) +KeywordSearchGlobalSearchSettingsPanel.timeRadioButton2.toolTipText=10\u5206(\u30c7\u30d5\u30a9\u30eb\u30c8\u3088\u308a\u3082\u901f\u3044\u7dcf\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u6642\u9593) +KeywordSearchGlobalSearchSettingsPanel.timeRadioButton3.text=5\u5206(\u30c7\u30d5\u30a9\u30eb\u30c8) +KeywordSearchGlobalSearchSettingsPanel.timeRadioButton3.toolTipText=5\u5206(\u7dcf\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u6642\u9593\u304c\u9577\u304f\u306a\u308a\u307e\u3059) +KeywordSearchGlobalSearchSettingsPanel.timeRadioButton4.text_1=1\u5206(\u3088\u308a\u901f\u3044\u30d5\u30a3\u30fc\u30c9\u30d0\u30c3\u30af\u3001\u6700\u9577\u306e\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8) +KeywordSearchGlobalSearchSettingsPanel.timeRadioButton4.toolTipText=1\u5206(\u7dcf\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u6642\u9593\u306f\u6700\u9577\u306b\u306a\u308a\u307e\u3059) +KeywordSearchGlobalSearchSettingsPanel.timeRadioButton5.text=\u5b9a\u671f\u691c\u7d22\u306a\u3057 +KeywordSearchGlobalSearchSettingsPanel.timeRadioButton5.toolTipText=\u5168\u4f53\u3067\u6700\u901f\u3067\u3059\u304c\u3001\u6700\u5f8c\u307e\u3067\u7d50\u679c\u306f\u8868\u793a\u3055\u308c\u307e\u305b\u3093 +KeywordSearchGlobalSettingsPanel.Title=\u30ad\u30fc\u30ef\u30fc\u30c9\u4e00\u62ec\u691c\u7d22\u8a2d\u5b9a +KeywordSearchIngestModule.doInBackGround.displayName=\u30ad\u30fc\u30ef\u30fc\u30c9\u5b9a\u671f\u691c\u7d22 +KeywordSearchIngestModule.doInBackGround.finalizeMsg=\u78ba\u5b9a +KeywordSearchIngestModule.doInBackGround.pendingMsg=(\u4fdd\u7559\u4e2d) +KeywordSearchIngestModule.fileThLbl=\u30d5\u30a1\u30a4\u30eb +KeywordSearchIngestModule.init.badInitMsg=\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u30b5\u30fc\u30d0\u30fc\u304c\u6b63\u3057\u304f\u521d\u671f\u5316\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u3092\u5b9f\u884c\u3067\u304d\u307e\u305b\u3093\u3002 +KeywordSearchIngestModule.init.exception.errConnToSolr.msg=Error connecting to SOLR\u30b5\u30fc\u30d0\u30fc\u306b\u63a5\u7d9a\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\: {0}\u3002 +KeywordSearchIngestModule.init.noKwInLstMsg=\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u306b\u30ad\u30fc\u30ef\u30fc\u30c9\u304c\u3042\u308a\u307e\u305b\u3093\u3002 +KeywordSearchIngestModule.init.onlyIdxKwSkipMsg=\u7d22\u5f15\u751f\u6210\u306e\u307f\u304c\u5b9f\u884c\u3055\u308c\u3001\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u306f\u30b9\u30ad\u30c3\u30d7\u3055\u308c\u307e\u3059(\u305d\u308c\u3067\u3082 [\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8 - \u8ffd\u52a0\u3057\u3066\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8] \u3092\u7528\u3044\u3066\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u3092\u8ffd\u52a0\u3067\u304d\u307e\u3059)\u3002 +KeywordSearchIngestModule.init.tryStopSolrMsg={0}
    Java Solr\u30d7\u30ed\u30bb\u30b9\u304c\u5b58\u5728\u3059\u308b\u5834\u5408\u306f\u505c\u6b62\u3092\u8a66\u307f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u518d\u8d77\u52d5\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +KeywordSearchIngestModule.kwHitLbl=\u30ad\u30fc\u30ef\u30fc\u30c9\u30d2\u30c3\u30c8\: +KeywordSearchIngestModule.kwHitThLbl=\u30ad\u30fc\u30ef\u30fc\u30c9 +KeywordSearchIngestModule.listThLbl=\u30ea\u30b9\u30c8 +KeywordSearchIngestModule.metadataTitle=\u30e1\u30bf\u30c7\u30fc\u30bf +KeywordSearchIngestModule.moduleDescription=\u30ea\u30b9\u30c8\u5185\u306e\u30ad\u30fc\u30ef\u30fc\u30c9\u3068\u6b63\u898f\u8868\u73fe\u3067\u30d5\u30a1\u30a4\u30eb\u7d22\u5f15\u751f\u6210\u3068\u5b9a\u671f\u691c\u7d22\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002 +KeywordSearchIngestModule.moduleName=\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22 +KeywordSearchIngestModule.noOpenCase.errMsg=\u958b\u3044\u3066\u3044\u308b\u30b1\u30fc\u30b9\u306f\u3042\u308a\u307e\u305b\u3093\u3002 +KeywordSearchIngestModule.postIndexSummary.errIoLbl=\u30a8\u30e9\u30fc(\u5165\u51fa\u529b) +KeywordSearchIngestModule.postIndexSummary.errTxtLbl=\u30a8\u30e9\u30fc(\u30c6\u30ad\u30b9\u30c8\u62bd\u51fa) +KeywordSearchIngestModule.postIndexSummary.fileGenStringsHead=\u4e00\u822c\u7684\u306a\u6587\u5b57\u5217\u304c\u62bd\u51fa\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb +KeywordSearchIngestModule.postIndexSummary.idxErrLbl=\u30a8\u30e9\u30fc(\u30a4\u30f3\u30c7\u30af\u30b5\u30fc) +KeywordSearchIngestModule.postIndexSummary.idxErrReadFilesMsg=\u30d5\u30a1\u30a4\u30eb\u306e\u8aad\u307f\u53d6\u308a\u4e2d\u304a\u3088\u3073\u30c6\u30ad\u30b9\u30c8\u62bd\u51fa\u4e2d\u306b\u30ad\u30fc\u30ef\u30fc\u30c9\u7d22\u5f15\u30b5\u30fc\u30d3\u30b9\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u7834\u640d\u3057\u305f\u30e1\u30c7\u30a3\u30a2\u307e\u305f\u306f\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u306e\u3082\u306e\u3067\u3042\u3063\u305f\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002 +KeywordSearchIngestModule.postIndexSummary.knowFileHeaderLbl=\u65e2\u77e5\u306e\u30bf\u30a4\u30d7\u306e\u30d5\u30a1\u30a4\u30eb +KeywordSearchIngestModule.postIndexSummary.kwIdxErrMsgFiles={0} \u30d5\u30a1\u30a4\u30eb\u306e\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u4e2d\u306b\u30ad\u30fc\u30ef\u30fc\u30c9\u7d22\u5f15\u30b5\u30fc\u30d3\u30b9\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 +KeywordSearchIngestModule.postIndexSummary.kwIdxErrsTitle=\u30ad\u30fc\u30ef\u30fc\u30c9\u7d22\u5f15\u751f\u6210\u30a8\u30e9\u30fc +KeywordSearchIngestModule.postIndexSummary.kwIdxResultsLbl=\u30ad\u30fc\u30ef\u30fc\u30c9\u7d22\u5f15\u751f\u6210\u7d50\u679c +KeywordSearchIngestModule.postIndexSummary.kwIdxWarnMsgTitle=\u30ad\u30fc\u30ef\u30fc\u30c9\u7d22\u5f15\u751f\u6210\u8b66\u544a +KeywordSearchIngestModule.postIndexSummary.mdOnlyLbl=\u30e1\u30bf\u30c7\u30fc\u30bf\u306e\u307f\u3092\u62bd\u51fa\u3057\u307e\u3057\u305f +KeywordSearchIngestModule.previewThLbl=\u30d7\u30ec\u30d3\u30e5\u30fc +KeywordSearchIngestModule.regExThLbl=\u6b63\u898f\u8868\u73fe +KeywordSearchIngestModule.regExpHitLbl=\u6b63\u898f\u8868\u73fe\u30d2\u30c3\u30c8\: +KeywordSearchIngestModule.startUp.noOpenCore.msg=\u7d22\u5f15\u3092\u958b\u3051\u306a\u304b\u3063\u305f\u304b\u5b58\u5728\u3057\u307e\u305b\u3093\u3002 +KeywordSearchIngestModule.startupException.indexSchemaNotSupported=\u30c6\u30ad\u30b9\u30c8\u7d22\u5f15\u306e\u30b9\u30ad\u30fc\u30de\u30d0\u30fc\u30b8\u30e7\u30f3 {0} \u3067\u306e\u30c6\u30ad\u30b9\u30c8\u8ffd\u52a0\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u306a\u304f\u306a\u308a\u307e\u3057\u305f\u3002 +KeywordSearchIngestModule.startupException.indexSolrVersionNotSupported=\u30c6\u30ad\u30b9\u30c8\u7d22\u5f15\u306eSolr\u30d0\u30fc\u30b8\u30e7\u30f3 {0} \u3067\u306e\u30c6\u30ad\u30b9\u30c8\u8ffd\u52a0\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u306a\u304f\u306a\u308a\u307e\u3057\u305f\u3002 +KeywordSearchIngestModule.startupMessage.failedToGetIndexSchema=\u30c6\u30ad\u30b9\u30c8\u7d22\u5f15\u306e\u30b9\u30ad\u30fc\u30de\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002 +KeywordSearchJobSettingsPanel.encodingsLabel.text=\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\: +KeywordSearchJobSettingsPanel.keywordSearchEncodings.text=- +KeywordSearchJobSettingsPanel.languagesLabel.text=\u672a\u77e5\u306e\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u304b\u3089\u306e\u6587\u5b57\u5217\u62bd\u51fa\u306e\u305f\u3081\u306b\u6709\u52b9\u5316\u3055\u308c\u305f\u6587\u5b57\u5217\u3067\u3059\u3002 +KeywordSearchJobSettingsPanel.languagesLabel.toolTipText=\u672a\u77e5\u306e\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u304b\u3089\u306e\u6587\u5b57\u5217\u62bd\u51fa\u306e\u305f\u3081\u306b\u6709\u52b9\u5316\u3055\u308c\u305f\u6587\u5b57\u5217\u3067\u3059\u3002\u8a73\u7d30\u8a2d\u5b9a\u3067\u5909\u66f4\u3092\u884c\u3048\u307e\u3059\u3002 +KeywordSearchJobSettingsPanel.languagesValLabel.text=- +KeywordSearchJobSettingsPanel.languagesValLabel.toolTipText= +KeywordSearchJobSettingsPanel.titleLabel.text=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u4e2d\u306b\u6709\u52b9\u5316\u3059\u308b\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u3092\u9078\u629e\: +KeywordSearchListsAbstract.addList.errMsg1.msg=KeywordSearchListsAbstract\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 +KeywordSearchListsAbstract.addList.errMsg2.msg=KeywordSearchListsAbstract\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 +KeywordSearchListsAbstract.deleteList.errMsg1.msg=KeywordSearchListsAbstract\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 +KeywordSearchListsAbstract.moduleErr=\u30e2\u30b8\u30e5\u30fc\u30eb\u30a8\u30e9\u30fc +KeywordSearchListsAbstract.saveList.errMsg1.msg=KeywordSearchListsAbstract\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 +KeywordSearchListsAbstract.saveList.errMsg2.msg=KeywordSearchListsAbstract\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 +KeywordSearchListsAbstract.writeLists.errMsg1.msg=KeywordSearchListsAbstract\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 +KeywordSearchListsAbstract.writeLists.errMsg2.msg=KeywordSearchListsAbstract\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 +KeywordSearchListsEncase.encaseMetaType.exception.msg=\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u306a\u3044EncaseMetaType\: {0} +KeywordSearchListsEncase.save.exception.msg=\u307e\u3060\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 +KeywordSearchListsEncase.save2.exception.msg=\u307e\u3060\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 +KeywordSearchListsManagementPanel.fileExtensionFilterLb2=\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u30d5\u30a1\u30a4\u30eb(txt)\u3092\u5305\u542b +KeywordSearchListsManagementPanel.fileExtensionFilterLbl=Autopsy\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u30d5\u30a1\u30a4\u30eb(xml) +KeywordSearchListsManagementPanel.getColName.text=\u540d\u524d +KeywordSearchListsManagementPanel.importButton.text=\u30ea\u30b9\u30c8\u3092\u30a4\u30f3\u30dd\u30fc\u30c8 +KeywordSearchListsManagementPanel.keywordListsLabel.text=\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\: +KeywordSearchListsManagementPanel.newKeywordListDescription=\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8 <{0}> \u306f\u8aad\u307f\u53d6\u308a\u5c02\u7528\u30ea\u30b9\u30c8\u3068\u3057\u3066\u3059\u3067\u306b\u5b58\u5728\u3057\u307e\u3059\u3002\u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u5b9f\u884c\u4e2d\u306b\u7f6e\u304d\u63db\u3048\u307e\u3059\u304b(\u5909\u66f4\u306f\u6052\u4e45\u7684\u3067\u306f\u3042\u308a\u307e\u305b\u3093)? +KeywordSearchListsManagementPanel.newKeywordListDescription2=\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8 <{0}> \u304c\u3059\u3067\u306b\u5b58\u5728\u3057\u307e\u3059\u3002\u7f6e\u304d\u63db\u3048\u307e\u3059\u304b? +KeywordSearchListsManagementPanel.newListButton.text=\u65b0\u898f\u30ea\u30b9\u30c8 +KeywordSearchListsManagementPanel.setValueAt.exception.msg=\u30bb\u30eb\u306e\u7de8\u96c6\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093 +KeywordSearchListsViewerPanel.ingestIndexLabel.text=\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\: +KeywordSearchListsViewerPanel.initIngest.addIdxSearchMsg=\u9078\u629e\u3057\u305f\u30ea\u30b9\u30c8\u306e\u30ad\u30fc\u30ef\u30fc\u30c9\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u3092\u691c\u7d22 +KeywordSearchListsViewerPanel.initIngest.addIngestMsg=\u8ffd\u52a0\u306e\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u3092\u9078\u629e
    \u3057\u3001\u9032\u884c\u4e2d\u306e\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u306b\u30a8\u30f3\u30ad\u30e5\u30fc\u3067\u304d\u307e\u3059\u3002
    \u9078\u629e\u3057\u305f\u30ea\u30b9\u30c8\u306f\u6b21\u56de\u306e\u30d5\u30a1\u30a4\u30eb\u7d22\u5f15\u518d\u69cb\u7bc9\u6642\u306b\u691c\u7d22\u3055\u308c\u307e\u3059\u3002 +KeywordSearchListsViewerPanel.initIngest.addIngestTitle=\u8ffd\u52a0\u3057\u3066\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8 +KeywordSearchListsViewerPanel.initIngest.fileIndexCtMsg=\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\: {0} +KeywordSearchListsViewerPanel.initIngest.ongoingIngestMsg=\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\: {0} (\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u306e\u9032\u884c\u4e2d) +KeywordSearchListsViewerPanel.initIngest.searchIngestTitle=\u691c\u7d22 +KeywordSearchListsViewerPanel.manageListsButton.text=\u30ea\u30b9\u30c8\u3092\u7ba1\u7406 +KeywordSearchListsViewerPanel.manageListsButton.toolTipText=\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u3001\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u306e\u8a2d\u5b9a\u3001\u95a2\u9023\u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u7ba1\u7406\u3057\u307e\u3059\u3002\u8a2d\u5b9a\u306f\u3059\u3079\u3066\u306e\u30b1\u30fc\u30b9\u3067\u5171\u6709\u3055\u308c\u307e\u3059\u3002 +KeywordSearchListsViewerPanel.searchAddButton.text=\u691c\u7d22 +KeywordSearchModuleFactory.createFileIngestModule.exception.msg=instanceof KeywordSearchJobSettings\u306b\u306a\u308b\u3068\u4e88\u60f3\u3055\u308c\u308b\u8a2d\u5b9a\u5f15\u6570 +KeywordSearchModuleFactory.getIngestJobSettingsPanel.exception.msg=instanceof KeywordSearchJobSettings\u306b\u306a\u308b\u3068\u4e88\u60f3\u3055\u308c\u308b\u8a2d\u5b9a\u5f15\u6570 +KeywordSearchOptionsPanelController.moduleErr=\u30e2\u30b8\u30e5\u30fc\u30eb\u30a8\u30e9\u30fc +KeywordSearchOptionsPanelController.moduleErr.msg1=KeywordSearchOptionsPanelController\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 +KeywordSearchOptionsPanelController.moduleErr.msg2=KeywordSearchOptionsPanelController\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 +KeywordSearchPanel.searchDropButton.text=\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22 +KeywordSearchQueryManager.execute.exeWinTitle=\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22 {0} - {1} +KeywordSearchQueryManager.pathText.text=\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22 +KeywordSearchResultFactory.createNodeForKey.noResultsFound.text=\u8a72\u5f53\u3059\u308b\u7d50\u679c\u304c\u3042\u308a\u307e\u305b\u3093\u3002 +KeywordSearchResultFactory.progress.saving=\u6b21\u306e\u7d50\u679c\u3092\u4fdd\u5b58\: {0} +KeywordSearchResultFactory.query.exception.msg=\u30af\u30a8\u30ea\u3092\u5b9f\u884c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f +KeywordSearchSettings.moduleName.text=KeywordSearch +KeywordSearchSettings.propertiesNSRL.text={0}_NSRL +KeywordSearchSettings.propertiesScripts.text={0}_\u6587\u5b57\u5217 +KeywordSearchSettings.properties_options.text={0}_\u30aa\u30d7\u30b7\u30e7\u30f3 +ListBundleConfig=\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u69cb\u6210 +ListBundleName=\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8 +NewKeywordPanel.exactButton.text=\u5b8c\u5168\u4e00\u81f4 +NewKeywordPanel.keywordTextField.text= +NewKeywordPanel.newKeywordLabel.text=\u65b0\u898f\u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u5165\u529b\: +NewKeywordPanel.regexButton.text=\u6b63\u898f\u8868\u73fe +NewKeywordPanel.substringButton.text=\u90e8\u5206\u4e00\u81f4 +NoOpenCoreException.err.noOpenSorlCore.msg=\u73fe\u5728\u958b\u3044\u3066\u3044\u308bSolr\u306e\u30b3\u30a2\u306f\u3042\u308a\u307e\u305b\u3093\u3002 +OpenIDE-Module-Display-Category=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb +OpenIDE-Module-Long-Description=\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u3002\n\n\u30e2\u30b8\u30e5\u30fc\u30eb\u306f\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u6642\u306b\u30c7\u30a3\u30b9\u30af\u30a4\u30e1\u30fc\u30b8\u3067\u898b\u3064\u304b\u3063\u305f\u30c6\u30ad\u30b9\u30c8\u3092\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3057\u307e\u3059\u3002\n\u6b21\u306b\u30011\u3064\u4ee5\u4e0a\u306e\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8(\u7d14\u7c8b\u8a9e\u304a\u3088\u3073/\u307e\u305f\u306f\u6b63\u898f\u8868\u73fe\u3092\u542b\u3080)\u3067\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u4e0a\u3067\u5b9a\u671f\u7684\u306b\u691c\u7d22\u3092\u5b9f\u65bd\u3057\u3001\u7d50\u679c\u3092\u63b2\u8f09\u3057\u307e\u3059\u3002\n\n\\u30e2\u30b8\u30e5\u30fc\u30eb\u306b\u306f\u3001\u30ad\u30fc\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u69cb\u6210\u3001\u53f3\u4e0a\u7aef\u306e\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u30d0\u30fc\u3001\u62bd\u51fa\u30c6\u30ad\u30b9\u30c8\u30d3\u30e5\u30fc\u30ef\u30fc\u3001\u8a72\u5f53\u306e\u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u30cf\u30a4\u30e9\u30a4\u30c8\u8868\u793a\u3059\u308b\u691c\u7d22\u7d50\u679c\u30d3\u30e5\u30fc\u30ef\u30fc\u306a\u3069\u3001\u30e1\u30a4\u30f3GUI\u306b\u7d71\u5408\u3055\u308c\u305f\u8ffd\u52a0\u306e\u30c4\u30fc\u30eb\u3082\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002 +OpenIDE-Module-Name=KeywordSearch +OpenIDE-Module-Short-Description=\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u3001\u62bd\u51fa\u30c6\u30ad\u30b9\u30c8\u30d3\u30e5\u30fc\u30ef\u30fc\u304a\u3088\u3073\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u30c4\u30fc\u30eb +OptionsCategory_Keywords_KeywordSearchOptions=\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22 +OptionsCategory_Name_KeywordSearchOptions=\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22 +RawText.FileText=\u30d5\u30a1\u30a4\u30eb\u30c6\u30ad\u30b9\u30c8 +RawText.ResultText=\u7d50\u679c\u30c6\u30ad\u30b9\u30c8 +SearchRunner.Searcher.done.err.msg=\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u306e\u5b9f\u884c\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f +SearchRunner.doInBackGround.cancelMsg=(\u53d6\u308a\u6d88\u3057\u4e2d...) +SearchRunner.query.exception.msg=\u6b21\u306e\u30af\u30a8\u30ea\u3092\u5b9f\u884c\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\: +SearchRunner.updateTimer.title.text=SearchRunner\u66f4\u65b0\u30bf\u30a4\u30de\u30fc +Server.addDoc.exception.msg=\u66f4\u65b0\u30cf\u30f3\u30c9\u30e9\u30fc\u7d4c\u7531\u3067\u6b21\u306e\u6587\u66f8\u3092\u8ffd\u52a0\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\: {0} +Server.addDoc.exception.msg2=\u66f4\u65b0\u30cf\u30f3\u30c9\u30e9\u30fc\u7d4c\u7531\u3067\u6b21\u306e\u6587\u66f8\u3092\u8ffd\u52a0\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\: {0} +Server.close.exception.msg=\u30b3\u30a2\u3092\u9589\u3058\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093 +Server.close.exception.msg2=\u30b3\u30a2\u3092\u9589\u3058\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093 +Server.commit.exception.msg=\u7d22\u5f15\u3092\u78ba\u5b9a\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f +Server.connect.exception.msg=\u6b21\u306eSolr\u30b5\u30fc\u30d0\u30fc\u306b\u63a5\u7d9a\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\: {0} +Server.deleteCore.exception.msg=Solr \u30b3\u30a2 {0} \u3092\u524a\u9664\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f +Server.isRunning.exception.errCheckSolrRunning.msg=Solr\u30b5\u30fc\u30d0\u30fc\u304c\u5b9f\u884c\u4e2d\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f +Server.isRunning.exception.errCheckSolrRunning.msg2=Solr\u30b5\u30fc\u30d0\u30fc\u304c\u5b9f\u884c\u4e2d\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f +Server.openCore.exception.alreadyOpen.msg=\u958b\u3044\u3066\u3044\u308bSolr\u306e\u30b3\u30a2\u304c\u3059\u3067\u306b\u3042\u308a\u307e\u3059\u3002\u6700\u521d\u306b\u30b3\u30a2\u3092\u660e\u793a\u7684\u306b\u9589\u3058\u3066\u304f\u3060\u3055\u3044\u3002 +Server.openCore.exception.cantOpen.msg=\u7d22\u5f15\u3092\u4f5c\u6210\u307e\u305f\u306f\u958b\u3051\u307e\u305b\u3093\u3067\u3057\u305f +Server.openCore.exception.msg=\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u30b5\u30fc\u30d3\u30b9\u306f\u307e\u3060\u5b9f\u884c\u3057\u3066\u3044\u307e\u305b\u3093 +Server.openCore.exception.noIndexDir.msg=\u7d22\u5f15\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u3092\u4f5c\u6210\u3067\u304d\u306a\u304b\u3063\u305f\u304b\u3001\u898b\u3064\u304b\u308a\u307e\u305b\u3093 +Server.query.exception.msg=\u6b21\u306e\u30af\u30a8\u30ea\u306e\u5b9f\u884c\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\: {0} +Server.query2.exception.msg=\u6b21\u306e\u30af\u30a8\u30ea\u306e\u5b9f\u884c\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\: {0} +Server.queryIsIdxd.exception.msg=\u30b3\u30f3\u30c6\u30f3\u30c4\u304c\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u305f\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 +Server.queryNumFileChunks.exception.msg=\u30d5\u30a1\u30a4\u30eb\u30c1\u30e3\u30f3\u30af\u6570\u306e\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 +Server.queryNumIdxChunks.exception.msg=\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u305f\u30c1\u30e3\u30f3\u30af\u6570\u3092\u30af\u30a8\u30ea\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 +Server.queryNumIdxDocs.exception.msg=\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u305f\u6587\u66f8\u6570\u3092\u30af\u30a8\u30ea\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 +Server.queryNumIdxFiles.exception.msg=\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u6570\u3092\u30af\u30a8\u30ea\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 +Server.queryTerms.exception.msg=\u6b21\u306eterms(\u6574\u6570/\u6587\u5b57\u5217/\u914d\u5217)\u30af\u30a8\u30ea\u306e\u5b9f\u884c\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\: {0} +Server.request.exception.exception.msg=Solr\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u767a\u884c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f +Server.commit.exception.msg=\u7d22\u5f15\u3092\u78ba\u5b9a\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f +Server.addDoc.exception.msg=\u66f4\u65b0\u30cf\u30f3\u30c9\u30e9\u30fc\u7d4c\u7531\u3067\u6b21\u306e\u6587\u66f8\u3092\u8ffd\u52a0\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f: {0} +Server.close.exception.msg=\u30b3\u30a2\u3092\u9589\u3058\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093 +Server.solrServerNoPortException.msg=\u7d22\u5f15\u751f\u6210\u30b5\u30fc\u30d0\u30fc\u306f\u30dd\u30fc\u30c8 {0} \u306b\u30d0\u30a4\u30f3\u30c9\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306e {1} \u30dd\u30fc\u30c8\u306b\u5909\u66f4\u3059\u308b\u3053\u3068\u3092\u691c\u8a0e\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +Server.start.exception.cantStartSolr.msg=Solr\u30b5\u30fc\u30d0\u30fc\u30d7\u30ed\u30bb\u30b9\u3092\u958b\u59cb\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f +Server.start.exception.cantStartSolr.msg2=Solr\u30b5\u30fc\u30d0\u30fc\u30d7\u30ed\u30bb\u30b9\u3092\u958b\u59cb\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f +SolrConnectionCheck.Hostname=\u7121\u52b9\u306a\u30db\u30b9\u30c8\u540d\u3067\u3059\u3002 +SolrConnectionCheck.HostnameOrPort=\u7121\u52b9\u306a\u30db\u30b9\u30c8\u540d\u304a\u3088\u3073/\u307e\u305f\u306f\u30dd\u30fc\u30c8\u756a\u53f7\u3067\u3059\u3002 +SolrConnectionCheck.MissingHostname=\u30db\u30b9\u30c8\u540d\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002 SolrConnectionCheck.Port=\u7121\u52b9\u306a\u30dd\u30fc\u30c8\u756a\u53f7\u3067\u3059\u3002 SolrSearch.checkingForLatestIndex.msg=\u6700\u65b0\u306eSolr\u3068\u30b9\u30ad\u30fc\u30de\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u30c6\u30ad\u30b9\u30c8\u7d22\u5f15\u3092\u691c\u7d22\u4e2d\u3067\u3059 SolrSearch.complete.msg=\u30c6\u30ad\u30b9\u30c8\u7d22\u5f15\u304c\u6b63\u5e38\u306b\u958b\u304d\u307e\u3057\u305f @@ -339,38 +363,10 @@ SolrSearch.openCore.msg=\u30c6\u30ad\u30b9\u30c8\u7d22\u5f15\u3092\u8d77\u52d5\u SolrSearch.openGiantCore.msg=\u30c6\u30ad\u30b9\u30c8\u7d22\u5f15\u3092\u8d77\u52d5\u4e2d\u3067\u3059\u3002\u3053\u306e\u30b1\u30fc\u30b9\u306e\u30c6\u30ad\u30b9\u30c8\u7d22\u5f15\u306f\u975e\u5e38\u306b\u5927\u304d\u3044\u305f\u3081\u3001\u8d77\u52d5\u306b\u6642\u9593\u304c\u304b\u304b\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002 SolrSearch.openLargeCore.msg=\u30c6\u30ad\u30b9\u30c8\u7d22\u5f15\u3092\u8d77\u52d5\u4e2d\u3067\u3059\u3002\u3053\u308c\u306b\u306f\u6570\u5206\u304b\u304b\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002 SolrSearch.readingIndexes.msg=\u30c6\u30ad\u30b9\u30c8\u7d22\u5f15\u306e\u30e1\u30bf\u30c7\u30fc\u30bf\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u307f\u4e2d\u3067\u3059 -# {0} - \u7d22\u5f15\u30d5\u30a9\u30eb\u30c0\u30fc\u30d1\u30b9 +SolrSearchService.IndexReadOnlyDialog.msg=\u3053\u306e\u30b1\u30fc\u30b9\u306e\u30c6\u30ad\u30b9\u30c8\u7d22\u5f15\u306f\u8aad\u307f\u53d6\u308a\u5c02\u7528\u3067\u3059\u3002
    \u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u7d50\u679c\u3092\u78ba\u8a8d\u3057\u3001\u5b8c\u5168\u4e00\u81f4\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u3068\u90e8\u5206\u4e00\u81f4\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u3092\u5b9f\u884c\u3067\u304d\u307e\u3059
    \u304c\u3001\u7d22\u5f15\u306b\u65b0\u898f\u30c6\u30ad\u30b9\u30c8\u3092\u8ffd\u52a0\u307e\u305f\u306f\u6b63\u898f\u8868\u73fe\u691c\u7d22\u3092\u5b9f\u884c\u3067\u304d\u307e\u305b\u3093\u3002\u305d\u306e\u4ee3\u308f\u308a\u306b\u3001\u3053\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u4ee5\u524d\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3067
    \u30b1\u30fc\u30b9\u3092\u958b\u3051\u307e\u3059\u3002 +SolrSearchService.IndexReadOnlyDialog.title=\u30c6\u30ad\u30b9\u30c8\u7d22\u5f15\u306f\u8aad\u307f\u53d6\u308a\u5c02\u7528\u3067\u3059 +SolrSearchService.ServiceName=Solr\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u30b5\u30fc\u30d3\u30b9 SolrSearchService.exceptionMessage.failedToDeleteIndexFiles={0} \u306e\u30c6\u30ad\u30b9\u30c8\u7d22\u5f15\u30d5\u30a1\u30a4\u30eb\u3092\u524a\u9664\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f SolrSearchService.exceptionMessage.noCurrentSolrCore=IndexMetadata\u306b\u306f\u73fe\u5728\u306eSolr\u306e\u30b3\u30a2\u304c\u542b\u307e\u308c\u3066\u3044\u306a\u304b\u3063\u305f\u305f\u3081\u3001\u30b1\u30fc\u30b9\u3092\u524a\u9664\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f -# {0} - \u30b1\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc -SolrSearchService.exceptionMessage.noIndexMetadata=\u30b1\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u304b\u3089\u6b21\u306eIndexMetaData\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f: {0} -SolrSearchService.ServiceName=Solr\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u30b5\u30fc\u30d3\u30b9 -SolrSearchService.IndexReadOnlyDialog.title=\u30c6\u30ad\u30b9\u30c8\u7d22\u5f15\u306f\u8aad\u307f\u53d6\u308a\u5c02\u7528\u3067\u3059 -SolrSearchService.IndexReadOnlyDialog.msg=\u3053\u306e\u30b1\u30fc\u30b9\u306e\u30c6\u30ad\u30b9\u30c8\u7d22\u5f15\u306f\u8aad\u307f\u53d6\u308a\u5c02\u7528\u3067\u3059\u3002
    \u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u7d50\u679c\u3092\u78ba\u8a8d\u3057\u3001\u5b8c\u5168\u4e00\u81f4\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u3068\u90e8\u5206\u4e00\u81f4\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u3092\u5b9f\u884c\u3067\u304d\u307e\u3059
    \u304c\u3001\u7d22\u5f15\u306b\u65b0\u898f\u30c6\u30ad\u30b9\u30c8\u3092\u8ffd\u52a0\u307e\u305f\u306f\u6b63\u898f\u8868\u73fe\u691c\u7d22\u3092\u5b9f\u884c\u3067\u304d\u307e\u305b\u3093\u3002\u305d\u306e\u4ee3\u308f\u308a\u306b\u3001\u3053\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u4ee5\u524d\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3067
    \u30b1\u30fc\u30b9\u3092\u958b\u3051\u307e\u3059\u3002 -DropdownSingleTermSearchPanel.dataSourceCheckBox.text=\u9078\u629e\u3057\u305f\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u306b\u691c\u7d22\u3092\u5236\u9650: -DropdownListSearchPanel.dataSourceCheckBox.text=\u9078\u629e\u3057\u305f\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u306b\u691c\u7d22\u3092\u5236\u9650: -DropdownSingleTermSearchPanel.ingestIndexLabel.text=\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb: -DropdownSingleTermSearchPanel.jSaveSearchResults.toolTipText=\u30ad\u30fc\u30ef\u30fc\u30c9\u30d2\u30c3\u30c8\u306b\u3088\u308b\u904e\u53bb\u306e\u691c\u7d22\u7d50\u679c\u306e\u5f62\u3067\u7d50\u679c\u3092\u4fdd\u5b58\u305b\u305a\u306b\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u3092\u5b9f\u884c -DropdownSingleTermSearchPanel.jSaveSearchResults.text=\u691c\u7d22\u7d50\u679c\u3092\u4fdd\u5b58 -DropdownListSearchPanel.jSaveSearchResults.toolTipText=\u30ad\u30fc\u30ef\u30fc\u30c9\u30d2\u30c3\u30c8\u306b\u3088\u308b\u904e\u53bb\u306e\u691c\u7d22\u7d50\u679c\u306e\u5f62\u3067\u7d50\u679c\u3092\u4fdd\u5b58\u305b\u305a\u306b\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u3092\u5b9f\u884c -DropdownListSearchPanel.jSaveSearchResults.text=\u691c\u7d22\u7d50\u679c\u3092\u4fdd\u5b58 -GlobalEditListPanel.ingestWarningLabel.text=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u304c\u9032\u884c\u4e2d\u3067\u3059\u3002\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u304c\u5b8c\u4e86\u3059\u308b\u307e\u3067\u4e00\u90e8\u306e\u8a2d\u5b9a\u3092\u5229\u7528\u3067\u304d\u307e\u305b\u3093\u3002 -KeywordSearchGlobalLanguageSettingsPanel.ingestWarningLabel.text=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u304c\u9032\u884c\u4e2d\u3067\u3059\u3002\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u304c\u5b8c\u4e86\u3059\u308b\u307e\u3067\u4e00\u90e8\u306e\u8a2d\u5b9a\u3092\u5229\u7528\u3067\u304d\u307e\u305b\u3093\u3002 -KeywordSearchGlobalSearchSettingsPanel.ingestWarningLabel.text=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u304c\u9032\u884c\u4e2d\u3067\u3059\u3002\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u304c\u5b8c\u4e86\u3059\u308b\u307e\u3067\u4e00\u90e8\u306e\u8a2d\u5b9a\u3092\u5229\u7528\u3067\u304d\u307e\u305b\u3093\u3002 -ExtractedContentPanel.jLabel1.text=\u30c6\u30ad\u30b9\u30c8\u30bd\u30fc\u30b9: -ExtractedContentPanel.hitNextButton.text= -ExtractedContentPanel.hitPreviousButton.text= -ExtractedContentPanel.hitButtonsLabel.text=\u4e00\u81f4\u3059\u308b\u7d50\u679c -ExtractedContentPanel.hitTotalLabel.text=- -ExtractedContentPanel.hitOfLabel.text=/ -ExtractedContentPanel.hitCountLabel.text=- -ExtractedContentPanel.hitLabel.toolTipText= -ExtractedContentPanel.hitLabel.text=\u30da\u30fc\u30b8\u4e0a\u306e\u4e00\u81f4\u3059\u308b\u7d50\u679c: -ExtractedContentPanel.pageNextButton.text= -ExtractedContentPanel.pagePreviousButton.actionCommand=pagePreviousButton -ExtractedContentPanel.pagePreviousButton.text= -ExtractedContentPanel.pageButtonsLabel.text=\u30da\u30fc\u30b8 -ExtractedContentPanel.pageTotalLabel.text=- -ExtractedContentPanel.pageOfLabel.text=/ -ExtractedContentPanel.pageCurLabel.text=- -ExtractedContentPanel.pagesLabel.text=\u30da\u30fc\u30b8: +SolrSearchService.exceptionMessage.noIndexMetadata=\u30b1\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u304b\u3089\u6b21\u306eIndexMetaData\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\: {0} +TextZoomPanel.zoomResetButton.text=\u30ea\u30bb\u30c3\u30c8 diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Server.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Server.java index a4a3b581b3..05a02bf11b 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Server.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Server.java @@ -835,7 +835,8 @@ public class Server { connectToSolrServer(currentSolrServer); HealthMonitor.submitTimingMetric(metric); - } catch (SolrServerException | IOException ex) { + } catch (Exception ex) { + // intentional "catch all" as Solr is known to throw all kinds of Runtime exceptions throw new KeywordSearchModuleException(NbBundle.getMessage(Server.class, "Server.connect.exception.msg", ex.getLocalizedMessage()), ex); } @@ -1075,7 +1076,8 @@ public class Server { } try { return currentCore.queryNumIndexedFiles(); - } catch (SolrServerException | IOException ex) { + } catch (Exception ex) { + // intentional "catch all" as Solr is known to throw all kinds of Runtime exceptions throw new KeywordSearchModuleException(NbBundle.getMessage(this.getClass(), "Server.queryNumIdxFiles.exception.msg"), ex); } } finally { @@ -1100,7 +1102,8 @@ public class Server { } try { return currentCore.queryNumIndexedChunks(); - } catch (SolrServerException | IOException ex) { + } catch (Exception ex) { + // intentional "catch all" as Solr is known to throw all kinds of Runtime exceptions throw new KeywordSearchModuleException(NbBundle.getMessage(this.getClass(), "Server.queryNumIdxChunks.exception.msg"), ex); } } finally { @@ -1125,7 +1128,8 @@ public class Server { } try { return currentCore.queryNumIndexedDocuments(); - } catch (SolrServerException | IOException ex) { + } catch (Exception ex) { + // intentional "catch all" as Solr is known to throw all kinds of Runtime exceptions throw new KeywordSearchModuleException(NbBundle.getMessage(this.getClass(), "Server.queryNumIdxDocs.exception.msg"), ex); } } finally { @@ -1151,7 +1155,8 @@ public class Server { } try { return currentCore.queryIsIndexed(contentID); - } catch (SolrServerException | IOException ex) { + } catch (Exception ex) { + // intentional "catch all" as Solr is known to throw all kinds of Runtime exceptions throw new KeywordSearchModuleException(NbBundle.getMessage(this.getClass(), "Server.queryIsIdxd.exception.msg"), ex); } @@ -1179,7 +1184,8 @@ public class Server { } try { return currentCore.queryNumFileChunks(fileID); - } catch (SolrServerException | IOException ex) { + } catch (Exception ex) { + // intentional "catch all" as Solr is known to throw all kinds of Runtime exceptions throw new KeywordSearchModuleException(NbBundle.getMessage(this.getClass(), "Server.queryNumFileChunks.exception.msg"), ex); } } finally { @@ -1205,7 +1211,8 @@ public class Server { } try { return currentCore.query(sq); - } catch (SolrServerException ex) { + } catch (Exception ex) { + // intentional "catch all" as Solr is known to throw all kinds of Runtime exceptions logger.log(Level.SEVERE, "Solr query failed: " + sq.getQuery(), ex); //NON-NLS throw new KeywordSearchModuleException(NbBundle.getMessage(this.getClass(), "Server.query.exception.msg", sq.getQuery()), ex); } @@ -1233,7 +1240,8 @@ public class Server { } try { return currentCore.query(sq, method); - } catch (SolrServerException | IOException ex) { + } catch (Exception ex) { + // intentional "catch all" as Solr is known to throw all kinds of Runtime exceptions logger.log(Level.SEVERE, "Solr query failed: " + sq.getQuery(), ex); //NON-NLS throw new KeywordSearchModuleException(NbBundle.getMessage(this.getClass(), "Server.query2.exception.msg", sq.getQuery()), ex); } @@ -1260,7 +1268,8 @@ public class Server { } try { return currentCore.queryTerms(sq); - } catch (SolrServerException | IOException ex) { + } catch (Exception ex) { + // intentional "catch all" as Solr is known to throw all kinds of Runtime exceptions logger.log(Level.SEVERE, "Solr terms query failed: " + sq.getQuery(), ex); //NON-NLS throw new KeywordSearchModuleException(NbBundle.getMessage(this.getClass(), "Server.queryTerms.exception.msg", sq.getQuery()), ex); } @@ -1503,7 +1512,8 @@ public class Server { private NamedList request(SolrRequest request) throws SolrServerException { try { return solrCore.request(request); - } catch (IOException e) { + } catch (Exception e) { + // intentional "catch all" as Solr is known to throw all kinds of Runtime exceptions logger.log(Level.WARNING, "Could not issue Solr request. ", e); //NON-NLS throw new SolrServerException( NbBundle.getMessage(this.getClass(), "Server.request.exception.exception.msg"), e); @@ -1524,7 +1534,8 @@ public class Server { try { //commit and block solrCore.commit(true, true); - } catch (IOException e) { + } catch (Exception e) { + // intentional "catch all" as Solr is known to throw all kinds of Runtime exceptions logger.log(Level.WARNING, "Could not commit index. ", e); //NON-NLS throw new SolrServerException(NbBundle.getMessage(this.getClass(), "Server.commit.exception.msg"), e); } @@ -1540,14 +1551,11 @@ public class Server { void addDocument(SolrInputDocument doc) throws KeywordSearchModuleException { try { solrCore.add(doc); - } catch (SolrServerException ex) { + } catch (Exception ex) { + // Solr throws a lot of unexpected exception types logger.log(Level.SEVERE, "Could not add document to index via update handler: " + doc.getField("id"), ex); //NON-NLS throw new KeywordSearchModuleException( NbBundle.getMessage(this.getClass(), "Server.addDoc.exception.msg", doc.getField("id")), ex); //NON-NLS - } catch (IOException ex) { - logger.log(Level.SEVERE, "Could not add document to index via update handler: " + doc.getField("id"), ex); //NON-NLS - throw new KeywordSearchModuleException( - NbBundle.getMessage(this.getClass(), "Server.addDoc.exception.msg2", doc.getField("id")), ex); //NON-NLS } } @@ -1588,7 +1596,8 @@ public class Server { } } } - } catch (SolrServerException ex) { + } catch (Exception ex) { + // intentional "catch all" as Solr is known to throw all kinds of Runtime exceptions logger.log(Level.SEVERE, "Error getting content from Solr. Solr document id " + contentID + ", chunk id " + chunkID + ", query: " + filterQuery, ex); //NON-NLS return null; } @@ -1604,12 +1613,10 @@ public class Server { try { CoreAdminRequest.unloadCore(this.name, currentSolrServer); - } catch (SolrServerException ex) { + } catch (Exception ex) { + // intentional "catch all" as Solr is known to throw all kinds of Runtime exceptions throw new KeywordSearchModuleException( NbBundle.getMessage(this.getClass(), "Server.close.exception.msg"), ex); - } catch (IOException ex) { - throw new KeywordSearchModuleException( - NbBundle.getMessage(this.getClass(), "Server.close.exception.msg2"), ex); } } diff --git a/README.txt b/README.txt index 7917b66382..37da8d3028 100644 --- a/README.txt +++ b/README.txt @@ -46,9 +46,9 @@ JRE (Java Runtime Environment) 1.8 - Web page: http://www.oracle.com/technetwork/java/index.html - License: http://www.oracle.com/technetwork/java/javase/terms/license/index.html -Netbeans 8.0.2 RCP platform and .jar files bundled with the platform -- Web page: http://netbeans.org/features/platform/ -- License: https://netbeans.org/downloads/jdk-bundle/8.0.2/nb802-LICENSE.txt +Netbeans 11.3 RCP platform and .jar files bundled with the platform +- Web page: https://netbeans.apache.org/ +- License: https://www.apache.org/licenses/LICENSE-2.0 Sleuth Kit for analyzing disk images. - Web page: http://www.sleuthkit.org/sleuthkit/ diff --git a/RecentActivity/ivy.xml b/RecentActivity/ivy.xml index 290c8371ea..562c8db46f 100644 --- a/RecentActivity/ivy.xml +++ b/RecentActivity/ivy.xml @@ -1,6 +1,6 @@ - + diff --git a/RecentActivity/nbproject/project.xml b/RecentActivity/nbproject/project.xml index 3073bf314b..6ecdb80735 100644 --- a/RecentActivity/nbproject/project.xml +++ b/RecentActivity/nbproject/project.xml @@ -60,7 +60,7 @@ 10 - 10.20 + 10.21 diff --git a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Bundle.properties b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Bundle.properties index 283bbc6dc5..4a10106355 100644 --- a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Bundle.properties +++ b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Bundle.properties @@ -49,10 +49,7 @@ ExtractRegistry.analyzeRegFiles.failedParsingResults={0}: Failed parsing registr ExtractRegistry.parentModuleName.noSpace=RecentActivity ExtractRegistry.programName=RegRipper ExtractRegistry.analyzeRegFiles.errMsg.errReadingRegFile={0}: Error reading registry file - {1} -ExtractRegistry.execRegRip.errMsg.failedAnalyzeRegFile={0}: Failed to analyze registry file -ExtractRegistry.execRegRip.errMsg.failedAnalyzeRegFile2={0}: Failed to analyze registry file -ExtractRegistry.execRegRip.errMsg.failedAnalyzeRegFile3={0}: Failed to analyze registry file -ExtractRegistry.execRegRip.errMsg.failedAnalyzeRegFile4={0}: Failed to analyze registry file +ExtractRegistry.execRegRip.errMsg.failedAnalyzeRegFile={0}: Failed to analyze registry file {1} Firefox.moduleName=FireFox Firefox.getHistory.errMsg.errFetchingFiles=Error fetching internet history files for Firefox. Firefox.getHistory.errMsg.noFilesFound=No FireFox history files found. diff --git a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Bundle.properties-MERGED b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Bundle.properties-MERGED index af0dbf306b..6a0dd03eef 100755 --- a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Bundle.properties-MERGED +++ b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Bundle.properties-MERGED @@ -5,10 +5,15 @@ ChromeCacheExtract_adding_artifacts_msg=Chrome Cache: Adding %d artifacts for an ChromeCacheExtract_adding_extracted_files_msg=Chrome Cache: Adding %d extracted files for analysis. ChromeCacheExtract_loading_files_msg=Chrome Cache: Loading files from %s. ChromeCacheExtractor.moduleName=ChromeCacheExtractor +# {0} - module name +# {1} - row number +# {2} - table length +# {3} - cache path ChromeCacheExtractor.progressMsg={0}: Extracting cache entry {1} of {2} entries from {3} DataSourceUsage_AndroidMedia=Android Media Card DataSourceUsage_DJU_Drone_DAT=DJI Internal SD Card DataSourceUsage_FlashDrive=Flash Drive +# {0} - OS name DataSourceUsageAnalyzer.customVolume.label=OS Drive ({0}) DataSourceUsageAnalyzer.parentModuleName=Recent Activity Extract.indexError.message=Failed to index artifact for keyword search. @@ -19,6 +24,8 @@ ExtractEdge_process_errMsg_errGettingWebCacheFiles=Error trying to retrieving Ed ExtractEdge_process_errMsg_spartanFail=Failure processing Microsoft Edge spartan.edb file ExtractEdge_process_errMsg_unableFindESEViewer=Unable to find ESEDatabaseViewer ExtractEdge_process_errMsg_webcacheFail=Failure processing Microsoft Edge WebCacheV01.dat file +# {0} - sub module name +ExtractIE_executePasco_errMsg_errorRunningPasco={0}: Error analyzing Internet Explorer web history ExtractOs.androidOs.label=Android ExtractOs.androidVolume.label=OS Drive (Android) ExtractOs.debianLinuxOs.label=Linux (Debian) @@ -50,6 +57,8 @@ ExtractOs.windowsVolume.label=OS Drive (Windows) ExtractOs.yellowDogLinuxOs.label=Linux (Yellow Dog) ExtractOs.yellowDogLinuxVolume.label=OS Drive (Linux Yellow Dog) ExtractOS_progressMessage=Checking for OS +# {0} - sub module name +ExtractPrefetch_errMsg_prefetchParsingFailed={0}: Error analyzing prefetch files ExtractPrefetch_module_name=Windows Prefetch Extractor ExtractRecycleBin_module_name=Recycle Bin ExtractSafari_Error_Getting_History=An error occurred while processing Safari history files. @@ -122,10 +131,7 @@ ExtractRegistry.analyzeRegFiles.failedParsingResults={0}: Failed parsing registr ExtractRegistry.parentModuleName.noSpace=RecentActivity ExtractRegistry.programName=RegRipper ExtractRegistry.analyzeRegFiles.errMsg.errReadingRegFile={0}: Error reading registry file - {1} -ExtractRegistry.execRegRip.errMsg.failedAnalyzeRegFile={0}: Failed to analyze registry file -ExtractRegistry.execRegRip.errMsg.failedAnalyzeRegFile2={0}: Failed to analyze registry file -ExtractRegistry.execRegRip.errMsg.failedAnalyzeRegFile3={0}: Failed to analyze registry file -ExtractRegistry.execRegRip.errMsg.failedAnalyzeRegFile4={0}: Failed to analyze registry file +ExtractRegistry.execRegRip.errMsg.failedAnalyzeRegFile={0}: Failed to analyze registry file {1} Firefox.moduleName=FireFox Firefox.getHistory.errMsg.errFetchingFiles=Error fetching internet history files for Firefox. Firefox.getHistory.errMsg.noFilesFound=No FireFox history files found. @@ -211,6 +217,7 @@ Recently_Used_Artifacts_Winrar=Recently opened according to WinRAR MRU Registry_System_Bam=Recently Executed according to Background Activity Moderator (BAM) RegRipperFullNotFound=Full version RegRipper executable not found. RegRipperNotFound=Autopsy RegRipper executable not found. +# {0} - file name SearchEngineURLQueryAnalyzer.init.exception.msg=Unable to find {0}. SearchEngineURLQueryAnalyzer.moduleName.text=Search Engine SearchEngineURLQueryAnalyzer.engineName.none=NONE diff --git a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Bundle_ja.properties b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Bundle_ja.properties index e41e0ee1e3..c088d66978 100644 --- a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Bundle_ja.properties +++ b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Bundle_ja.properties @@ -1,100 +1,111 @@ -OpenIDE-Module-Display-Category=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb -OpenIDE-Module-Long-Description=\ - \u6700\u8fd1\u306e\u30a2\u30af\u30c6\u30a3\u30d3\u30c6\u30a3\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u3002\n\n\ - \u3053\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u306f\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u4e2d\u306e\u30c7\u30a3\u30b9\u30af\u30a4\u30e1\u30fc\u30b8\u304b\u3089\u6709\u7528\u306a\u6700\u8fd1\u306e\u30e6\u30fc\u30b6\u30a2\u30af\u30c6\u30a3\u30d3\u30c6\u30a3\u3092\u62bd\u51fa\u3057\u307e\u3059\u3002\u4f8b\u3048\u3070\uff1a\n\n-\u6700\u8fd1\u958b\u3044\u305f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3001\n-\u30a6\u30a7\u30d6\u30a2\u30af\u30c6\u30a3\u30d3\u30c6\u30a3\uff08\u8a2a\u308c\u305f\u30b5\u30a4\u30c8\u3001\u4fdd\u5b58\u3055\u308c\u305fCookie\u3001\u30d6\u30c3\u30af\u30de\u30fc\u30af\u3055\u308c\u305f\u30b5\u30a4\u30c8\u3001\u30b5\u30fc\u30c1\u30a8\u30f3\u30b8\u30f3\u30af\u30a8\u30ea\u3001\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\uff09\u3001\n-\u6700\u8fd1\u63a5\u7d9a\u3057\u305f\u30c7\u30d0\u30a4\u30b9\u3001\n-\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u305f\u30d7\u30ed\u30b0\u30e9\u30e0\u3002\n\n\ - \u3053\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u306f\u73fe\u5728Windows\u306e\u30c7\u30a3\u30b9\u30af\u30a4\u30e1\u30fc\u30b8\u3057\u304b\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u305b\u3093\u3002\n\ - \u30d7\u30e9\u30b0\u30a4\u30f3\u306fWindows\u7248\u306eAutopsy\u3092\u5229\u7528\u3059\u308b\u3068\u5168\u3066\u306e\u6a5f\u80fd\u304c\u4f7f\u3048\u307e\u3059\u3002 -OpenIDE-Module-Name=\u6700\u8fd1\u306e\u30a2\u30af\u30c6\u30a3\u30d3\u30c6\u30a3 -OpenIDE-Module-Short-Description=\u6700\u8fd1\u306e\u30a2\u30af\u30c6\u30a3\u30d3\u30c6\u30a3\u30d5\u30a1\u30a4\u30f3\u30c0\u30fc\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb -Chrome.moduleName=Chrome -Chrome.getHistory.errMsg.errGettingFiles=Chrome\u5c65\u6b74\u30d5\u30a1\u30a4\u30eb\u3092\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 -Chrome.getHistory.errMsg.couldntFindAnyFiles=\u30a2\u30ed\u30b1\u30fc\u30b7\u30e7\u30f3\u3055\u308c\u305fChrome\u5c65\u6b74\u30d5\u30a1\u30a4\u30eb\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002 -Chrome.getHistory.errMsg.errAnalyzingFile={0}\:\u30d5\u30a1\u30a4\u30eb\:{1}\u3092\u89e3\u6790\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -Chrome.parentModuleName=\u6700\u8fd1\u306e\u30a2\u30af\u30c6\u30a3\u30d3\u30c6\u30a3 -Chrome.getBookmark.errMsg.errGettingFiles=Chrome\u30d6\u30c3\u30af\u30de\u30fc\u30af\u30d5\u30a1\u30a4\u30eb\u3092\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 -Chrome.getBookmark.errMsg.errAnalyzingFile={0}\:\u30d5\u30a1\u30a4\u30eb\:{1}\u3092\u89e3\u6790\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f +#Tue Aug 18 18:09:21 UTC 2020 Chrome.getBookmark.errMsg.errAnalyzeFile={0}\:\u30d5\u30a1\u30a4\u30eb\:{1}\u3092\u89e3\u6790\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f +Chrome.getBookmark.errMsg.errAnalyzingFile={0}\:\u30d5\u30a1\u30a4\u30eb\:{1}\u3092\u89e3\u6790\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f Chrome.getBookmark.errMsg.errAnalyzingFile3={0}\:\u30d5\u30a1\u30a4\u30eb\:{1}\u3092\u89e3\u6790\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f Chrome.getBookmark.errMsg.errAnalyzingFile4={0}\:\u30d5\u30a1\u30a4\u30eb\:{1}\u3092\u89e3\u6790\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -Chrome.getCookie.errMsg.errGettingFiles=Chrome\u5c65\u6b74\u30d5\u30a1\u30a4\u30eb\u3092\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 +Chrome.getBookmark.errMsg.errGettingFiles=Chrome\u30d6\u30c3\u30af\u30de\u30fc\u30af\u30d5\u30a1\u30a4\u30eb\u3092\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 Chrome.getCookie.errMsg.errAnalyzeFile={0}\:\u30d5\u30a1\u30a4\u30eb\:{1}\u3092\u89e3\u6790\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -Chrome.getDownload.errMsg.errGettingFiles=Chrome\u5c65\u6b74\u30d5\u30a1\u30a4\u30eb\u3092\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 +Chrome.getCookie.errMsg.errGettingFiles=Chrome\u5c65\u6b74\u30d5\u30a1\u30a4\u30eb\u3092\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 Chrome.getDownload.errMsg.errAnalyzeFiles1={0}\:\u30d5\u30a1\u30a4\u30eb\:{1}\u3092\u89e3\u6790\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -Chrome.getLogin.errMsg.errGettingFiles=Chrome\u5c65\u6b74\u30d5\u30a1\u30a4\u30eb\u3092\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 +Chrome.getDownload.errMsg.errGettingFiles=Chrome\u5c65\u6b74\u30d5\u30a1\u30a4\u30eb\u3092\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 +Chrome.getHistory.errMsg.couldntFindAnyFiles=\u30a2\u30ed\u30b1\u30fc\u30b7\u30e7\u30f3\u3055\u308c\u305fChrome\u5c65\u6b74\u30d5\u30a1\u30a4\u30eb\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002 +Chrome.getHistory.errMsg.errAnalyzingFile={0}\:\u30d5\u30a1\u30a4\u30eb\:{1}\u3092\u89e3\u6790\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f +Chrome.getHistory.errMsg.errGettingFiles=Chrome\u5c65\u6b74\u30d5\u30a1\u30a4\u30eb\u3092\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 Chrome.getLogin.errMsg.errAnalyzingFiles={0}\:\u30d5\u30a1\u30a4\u30eb\:{1}\u3092\u89e3\u6790\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f +Chrome.getLogin.errMsg.errGettingFiles=Chrome\u5c65\u6b74\u30d5\u30a1\u30a4\u30eb\u3092\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 +Chrome.moduleName=Chrome +Chrome.parentModuleName=\u6700\u8fd1\u306e\u30a2\u30af\u30c6\u30a3\u30d3\u30c6\u30a3 +ChromeCacheExtract_adding_artifacts_msg=Chrome\u30ad\u30e3\u30c3\u30b7\u30e5\uff1a\u5206\u6790\u306e\u305f\u3081\u306b%d\u500b\u306e\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u3092\u8ffd\u52a0\u3057\u3066\u3044\u307e\u3059\u3002 +ChromeCacheExtract_adding_extracted_files_msg=Chrome\u30ad\u30e3\u30c3\u30b7\u30e5\uff1a\u5206\u6790\u306e\u305f\u3081\u306b%d\u500b\u306e\u62bd\u51fa\u30d5\u30a1\u30a4\u30eb\u3092\u8ffd\u52a0\u3057\u3066\u3044\u307e\u3059\u3002 +ChromeCacheExtract_loading_files_msg=Chrome\u30ad\u30e3\u30c3\u30b7\u30e5\uff1a %s\u304b\u3089\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u3093\u3067\u3044\u307e\u3059\u3002 +DataSourceUsage_DJU_Drone_DAT=DJI\u5185\u8535SD\u30ab\u30fc\u30c9 Extract.dbConn.errMsg.failedToQueryDb={0}\:\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30af\u30a8\u30ea\u5b9f\u884c\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002 -ExtractIE.moduleName.text=Internet Explorer ExtractIE.getBookmark.errMsg.errGettingBookmarks={0}\: Internet Explorer\u30d6\u30c3\u30af\u30de\u30fc\u30af\u3092\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 -ExtractIE.parentModuleName.noSpace=\u6700\u8fd1\u306e\u30a2\u30af\u30c6\u30a3\u30d3\u30c6\u30a3 -ExtractIE.parentModuleName=\u6700\u8fd1\u306e\u30a2\u30af\u30c6\u30a3\u30d3\u30c6\u30a3 -ExtractIE.getURLFromIEBmkFile.errMsg={0}\:Internet Explorer\u30d6\u30c3\u30af\u30de\u30fc\u30af\u30d5\u30a1\u30a4\u30eb{1}\u3092\u30d1\u30fc\u30b9\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -ExtractIE.getURLFromIEBmkFile.errMsg2={0}\:Internet Explorer\u30d6\u30c3\u30af\u30de\u30fc\u30af\u30d5\u30a1\u30a4\u30eb{1}\u3092\u30d1\u30fc\u30b9\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f ExtractIE.getCookie.errMsg.errGettingFile={0}\:Internet Explorer\u306ecookie\u30d5\u30a1\u30a4\u30eb\u3092\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 ExtractIE.getCookie.errMsg.errReadingIECookie={0}\:Internet Explorer\u306ecookie{1}\u3092\u8aad\u307f\u53d6\u308a\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 -ExtractIE.getHistory.errMsg.unableToGetHist={0}\:Internet Explorer\u5c65\u6b74\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\uff1apasco\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f ExtractIE.getHistory.errMsg.errGettingHistFiles={0}\:Internet Explorer\u5c65\u6b74\u30d5\u30a1\u30a4\u30eb\u3092\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 -ExtractIE.getHistory.errMsg.noHistFiles=Internet Explorer\u5c65\u6b74\u30d5\u30a1\u30a4\u30eb\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002 -ExtractIE.getHistory.errMsg.errWriteFile={0}\:\u30d5\u30a1\u30a4\u30eb\:{1}\u3092\u66f8\u304d\u8fbc\u307f\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f ExtractIE.getHistory.errMsg.errProcHist={0}\: Internet Explorer\u5c65\u6b74\u3092\u51e6\u7406\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 -ExtractIE.parsePascoOutput.errMsg.notFound={0}\:Pasco\u30a2\u30a6\u30c8\u30d7\u30c3\u30c8\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\uff1a{1} +ExtractIE.getHistory.errMsg.errWriteFile={0}\:\u30d5\u30a1\u30a4\u30eb\:{1}\u3092\u66f8\u304d\u8fbc\u307f\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f +ExtractIE.getHistory.errMsg.noHistFiles=Internet Explorer\u5c65\u6b74\u30d5\u30a1\u30a4\u30eb\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002 +ExtractIE.getHistory.errMsg.unableToGetHist={0}\:Internet Explorer\u5c65\u6b74\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\uff1apasco\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f +ExtractIE.getURLFromIEBmkFile.errMsg={0}\:Internet Explorer\u30d6\u30c3\u30af\u30de\u30fc\u30af\u30d5\u30a1\u30a4\u30eb{1}\u3092\u30d1\u30fc\u30b9\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f +ExtractIE.getURLFromIEBmkFile.errMsg2={0}\:Internet Explorer\u30d6\u30c3\u30af\u30de\u30fc\u30af\u30d5\u30a1\u30a4\u30eb{1}\u3092\u30d1\u30fc\u30b9\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f +ExtractIE.moduleName.text=Internet Explorer +ExtractIE.parentModuleName=\u6700\u8fd1\u306e\u30a2\u30af\u30c6\u30a3\u30d3\u30c6\u30a3 +ExtractIE.parentModuleName.noSpace=\u6700\u8fd1\u306e\u30a2\u30af\u30c6\u30a3\u30d3\u30c6\u30a3 ExtractIE.parsePascoOutput.errMsg.errParsing={0}\:Internet Explorer\u5c65\u6b74\u30a8\u30f3\u30c8\u30ea{1}\u3092\u30d1\u30fc\u30b9\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f ExtractIE.parsePascoOutput.errMsg.errParsingEntry={0}\: Internet Explorer\u5c65\u6b74\u30a8\u30f3\u30c8\u30ea\u3092\u30d1\u30fc\u30b9\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 -ExtractRegistry.moduleName.text=\u30ec\u30b8\u30b9\u30c8\u30ea -ExtractRegistry.findRegFiles.errMsg.errReadingFile=\u30ec\u30b8\u30b9\u30c8\u30ea\u30d5\u30a1\u30a4\u30eb\uff1a{0}\u3092\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f +ExtractIE.parsePascoOutput.errMsg.notFound={0}\:Pasco\u30a2\u30a6\u30c8\u30d7\u30c3\u30c8\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\uff1a{1} +ExtractPrefetch_module_name=Windows Prefetch Extractor +ExtractRegistry.analyzeRegFiles.errMsg.errReadingRegFile={0}\:\u30ec\u30b8\u30b9\u30c8\u30ea\u30d5\u30a1\u30a4\u30eb - {1}\u3092\u8aad\u307f\u53d6\u308a\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f ExtractRegistry.analyzeRegFiles.errMsg.errWritingTemp={0}\:\u30ec\u30b8\u30b9\u30c8\u30ea\u30d5\u30a1\u30a4\u30eb{1}\u3092\u89e3\u6790\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f ExtractRegistry.analyzeRegFiles.failedParsingResults={0}\:\u30ec\u30b8\u30b9\u30c8\u30ea\u30d5\u30a1\u30a4\u30eb\u7d50\u679c\u306e\u30d1\u30fc\u30b9\u306b\u5931\u6557\u3057\u307e\u3057\u305f{1} +ExtractRegistry.execRegRip.errMsg.failedAnalyzeRegFile={0}\:\u30ec\u30b8\u30b9\u30c8\u30ea\u30d5\u30a1\u30a4\u30eb\u306e\u89e3\u6790\u306b\u5931\u6557\u3057\u307e\u3057\u305f {1} +ExtractRegistry.findRegFiles.errMsg.errReadingFile=\u30ec\u30b8\u30b9\u30c8\u30ea\u30d5\u30a1\u30a4\u30eb\uff1a{0}\u3092\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f +ExtractRegistry.moduleName.text=\u30ec\u30b8\u30b9\u30c8\u30ea ExtractRegistry.parentModuleName.noSpace=\u6700\u8fd1\u306e\u30a2\u30af\u30c6\u30a3\u30d3\u30c6\u30a3 ExtractRegistry.programName=\u30ec\u30b8\u30b9\u30c8\u30ea\u30ea\u30c3\u30d1\u30fc -ExtractRegistry.analyzeRegFiles.errMsg.errReadingRegFile={0}\:\u30ec\u30b8\u30b9\u30c8\u30ea\u30d5\u30a1\u30a4\u30eb - {1}\u3092\u8aad\u307f\u53d6\u308a\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -ExtractRegistry.execRegRip.errMsg.failedAnalyzeRegFile={0}\:\u30ec\u30b8\u30b9\u30c8\u30ea\u30d5\u30a1\u30a4\u30eb\u306e\u89e3\u6790\u306b\u5931\u6557\u3057\u307e\u3057\u305f -ExtractRegistry.execRegRip.errMsg.failedAnalyzeRegFile2={0}\:\u30ec\u30b8\u30b9\u30c8\u30ea\u30d5\u30a1\u30a4\u30eb\u306e\u89e3\u6790\u306b\u5931\u6557\u3057\u307e\u3057\u305f -ExtractRegistry.execRegRip.errMsg.failedAnalyzeRegFile3={0}\:\u30ec\u30b8\u30b9\u30c8\u30ea\u30d5\u30a1\u30a4\u30eb\u306e\u89e3\u6790\u306b\u5931\u6557\u3057\u307e\u3057\u305f -ExtractRegistry.execRegRip.errMsg.failedAnalyzeRegFile4={0}\:\u30ec\u30b8\u30b9\u30c8\u30ea\u30d5\u30a1\u30a4\u30eb\u306e\u89e3\u6790\u306b\u5931\u6557\u3057\u307e\u3057\u305f -Firefox.moduleName=FireFox +ExtractSru_error_finding_export_srudb_program=export_srudb\u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u691c\u7d22\u306b\u5931\u6557\u3057\u307e\u3057\u305f +ExtractSru_module_name=\u30b7\u30b9\u30c6\u30e0\u30ea\u30bd\u30fc\u30b9\u4f7f\u7528\u91cf\u62bd\u51fa +ExtractSru_process_error_executing_export_srudb_program=export_srudb\u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u5b9f\u884c\u30a8\u30e9\u30fc +ExtractSru_process_errormsg_find_software_hive=SOFTWARE HIVE\u30d5\u30a1\u30a4\u30eb\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093 +ExtractSru_process_errormsg_find_srudb_dat=srudb.dat\u30d5\u30a1\u30a4\u30eb\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093 +ExtractSru_process_errormsg_write_software_hive=SOFTWARE HIVE\u30d5\u30a1\u30a4\u30eb\u3092\u66f8\u304d\u8fbc\u3081\u307e\u305b\u3093 +ExtractSru_process_errormsg_write_srudb_dat=srudb.dat\u30d5\u30a1\u30a4\u30eb\u306b\u66f8\u304d\u8fbc\u3081\u307e\u305b\u3093 +Firefox.getBookmark.errMsg.errAnalyzeFile={0}\:\u30d5\u30a1\u30a4\u30eb\:{1}\u306e\u89e3\u6790\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f +Firefox.getBookmark.errMsg.errFetchFiles=Firefox\u306e\u30d6\u30c3\u30af\u30de\u30fc\u30af\u30d5\u30a1\u30a4\u30eb\u3092\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 +Firefox.getCookie.errMsg.errAnalyzeFile={0}\:\u30d5\u30a1\u30a4\u30eb\:{1}\u3092\u89e3\u6790\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f +Firefox.getCookie.errMsg.errFetchFile=Firefox\u306ecookie\u30d5\u30a1\u30a4\u30eb\u3092\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 +Firefox.getDlPre24.errMsg.errAnalyzeFiles={0}\:\u30d5\u30a1\u30a4\u30eb\:{1}\u3092\u89e3\u6790\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f +Firefox.getDlPre24.errMsg.errFetchFiles=Firefox\u306e\u300c\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u300d\u30d5\u30a1\u30a4\u30eb\u3092\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 +Firefox.getDlPre24.errMsg.errParsingArtifacts={0}\:{1} Firefox\u30a6\u30a7\u30d6\u5c65\u6b74\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u3092\u30d1\u30fc\u30b9\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 +Firefox.getDlV24.errMsg.errAnalyzeFile={0}\:\u30d5\u30a1\u30a4\u30eb\:{1}\u3092\u89e3\u6790\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f +Firefox.getDlV24.errMsg.errFetchFiles=Firefox\u306e\u300c\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u300d\u30d5\u30a1\u30a4\u30eb\u3092\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 +Firefox.getDlV24.errMsg.errParsingArtifacts={0}\:{1} Firefox\u30a6\u30a7\u30d6\u5c65\u6b74\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u3092\u30d1\u30fc\u30b9\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 +Firefox.getHistory.errMsg.errAnalyzeFile={0}\:\u30d5\u30a1\u30a4\u30eb\:{1}\u3092\u89e3\u6790\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f Firefox.getHistory.errMsg.errFetchingFiles=Firefox\u306e\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u5c65\u6b74\u30d5\u30a1\u30a4\u30eb\u3092\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 Firefox.getHistory.errMsg.noFilesFound=Firefox\u5c65\u6b74\u30d5\u30a1\u30a4\u30eb\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002 -Firefox.getHistory.errMsg.errAnalyzeFile={0}\:\u30d5\u30a1\u30a4\u30eb\:{1}\u3092\u89e3\u6790\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -Firefox.parentModuleName.noSpace=\u6700\u8fd1\u306e\u30a2\u30af\u30c6\u30a3\u30d3\u30c6\u30a3 +Firefox.moduleName=FireFox Firefox.parentModuleName=\u6700\u8fd1\u306e\u30a2\u30af\u30c6\u30a3\u30d3\u30c6\u30a3 -Firefox.getBookmark.errMsg.errFetchFiles=Firefox\u306e\u30d6\u30c3\u30af\u30de\u30fc\u30af\u30d5\u30a1\u30a4\u30eb\u3092\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 -Firefox.getBookmark.errMsg.errAnalyzeFile={0}\:\u30d5\u30a1\u30a4\u30eb\:{1}\u306e\u89e3\u6790\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -Firefox.getCookie.errMsg.errFetchFile=Firefox\u306ecookie\u30d5\u30a1\u30a4\u30eb\u3092\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 -Firefox.getCookie.errMsg.errAnalyzeFile={0}\:\u30d5\u30a1\u30a4\u30eb\:{1}\u3092\u89e3\u6790\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -Firefox.getDlPre24.errMsg.errFetchFiles=Firefox\u306e\u300c\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u300d\u30d5\u30a1\u30a4\u30eb\u3092\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 -Firefox.getDlPre24.errMsg.errAnalyzeFiles={0}\:\u30d5\u30a1\u30a4\u30eb\:{1}\u3092\u89e3\u6790\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -Firefox.getDlPre24.errMsg.errParsingArtifacts={0}\:{1} Firefox\u30a6\u30a7\u30d6\u5c65\u6b74\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u3092\u30d1\u30fc\u30b9\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 -Firefox.getDlV24.errMsg.errFetchFiles=Firefox\u306e\u300c\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u300d\u30d5\u30a1\u30a4\u30eb\u3092\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 -Firefox.getDlV24.errMsg.errAnalyzeFile={0}\:\u30d5\u30a1\u30a4\u30eb\:{1}\u3092\u89e3\u6790\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -Firefox.getDlV24.errMsg.errParsingArtifacts={0}\:{1} Firefox\u30a6\u30a7\u30d6\u5c65\u6b74\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u3092\u30d1\u30fc\u30b9\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 -RAImageIngestModule.process.started={0}\u3092\u958b\u59cb\u3057\u307e\u3057\u305f -RAImageIngestModule.process.errModFailed={0}\u5931\u6557\u3057\u307e\u3057\u305f - \u8a73\u7d30\u306f\u30ed\u30b0\u3092\u78ba\u8a8d\u3057\u3066\u4e0b\u3055\u3044
    -RAImageIngestModule.process.errModErrs={0}\u306b\u30a8\u30e9\u30fc\u304c\u3042\u308a\u307e\u3057\u305f -- \u30ed\u30b0\u3092\u78ba\u8a8d\u3057\u3066\u4e0b\u3055\u3044 -RAImageIngestModule.process.errMsg.errsEncountered=

    \u89e3\u6790\u4e2d\u306b\u767a\u751f\u3057\u305f\u30a8\u30e9\u30fc\uff1a

      -RAImageIngestModule.process.errMsgSub.oneErr=1\u3064\u306e\u30a8\u30e9\u30fc\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f -RAImageIngestModule.process.errMsgSub.nErrs={0}\u306e\u30a8\u30e9\u30fc\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f -RAImageIngestModule.process.ingestMsg.finished=\u5b8c\u4e86 {0} - {1} -RAImageIngestModule.process.errMsg.noErrs=

      \u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u305b\u3093\u3067\u3057\u305f\u3002

      -RAImageIngestModule.process.errMsgSub.noErrs=\u30a8\u30e9\u30fc\u304c\u30ec\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093 -RAImageIngestModule.process.histMsg.title=

      {0}\u306b\u95a2\u3057\u3066\u306e\u30d6\u30e9\u30a6\u30b6\u30c7\u30fc\u30bf\uff1a

        -RAImageIngestModule.process.histMsg.found= \u898b\u3064\u304b\u308a\u307e\u3057\u305f\u3002 -RAImageIngestModule.process.histMsg.notFnd=\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002 -RAImageIngestModule.process.ingestMsg.results={0} - \u30d6\u30e9\u30a6\u30b6\u7d50\u679c +Firefox.parentModuleName.noSpace=\u6700\u8fd1\u306e\u30a2\u30af\u30c6\u30a3\u30d3\u30c6\u30a3 +OpenIDE-Module-Display-Category=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb +OpenIDE-Module-Long-Description=\u6700\u8fd1\u306e\u30a2\u30af\u30c6\u30a3\u30d3\u30c6\u30a3\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u3002\n\n\u3053\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u306f\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u4e2d\u306e\u30c7\u30a3\u30b9\u30af\u30a4\u30e1\u30fc\u30b8\u304b\u3089\u6709\u7528\u306a\u6700\u8fd1\u306e\u30e6\u30fc\u30b6\u30a2\u30af\u30c6\u30a3\u30d3\u30c6\u30a3\u3092\u62bd\u51fa\u3057\u307e\u3059\u3002\u4f8b\u3048\u3070\uff1a\n\n-\u6700\u8fd1\u958b\u3044\u305f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3001\n-\u30a6\u30a7\u30d6\u30a2\u30af\u30c6\u30a3\u30d3\u30c6\u30a3\uff08\u8a2a\u308c\u305f\u30b5\u30a4\u30c8\u3001\u4fdd\u5b58\u3055\u308c\u305fCookie\u3001\u30d6\u30c3\u30af\u30de\u30fc\u30af\u3055\u308c\u305f\u30b5\u30a4\u30c8\u3001\u30b5\u30fc\u30c1\u30a8\u30f3\u30b8\u30f3\u30af\u30a8\u30ea\u3001\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\uff09\u3001\n-\u6700\u8fd1\u63a5\u7d9a\u3057\u305f\u30c7\u30d0\u30a4\u30b9\u3001\n-\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u305f\u30d7\u30ed\u30b0\u30e9\u30e0\u3002\n\n\u3053\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u306f\u73fe\u5728Windows\u306e\u30c7\u30a3\u30b9\u30af\u30a4\u30e1\u30fc\u30b8\u3057\u304b\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u305b\u3093\u3002\n\u30d7\u30e9\u30b0\u30a4\u30f3\u306fWindows\u7248\u306eAutopsy\u3092\u5229\u7528\u3059\u308b\u3068\u5168\u3066\u306e\u6a5f\u80fd\u304c\u4f7f\u3048\u307e\u3059\u3002 +OpenIDE-Module-Name=\u6700\u8fd1\u306e\u30a2\u30af\u30c6\u30a3\u30d3\u30c6\u30a3 +OpenIDE-Module-Short-Description=\u6700\u8fd1\u306e\u30a2\u30af\u30c6\u30a3\u30d3\u30c6\u30a3\u30d5\u30a1\u30a4\u30f3\u30c0\u30fc\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb RAImageIngestModule.complete.errMsg.failed={0} \u5b8c\u4e86\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f - \u8a73\u7d30\u306f\u30ed\u30b0\u3092\u78ba\u8a8d\u3057\u3066\u4e0b\u3055\u3044
        -RAImageIngestModule.getName=\u6700\u8fd1\u306e\u30a2\u30af\u30c6\u30a3\u30d3\u30c6\u30a3 RAImageIngestModule.getDesc=\u30a6\u30a7\u30d6\u30d6\u30e9\u30a6\u30b8\u30f3\u30b0\u3001\u6700\u8fd1\u958b\u3044\u305f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3001\u6700\u8fd1\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u305f\u30d7\u30ed\u30b0\u30e9\u30e0\u7b49\u306e\u6700\u8fd1\u306e\u30e6\u30fc\u30b6\u30a2\u30af\u30c6\u30a3\u30d3\u30c6\u30a3\u3092\u62bd\u51fa\u3057\u307e\u3059\u3002 +RAImageIngestModule.getName=\u6700\u8fd1\u306e\u30a2\u30af\u30c6\u30a3\u30d3\u30c6\u30a3 +RAImageIngestModule.process.errModErrs={0}\u306b\u30a8\u30e9\u30fc\u304c\u3042\u308a\u307e\u3057\u305f -- \u30ed\u30b0\u3092\u78ba\u8a8d\u3057\u3066\u4e0b\u3055\u3044 +RAImageIngestModule.process.errModFailed={0}\u5931\u6557\u3057\u307e\u3057\u305f - \u8a73\u7d30\u306f\u30ed\u30b0\u3092\u78ba\u8a8d\u3057\u3066\u4e0b\u3055\u3044
        +RAImageIngestModule.process.errMsg.errsEncountered=

        \u89e3\u6790\u4e2d\u306b\u767a\u751f\u3057\u305f\u30a8\u30e9\u30fc\uff1a

          +RAImageIngestModule.process.errMsg.noErrs=

          \u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u305b\u3093\u3067\u3057\u305f\u3002

          +RAImageIngestModule.process.errMsgSub.nErrs={0}\u306e\u30a8\u30e9\u30fc\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f +RAImageIngestModule.process.errMsgSub.noErrs=\u30a8\u30e9\u30fc\u304c\u30ec\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093 +RAImageIngestModule.process.errMsgSub.oneErr=1\u3064\u306e\u30a8\u30e9\u30fc\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f +RAImageIngestModule.process.histMsg.found=\u898b\u3064\u304b\u308a\u307e\u3057\u305f\u3002 +RAImageIngestModule.process.histMsg.notFnd=\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002 +RAImageIngestModule.process.histMsg.title=

          {0}\u306b\u95a2\u3057\u3066\u306e\u30d6\u30e9\u30a6\u30b6\u30c7\u30fc\u30bf\uff1a

            +RAImageIngestModule.process.ingestMsg.finished=\u5b8c\u4e86 {0} - {1} +RAImageIngestModule.process.ingestMsg.results={0} - \u30d6\u30e9\u30a6\u30b6\u7d50\u679c +RAImageIngestModule.process.started={0}\u3092\u958b\u59cb\u3057\u307e\u3057\u305f RecentDocumentsByLnk.getRecDoc.errMsg.errGetLnkFiles={0}\:lnk\u30d5\u30a1\u30a4\u30eb\u3092\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 RecentDocumentsByLnk.getRecDoc.errParsingFile={0}\: \u6700\u8fd1\u306e\u30d5\u30a1\u30a4\u30eb{1}\u3092\u30d1\u30fc\u30b9\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -RecentDocumentsByLnk.parentModuleName.noSpace=\u6700\u8fd1\u306e\u30a2\u30af\u30c6\u30a3\u30d3\u30c6\u30a3 RecentDocumentsByLnk.parentModuleName=\u6700\u8fd1\u306e\u30a2\u30af\u30c6\u30a3\u30d3\u30c6\u30a3 -SearchEngineURLQueryAnalyzer.moduleName.text=\u691c\u7d22\u30a8\u30f3\u30b8\u30f3 -SearchEngineURLQueryAnalyzer.engineName.none=\u7121\u3057 +RecentDocumentsByLnk.parentModuleName.noSpace=\u6700\u8fd1\u306e\u30a2\u30af\u30c6\u30a3\u30d3\u30c6\u30a3 +Recently_Used_Artifacts_Adobe=Adobe MRU\u306b\u3088\u308b\u3068\u6700\u8fd1\u958b\u3044\u3066\u307e\u3059 +Recently_Used_Artifacts_Applets=Applets\u30ec\u30b8\u30b9\u30c8\u30ea\u30ad\u30fc\u306b\u3088\u308b\u3068\u6700\u8fd1\u958b\u3044\u3066\u307e\u3059 +Recently_Used_Artifacts_ArcHistory=7Zip\u3067\u6700\u8fd1\u958b\u3044\u3066\u307e\u3059 +Recently_Used_Artifacts_Mediaplayer=\u30e1\u30c7\u30a3\u30a2\u30d7\u30ec\u30fc\u30e4\u30fcMRU\u306b\u3088\u308b\u3068\u6700\u8fd1\u958b\u3044\u3066\u307e\u3059 +Recently_Used_Artifacts_Mmc=Windows\u7ba1\u7406\u30b3\u30f3\u30bd\u30fc\u30ebMRU\u306b\u3088\u308b\u3068\u6700\u8fd1\u958b\u3044\u3066\u307e\u3059 +Recently_Used_Artifacts_Office_Trustrecords=Office\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u4f8b\u5916\u304c\u8a31\u53ef\u3055\u308c\u305f\u305f\u3081\u3001TrustRecords\u306b\u4fdd\u5b58\u3055\u308c\u307e\u3057\u305f +Recently_Used_Artifacts_Officedocs=Office MRU\u306b\u3088\u308b\u3068\u6700\u8fd1\u958b\u3044\u3066\u307e\u3059 +Recently_Used_Artifacts_Winrar=WinRAR MRU\u306b\u3088\u308b\u3068\u6700\u8fd1\u958b\u3044\u3066\u307e\u3059 +Registry_System_Bam=\u30d0\u30c3\u30af\u30b0\u30e9\u30a6\u30f3\u30c9\u30fb\u30a2\u30af\u30c6\u30a3\u30d3\u30c6\u30a3\u30fb\u30e2\u30c7\u30ec\u30fc\u30bf\u30fc\uff08BAM\uff09\u306b\u3088\u3046\u3068\u6700\u8fd1\u5b9f\u884c\u3055\u308c\u3066\u307e\u3059 SearchEngineURLQueryAnalyzer.domainSubStr.none=\u7121\u3057 -SearchEngineURLQueryAnalyzer.toString=\u540d\u79f0\uff1a {0}\n\ - \u30c9\u30e1\u30a4\u30f3\u30b5\u30d6\u30b9\u30c8\u30ea\u30f3\u30b0\uff1a {1}\n\ - \u30ab\u30a6\u30f3\u30c8\uff1a {2}\n\ - \u5206\u5272\u30c8\u30fc\u30af\u30f3\n\ - {3} -SearchEngineURLQueryAnalyzer.parentModuleName.noSpace=\u6700\u8fd1\u306e\u30a2\u30af\u30c6\u30a3\u30d3\u30c6\u30a3 -SearchEngineURLQueryAnalyzer.parentModuleName=\u6700\u8fd1\u306e\u30a2\u30af\u30c6\u30a3\u30d3\u30c6\u30a3 +SearchEngineURLQueryAnalyzer.engineName.none=\u7121\u3057 SearchEngineURLQueryAnalyzer.init.exception.msg={0}\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f +SearchEngineURLQueryAnalyzer.moduleName.text=\u691c\u7d22\u30a8\u30f3\u30b8\u30f3 +SearchEngineURLQueryAnalyzer.parentModuleName=\u6700\u8fd1\u306e\u30a2\u30af\u30c6\u30a3\u30d3\u30c6\u30a3 +SearchEngineURLQueryAnalyzer.parentModuleName.noSpace=\u6700\u8fd1\u306e\u30a2\u30af\u30c6\u30a3\u30d3\u30c6\u30a3 +SearchEngineURLQueryAnalyzer.toString=\u540d\u79f0\uff1a {0}\n\u30c9\u30e1\u30a4\u30f3\u30b5\u30d6\u30b9\u30c8\u30ea\u30f3\u30b0\uff1a {1}\n\u30ab\u30a6\u30f3\u30c8\uff1a {2}\n\u5206\u5272\u30c8\u30fc\u30af\u30f3\n{3} UsbDeviceIdMapper.parseAndLookup.text=\u30d7\u30ed\u30c0\u30af\u30c8\uff1a{0} diff --git a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Chromium.java b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Chromium.java index 51ce1e71c8..b63e33ecdf 100644 --- a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Chromium.java +++ b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Chromium.java @@ -200,7 +200,8 @@ class Chromium extends Extract { String temps = RAImageIngestModule.getRATempPath(currentCase, browser) + File.separator + allocatedHistoryFiles.get(j).getName() + j + ".db"; //NON-NLS final AbstractFile historyFile = allocatedHistoryFiles.get(j++); if ((historyFile.getSize() == 0) || (historyFile.getName().toLowerCase().contains("-slack")) - || (historyFile.getName().toLowerCase().contains("cache")) || (historyFile.getName().toLowerCase().contains("media"))) { + || (historyFile.getName().toLowerCase().contains("cache")) || (historyFile.getName().toLowerCase().contains("media")) + || (historyFile.getName().toLowerCase().contains("index"))) { continue; } try { @@ -287,7 +288,8 @@ class Chromium extends Extract { AbstractFile bookmarkFile = bookmarkFiles.get(j++); if ((bookmarkFile.getSize() == 0) || (bookmarkFile.getName().toLowerCase().contains("-slack")) || (bookmarkFile.getName().toLowerCase().contains("extras")) || (bookmarkFile.getName().toLowerCase().contains("log")) - || (bookmarkFile.getName().toLowerCase().contains("backup")) || (bookmarkFile.getName().toLowerCase().contains("visualized"))) { + || (bookmarkFile.getName().toLowerCase().contains("backup")) || (bookmarkFile.getName().toLowerCase().contains("visualized")) + || (bookmarkFile.getName().toLowerCase().contains("bak")) || (bookmarkFile.getParentPath().toLowerCase().contains("backup"))) { continue; } String temps = RAImageIngestModule.getRATempPath(currentCase, browser) + File.separator + bookmarkFile.getName() + j + ".db"; //NON-NLS @@ -511,7 +513,7 @@ class Chromium extends Extract { while (j < downloadFiles.size()) { AbstractFile downloadFile = downloadFiles.get(j++); if ((downloadFile.getSize() == 0) || (downloadFile.getName().toLowerCase().contains("-slack")) - || (downloadFile.getName().toLowerCase().contains("cache"))) { + || (downloadFile.getName().toLowerCase().contains("cache")) || (downloadFile.getName().toLowerCase().contains("index"))) { continue; } diff --git a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractEdge.java b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractEdge.java index bafb4eb27c..aeb2b27954 100755 --- a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractEdge.java +++ b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractEdge.java @@ -2,7 +2,7 @@ * * Autopsy Forensic Browser * - * Copyright 2019 Basis Technology Corp. + * Copyright 2019-2020 Basis Technology Corp. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -162,24 +162,24 @@ final class ExtractEdge extends Extract { final String esedumper = getPathForESEDumper(); if (esedumper == null) { - this.addErrorMessage(Bundle.ExtractEdge_process_errMsg_unableFindESEViewer()); LOG.log(Level.SEVERE, "Error finding ESEDatabaseViewer program"); //NON-NLS + this.addErrorMessage(Bundle.ExtractEdge_process_errMsg_unableFindESEViewer()); return; //If we cannot find the ESEDatabaseView we cannot proceed } try { this.processWebCacheDbFile(esedumper, webCacheFiles, progressBar); } catch (IOException | TskCoreException ex) { + LOG.log(Level.SEVERE, "Error processing 'WebCacheV01.dat' files for Microsoft Edge", ex); // NON-NLS this.addErrorMessage(Bundle.ExtractEdge_process_errMsg_webcacheFail()); - LOG.log(Level.SEVERE, "Error returned from processWebCacheDbFile", ex); // NON-NLS } progressBar.progress(Bundle.Progress_Message_Edge_Bookmarks()); try { this.processSpartanDbFile(esedumper, spartanFiles); } catch (IOException | TskCoreException ex) { + LOG.log(Level.SEVERE, "Error processing 'spartan.edb' files for Microsoft Edge", ex); // NON-NLS this.addErrorMessage(Bundle.ExtractEdge_process_errMsg_spartanFail()); - LOG.log(Level.SEVERE, "Error returned from processSpartanDbFile", ex); // NON-NLS } } @@ -584,7 +584,7 @@ final class ExtractEdge extends Extract { processBuilder.redirectOutput(outputFilePath.toFile()); processBuilder.redirectError(errFilePath.toFile()); - ExecUtil.execute(processBuilder, new DataSourceIngestModuleProcessTerminator(context)); + ExecUtil.execute(processBuilder, new DataSourceIngestModuleProcessTerminator(context, true)); } /** diff --git a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractIE.java b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractIE.java index 9558ebf6fa..d128c09dc7 100644 --- a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractIE.java +++ b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractIE.java @@ -2,7 +2,7 @@ * * Autopsy Forensic Browser * - * Copyright 2011-2019 Basis Technology Corp. + * Copyright 2012-2020 Basis Technology Corp. * * Copyright 2012 42six Solutions. * Contact: aebadirad 42six com @@ -46,7 +46,6 @@ import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException; import org.sleuthkit.autopsy.casemodule.services.FileManager; import org.sleuthkit.autopsy.datamodel.ContentUtils; -import org.sleuthkit.autopsy.ingest.IngestServices; import org.sleuthkit.datamodel.BlackboardArtifact; import org.sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE; import org.sleuthkit.datamodel.BlackboardAttribute; @@ -56,7 +55,9 @@ import org.sleuthkit.autopsy.coreutils.PlatformUtil; import org.sleuthkit.autopsy.ingest.DataSourceIngestModuleProcessTerminator; import org.sleuthkit.autopsy.ingest.DataSourceIngestModuleProgress; import org.sleuthkit.autopsy.ingest.IngestJobContext; -import org.sleuthkit.datamodel.*; +import org.sleuthkit.datamodel.AbstractFile; +import org.sleuthkit.datamodel.ReadContentInputStream; +import org.sleuthkit.datamodel.TskCoreException; /** * Extracts activity from Internet Explorer browser, as well as recent documents @@ -65,7 +66,6 @@ import org.sleuthkit.datamodel.*; class ExtractIE extends Extract { private static final Logger logger = Logger.getLogger(ExtractIE.class.getName()); - private final IngestServices services = IngestServices.getInstance(); private final String moduleTempResultsDir; private String PASCO_LIB_PATH; private final String JAVA_PATH; @@ -73,7 +73,7 @@ class ExtractIE extends Extract { private static final SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); private Content dataSource; private IngestJobContext context; - + @Messages({ "Progress_Message_IE_History=IE History", "Progress_Message_IE_Bookmarks=IE Bookmarks", @@ -81,8 +81,7 @@ class ExtractIE extends Extract { "Progress_Message_IE_Downloads=IE Downloads", "Progress_Message_IE_FormHistory=IE Form History", "Progress_Message_IE_AutoFill=IE Auto Fill", - "Progress_Message_IE_Logins=IE Logins", - }) + "Progress_Message_IE_Logins=IE Logins",}) ExtractIE() throws NoCurrentCaseException { moduleName = NbBundle.getMessage(ExtractIE.class, "ExtractIE.moduleName.text"); @@ -95,13 +94,13 @@ class ExtractIE extends Extract { this.dataSource = dataSource; this.context = context; dataFound = false; - + progressBar.progress(Bundle.Progress_Message_IE_Bookmarks()); this.getBookmark(); - + progressBar.progress(Bundle.Progress_Message_IE_Cookies()); this.getCookie(); - + progressBar.progress(Bundle.Progress_Message_IE_History()); this.getHistory(); } @@ -148,7 +147,7 @@ class ExtractIE extends Extract { Collection bbattributes = new ArrayList<>(); bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_URL, - RecentActivityExtracterModuleFactory.getModuleName(), url)); + RecentActivityExtracterModuleFactory.getModuleName(), url)); bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_TITLE, RecentActivityExtracterModuleFactory.getModuleName(), name)); bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_DATETIME_CREATED, @@ -166,7 +165,7 @@ class ExtractIE extends Extract { bbartifacts.add(bbart); } } - + postArtifacts(bbartifacts); } @@ -277,7 +276,7 @@ class ExtractIE extends Extract { } } - postArtifacts(bbartifacts); + postArtifacts(bbartifacts); } /** @@ -376,7 +375,7 @@ class ExtractIE extends Extract { NbBundle.getMessage(this.getClass(), "ExtractIE.getHistory.errMsg.errProcHist", this.getName())); } } - + postArtifacts(bbartifacts); } @@ -388,6 +387,10 @@ class ExtractIE extends Extract { * * @return false on error */ + @Messages({ + "# {0} - sub module name", + "ExtractIE_executePasco_errMsg_errorRunningPasco={0}: Error analyzing Internet Explorer web history", + }) private boolean executePasco(String indexFilePath, String outputFileName) { boolean success = true; try { @@ -414,11 +417,12 @@ class ExtractIE extends Extract { * contains a lot of useful data and only the last entry is * corrupted. */ - ExecUtil.execute(processBuilder, new DataSourceIngestModuleProcessTerminator(context)); + ExecUtil.execute(processBuilder, new DataSourceIngestModuleProcessTerminator(context, true)); // @@@ Investigate use of history versus cache as type. } catch (IOException ex) { + logger.log(Level.SEVERE, "Error executing Pasco to process Internet Explorer web history", ex); //NON-NLS + addErrorMessage(Bundle.ExtractIE_executePasco_errMsg_errorRunningPasco(getName())); success = false; - logger.log(Level.SEVERE, "Unable to execute Pasco to process Internet Explorer web history.", ex); //NON-NLS } return success; } @@ -463,11 +467,11 @@ class ExtractIE extends Extract { return bbartifacts; } while (fileScanner.hasNext()) { - + if (context.dataSourceIngestIsCancelled()) { return bbartifacts; } - + String line = fileScanner.nextLine(); if (!line.startsWith("URL")) { //NON-NLS continue; @@ -492,12 +496,12 @@ class ExtractIE extends Extract { */ if (lineBuff[1].contains("@")) { String url[] = lineBuff[1].split("@", 2); - + /* * Verify the left portion of the URL is valid. */ domain = extractDomain(url[0]); - + if (domain != null && domain.isEmpty() == false) { /* * Use the entire input for the URL. @@ -550,7 +554,7 @@ class ExtractIE extends Extract { bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_DATETIME_ACCESSED, RecentActivityExtracterModuleFactory.getModuleName(), ftime)); bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_REFERRER, - RecentActivityExtracterModuleFactory.getModuleName(), "")); + RecentActivityExtracterModuleFactory.getModuleName(), "")); // @@@ NOte that other browser modules are adding TITLE in hre for the title bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_PROG_NAME, RecentActivityExtracterModuleFactory.getModuleName(), @@ -572,27 +576,27 @@ class ExtractIE extends Extract { fileScanner.close(); return bbartifacts; } - + /** * Extract the domain from the supplied URL. This method does additional * checks to detect invalid URLs. - * + * * @param url The URL from which to extract the domain. - * + * * @return The domain. */ private String extractDomain(String url) { if (url == null || url.isEmpty()) { return url; } - + if (url.toLowerCase().startsWith(RESOURCE_URL_PREFIX)) { /* * Ignore URLs that begin with the matched text. */ return null; } - + return NetworkUtils.extractDomain(url); } } diff --git a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractPrefetch.java b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractPrefetch.java index c43998de54..4771b76223 100644 --- a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractPrefetch.java +++ b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractPrefetch.java @@ -53,8 +53,9 @@ import org.sleuthkit.datamodel.Content; import org.sleuthkit.datamodel.TskCoreException; /** - * Extract the Prefetch Files and process them thru an External program. The data will then be added to the - * TSK_PROG_RUN artifact. Associated artifacts will be created if possible. + * Extract the Prefetch Files and process them thru an External program. The + * data will then be added to the TSK_PROG_RUN artifact. Associated artifacts + * will be created if possible. */ final class ExtractPrefetch extends Extract { @@ -62,7 +63,6 @@ final class ExtractPrefetch extends Extract { private IngestJobContext context; - private static final String MODULE_NAME = "extractPREFETCH"; //NON-NLS private static final String PREFETCH_TSK_COMMENT = "Prefetch File"; @@ -78,7 +78,9 @@ final class ExtractPrefetch extends Extract { private static final String PREFETCH_DIR_NAME = "prefetch"; //NON-NLS @Messages({ - "ExtractPrefetch_module_name=Windows Prefetch Extractor" + "ExtractPrefetch_module_name=Windows Prefetch Extractor", + "# {0} - sub module name", + "ExtractPrefetch_errMsg_prefetchParsingFailed={0}: Error analyzing prefetch files" }) ExtractPrefetch() { this.moduleName = Bundle.ExtractPrefetch_module_name(); @@ -96,12 +98,11 @@ final class ExtractPrefetch extends Extract { if (!dirMade) { logger.log(Level.SEVERE, "Error creating directory to store prefetch output database"); //NON-NLS return; //If we cannot create the directory then we need to exit - } } - + extractPrefetchFiles(dataSource); - + final String prefetchDumper = getPathForPrefetchDumper(); if (prefetchDumper == null) { logger.log(Level.SEVERE, "Error finding parse_prefetch program"); //NON-NLS @@ -112,24 +113,23 @@ final class ExtractPrefetch extends Extract { return; } - String modOutFile = modOutPath + File.separator + dataSource.getName() + "-" + PREFETCH_PARSER_DB_FILE; + String modOutFile = modOutPath + File.separator + dataSource.getName() + "-" + PREFETCH_PARSER_DB_FILE; try { - String tempDirPath = RAImageIngestModule.getRATempPath(Case.getCurrentCase(), dataSource.getName() + "-" + PREFETCH_DIR_NAME ); + String tempDirPath = RAImageIngestModule.getRATempPath(Case.getCurrentCase(), dataSource.getName() + "-" + PREFETCH_DIR_NAME); parsePrefetchFiles(prefetchDumper, tempDirPath, modOutFile, modOutPath); createAppExecArtifacts(modOutFile, dataSource); } catch (IOException ex) { - logger.log(Level.WARNING, "Error runing parse_prefetch or creating artifacts.", ex); //NON-NLS + logger.log(Level.SEVERE, "Error parsing prefetch files", ex); //NON-NLS + addErrorMessage(Bundle.ExtractPrefetch_errMsg_prefetchParsingFailed(Bundle.ExtractPrefetch_module_name())); } } - - /** - * Extract prefetch file to temp directory to process. Checks to make sure that the prefetch files only - * come from the /Windows/Prefetch directory - * - * @param dataSource - datasource to search for prefetch files - * - */ + /** + * Extract prefetch file to temp directory to process. Checks to make sure + * that the prefetch files only come from the /Windows/Prefetch directory + * + * @param dataSource - datasource to search for prefetch files + */ void extractPrefetchFiles(Content dataSource) { List pFiles; @@ -159,14 +159,15 @@ final class ExtractPrefetch extends Extract { } } - + /** * Run the export parse_prefetch program against the prefetch files * * @param prefetchExePath - Path to the Executable to run - * @param prefetchDir - Directory where the prefetch files reside to be processed. - * @param tempOutFile - Output database file name and path. - * @param tempOutPath - Directory to store the output and error files. + * @param prefetchDir - Directory where the prefetch files reside to be + * processed. + * @param tempOutFile - Output database file name and path. + * @param tempOutPath - Directory to store the output and error files. * * @throws FileNotFoundException * @throws IOException @@ -184,30 +185,29 @@ final class ExtractPrefetch extends Extract { processBuilder.redirectOutput(outputFilePath.toFile()); processBuilder.redirectError(errFilePath.toFile()); - ExecUtil.execute(processBuilder, new DataSourceIngestModuleProcessTerminator(context)); + ExecUtil.execute(processBuilder, new DataSourceIngestModuleProcessTerminator(context, true)); } - - /** - * Get the path and executable for the parse_prefetch program. Checks for specific version of OS to - * get proper executable. - * - * @return - path and executable to run. - * - */ + /** + * Get the path and executable for the parse_prefetch program. Checks for + * specific version of OS to get proper executable. + * + * @return - path and executable to run. + * + */ private String getPathForPrefetchDumper() { Path path = null; if (PlatformUtil.isWindowsOS()) { if (PlatformUtil.is64BitOS()) { path = Paths.get(PREFETCH_TOOL_FOLDER, PREFETCH_TOOL_NAME_WINDOWS_64); } else { - path = Paths.get(PREFETCH_TOOL_FOLDER, PREFETCH_TOOL_NAME_WINDOWS_32); + path = Paths.get(PREFETCH_TOOL_FOLDER, PREFETCH_TOOL_NAME_WINDOWS_32); } } else { if ("Linux".equals(PlatformUtil.getOSName())) { path = Paths.get(PREFETCH_TOOL_FOLDER, PREFETCH_TOOL_NAME_LINUX); } else { - path = Paths.get(PREFETCH_TOOL_FOLDER, PREFETCH_TOOL_NAME_MACOS); + path = Paths.get(PREFETCH_TOOL_FOLDER, PREFETCH_TOOL_NAME_MACOS); } } File prefetchToolFile = InstalledFileLocator.getDefault().locate(path.toString(), @@ -219,22 +219,22 @@ final class ExtractPrefetch extends Extract { return null; } - + /** * Create the artifacts from external run of the parse_prefetch program - * - * @param prefetchDb - Database file to read from running the parse_prefetch program. + * + * @param prefetchDb - Database file to read from running the parse_prefetch + * program. * @param dataSource - The datasource to search in - * + * */ - private void createAppExecArtifacts(String prefetchDb, Content dataSource) { List blkBrdArtList = new ArrayList<>(); - String sqlStatement = "SELECT prefetch_File_Name, actual_File_Name, file_path, Number_time_file_run, Embeded_date_Time_Unix_1, " + - " Embeded_date_Time_Unix_2, Embeded_date_Time_Unix_3, Embeded_date_Time_Unix_4, Embeded_date_Time_Unix_5," + - " Embeded_date_Time_Unix_6, Embeded_date_Time_Unix_7, Embeded_date_Time_Unix_8 " + - " FROM prefetch_file_info;"; //NON-NLS + String sqlStatement = "SELECT prefetch_File_Name, actual_File_Name, file_path, Number_time_file_run, Embeded_date_Time_Unix_1, " + + " Embeded_date_Time_Unix_2, Embeded_date_Time_Unix_3, Embeded_date_Time_Unix_4, Embeded_date_Time_Unix_5," + + " Embeded_date_Time_Unix_6, Embeded_date_Time_Unix_7, Embeded_date_Time_Unix_8 " + + " FROM prefetch_file_info;"; //NON-NLS try (SQLiteDBConnect tempdbconnect = new SQLiteDBConnect("org.sqlite.JDBC", "jdbc:sqlite:" + prefetchDb); //NON-NLS ResultSet resultSet = tempdbconnect.executeQry(sqlStatement)) { @@ -257,47 +257,47 @@ final class ExtractPrefetch extends Extract { executionTimes.add(Long.valueOf(resultSet.getInt("Embeded_date_Time_Unix_6"))); executionTimes.add(Long.valueOf(resultSet.getInt("Embeded_date_Time_Unix_7"))); executionTimes.add(Long.valueOf(resultSet.getInt("Embeded_date_Time_Unix_8"))); - String timesProgramRun = resultSet.getString("Number_time_file_run"); + String timesProgramRun = resultSet.getString("Number_time_file_run"); String filePath = resultSet.getString("file_path"); AbstractFile pfAbstractFile = getAbstractFile(prefetchFileName, PREFETCH_FILE_LOCATION, dataSource); - + List prefetchExecutionTimes = findNonZeroExecutionTimes(executionTimes); - + if (pfAbstractFile != null) { for (Long executionTime : prefetchExecutionTimes) { // only add prefetch file entries that have an actual date associated with them - Collection blkBrdAttributes = Arrays.asList( + Collection blkBrdAttributes = Arrays.asList( new BlackboardAttribute( - BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PROG_NAME, getName(), - applicationName),//NON-NLS + BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PROG_NAME, getName(), + applicationName),//NON-NLS new BlackboardAttribute( - BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PATH, getName(), filePath), + BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PATH, getName(), filePath), new BlackboardAttribute( - BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DATETIME, getName(), - executionTime), + BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DATETIME, getName(), + executionTime), new BlackboardAttribute( - BlackboardAttribute.ATTRIBUTE_TYPE.TSK_COUNT, getName(), Integer.valueOf(timesProgramRun)), + BlackboardAttribute.ATTRIBUTE_TYPE.TSK_COUNT, getName(), Integer.valueOf(timesProgramRun)), new BlackboardAttribute( - BlackboardAttribute.ATTRIBUTE_TYPE.TSK_COMMENT, getName(), PREFETCH_TSK_COMMENT)); + BlackboardAttribute.ATTRIBUTE_TYPE.TSK_COMMENT, getName(), PREFETCH_TSK_COMMENT)); - try { - BlackboardArtifact blkBrdArt = pfAbstractFile.newArtifact(BlackboardArtifact.ARTIFACT_TYPE.TSK_PROG_RUN); - blkBrdArt.addAttributes(blkBrdAttributes); - blkBrdArtList.add(blkBrdArt); - BlackboardArtifact associatedBbArtifact = createAssociatedArtifact(applicationName.toLowerCase(), filePath, blkBrdArt, dataSource); - if (associatedBbArtifact != null) { - blkBrdArtList.add(associatedBbArtifact); - } - } catch (TskCoreException ex) { - logger.log(Level.SEVERE, "Exception Adding Artifact.", ex);//NON-NLS + try { + BlackboardArtifact blkBrdArt = pfAbstractFile.newArtifact(BlackboardArtifact.ARTIFACT_TYPE.TSK_PROG_RUN); + blkBrdArt.addAttributes(blkBrdAttributes); + blkBrdArtList.add(blkBrdArt); + BlackboardArtifact associatedBbArtifact = createAssociatedArtifact(applicationName.toLowerCase(), filePath, blkBrdArt, dataSource); + if (associatedBbArtifact != null) { + blkBrdArtList.add(associatedBbArtifact); } + } catch (TskCoreException ex) { + logger.log(Level.SEVERE, "Exception Adding Artifact.", ex);//NON-NLS + } } } else { logger.log(Level.WARNING, "File has a null value " + prefetchFileName);//NON-NLS } - + } } catch (SQLException ex) { logger.log(Level.SEVERE, "Error while trying to read into a sqlite db.", ex);//NON-NLS @@ -312,74 +312,76 @@ final class ExtractPrefetch extends Extract { } } - /** - * Cycle thru the execution times list and only return a new list of times that are greater than zero. - * - * @param executionTimes - list of prefetch execution times 8 possible timestamps - * - * @return List of timestamps that are greater than zero - */ - - private List findNonZeroExecutionTimes(List executionTimes) { - List prefetchExecutionTimes = new ArrayList<>(); - for (Long executionTime : executionTimes) { // only add prefetch file entries that have an actual date associated with them - if (executionTime > 0) { - prefetchExecutionTimes.add(executionTime); - } - } - return prefetchExecutionTimes; - } - /** - * Create associated artifacts using file path name and the artifact it associates with - * - * @param fileName the filename to search for + /** + * Cycle thru the execution times list and only return a new list of times + * that are greater than zero. + * + * @param executionTimes - list of prefetch execution times 8 possible + * timestamps + * + * @return List of timestamps that are greater than zero + */ + private List findNonZeroExecutionTimes(List executionTimes) { + List prefetchExecutionTimes = new ArrayList<>(); + for (Long executionTime : executionTimes) { // only add prefetch file entries that have an actual date associated with them + if (executionTime > 0) { + prefetchExecutionTimes.add(executionTime); + } + } + return prefetchExecutionTimes; + } + + /** + * Create associated artifacts using file path name and the artifact it + * associates with + * + * @param fileName the filename to search for * @param filePathName file and path of object being associated with - * @param bba blackboard artifact to associate with - * @param dataSource - The datasource to search in - * - * @returnv BlackboardArtifact or a null value - */ + * @param bba blackboard artifact to associate with + * @param dataSource - The datasource to search in + * + * @returnv BlackboardArtifact or a null value + */ private BlackboardArtifact createAssociatedArtifact(String fileName, String filePathName, BlackboardArtifact bba, Content dataSource) { AbstractFile sourceFile = getAbstractFile(fileName, filePathName, dataSource); if (sourceFile != null) { Collection bbattributes2 = new ArrayList<>(); bbattributes2.addAll(Arrays.asList( - new BlackboardAttribute(TSK_ASSOCIATED_ARTIFACT, this.getName(), - bba.getArtifactID()))); + new BlackboardAttribute(TSK_ASSOCIATED_ARTIFACT, this.getName(), + bba.getArtifactID()))); BlackboardArtifact associatedObjectBba = createArtifactWithAttributes(TSK_ASSOCIATED_OBJECT, sourceFile, bbattributes2); if (associatedObjectBba != null) { return associatedObjectBba; } } - + return null; } - + /** * Get the abstract file for the prefetch file. - * - * @param fileName - File name of the prefetch file to find. - * @param filePath - Path where the prefetch file is located. + * + * @param fileName - File name of the prefetch file to find. + * @param filePath - Path where the prefetch file is located. * @param dataSource - The datasource to search in - * + * * @return Abstract file of the prefetch file. - * + * */ - AbstractFile getAbstractFile(String fileName, String filePath, Content dataSource) { List files; - + FileManager fileManager = Case.getCurrentCase().getServices().getFileManager(); try { files = fileManager.findFiles(dataSource, fileName); //NON-NLS - + } catch (TskCoreException ex) { logger.log(Level.WARNING, "Unable to find prefetch files.", ex); //NON-NLS return null; // No need to continue } - + for (AbstractFile pFile : files) { if (pFile.getParentPath().toLowerCase().endsWith(filePath.toLowerCase() + '/')) { @@ -388,7 +390,7 @@ final class ExtractPrefetch extends Extract { } return null; - + } - + } diff --git a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractRegistry.java b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractRegistry.java index 20acab7a87..7ff07455cc 100644 --- a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractRegistry.java +++ b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractRegistry.java @@ -168,11 +168,11 @@ class ExtractRegistry extends Extract { private Content dataSource; private IngestJobContext context; private Map userNameMap; - + private static final String SHELLBAG_ARTIFACT_NAME = "RA_SHELL_BAG"; //NON-NLS private static final String SHELLBAG_ATTRIBUTE_LAST_WRITE = "RA_SHELL_BAG_LAST_WRITE"; //NON-NLS - private static final String SHELLBAG_ATTRIBUTE_KEY= "RA_SHELL_BAG_KEY"; //NON-NLS - + private static final String SHELLBAG_ATTRIBUTE_KEY = "RA_SHELL_BAG_KEY"; //NON-NLS + BlackboardArtifact.Type shellBagArtifactType = null; BlackboardAttribute.Type shellBagKeyAttributeType = null; BlackboardAttribute.Type shellBagLastWriteAttributeType = null; @@ -246,15 +246,14 @@ class ExtractRegistry extends Extract { logger.log(Level.WARNING, msg, ex); this.addErrorMessage(this.getName() + ": " + msg); } - - + // find the user-specific ntuser-dat files try { allRegistryFiles.addAll(fileManager.findFiles(dataSource, "ntuser.dat")); //NON-NLS } catch (TskCoreException ex) { logger.log(Level.WARNING, "Error fetching 'ntuser.dat' file."); //NON-NLS } - + // find the user-specific ntuser-dat files try { allRegistryFiles.addAll(fileManager.findFiles(dataSource, "usrclass.dat")); //NON-NLS @@ -418,7 +417,7 @@ class ExtractRegistry extends Extract { fullType = "sam"; //NON-NLS } else if (regFilePath.toLowerCase().contains("security")) { //NON-NLS fullType = "security"; //NON-NLS - }else if (regFilePath.toLowerCase().contains("usrclass")) { //NON-NLS + } else if (regFilePath.toLowerCase().contains("usrclass")) { //NON-NLS fullType = "usrclass"; //NON-NLS } else { return regOutputFiles; @@ -444,9 +443,9 @@ class ExtractRegistry extends Extract { try { scanErrorLogs(errFilePath); } catch (IOException ex) { - logger.log(Level.SEVERE, "Unable to run RegRipper", ex); //NON-NLS - this.addErrorMessage(NbBundle.getMessage(this.getClass(), "ExtractRegistry.execRegRip.errMsg.failedAnalyzeRegFile", this.getName())); - } + logger.log(Level.SEVERE, String.format("Unable to run RegRipper on %s", regFilePath), ex); //NON-NLS + this.addErrorMessage(NbBundle.getMessage(this.getClass(), "ExtractRegistry.execRegRip.errMsg.failedAnalyzeRegFile", this.getName(), regFilePath)); + } } return regOutputFiles; } @@ -458,14 +457,14 @@ class ExtractRegistry extends Extract { while (line != null) { line = line.trim(); if (line.toLowerCase().contains("error") || line.toLowerCase().contains("@inc")) { - logger.log(Level.WARNING, "Regripper file {0} contains errors from run", errFilePath); //NON-NLS - + logger.log(Level.WARNING, "Regripper file {0} contains errors from run", errFilePath); //NON-NLS + } line = reader.readLine(); } } } - + private void executeRegRipper(List regRipperPath, Path regRipperHomeDir, String hiveFilePath, String hiveFileType, String outputFile, String errFile) { try { List commandLine = new ArrayList<>(); @@ -481,10 +480,10 @@ class ExtractRegistry extends Extract { processBuilder.directory(regRipperHomeDir.toFile()); // RegRipper 2.8 has to be run from its own directory processBuilder.redirectOutput(new File(outputFile)); processBuilder.redirectError(new File(errFile)); - ExecUtil.execute(processBuilder, new DataSourceIngestModuleProcessTerminator(context)); + ExecUtil.execute(processBuilder, new DataSourceIngestModuleProcessTerminator(context, true)); } catch (IOException ex) { - logger.log(Level.SEVERE, "Unable to run RegRipper", ex); //NON-NLS - this.addErrorMessage(NbBundle.getMessage(this.getClass(), "ExtractRegistry.execRegRip.errMsg.failedAnalyzeRegFile", this.getName())); + logger.log(Level.SEVERE, String.format("Error running RegRipper on %s", hiveFilePath), ex); //NON-NLS + this.addErrorMessage(NbBundle.getMessage(this.getClass(), "ExtractRegistry.execRegRip.errMsg.failedAnalyzeRegFile", this.getName(), hiveFilePath)); } } @@ -516,7 +515,7 @@ class ExtractRegistry extends Extract { String stringdoc = startdoc + result + enddoc; DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document doc = builder.parse(new InputSource(new StringReader(stringdoc))); - + // cycle through the elements in the doc Element oroot = doc.getDocumentElement(); NodeList children = oroot.getChildNodes(); @@ -750,33 +749,33 @@ class ExtractRegistry extends Extract { break; case "usb": //NON-NLS try { - Long usbMtime = Long.parseLong(artnode.getAttribute("mtime")); //NON-NLS - usbMtime = Long.valueOf(usbMtime.toString()); + Long usbMtime = Long.parseLong(artnode.getAttribute("mtime")); //NON-NLS + usbMtime = Long.valueOf(usbMtime.toString()); - BlackboardArtifact bbart = regFile.newArtifact(ARTIFACT_TYPE.TSK_DEVICE_ATTACHED); - bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_DATETIME, parentModuleName, usbMtime)); - String dev = artnode.getAttribute("dev"); //NON-NLS - String make = ""; - String model = dev; - if (dev.toLowerCase().contains("vid")) { //NON-NLS - USBInfo info = USB_MAPPER.parseAndLookup(dev); - if (info.getVendor() != null) { - make = info.getVendor(); - } - if (info.getProduct() != null) { - model = info.getProduct(); - } + BlackboardArtifact bbart = regFile.newArtifact(ARTIFACT_TYPE.TSK_DEVICE_ATTACHED); + bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_DATETIME, parentModuleName, usbMtime)); + String dev = artnode.getAttribute("dev"); //NON-NLS + String make = ""; + String model = dev; + if (dev.toLowerCase().contains("vid")) { //NON-NLS + USBInfo info = USB_MAPPER.parseAndLookup(dev); + if (info.getVendor() != null) { + make = info.getVendor(); + } + if (info.getProduct() != null) { + model = info.getProduct(); } - bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_DEVICE_MAKE, parentModuleName, make)); - bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_DEVICE_MODEL, parentModuleName, model)); - bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_DEVICE_ID, parentModuleName, value)); - bbart.addAttributes(bbattributes); - - newArtifacts.add(bbart); - } catch (TskCoreException ex) { - logger.log(Level.SEVERE, "Error adding device attached artifact to blackboard.", ex); //NON-NLS } - break; + bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_DEVICE_MAKE, parentModuleName, make)); + bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_DEVICE_MODEL, parentModuleName, model)); + bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_DEVICE_ID, parentModuleName, value)); + bbart.addAttributes(bbattributes); + + newArtifacts.add(bbart); + } catch (TskCoreException ex) { + logger.log(Level.SEVERE, "Error adding device attached artifact to blackboard.", ex); //NON-NLS + } + break; case "uninstall": //NON-NLS Long itemMtime = null; try { @@ -837,70 +836,70 @@ class ExtractRegistry extends Extract { case "ProfileList": //NON-NLS try { - String homeDir = value; - String sid = artnode.getAttribute("sid"); //NON-NLS - String username = artnode.getAttribute("username"); //NON-NLS - BlackboardArtifact bbart = null; - try { - //check if any of the existing artifacts match this username - ArrayList existingArtifacts = currentCase.getSleuthkitCase().getBlackboardArtifacts(ARTIFACT_TYPE.TSK_OS_ACCOUNT); - for (BlackboardArtifact artifact : existingArtifacts) { - if (artifact.getDataSource().getId() == regFile.getDataSourceObjectId()) { - BlackboardAttribute attribute = artifact.getAttribute(new BlackboardAttribute.Type(ATTRIBUTE_TYPE.TSK_USER_ID)); - if (attribute != null && attribute.getValueString().equals(sid)) { - bbart = artifact; - break; - } + String homeDir = value; + String sid = artnode.getAttribute("sid"); //NON-NLS + String username = artnode.getAttribute("username"); //NON-NLS + BlackboardArtifact bbart = null; + try { + //check if any of the existing artifacts match this username + ArrayList existingArtifacts = currentCase.getSleuthkitCase().getBlackboardArtifacts(ARTIFACT_TYPE.TSK_OS_ACCOUNT); + for (BlackboardArtifact artifact : existingArtifacts) { + if (artifact.getDataSource().getId() == regFile.getDataSourceObjectId()) { + BlackboardAttribute attribute = artifact.getAttribute(new BlackboardAttribute.Type(ATTRIBUTE_TYPE.TSK_USER_ID)); + if (attribute != null && attribute.getValueString().equals(sid)) { + bbart = artifact; + break; } } - } catch (TskCoreException ex) { - logger.log(Level.SEVERE, "Error getting existing os account artifact", ex); } - if (bbart == null) { - //create new artifact - bbart = regFile.newArtifact(ARTIFACT_TYPE.TSK_OS_ACCOUNT); + } catch (TskCoreException ex) { + logger.log(Level.SEVERE, "Error getting existing os account artifact", ex); + } + if (bbart == null) { + //create new artifact + bbart = regFile.newArtifact(ARTIFACT_TYPE.TSK_OS_ACCOUNT); + bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_USER_NAME, + parentModuleName, username)); + bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_USER_ID, + parentModuleName, sid)); + bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_PATH, + parentModuleName, homeDir)); + } else { + //add attributes to existing artifact + BlackboardAttribute bbattr = bbart.getAttribute(new BlackboardAttribute.Type(ATTRIBUTE_TYPE.TSK_USER_NAME)); + + if (bbattr == null) { bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_USER_NAME, parentModuleName, username)); - bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_USER_ID, - parentModuleName, sid)); + } + bbattr = bbart.getAttribute(new BlackboardAttribute.Type(ATTRIBUTE_TYPE.TSK_PATH)); + if (bbattr == null) { bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_PATH, parentModuleName, homeDir)); - } else { - //add attributes to existing artifact - BlackboardAttribute bbattr = bbart.getAttribute(new BlackboardAttribute.Type(ATTRIBUTE_TYPE.TSK_USER_NAME)); - - if (bbattr == null) { - bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_USER_NAME, - parentModuleName, username)); - } - bbattr = bbart.getAttribute(new BlackboardAttribute.Type(ATTRIBUTE_TYPE.TSK_PATH)); - if (bbattr == null) { - bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_PATH, - parentModuleName, homeDir)); - } } - bbart.addAttributes(bbattributes); - newArtifacts.add(bbart); - } catch (TskCoreException ex) { - logger.log(Level.SEVERE, "Error adding account artifact to blackboard.", ex); //NON-NLS } - break; + bbart.addAttributes(bbattributes); + newArtifacts.add(bbart); + } catch (TskCoreException ex) { + logger.log(Level.SEVERE, "Error adding account artifact to blackboard.", ex); //NON-NLS + } + break; case "NtuserNetwork": // NON-NLS try { - String localPath = artnode.getAttribute("localPath"); //NON-NLS - String remoteName = value; - BlackboardArtifact bbart = regFile.newArtifact(ARTIFACT_TYPE.TSK_REMOTE_DRIVE); - bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_LOCAL_PATH, - parentModuleName, localPath)); - bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_REMOTE_PATH, - parentModuleName, remoteName)); - bbart.addAttributes(bbattributes); - newArtifacts.add(bbart); - } catch (TskCoreException ex) { - logger.log(Level.SEVERE, "Error adding network artifact to blackboard.", ex); //NON-NLS - } - break; + String localPath = artnode.getAttribute("localPath"); //NON-NLS + String remoteName = value; + BlackboardArtifact bbart = regFile.newArtifact(ARTIFACT_TYPE.TSK_REMOTE_DRIVE); + bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_LOCAL_PATH, + parentModuleName, localPath)); + bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_REMOTE_PATH, + parentModuleName, remoteName)); + bbart.addAttributes(bbattributes); + newArtifacts.add(bbart); + } catch (TskCoreException ex) { + logger.log(Level.SEVERE, "Error adding network artifact to blackboard.", ex); //NON-NLS + } + break; case "SSID": // NON-NLS String adapter = artnode.getAttribute("adapter"); //NON-NLS try { @@ -947,13 +946,12 @@ class ExtractRegistry extends Extract { } } catch (IOException ex) { } - + postArtifacts(newArtifacts); } return false; } - private boolean parseSystemPluginOutput(String regfilePath, AbstractFile regAbstractFile) { File regfile = new File(regfilePath); try (BufferedReader reader = new BufferedReader(new FileReader(regfile))) { @@ -965,7 +963,7 @@ class ExtractRegistry extends Extract { parseBamKey(regAbstractFile, reader, Bundle.Registry_System_Bam()); } else if (line.toLowerCase().matches("^bthport v..*")) { parseBlueToothDevices(regAbstractFile, reader); - } + } line = reader.readLine(); } return true; @@ -974,21 +972,21 @@ class ExtractRegistry extends Extract { } catch (IOException ex) { logger.log(Level.WARNING, "Error reading the system hive: {0}", ex); //NON-NLS } - + return false; - + } - + /** - * Create recently used artifacts to parse the regripper plugin output, this + * Create recently used artifacts to parse the regripper plugin output, this * format is used in several diffent plugins - * + * * @param regFile registry file the artifact is associated with - * - * @param reader buffered reader to parse adobemru records - * + * + * @param reader buffered reader to parse adobemru records + * * @param comment string that will populate attribute TSK_COMMENT - * + * * @throws FileNotFound and IOException */ private void parseBlueToothDevices(AbstractFile regFile, BufferedReader reader) throws FileNotFoundException, IOException { @@ -996,11 +994,11 @@ class ExtractRegistry extends Extract { String line = reader.readLine(); while ((line != null) && (!line.contains(SECTION_DIVIDER))) { line = reader.readLine(); - + if (line != null) { line = line.trim(); } - + if ((line != null) && (line.toLowerCase().contains("device unique id"))) { // Columns are seperated by colons : // Data : Values @@ -1018,14 +1016,14 @@ class ExtractRegistry extends Extract { line = reader.readLine(); addBlueToothAttribute(line, attributes, TSK_DATETIME_ACCESSED); BlackboardArtifact bba = createArtifactWithAttributes(ARTIFACT_TYPE.TSK_BLUETOOTH_PAIRING, regFile, attributes); - if(bba != null) { - bbartifacts.add(bba); + if (bba != null) { + bbartifacts.add(bba); } // Read blank line between records then next read line is start of next block reader.readLine(); line = reader.readLine(); } - + if (line != null) { line = line.trim(); } @@ -1036,14 +1034,13 @@ class ExtractRegistry extends Extract { } } - private void addBlueToothAttribute(String line, Collection attributes, ATTRIBUTE_TYPE attributeType) { - if (line == null) { - return; - } - - String tokens[] = line.split(": "); - if (tokens.length > 1 && !tokens[1].isEmpty()) { + if (line == null) { + return; + } + + String tokens[] = line.split(": "); + if (tokens.length > 1 && !tokens[1].isEmpty()) { String tokenString = tokens[1]; if (attributeType.getDisplayName().toLowerCase().contains("date")) { String dateString = tokenString.toLowerCase().replace(" z", ""); @@ -1052,20 +1049,19 @@ class ExtractRegistry extends Extract { Long dateLong = Long.valueOf(0); try { Date newDate = dateFormat.parse(dateString); - dateLong = newDate.getTime()/1000; + dateLong = newDate.getTime() / 1000; } catch (ParseException ex) { // catching error and displaying date that could not be parsed // we set the timestamp to 0 and continue on processing logger.log(Level.WARNING, String.format("Failed to parse date/time %s for Bluetooth Last Seen attribute.", dateString), ex); //NON-NLS } - attributes.add(new BlackboardAttribute(attributeType, getName(), dateLong)); + attributes.add(new BlackboardAttribute(attributeType, getName(), dateLong)); } else { - attributes.add(new BlackboardAttribute(attributeType, getName(), tokenString)); + attributes.add(new BlackboardAttribute(attributeType, getName(), tokenString)); } - } -} + } + } - /** * Parse the output of the SAM regripper plugin to get additional Account * information @@ -1118,7 +1114,7 @@ class ExtractRegistry extends Extract { } } } - + //add remaining userinfos as accounts; for (Map userInfo : userInfoMap.values()) { BlackboardArtifact bbart = regAbstractFile.newArtifact(ARTIFACT_TYPE.TSK_OS_ACCOUNT); @@ -1153,14 +1149,14 @@ class ExtractRegistry extends Extract { /** * Creates the attribute list for the given user information and group list. - * - * @param userInfo Map of key\value pairs of user information - * @param groupList List of the groups that user belongs + * + * @param userInfo Map of key\value pairs of user information + * @param groupList List of the groups that user belongs * @param existingUser - * - * @return List - * - * @throws ParseException + * + * @return List + * + * @throws ParseException */ Collection getAttributesForAccount(Map userInfo, List groupList, boolean existingUser, AbstractFile regAbstractFile) throws ParseException { Collection bbattributes = new ArrayList<>(); @@ -1222,12 +1218,12 @@ class ExtractRegistry extends Extract { .createAccountFileInstance(Account.Type.EMAIL, value, getRAModuleName(), regAbstractFile); } catch (NoCurrentCaseException | TskCoreException ex) { - logger.log(Level.SEVERE, + logger.log(Level.SEVERE, String.format("Error adding email account with value " - + "%s, to the case database for file %s [objId=%d]", + + "%s, to the case database for file %s [objId=%d]", value, regAbstractFile.getName(), regAbstractFile.getId()), ex); } - + bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_EMAIL, getRAModuleName(), value)); } @@ -1307,7 +1303,7 @@ class ExtractRegistry extends Extract { return bbattributes; } - + /** * Read the User Information section of the SAM regripper plugin's output * and collect user account information from the file. @@ -1355,14 +1351,14 @@ class ExtractRegistry extends Extract { line = bufferedReader.readLine(); } } - + /** * Create recently used artifacts from NTUSER regripper files - * + * * @param regFileName name of the regripper output file - * - * @param regFile registry file the artifact is associated with - * + * + * @param regFile registry file the artifact is associated with + * * @throws FileNotFound and IOException */ private void createRecentlyUsedArtifacts(String regFileName, AbstractFile regFile) throws FileNotFoundException, IOException { @@ -1388,21 +1384,21 @@ class ExtractRegistry extends Extract { parseWinRARMRUList(regFile, reader, Bundle.Recently_Used_Artifacts_Winrar()); } else if (line.matches("^officedocs2010 v.*")) { parseOfficeDocs2010MRUList(regFile, reader, Bundle.Recently_Used_Artifacts_Officedocs()); - } + } line = reader.readLine(); } - } + } } - - /** + + /** * Create artifacts from BAM Regripper Plugin records - * + * * @param regFile registry file the artifact is associated with - * - * @param reader buffered reader to parse adobemru records - * + * + * @param reader buffered reader to parse adobemru records + * * @param comment string that will populate attribute TSK_COMMENT - * + * * @throws FileNotFound and IOException */ private void parseBamKey(AbstractFile regFile, BufferedReader reader, String comment) throws FileNotFoundException, IOException { @@ -1419,7 +1415,7 @@ class ExtractRegistry extends Extract { // Split the line into it parts based on delimiter of "|" // 1570493613|BAM|||\Device\HarddiskVolume3\Program Files\TechSmith\Snagit 2018\Snagit32.exe (S-1-5-21-3042408413-2583535980-1301764466-1001) String tokens[] = line.split("\\|"); - Long progRunDateTime = Long.valueOf(tokens[0]); + Long progRunDateTime = Long.valueOf(tokens[0]); // Split on " (S-" as this signifies a User SID, if S- not used then may have issues becuase of (x86) in path is valid. // We can add the S- back to the string that we split on since S- is a valid beginning of a User SID String fileNameSid[] = tokens[4].split("\\s+\\(S-"); @@ -1454,16 +1450,16 @@ class ExtractRegistry extends Extract { postArtifacts(bbartifacts); } } - + /** * Create recently used artifacts from adobemru Regripper Plugin records - * + * * @param regFile registry file the artifact is associated with - * - * @param reader buffered reader to parse adobemru records - * + * + * @param reader buffered reader to parse adobemru records + * * @param comment string that will populate attribute TSK_COMMENT - * + * * @throws FileNotFound and IOException */ private void parseAdobeMRUList(AbstractFile regFile, BufferedReader reader, String comment) throws FileNotFoundException, IOException { @@ -1482,22 +1478,22 @@ class ExtractRegistry extends Extract { // Split csv line, handles double quotes around individual file names // since file names can contain commas String tokens[] = line.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)"); - String fileName = tokens[1].substring(0, tokens[1].length() -1); + String fileName = tokens[1].substring(0, tokens[1].length() - 1); fileName = fileName.replace("\"", ""); if (fileName.charAt(0) == '/') { - fileName = fileName.substring(1,fileName.length() - 1); + fileName = fileName.substring(1, fileName.length() - 1); fileName = fileName.replaceFirst("/", ":/"); } // Check to see if more then 2 tokens, Date may not be populated, will default to 0 if (tokens.length > 2) { // Time in the format of 20200131104456-05'00' try { - String fileUsedTime = tokens[2].replaceAll("'",""); + String fileUsedTime = tokens[2].replaceAll("'", ""); Date usedDate = adobePluginDateFormat.parse(fileUsedTime); - adobeUsedTime = usedDate.getTime()/1000; + adobeUsedTime = usedDate.getTime() / 1000; } catch (ParseException ex) { - // catching error and displaying date that could not be parsed - // we set the timestamp to 0 and continue on processing + // catching error and displaying date that could not be parsed + // we set the timestamp to 0 and continue on processing logger.log(Level.WARNING, String.format("Failed to parse date/time %s for adobe file artifact.", tokens[2]), ex); //NON-NLS } } @@ -1506,13 +1502,13 @@ class ExtractRegistry extends Extract { attributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_DATETIME, getName(), adobeUsedTime)); attributes.add(new BlackboardAttribute(TSK_COMMENT, getName(), comment)); BlackboardArtifact bba = createArtifactWithAttributes(ARTIFACT_TYPE.TSK_RECENT_OBJECT, regFile, attributes); - if(bba != null) { - bbartifacts.add(bba); - fileName = fileName.replace("\0", ""); - bba = createAssociatedArtifact(FilenameUtils.normalize(fileName, true), bba); - if (bba != null) { - bbartifacts.add(bba); - } + if (bba != null) { + bbartifacts.add(bba); + fileName = fileName.replace("\0", ""); + bba = createAssociatedArtifact(FilenameUtils.normalize(fileName, true), bba); + if (bba != null) { + bbartifacts.add(bba); + } } line = reader.readLine(); } @@ -1523,16 +1519,17 @@ class ExtractRegistry extends Extract { postArtifacts(bbartifacts); } } - - /** - * Create recently used artifacts to parse the Media Player MRU regripper (mpmru) records - * + + /** + * Create recently used artifacts to parse the Media Player MRU regripper + * (mpmru) records + * * @param regFile registry file the artifact is associated with - * - * @param reader buffered reader to parse adobemru records - * + * + * @param reader buffered reader to parse adobemru records + * * @param comment string that will populate attribute TSK_COMMENT - * + * * @throws FileNotFound and IOException */ private void parseMediaPlayerMRUList(AbstractFile regFile, BufferedReader reader, String comment) throws FileNotFoundException, IOException { @@ -1553,16 +1550,16 @@ class ExtractRegistry extends Extract { attributes.add(new BlackboardAttribute(TSK_PATH, getName(), fileName)); attributes.add(new BlackboardAttribute(TSK_COMMENT, getName(), comment)); BlackboardArtifact bba = createArtifactWithAttributes(ARTIFACT_TYPE.TSK_RECENT_OBJECT, regFile, attributes); - if(bba != null) { - bbartifacts.add(bba); - bba = createAssociatedArtifact(fileName, bba); - if (bba != null) { - bbartifacts.add(bba); - bba = createAssociatedArtifact(FilenameUtils.normalize(fileName, true), bba); - if (bba != null) { - bbartifacts.add(bba); - } - } + if (bba != null) { + bbartifacts.add(bba); + bba = createAssociatedArtifact(fileName, bba); + if (bba != null) { + bbartifacts.add(bba); + bba = createAssociatedArtifact(FilenameUtils.normalize(fileName, true), bba); + if (bba != null) { + bbartifacts.add(bba); + } + } } line = reader.readLine(); } @@ -1573,16 +1570,17 @@ class ExtractRegistry extends Extract { postArtifacts(bbartifacts); } } - - /** - * Create recently used artifacts to parse the regripper plugin output, this format is used in several diffent plugins - * + + /** + * Create recently used artifacts to parse the regripper plugin output, this + * format is used in several diffent plugins + * * @param regFile registry file the artifact is associated with - * - * @param reader buffered reader to parse adobemru records - * + * + * @param reader buffered reader to parse adobemru records + * * @param comment string that will populate attribute TSK_COMMENT - * + * * @throws FileNotFound and IOException */ private void parseGenericMRUList(AbstractFile regFile, BufferedReader reader, String comment) throws FileNotFoundException, IOException { @@ -1604,12 +1602,12 @@ class ExtractRegistry extends Extract { attributes.add(new BlackboardAttribute(TSK_PATH, getName(), fileName)); attributes.add(new BlackboardAttribute(TSK_COMMENT, getName(), comment)); BlackboardArtifact bba = createArtifactWithAttributes(ARTIFACT_TYPE.TSK_RECENT_OBJECT, regFile, attributes); - if(bba != null) { - bbartifacts.add(bba); - bba = createAssociatedArtifact(FilenameUtils.normalize(fileName, true), bba); - if (bba != null) { - bbartifacts.add(bba); - } + if (bba != null) { + bbartifacts.add(bba); + bba = createAssociatedArtifact(FilenameUtils.normalize(fileName, true), bba); + if (bba != null) { + bbartifacts.add(bba); + } } line = reader.readLine(); } @@ -1620,16 +1618,17 @@ class ExtractRegistry extends Extract { postArtifacts(bbartifacts); } } - - /** - * Create recently used artifacts to parse the WinRAR Regripper plugin output - * + + /** + * Create recently used artifacts to parse the WinRAR Regripper plugin + * output + * * @param regFile registry file the artifact is associated with - * - * @param reader buffered reader to parse adobemru records - * + * + * @param reader buffered reader to parse adobemru records + * * @param comment string that will populate attribute TSK_COMMENT - * + * * @throws FileNotFound and IOException */ private void parseWinRARMRUList(AbstractFile regFile, BufferedReader reader, String comment) throws FileNotFoundException, IOException { @@ -1651,12 +1650,12 @@ class ExtractRegistry extends Extract { attributes.add(new BlackboardAttribute(TSK_PATH, getName(), fileName)); attributes.add(new BlackboardAttribute(TSK_COMMENT, getName(), comment)); BlackboardArtifact bba = createArtifactWithAttributes(ARTIFACT_TYPE.TSK_RECENT_OBJECT, regFile, attributes); - if(bba != null) { - bbartifacts.add(bba); - bba = createAssociatedArtifact(FilenameUtils.normalize(fileName, true), bba); - if (bba != null) { - bbartifacts.add(bba); - } + if (bba != null) { + bbartifacts.add(bba); + bba = createAssociatedArtifact(FilenameUtils.normalize(fileName, true), bba); + if (bba != null) { + bbartifacts.add(bba); + } } line = reader.readLine(); } @@ -1668,16 +1667,17 @@ class ExtractRegistry extends Extract { postArtifacts(bbartifacts); } } - - /** - * Create recently used artifacts to parse the runmru ArcHistory (7Zip) regripper plugin records - * + + /** + * Create recently used artifacts to parse the runmru ArcHistory (7Zip) + * regripper plugin records + * * @param regFile registry file the artifact is associated with - * - * @param reader buffered reader to parse adobemru records - * + * + * @param reader buffered reader to parse adobemru records + * * @param comment string that will populate attribute TSK_COMMENT - * + * * @throws FileNotFound and IOException */ private void parse7ZipMRU(AbstractFile regFile, BufferedReader reader, String comment) throws FileNotFoundException, IOException { @@ -1694,11 +1694,11 @@ class ExtractRegistry extends Extract { attributes.add(new BlackboardAttribute(TSK_COMMENT, getName(), comment)); BlackboardArtifact bba = createArtifactWithAttributes(ARTIFACT_TYPE.TSK_RECENT_OBJECT, regFile, attributes); if (bba != null) { - bbartifacts.add(bba); - bba = createAssociatedArtifact(FilenameUtils.normalize(fileName, true), bba); - if (bba != null) { - bbartifacts.add(bba); - } + bbartifacts.add(bba); + bba = createAssociatedArtifact(FilenameUtils.normalize(fileName, true), bba); + if (bba != null) { + bbartifacts.add(bba); + } } line = reader.readLine(); line = line.trim(); @@ -1708,16 +1708,17 @@ class ExtractRegistry extends Extract { postArtifacts(bbartifacts); } } - - /** - * Create recently used artifacts to parse the Office Documents 2010 records Regripper Plugin output - * + + /** + * Create recently used artifacts to parse the Office Documents 2010 records + * Regripper Plugin output + * * @param regFile registry file the artifact is associated with - * - * @param reader buffered reader to parse adobemru records - * + * + * @param reader buffered reader to parse adobemru records + * * @param comment string that will populate attribute TSK_COMMENT - * + * * @throws FileNotFound and IOException */ private void parseOfficeDocs2010MRUList(AbstractFile regFile, BufferedReader reader, String comment) throws FileNotFoundException, IOException { @@ -1734,7 +1735,7 @@ class ExtractRegistry extends Extract { // record has the following format // 1294283922|REG|||OfficeDocs2010 - F:\Windows_time_Rules_xp.doc String tokens[] = line.split("\\|"); - Long docDate = Long.valueOf(tokens[0]); + Long docDate = Long.valueOf(tokens[0]); String fileNameTokens[] = tokens[4].split(" - "); String fileName = fileNameTokens[1]; Collection attributes = new ArrayList<>(); @@ -1742,12 +1743,12 @@ class ExtractRegistry extends Extract { attributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_DATETIME, getName(), docDate)); attributes.add(new BlackboardAttribute(TSK_COMMENT, getName(), comment)); BlackboardArtifact bba = createArtifactWithAttributes(ARTIFACT_TYPE.TSK_RECENT_OBJECT, regFile, attributes); - if(bba != null) { - bbartifacts.add(bba); - bba = createAssociatedArtifact(FilenameUtils.normalize(fileName, true), bba); - if (bba != null) { - bbartifacts.add(bba); - } + if (bba != null) { + bbartifacts.add(bba); + bba = createAssociatedArtifact(FilenameUtils.normalize(fileName, true), bba); + if (bba != null) { + bbartifacts.add(bba); + } } line = reader.readLine(); line = line.trim(); @@ -1756,16 +1757,17 @@ class ExtractRegistry extends Extract { postArtifacts(bbartifacts); } } - + /** - * Create recently used artifacts to parse the Office trust records (trustrecords) Regipper plugin records - * + * Create recently used artifacts to parse the Office trust records + * (trustrecords) Regipper plugin records + * * @param regFile registry file the artifact is associated with - * - * @param reader buffered reader to parse adobemru records - * + * + * @param reader buffered reader to parse adobemru records + * * @param comment string that will populate attribute TSK_COMMENT - * + * * @throws FileNotFound and IOException */ private void parseOfficeTrustRecords(AbstractFile regFile, BufferedReader reader, String comment) throws FileNotFoundException, IOException { @@ -1779,8 +1781,8 @@ class ExtractRegistry extends Extract { line = reader.readLine(); line = line.trim(); usedTime = Long.valueOf(0); - if (!line.contains("**") && !line.contains("----------") && !line.contains("LastWrite") - && !line.contains(SECTION_DIVIDER) && !line.isEmpty() && !line.contains("TrustRecords")) { + if (!line.contains("**") && !line.contains("----------") && !line.contains("LastWrite") + && !line.contains(SECTION_DIVIDER) && !line.isEmpty() && !line.contains("TrustRecords")) { // Columns are // Date : / // Split line on " : " which is the record delimiter between position and file @@ -1790,12 +1792,12 @@ class ExtractRegistry extends Extract { fileName = fileName.replace("%USERPROFILE%", userProfile); // Time in the format of Wed May 31 14:33:03 2017 Z try { - String fileUsedTime = tokens[0].replaceAll(" Z",""); + String fileUsedTime = tokens[0].replaceAll(" Z", ""); Date usedDate = pluginDateFormat.parse(fileUsedTime); - usedTime = usedDate.getTime()/1000; + usedTime = usedDate.getTime() / 1000; } catch (ParseException ex) { - // catching error and displaying date that could not be parsed - // we set the timestamp to 0 and continue on processing + // catching error and displaying date that could not be parsed + // we set the timestamp to 0 and continue on processing logger.log(Level.WARNING, String.format("Failed to parse date/time %s for TrustRecords artifact.", tokens[0]), ex); //NON-NLS } Collection attributes = new ArrayList<>(); @@ -1803,12 +1805,12 @@ class ExtractRegistry extends Extract { attributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_DATETIME, getName(), usedTime)); attributes.add(new BlackboardAttribute(TSK_COMMENT, getName(), comment)); BlackboardArtifact bba = createArtifactWithAttributes(ARTIFACT_TYPE.TSK_RECENT_OBJECT, regFile, attributes); - if(bba != null) { - bbartifacts.add(bba); - bba = createAssociatedArtifact(FilenameUtils.normalize(fileName, true), bba); - if (bba != null) { - bbartifacts.add(bba); - } + if (bba != null) { + bbartifacts.add(bba); + bba = createAssociatedArtifact(FilenameUtils.normalize(fileName, true), bba); + if (bba != null) { + bbartifacts.add(bba); + } } line = line.trim(); } @@ -1819,14 +1821,15 @@ class ExtractRegistry extends Extract { } /** - * Create associated artifacts using file name and path and the artifact it associates with - * + * Create associated artifacts using file name and path and the artifact it + * associates with + * * @param filePathName file and path of object being associated with - * - * @param bba blackboard artifact to associate with - * - * @returnv BlackboardArtifact or a null value - */ + * + * @param bba blackboard artifact to associate with + * + * @returnv BlackboardArtifact or a null value + */ private BlackboardArtifact createAssociatedArtifact(String filePathName, BlackboardArtifact bba) { org.sleuthkit.autopsy.casemodule.services.FileManager fileManager = currentCase.getServices().getFileManager(); String fileName = FilenameUtils.getName(filePathName); @@ -1838,9 +1841,9 @@ class ExtractRegistry extends Extract { for (AbstractFile sourceFile : sourceFiles) { if (sourceFile.getParentPath().endsWith(filePath)) { Collection bbattributes2 = new ArrayList<>(); - bbattributes2.addAll(Arrays.asList( - new BlackboardAttribute(TSK_ASSOCIATED_ARTIFACT, this.getName(), - bba.getArtifactID()))); + bbattributes2.addAll(Arrays.asList( + new BlackboardAttribute(TSK_ASSOCIATED_ARTIFACT, this.getName(), + bba.getArtifactID()))); BlackboardArtifact associatedObjectBba = createArtifactWithAttributes(TSK_ASSOCIATED_OBJECT, sourceFile, bbattributes2); if (associatedObjectBba != null) { @@ -1854,16 +1857,16 @@ class ExtractRegistry extends Extract { // system anymore logger.log(Level.WARNING, String.format("Error finding actual file %s. file may not exist", filePathName)); //NON-NLS } - + return null; } - + /** * Create a map of userids to usernames from the OS Accounts. * * @param dataSource * - * @return A Map of userIDs and userNames + * @return A Map of userIDs and userNames * * @throws TskCoreException */ @@ -1883,10 +1886,10 @@ class ExtractRegistry extends Extract { userNameMap.put(userID, userName); } } - + return userNameMap; } - + /** * Gets the attribute for the given type from the given artifact. * @@ -1911,7 +1914,7 @@ class ExtractRegistry extends Extract { */ void createShellBagArtifacts(AbstractFile regFile, List shellbags) throws TskCoreException { List artifacts = new ArrayList<>(); - try{ + try { for (ShellBag bag : shellbags) { Collection attributes = new ArrayList<>(); BlackboardArtifact artifact = regFile.newArtifact(getShellBagArtifact().getTypeID()); @@ -1959,8 +1962,8 @@ class ExtractRegistry extends Extract { private BlackboardArtifact.Type getShellBagArtifact() throws TskCoreException { if (shellBagArtifactType == null) { shellBagArtifactType = tskCase.getArtifactType(SHELLBAG_ARTIFACT_NAME); - - if(shellBagArtifactType == null) { + + if (shellBagArtifactType == null) { try { tskCase.addBlackboardArtifactType(SHELLBAG_ARTIFACT_NAME, Bundle.Shellbag_Artifact_Display_Name()); //NON-NLS } catch (TskDataException ex) { @@ -1986,9 +1989,9 @@ class ExtractRegistry extends Extract { private BlackboardAttribute.Type getLastWriteAttribute() throws TskCoreException { if (shellBagLastWriteAttributeType == null) { try { - shellBagLastWriteAttributeType = tskCase.addArtifactAttributeType(SHELLBAG_ATTRIBUTE_LAST_WRITE, - BlackboardAttribute.TSK_BLACKBOARD_ATTRIBUTE_VALUE_TYPE.DATETIME, - Bundle.Shellbag_Last_Write_Attribute_Display_Name()); + shellBagLastWriteAttributeType = tskCase.addArtifactAttributeType(SHELLBAG_ATTRIBUTE_LAST_WRITE, + BlackboardAttribute.TSK_BLACKBOARD_ATTRIBUTE_VALUE_TYPE.DATETIME, + Bundle.Shellbag_Last_Write_Attribute_Display_Name()); } catch (TskDataException ex) { // Attribute already exists get it from the case shellBagLastWriteAttributeType = tskCase.getAttributeType(SHELLBAG_ATTRIBUTE_LAST_WRITE); @@ -2008,9 +2011,9 @@ class ExtractRegistry extends Extract { private BlackboardAttribute.Type getKeyAttribute() throws TskCoreException { if (shellBagKeyAttributeType == null) { try { - shellBagKeyAttributeType = tskCase.addArtifactAttributeType(SHELLBAG_ATTRIBUTE_KEY, - BlackboardAttribute.TSK_BLACKBOARD_ATTRIBUTE_VALUE_TYPE.STRING, - Bundle.Shellbag_Key_Attribute_Display_Name()); + shellBagKeyAttributeType = tskCase.addArtifactAttributeType(SHELLBAG_ATTRIBUTE_KEY, + BlackboardAttribute.TSK_BLACKBOARD_ATTRIBUTE_VALUE_TYPE.STRING, + Bundle.Shellbag_Key_Attribute_Display_Name()); } catch (TskDataException ex) { // The attribute already exists get it from the case shellBagKeyAttributeType = tskCase.getAttributeType(SHELLBAG_ATTRIBUTE_KEY); @@ -2018,15 +2021,15 @@ class ExtractRegistry extends Extract { } return shellBagKeyAttributeType; } - - /** + + /** * Maps the user groups to the sid that are a part of them. - * + * * @param bufferedReader - * + * * @return A map if sid and the groups they map too - * - * @throws IOException + * + * @throws IOException */ Map> readGroups(BufferedReader bufferedReader) throws IOException { Map> groupMap = new HashMap<>(); @@ -2069,12 +2072,11 @@ class ExtractRegistry extends Extract { } /** - * Gets the key value from user account strings of the format - * key:value or + * Gets the key value from user account strings of the format key:value or * --> value - * + * * @param line String to parse - * + * * @return key value pair */ private Map.Entry getSAMKeyValue(String line) { @@ -2102,7 +2104,7 @@ class ExtractRegistry extends Extract { return returnValue; } - + @Override public void process(Content dataSource, IngestJobContext context, DataSourceIngestModuleProgress progressBar) { this.dataSource = dataSource; diff --git a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractSru.java b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractSru.java index 77dac6f22c..fb85593953 100644 --- a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractSru.java +++ b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractSru.java @@ -1,4 +1,4 @@ - /* +/* * * Autopsy Forensic Browser * @@ -54,10 +54,9 @@ import static org.sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE.TSK_ASS import org.sleuthkit.datamodel.Content; import org.sleuthkit.datamodel.TskCoreException; - /** - * Extract the System Resource Usage database to a temp directory so it can be parsed into a SQLite db - * and then brought into extracted content + * Extract the System Resource Usage database to a temp directory so it can be + * parsed into a SQLite db and then brought into extracted content */ final class ExtractSru extends Extract { @@ -69,7 +68,6 @@ final class ExtractSru extends Extract { private static final String NETWORK_USAGE_SOURCE_NAME = "System Resource Usage - Network Usage"; // private static final String ARTIFACT_ATTRIBUTE_NAME = "TSK_ARTIFACT_NAME"; //NON-NLS - private static final String MODULE_NAME = "extractSRU"; //NON-NLS private static final String SRU_TOOL_FOLDER = "markmckinnon"; //NON-NLS @@ -79,7 +77,7 @@ final class ExtractSru extends Extract { private static final String SRU_TOOL_NAME_MAC = "Export_srudb_macos"; //NON-NLS private static final String SRU_OUTPUT_FILE_NAME = "Output.txt"; //NON-NLS private static final String SRU_ERROR_FILE_NAME = "Error.txt"; //NON-NLS - + private static final Map applicationFilesFound = new HashMap<>(); @Messages({ @@ -93,7 +91,7 @@ final class ExtractSru extends Extract { "ExtractSru_error_finding_export_srudb_program=Error finding export_srudb program", "ExtractSru_process_error_executing_export_srudb_program=Error running export_srudb program" }) - + @Override void process(Content dataSource, IngestJobContext context, DataSourceIngestModuleProgress progressBar) { @@ -107,11 +105,11 @@ final class ExtractSru extends Extract { String tempDirPath = RAImageIngestModule.getRATempPath(Case.getCurrentCase(), "sru"); //NON-NLS String softwareHiveFileName = getSoftwareHiveFile(dataSource, tempDirPath); - - if (softwareHiveFileName == null) { + + if (softwareHiveFileName == null) { return; } - + AbstractFile sruAbstractFile = getSruFile(dataSource, tempDirPath); if (sruAbstractFile == null) { @@ -130,7 +128,7 @@ final class ExtractSru extends Extract { } try { - String modOutFile = modOutPath + File.separator + sruAbstractFile.getId() + "_srudb.db3"; + String modOutFile = modOutPath + File.separator + sruAbstractFile.getId() + "_srudb.db3"; String sruFileName = tempDirPath + File.separator + sruAbstractFile.getId() + "_" + sruAbstractFile.getName(); extractSruFiles(sruDumper, sruFileName, modOutFile, tempDirPath, softwareHiveFileName); @@ -140,11 +138,11 @@ final class ExtractSru extends Extract { createNetUsageArtifacts(modOutFile, sruAbstractFile); createAppUsageArtifacts(modOutFile, sruAbstractFile); } catch (IOException ex) { + logger.log(Level.SEVERE, "Error processing SRUDB.dat file", ex); //NON-NLS= this.addErrorMessage(Bundle.ExtractSru_process_error_executing_export_srudb_program()); - logger.log(Level.SEVERE, "SRUDB.dat file not found"); //NON-NLS - } + } } - + @Messages({ "ExtractSru_process_errormsg_find_software_hive=Unable to find SOFTWARE HIVE file", "ExtractSru_process_errormsg_write_software_hive=Unable to write SOFTWARE HIVE file" @@ -152,11 +150,11 @@ final class ExtractSru extends Extract { /** * Extract the SOFTWARE hive file to the temp directory - * - * @param dataSource datasource where software hiive is + * + * @param dataSource datasource where software hiive is * @param tempDirPath temp directory to write file to - * - * @return Software hive file location + * + * @return Software hive file location */ String getSoftwareHiveFile(Content dataSource, String tempDirPath) { FileManager fileManager = Case.getCurrentCase().getServices().getFileManager(); @@ -196,17 +194,17 @@ final class ExtractSru extends Extract { }) /** * Extract the SOFTWARE hive file to the temp directory - * - * @param dataSource datasource where software hiive is + * + * @param dataSource datasource where software hiive is * @param tempDirPath temp directory to write file to - * - * @return Software hive file location + * + * @return Software hive file location */ AbstractFile getSruFile(Content dataSource, String tempDirPath) { FileManager fileManager = Case.getCurrentCase().getServices().getFileManager(); - + List sruFiles; - + try { sruFiles = fileManager.findFiles(dataSource, "SRUDB.DAT"); //NON-NLS } catch (TskCoreException ex) { @@ -216,7 +214,7 @@ final class ExtractSru extends Extract { } AbstractFile sruAbstractFile = null; - + for (AbstractFile sruFile : sruFiles) { String sruFileName = tempDirPath + File.separator + sruFile.getId() + "_" + sruFile.getName(); @@ -258,7 +256,7 @@ final class ExtractSru extends Extract { processBuilder.redirectOutput(outputFilePath.toFile()); processBuilder.redirectError(errFilePath.toFile()); - ExecUtil.execute(processBuilder, new DataSourceIngestModuleProcessTerminator(context)); + ExecUtil.execute(processBuilder, new DataSourceIngestModuleProcessTerminator(context, true)); } private String getPathForSruDumper() { @@ -267,13 +265,13 @@ final class ExtractSru extends Extract { if (PlatformUtil.is64BitOS()) { path = Paths.get(SRU_TOOL_FOLDER, SRU_TOOL_NAME_WINDOWS_64); } else { - path = Paths.get(SRU_TOOL_FOLDER, SRU_TOOL_NAME_WINDOWS_32); + path = Paths.get(SRU_TOOL_FOLDER, SRU_TOOL_NAME_WINDOWS_32); } } else { if ("Linux".equals(PlatformUtil.getOSName())) { path = Paths.get(SRU_TOOL_FOLDER, SRU_TOOL_NAME_LINUX); } else { - path = Paths.get(SRU_TOOL_FOLDER, SRU_TOOL_NAME_MAC); + path = Paths.get(SRU_TOOL_FOLDER, SRU_TOOL_NAME_MAC); } } File sruToolFile = InstalledFileLocator.getDefault().locate(path.toString(), @@ -288,9 +286,9 @@ final class ExtractSru extends Extract { private void findSruExecutedFiles(String sruDb, Content dataSource) { org.sleuthkit.autopsy.casemodule.services.FileManager fileManager = currentCase.getServices().getFileManager(); - + String sqlStatement = "SELECT DISTINCT SUBSTR(LTRIM(IdBlob, '\\Device\\HarddiskVolume'), INSTR(LTRIM(IdBlob, '\\Device\\HarddiskVolume'), '\\')) " - + " application_name, idBlob source_name FROM SruDbIdMapTable WHERE idType = 0 AND idBlob NOT LIKE '!!%'"; //NON-NLS + + " application_name, idBlob source_name FROM SruDbIdMapTable WHERE idType = 0 AND idBlob NOT LIKE '!!%'"; //NON-NLS try (SQLiteDBConnect tempdbconnect = new SQLiteDBConnect("org.sqlite.JDBC", "jdbc:sqlite:" + sruDb); //NON-NLS ResultSet resultSet = tempdbconnect.executeQry(sqlStatement)) { @@ -316,10 +314,10 @@ final class ExtractSru extends Extract { sourceFiles = fileManager.findFiles(dataSource, fileName, filePath); //NON-NLS for (AbstractFile sourceFile : sourceFiles) { if (sourceFile.getParentPath().endsWith(filePath)) { - applicationFilesFound.put(sourceName.toLowerCase(), sourceFile); + applicationFilesFound.put(sourceName.toLowerCase(), sourceFile); } } - + } catch (TskCoreException ex) { logger.log(Level.WARNING, String.format("Error finding actual file %s. file may not exist", normalizePathName)); //NON-NLS } @@ -329,12 +327,12 @@ final class ExtractSru extends Extract { } } - + private void createNetUsageArtifacts(String sruDb, AbstractFile sruAbstractFile) { List bba = new ArrayList<>(); String sqlStatement = "SELECT STRFTIME('%s', timestamp) ExecutionTime, Application_Name, User_Name, " - + " bytesSent, BytesRecvd FROM network_Usage , SruDbIdMapTable " + + " bytesSent, BytesRecvd FROM network_Usage , SruDbIdMapTable " + " where appId = IdIndex and IdType = 0 order by ExecutionTime;"; //NON-NLS try (SQLiteDBConnect tempdbconnect = new SQLiteDBConnect("org.sqlite.JDBC", "jdbc:sqlite:" + sruDb); //NON-NLS @@ -359,7 +357,7 @@ final class ExtractSru extends Extract { applicationName),//NON-NLS new BlackboardAttribute( BlackboardAttribute.ATTRIBUTE_TYPE.TSK_USER_NAME, getName(), - userName), + userName), new BlackboardAttribute( BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DATETIME, getName(), executionTime), @@ -425,7 +423,7 @@ final class ExtractSru extends Extract { new BlackboardAttribute( BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DATETIME, getName(), executionTime), - new BlackboardAttribute( + new BlackboardAttribute( BlackboardAttribute.ATTRIBUTE_TYPE.TSK_COMMENT, getName(), APPLICATION_USAGE_SOURCE_NAME)); try { @@ -444,37 +442,38 @@ final class ExtractSru extends Extract { } catch (SQLException ex) { logger.log(Level.SEVERE, "Error while trying to read into a sqlite db.", ex);//NON-NLS } - + try { blackboard.postArtifacts(bba, MODULE_NAME); } catch (Blackboard.BlackboardException ex) { logger.log(Level.SEVERE, "Error Posting Artifact.", ex);//NON-NLS } } - + /** - * Create associated artifacts using file path name and the artifact it associates with - * + * Create associated artifacts using file path name and the artifact it + * associates with + * * @param filePathName file and path of object being associated with - * - * @param bba blackboard artifact to associate with - * - * @returnv BlackboardArtifact or a null value - */ + * + * @param bba blackboard artifact to associate with + * + * @returnv BlackboardArtifact or a null value + */ private BlackboardArtifact createAssociatedArtifact(String filePathName, BlackboardArtifact bba) { if (applicationFilesFound.containsKey(filePathName)) { AbstractFile sourceFile = applicationFilesFound.get(filePathName); Collection bbattributes2 = new ArrayList<>(); bbattributes2.addAll(Arrays.asList( - new BlackboardAttribute(TSK_ASSOCIATED_ARTIFACT, this.getName(), - bba.getArtifactID()))); + new BlackboardAttribute(TSK_ASSOCIATED_ARTIFACT, this.getName(), + bba.getArtifactID()))); BlackboardArtifact associatedObjectBba = createArtifactWithAttributes(TSK_ASSOCIATED_OBJECT, sourceFile, bbattributes2); if (associatedObjectBba != null) { return associatedObjectBba; } } - + return null; } diff --git a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/SEUQAMappings.xml b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/SEUQAMappings.xml index 65e97df9c1..4cedc25d2b 100644 --- a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/SEUQAMappings.xml +++ b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/SEUQAMappings.xml @@ -12,7 +12,7 @@ Each splitToken contains a single mapping of a raw URL substring to its regex eq SearchEngine: engine: The engines basic name - domainSubstring: The domain of the URL such that it can uniquely be identified as given engine. + domainSubstring: The domain of the URL such that it can be identified as given engine. Should not have leading or trailing '.' splitToken: plainToken: The string in the URL that is immediately followed by the actual query. @@ -25,81 +25,119 @@ splitToken: --> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/SearchEngineURLQueryAnalyzer.java b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/SearchEngineURLQueryAnalyzer.java index eeb6e5a987..0dde950a05 100644 --- a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/SearchEngineURLQueryAnalyzer.java +++ b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/SearchEngineURLQueryAnalyzer.java @@ -22,10 +22,15 @@ import java.io.File; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; +import java.util.Arrays; import java.util.ArrayList; import java.util.Collection; +import java.util.HashSet; import java.util.List; import java.util.logging.Level; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.Set; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; @@ -54,7 +59,7 @@ import org.xml.sax.SAXException; * artifacts, and extracting search text from them. * * - * To add search engines, edit SearchEngines.xml under RecentActivity + * To add search engines, edit SEUQAMappings.xml under RecentActivity * */ @NbBundle.Messages({ @@ -107,11 +112,13 @@ class SearchEngineURLQueryAnalyzer extends Extract { private final String engineName; private final String domainSubstring; private final List keyPairs; + private final Pattern domainRegexPattern; private int count; SearchEngine(String engineName, String domainSubstring, List keyPairs) { this.engineName = engineName; this.domainSubstring = domainSubstring; + domainRegexPattern = Pattern.compile("^(.*[./])?" + domainSubstring + "([./].*)?$"); this.keyPairs = keyPairs; count = 0; } @@ -127,6 +134,10 @@ class SearchEngineURLQueryAnalyzer extends Extract { String getDomainSubstring() { return domainSubstring; } + + Pattern getDomainRegexPattern() { + return domainRegexPattern; + } int getTotal() { return count; @@ -202,20 +213,21 @@ class SearchEngineURLQueryAnalyzer extends Extract { * * @param domain domain as part of the URL * - * @return supported search engine the domain belongs to or null if no match - * is found + * @return supported search engine(s) the domain belongs to (list may be empty) * */ - private static SearchEngineURLQueryAnalyzer.SearchEngine getSearchEngineFromUrl(String domain) { + private static Collection getSearchEngineFromUrl(String domain) { + List supportedEngines = new ArrayList<>(); if (engines == null) { - return null; + return supportedEngines; } for (SearchEngine engine : engines) { - if (domain.contains(engine.getDomainSubstring())) { - return engine; + Matcher matcher = engine.getDomainRegexPattern().matcher(domain); + if (matcher.matches()) { + supportedEngines.add(engine); } } - return null; + return supportedEngines; } /** @@ -294,8 +306,9 @@ class SearchEngineURLQueryAnalyzer extends Extract { int totalQueries = 0; try { //from blackboard_artifacts - Collection listArtifacts = currentCase.getSleuthkitCase().getMatchingArtifacts("WHERE (blackboard_artifacts.artifact_type_id = '" + ARTIFACT_TYPE.TSK_WEB_BOOKMARK.getTypeID() //NON-NLS - + "' OR blackboard_artifacts.artifact_type_id = '" + ARTIFACT_TYPE.TSK_WEB_HISTORY.getTypeID() + "') "); //List of every 'web_history' and 'bookmark' artifact NON-NLS + Collection listArtifacts = currentCase.getSleuthkitCase().getBlackboard().getArtifacts( + Arrays.asList(new BlackboardArtifact.Type(ARTIFACT_TYPE.TSK_WEB_BOOKMARK), new BlackboardArtifact.Type(ARTIFACT_TYPE.TSK_WEB_HISTORY)), + Arrays.asList(dataSource.getId())); logger.log(Level.INFO, "Processing {0} blackboard artifacts.", listArtifacts.size()); //NON-NLS for (BlackboardArtifact artifact : listArtifacts) { @@ -304,51 +317,54 @@ class SearchEngineURLQueryAnalyzer extends Extract { } //initializing default attributes - String query = ""; String searchEngineDomain = ""; String browser = ""; long last_accessed = -1; - long fileId = artifact.getObjectID(); - boolean isFromSource = tskCase.isFileFromSource(dataSource, fileId); - if (!isFromSource) { - //File was from a different dataSource. Skipping. - continue; - } - - AbstractFile file = tskCase.getAbstractFileById(fileId); + AbstractFile file = tskCase.getAbstractFileById(artifact.getObjectID()); if (file == null) { continue; } - SearchEngineURLQueryAnalyzer.SearchEngine se = null; - //from blackboard_attributes - Collection listAttributes = currentCase.getSleuthkitCase().getMatchingAttributes("WHERE artifact_id = " + artifact.getArtifactID()); //NON-NLS - - for (BlackboardAttribute attribute : listAttributes) { - if (attribute.getAttributeType().getTypeID() == BlackboardAttribute.ATTRIBUTE_TYPE.TSK_URL.getTypeID()) { - final String urlString = attribute.getValueString(); - se = getSearchEngineFromUrl(urlString); - if (se == null) { - break; - } - - query = extractSearchEngineQuery(se, attribute.getValueString()); - if (query.equals("")) //False positive match, artifact was not a query. NON-NLS - { - break; - } - - } else if (attribute.getAttributeType().getTypeID() == BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PROG_NAME.getTypeID()) { - browser = attribute.getValueString(); - } else if (attribute.getAttributeType().getTypeID() == BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DOMAIN.getTypeID()) { - searchEngineDomain = attribute.getValueString(); - } else if (attribute.getAttributeType().getTypeID() == BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DATETIME_ACCESSED.getTypeID()) { - last_accessed = attribute.getValueLong(); + // Try search engines on the URL to see if any produce a search string + Set searchQueries = new HashSet<>(); + BlackboardAttribute urlAttr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_URL)); + if (urlAttr == null) { + continue; + } + + final String urlString = urlAttr.getValueString(); + Collection possibleSearchEngines = getSearchEngineFromUrl(urlString); + for (SearchEngineURLQueryAnalyzer.SearchEngine se : possibleSearchEngines) { + String query = extractSearchEngineQuery(se, urlString); + // If we have a non-empty query string, add it to the list + if ( !query.equals("")) { + searchQueries.add(query); + se.increment(); } } + + // If we didn't extract any search queries, go on to the next artifact + if (searchQueries.isEmpty()) { + continue; + } + + // Extract the rest of the fields needed for the web search artifact + BlackboardAttribute browserAttr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PROG_NAME)); + if (browserAttr != null) { + browser = browserAttr.getValueString(); + } + BlackboardAttribute domainAttr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DOMAIN)); + if (domainAttr != null) { + searchEngineDomain = domainAttr.getValueString(); + } + BlackboardAttribute lastAccessAttr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DATETIME_ACCESSED)); + if (lastAccessAttr != null) { + last_accessed = lastAccessAttr.getValueLong(); + } - if (se != null && !query.equals("")) { //NON-NLS + // Make an artifact for each distinct query + for (String query : searchQueries) { // If date doesn't exist, change to 0 (instead of 1969) if (last_accessed == -1) { last_accessed = 0; @@ -367,7 +383,6 @@ class SearchEngineURLQueryAnalyzer extends Extract { NbBundle.getMessage(this.getClass(), "SearchEngineURLQueryAnalyzer.parentModuleName"), last_accessed)); postArtifact(createArtifactWithAttributes(ARTIFACT_TYPE.TSK_WEB_SEARCH_QUERY, file, bbattributes)); - se.increment(); ++totalQueries; } } diff --git a/Running_Linux_OSX.txt b/Running_Linux_OSX.txt index 0ada2fd44c..c130e2f147 100644 --- a/Running_Linux_OSX.txt +++ b/Running_Linux_OSX.txt @@ -9,6 +9,43 @@ The following need to be done at least once. They do not need to be repeated for -- Linux: % sudo apt-get install testdisk -- OS X: % brew install testdisk +- (Optional) Install ImageMagick for Apple's High Efficiency Photo (HEIC/HEIF) support. +-- OS X: % brew install imagemagick +-- Linux: + % sudo sed -Ei 's/^# deb-src /deb-src /' /etc/apt/sources.list + + % sudo apt-get update + % sudo apt-get install build-essential autoconf libtool git-core + % sudo apt-get build-dep imagemagick libmagickcore-dev libde265 libheif + + % cd /usr/src/ + + % sudo git clone https://github.com/strukturag/libde265.git + % sudo git clone https://github.com/strukturag/libheif.git + + % cd libde265/ + % sudo ./autogen.sh + % sudo ./configure + % sudo make + % sudo make install + + % cd /usr/src/libheif/ + % sudo ./autogen.sh + % sudo ./configure + % sudo make + % sudo make install + + % cd /usr/src/ + % sudo wget https://www.imagemagick.org/download/ImageMagick.tar.gz + % sudo tar xf ImageMagick.tar.gz + + % cd ImageMagick-7* + % sudo ./configure --with-heic=yes + % sudo make + % sudo make install + + % sudo ldconfig + - Install the BellSoft Java 8 JRE and JavaFX 8 distribution and set JAVA_HOME. * The BellSoft distribution bundles OpenJDK and OpenJFX. Other distributions we have tried either don't bundle OpenJFX (AdoptOpenJDK) or don't include all necessary binaries (Amazon Corretto). diff --git a/Testing/nbproject/project.xml b/Testing/nbproject/project.xml index 2f8d76f7a1..b2f142ed65 100644 --- a/Testing/nbproject/project.xml +++ b/Testing/nbproject/project.xml @@ -47,7 +47,7 @@ 10 - 10.20 + 10.21 diff --git a/Tika/build.xml b/Tika/build.xml new file mode 100755 index 0000000000..86d8aa03cb --- /dev/null +++ b/Tika/build.xml @@ -0,0 +1,23 @@ + + + + + + Builds, tests, and runs the project org.sleuthkit.autopsy.Tika. + + + + + + + + + + + + + + + + + diff --git a/Tika/ivy.xml b/Tika/ivy.xml new file mode 100755 index 0000000000..b943e9bfe5 --- /dev/null +++ b/Tika/ivy.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/Tika/ivysettings.xml b/Tika/ivysettings.xml new file mode 100755 index 0000000000..9c3b496314 --- /dev/null +++ b/Tika/ivysettings.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/Tika/manifest.mf b/Tika/manifest.mf new file mode 100755 index 0000000000..770d374a5d --- /dev/null +++ b/Tika/manifest.mf @@ -0,0 +1,6 @@ +Manifest-Version: 1.0 +AutoUpdate-Show-In-Client: true +OpenIDE-Module: org.sleuthkit.autopsy.Tika +OpenIDE-Module-Localizing-Bundle: org/sleuthkit/autopsy/Tika/Bundle.properties +OpenIDE-Module-Specification-Version: 1.0 + diff --git a/Tika/nbproject/build-impl.xml b/Tika/nbproject/build-impl.xml new file mode 100755 index 0000000000..5d3f5f740d --- /dev/null +++ b/Tika/nbproject/build-impl.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + You must set 'suite.dir' to point to your containing module suite + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tika/nbproject/project.properties b/Tika/nbproject/project.properties new file mode 100755 index 0000000000..d6b88685c4 --- /dev/null +++ b/Tika/nbproject/project.properties @@ -0,0 +1,116 @@ +file.reference.animal-sniffer-annotations-1.18.jar=release\\modules\\ext\\animal-sniffer-annotations-1.18.jar +file.reference.apache-mime4j-core-0.8.3.jar=release\\modules\\ext\\apache-mime4j-core-0.8.3.jar +file.reference.apache-mime4j-dom-0.8.3.jar=release\\modules\\ext\\apache-mime4j-dom-0.8.3.jar +file.reference.asm-7.2.jar=release\\modules\\ext\\asm-7.2.jar +file.reference.bcmail-jdk15on-1.64.jar=release\\modules\\ext\\bcmail-jdk15on-1.64.jar +file.reference.bcpkix-jdk15on-1.64.jar=release\\modules\\ext\\bcpkix-jdk15on-1.64.jar +file.reference.bcprov-jdk15on-1.64.jar=release\\modules\\ext\\bcprov-jdk15on-1.64.jar +file.reference.boilerpipe-1.1.0.jar=release\\modules\\ext\\boilerpipe-1.1.0.jar +file.reference.bzip2-0.9.1.jar=release\\modules\\ext\\bzip2-0.9.1.jar +file.reference.c3p0-0.9.5.4.jar=release\\modules\\ext\\c3p0-0.9.5.4.jar +file.reference.cdm-4.5.5.jar=release\\modules\\ext\\cdm-4.5.5.jar +file.reference.checker-qual-2.8.1.jar=release\\modules\\ext\\checker-qual-2.8.1.jar +file.reference.commons-codec-1.13.jar=release\\modules\\ext\\commons-codec-1.13.jar +file.reference.commons-collections4-4.4.jar=release\\modules\\ext\\commons-collections4-4.4.jar +file.reference.commons-compress-1.19.jar=release\\modules\\ext\\commons-compress-1.19.jar +file.reference.commons-csv-1.7.jar=release\\modules\\ext\\commons-csv-1.7.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.9.jar=release\\modules\\ext\\commons-lang3-3.9.jar +file.reference.commons-math3-3.6.1.jar=release\\modules\\ext\\commons-math3-3.6.1.jar +file.reference.curvesapi-1.06.jar=release\\modules\\ext\\curvesapi-1.06.jar +file.reference.cxf-core-3.3.4.jar=release\\modules\\ext\\cxf-core-3.3.4.jar +file.reference.cxf-rt-frontend-jaxrs-3.3.4.jar=release\\modules\\ext\\cxf-rt-frontend-jaxrs-3.3.4.jar +file.reference.cxf-rt-rs-client-3.3.4.jar=release\\modules\\ext\\cxf-rt-rs-client-3.3.4.jar +file.reference.cxf-rt-security-3.3.4.jar=release\\modules\\ext\\cxf-rt-security-3.3.4.jar +file.reference.cxf-rt-transports-http-3.3.4.jar=release\\modules\\ext\\cxf-rt-transports-http-3.3.4.jar +file.reference.dec-0.1.2.jar=release\\modules\\ext\\dec-0.1.2.jar +file.reference.ehcache-core-2.6.2.jar=release\\modules\\ext\\ehcache-core-2.6.2.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.FastInfoset-1.2.16.jar=release\\modules\\ext\\FastInfoset-1.2.16.jar +file.reference.fontbox-2.0.17.jar=release\\modules\\ext\\fontbox-2.0.17.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.gson-2.8.6.jar=release\\modules\\ext\\gson-2.8.6.jar +file.reference.guava-28.1-jre.jar=release\\modules\\ext\\guava-28.1-jre.jar +file.reference.HikariCP-java7-2.4.13.jar=release\\modules\\ext\\HikariCP-java7-2.4.13.jar +file.reference.httpclient-4.5.10.jar=release\\modules\\ext\\httpclient-4.5.10.jar +file.reference.httpcore-4.4.12.jar=release\\modules\\ext\\httpcore-4.4.12.jar +file.reference.httpmime-4.5.10.jar=release\\modules\\ext\\httpmime-4.5.10.jar +file.reference.httpservices-4.5.5.jar=release\\modules\\ext\\httpservices-4.5.5.jar +file.reference.isoparser-1.1.22.jar=release\\modules\\ext\\isoparser-1.1.22.jar +file.reference.istack-commons-runtime-3.0.8.jar=release\\modules\\ext\\istack-commons-runtime-3.0.8.jar +file.reference.j2objc-annotations-1.3.jar=release\\modules\\ext\\j2objc-annotations-1.3.jar +file.reference.jackcess-3.0.1.jar=release\\modules\\ext\\jackcess-3.0.1.jar +file.reference.jackcess-encrypt-3.0.0.jar=release\\modules\\ext\\jackcess-encrypt-3.0.0.jar +file.reference.jackson-annotations-2.10.1.jar=release\\modules\\ext\\jackson-annotations-2.10.1.jar +file.reference.jackson-core-2.10.1.jar=release\\modules\\ext\\jackson-core-2.10.1.jar +file.reference.jackson-databind-2.10.1.jar=release\\modules\\ext\\jackson-databind-2.10.1.jar +file.reference.jai-imageio-core-1.4.0.jar=release\\modules\\ext\\jai-imageio-core-1.4.0.jar +file.reference.jakarta.activation-1.2.1.jar=release\\modules\\ext\\jakarta.activation-1.2.1.jar +file.reference.jakarta.ws.rs-api-2.1.5.jar=release\\modules\\ext\\jakarta.ws.rs-api-2.1.5.jar +file.reference.jakarta.xml.bind-api-2.3.2.jar=release\\modules\\ext\\jakarta.xml.bind-api-2.3.2.jar +file.reference.java-libpst-0.8.1.jar=release\\modules\\ext\\java-libpst-0.8.1.jar +file.reference.javax.annotation-api-1.3.2.jar=release\\modules\\ext\\javax.annotation-api-1.3.2.jar +file.reference.jaxb-runtime-2.3.2.jar=release\\modules\\ext\\jaxb-runtime-2.3.2.jar +file.reference.jbig2-imageio-3.0.2.jar=release\\modules\\ext\\jbig2-imageio-3.0.2.jar +file.reference.jcip-annotations-1.0.jar=release\\modules\\ext\\jcip-annotations-1.0.jar +file.reference.jcl-over-slf4j-1.7.28.jar=release\\modules\\ext\\jcl-over-slf4j-1.7.28.jar +file.reference.jcommander-1.35.jar=release\\modules\\ext\\jcommander-1.35.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.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.jna-5.5.0.jar=release\\modules\\ext\\jna-5.5.0.jar +file.reference.joda-time-2.2.jar=release\\modules\\ext\\joda-time-2.2.jar +file.reference.json-simple-1.1.1.jar=release\\modules\\ext\\json-simple-1.1.1.jar +file.reference.jsoup-1.12.1.jar=release\\modules\\ext\\jsoup-1.12.1.jar +file.reference.jsr305-3.0.2.jar=release\\modules\\ext\\jsr305-3.0.2.jar +file.reference.jul-to-slf4j-1.7.28.jar=release\\modules\\ext\\jul-to-slf4j-1.7.28.jar +file.reference.juniversalchardet-1.0.3.jar=release\\modules\\ext\\juniversalchardet-1.0.3.jar +file.reference.junrar-4.0.0.jar=release\\modules\\ext\\junrar-4.0.0.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.mchange-commons-java-0.2.15.jar=release\\modules\\ext\\mchange-commons-java-0.2.15.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.11.jar=release\\modules\\ext\\openjson-1.0.11.jar +file.reference.opennlp-tools-1.9.1.jar=release\\modules\\ext\\opennlp-tools-1.9.1.jar +file.reference.parso-2.0.11.jar=release\\modules\\ext\\parso-2.0.11.jar +file.reference.pdfbox-2.0.17.jar=release\\modules\\ext\\pdfbox-2.0.17.jar +file.reference.pdfbox-tools-2.0.17.jar=release\\modules\\ext\\pdfbox-tools-2.0.17.jar +file.reference.poi-4.1.1.jar=release\\modules\\ext\\poi-4.1.1.jar +file.reference.poi-ooxml-4.1.1.jar=release\\modules\\ext\\poi-ooxml-4.1.1.jar +file.reference.poi-ooxml-schemas-4.1.1.jar=release\\modules\\ext\\poi-ooxml-schemas-4.1.1.jar +file.reference.poi-scratchpad-4.1.1.jar=release\\modules\\ext\\poi-scratchpad-4.1.1.jar +file.reference.protobuf-java-3.11.0.jar=release\\modules\\ext\\protobuf-java-3.11.0.jar +file.reference.quartz-2.3.2.jar=release\\modules\\ext\\quartz-2.3.2.jar +file.reference.rome-1.12.2.jar=release\\modules\\ext\\rome-1.12.2.jar +file.reference.rome-utils-1.12.2.jar=release\\modules\\ext\\rome-utils-1.12.2.jar +file.reference.sentiment-analysis-parser-0.1.jar=release\\modules\\ext\\sentiment-analysis-parser-0.1.jar +file.reference.sis-feature-1.0.jar=release\\modules\\ext\\sis-feature-1.0.jar +file.reference.sis-metadata-1.0.jar=release\\modules\\ext\\sis-metadata-1.0.jar +file.reference.sis-netcdf-1.0.jar=release\\modules\\ext\\sis-netcdf-1.0.jar +file.reference.sis-referencing-1.0.jar=release\\modules\\ext\\sis-referencing-1.0.jar +file.reference.sis-storage-1.0.jar=release\\modules\\ext\\sis-storage-1.0.jar +file.reference.sis-utility-1.0.jar=release\\modules\\ext\\sis-utility-1.0.jar +file.reference.slf4j-api-1.7.28.jar=release\\modules\\ext\\slf4j-api-1.7.28.jar +file.reference.stax-ex-1.8.2.jar=release\\modules\\ext\\stax-ex-1.8.2.jar +file.reference.stax2-api-3.1.4.jar=release\\modules\\ext\\stax2-api-3.1.4.jar +file.reference.tagsoup-1.2.1.jar=release\\modules\\ext\\tagsoup-1.2.1.jar +file.reference.tika-core-1.23.jar=release\\modules\\ext\\tika-core-1.23.jar +file.reference.tika-parsers-1.23.jar=release\\modules\\ext\\tika-parsers-1.23.jar +file.reference.txw2-2.3.2.jar=release\\modules\\ext\\txw2-2.3.2.jar +file.reference.udunits-4.5.5.jar=release\\modules\\ext\\udunits-4.5.5.jar +file.reference.unit-api-1.0.jar=release\\modules\\ext\\unit-api-1.0.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.woodstox-core-5.0.3.jar=release\\modules\\ext\\woodstox-core-5.0.3.jar +file.reference.xercesImpl-2.12.0.jar=release\\modules\\ext\\xercesImpl-2.12.0.jar +file.reference.xml-apis-1.4.01.jar=release\\modules\\ext\\xml-apis-1.4.01.jar +file.reference.xmlbeans-3.1.0.jar=release\\modules\\ext\\xmlbeans-3.1.0.jar +file.reference.xmlschema-core-2.2.4.jar=release\\modules\\ext\\xmlschema-core-2.2.4.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 +javac.source=1.8 +javac.compilerargs=-Xlint -Xlint:-serial diff --git a/Tika/nbproject/project.xml b/Tika/nbproject/project.xml new file mode 100755 index 0000000000..7cd7a69bbf --- /dev/null +++ b/Tika/nbproject/project.xml @@ -0,0 +1,571 @@ + + + org.netbeans.modules.apisupport.project + + + org.sleuthkit.autopsy.Tika + + + + org.apache.tika + org.apache.tika.concurrent + org.apache.tika.config + org.apache.tika.detect + org.apache.tika.embedder + org.apache.tika.exception + org.apache.tika.extractor + org.apache.tika.fork + org.apache.tika.io + org.apache.tika.language + org.apache.tika.language.detect + org.apache.tika.language.translate + org.apache.tika.metadata + org.apache.tika.mime + org.apache.tika.parser + org.apache.tika.parser.apple + org.apache.tika.parser.asm + org.apache.tika.parser.audio + org.apache.tika.parser.captioning + org.apache.tika.parser.captioning.tf + org.apache.tika.parser.chm + org.apache.tika.parser.chm.accessor + org.apache.tika.parser.chm.assertion + org.apache.tika.parser.chm.core + org.apache.tika.parser.chm.exception + org.apache.tika.parser.chm.lzx + org.apache.tika.parser.code + org.apache.tika.parser.crypto + org.apache.tika.parser.csv + org.apache.tika.parser.ctakes + org.apache.tika.parser.dbf + org.apache.tika.parser.dif + org.apache.tika.parser.digest + org.apache.tika.parser.dwg + org.apache.tika.parser.envi + org.apache.tika.parser.epub + org.apache.tika.parser.executable + org.apache.tika.parser.external + org.apache.tika.parser.feed + org.apache.tika.parser.font + org.apache.tika.parser.gdal + org.apache.tika.parser.geo.topic + org.apache.tika.parser.geo.topic.gazetteer + org.apache.tika.parser.geoinfo + org.apache.tika.parser.grib + org.apache.tika.parser.hdf + org.apache.tika.parser.html + org.apache.tika.parser.html.charsetdetector + org.apache.tika.parser.html.charsetdetector.charsets + org.apache.tika.parser.hwp + org.apache.tika.parser.image + org.apache.tika.parser.image.xmp + org.apache.tika.parser.internal + org.apache.tika.parser.iptc + org.apache.tika.parser.isatab + org.apache.tika.parser.iwork + org.apache.tika.parser.iwork.iwana + org.apache.tika.parser.jdbc + org.apache.tika.parser.journal + org.apache.tika.parser.jpeg + org.apache.tika.parser.mail + org.apache.tika.parser.mat + org.apache.tika.parser.mbox + org.apache.tika.parser.microsoft + org.apache.tika.parser.microsoft.ooxml + org.apache.tika.parser.microsoft.ooxml.xps + org.apache.tika.parser.microsoft.ooxml.xslf + org.apache.tika.parser.microsoft.ooxml.xwpf + org.apache.tika.parser.microsoft.ooxml.xwpf.ml2006 + org.apache.tika.parser.microsoft.xml + org.apache.tika.parser.mp3 + org.apache.tika.parser.mp4 + org.apache.tika.parser.ner + org.apache.tika.parser.ner.corenlp + org.apache.tika.parser.ner.grobid + org.apache.tika.parser.ner.mitie + org.apache.tika.parser.ner.nltk + org.apache.tika.parser.ner.opennlp + org.apache.tika.parser.ner.regex + org.apache.tika.parser.netcdf + org.apache.tika.parser.ocr + org.apache.tika.parser.odf + org.apache.tika.parser.opendocument + org.apache.tika.parser.pdf + org.apache.tika.parser.pkg + org.apache.tika.parser.pot + org.apache.tika.parser.prt + org.apache.tika.parser.recognition + org.apache.tika.parser.recognition.tf + org.apache.tika.parser.rtf + org.apache.tika.parser.sas + org.apache.tika.parser.sentiment + org.apache.tika.parser.strings + org.apache.tika.parser.txt + org.apache.tika.parser.utils + org.apache.tika.parser.video + org.apache.tika.parser.wordperfect + org.apache.tika.parser.xliff + org.apache.tika.parser.xml + org.apache.tika.sax + org.apache.tika.sax.xpath + org.apache.tika.utils + + + ext/txw2-2.3.2.jar + release\modules\ext\txw2-2.3.2.jar + + + ext/asm-7.2.jar + release\modules\ext\asm-7.2.jar + + + ext/xmlbeans-3.1.0.jar + release\modules\ext\xmlbeans-3.1.0.jar + + + ext/gson-2.8.6.jar + release\modules\ext\gson-2.8.6.jar + + + ext/cdm-4.5.5.jar + release\modules\ext\cdm-4.5.5.jar + + + ext/j2objc-annotations-1.3.jar + release\modules\ext\j2objc-annotations-1.3.jar + + + ext/sis-referencing-1.0.jar + release\modules\ext\sis-referencing-1.0.jar + + + ext/failureaccess-1.0.1.jar + release\modules\ext\failureaccess-1.0.1.jar + + + ext/jackcess-3.0.1.jar + release\modules\ext\jackcess-3.0.1.jar + + + ext/jul-to-slf4j-1.7.28.jar + release\modules\ext\jul-to-slf4j-1.7.28.jar + + + ext/bcpkix-jdk15on-1.64.jar + release\modules\ext\bcpkix-jdk15on-1.64.jar + + + ext/boilerpipe-1.1.0.jar + release\modules\ext\boilerpipe-1.1.0.jar + + + ext/jakarta.ws.rs-api-2.1.5.jar + release\modules\ext\jakarta.ws.rs-api-2.1.5.jar + + + ext/poi-ooxml-schemas-4.1.1.jar + release\modules\ext\poi-ooxml-schemas-4.1.1.jar + + + ext/commons-codec-1.13.jar + release\modules\ext\commons-codec-1.13.jar + + + ext/fontbox-2.0.17.jar + release\modules\ext\fontbox-2.0.17.jar + + + ext/apache-mime4j-core-0.8.3.jar + release\modules\ext\apache-mime4j-core-0.8.3.jar + + + ext/jai-imageio-core-1.4.0.jar + release\modules\ext\jai-imageio-core-1.4.0.jar + + + ext/error_prone_annotations-2.3.2.jar + release\modules\ext\error_prone_annotations-2.3.2.jar + + + ext/json-simple-1.1.1.jar + release\modules\ext\json-simple-1.1.1.jar + + + ext/unit-api-1.0.jar + release\modules\ext\unit-api-1.0.jar + + + ext/FastInfoset-1.2.16.jar + release\modules\ext\FastInfoset-1.2.16.jar + + + ext/metadata-extractor-2.11.0.jar + release\modules\ext\metadata-extractor-2.11.0.jar + + + ext/jmatio-1.5.jar + release\modules\ext\jmatio-1.5.jar + + + ext/parso-2.0.11.jar + release\modules\ext\parso-2.0.11.jar + + + ext/jna-5.5.0.jar + release\modules\ext\jna-5.5.0.jar + + + ext/cxf-rt-frontend-jaxrs-3.3.4.jar + release\modules\ext\cxf-rt-frontend-jaxrs-3.3.4.jar + + + ext/stax2-api-3.1.4.jar + release\modules\ext\stax2-api-3.1.4.jar + + + ext/isoparser-1.1.22.jar + release\modules\ext\isoparser-1.1.22.jar + + + ext/xmlschema-core-2.2.4.jar + release\modules\ext\xmlschema-core-2.2.4.jar + + + ext/xmpcore-5.1.3.jar + release\modules\ext\xmpcore-5.1.3.jar + + + ext/cxf-rt-security-3.3.4.jar + release\modules\ext\cxf-rt-security-3.3.4.jar + + + ext/jcommander-1.35.jar + release\modules\ext\jcommander-1.35.jar + + + ext/pdfbox-2.0.17.jar + release\modules\ext\pdfbox-2.0.17.jar + + + ext/javax.annotation-api-1.3.2.jar + release\modules\ext\javax.annotation-api-1.3.2.jar + + + ext/vorbis-java-core-0.8.jar + release\modules\ext\vorbis-java-core-0.8.jar + + + ext/tika-parsers-1.23.jar + release\modules\ext\tika-parsers-1.23.jar + + + ext/java-libpst-0.8.1.jar + release\modules\ext\java-libpst-0.8.1.jar + + + ext/commons-csv-1.7.jar + release\modules\ext\commons-csv-1.7.jar + + + ext/commons-math3-3.6.1.jar + release\modules\ext\commons-math3-3.6.1.jar + + + ext/jaxb-runtime-2.3.2.jar + release\modules\ext\jaxb-runtime-2.3.2.jar + + + ext/jackson-core-2.10.1.jar + release\modules\ext\jackson-core-2.10.1.jar + + + ext/opennlp-tools-1.9.1.jar + release\modules\ext\opennlp-tools-1.9.1.jar + + + ext/geoapi-3.0.1.jar + release\modules\ext\geoapi-3.0.1.jar + + + ext/jdom2-2.0.6.jar + release\modules\ext\jdom2-2.0.6.jar + + + ext/mchange-commons-java-0.2.15.jar + release\modules\ext\mchange-commons-java-0.2.15.jar + + + ext/apache-mime4j-dom-0.8.3.jar + release\modules\ext\apache-mime4j-dom-0.8.3.jar + + + ext/bzip2-0.9.1.jar + release\modules\ext\bzip2-0.9.1.jar + + + ext/grib-4.5.5.jar + release\modules\ext\grib-4.5.5.jar + + + ext/httpcore-4.4.12.jar + release\modules\ext\httpcore-4.4.12.jar + + + ext/sis-feature-1.0.jar + release\modules\ext\sis-feature-1.0.jar + + + ext/xml-apis-1.4.01.jar + release\modules\ext\xml-apis-1.4.01.jar + + + ext/poi-ooxml-4.1.1.jar + release\modules\ext\poi-ooxml-4.1.1.jar + + + ext/curvesapi-1.06.jar + release\modules\ext\curvesapi-1.06.jar + + + ext/jakarta.xml.bind-api-2.3.2.jar + release\modules\ext\jakarta.xml.bind-api-2.3.2.jar + + + ext/sis-utility-1.0.jar + release\modules\ext\sis-utility-1.0.jar + + + ext/guava-28.1-jre.jar + release\modules\ext\guava-28.1-jre.jar + + + ext/woodstox-core-5.0.3.jar + release\modules\ext\woodstox-core-5.0.3.jar + + + ext/protobuf-java-3.11.0.jar + release\modules\ext\protobuf-java-3.11.0.jar + + + ext/jempbox-1.8.16.jar + release\modules\ext\jempbox-1.8.16.jar + + + ext/jackson-annotations-2.10.1.jar + release\modules\ext\jackson-annotations-2.10.1.jar + + + ext/httpmime-4.5.10.jar + release\modules\ext\httpmime-4.5.10.jar + + + ext/httpservices-4.5.5.jar + release\modules\ext\httpservices-4.5.5.jar + + + ext/stax-ex-1.8.2.jar + release\modules\ext\stax-ex-1.8.2.jar + + + ext/xz-1.8.jar + release\modules\ext\xz-1.8.jar + + + ext/jcl-over-slf4j-1.7.28.jar + release\modules\ext\jcl-over-slf4j-1.7.28.jar + + + ext/tika-core-1.23.jar + release\modules\ext\tika-core-1.23.jar + + + ext/c3p0-0.9.5.4.jar + release\modules\ext\c3p0-0.9.5.4.jar + + + ext/jbig2-imageio-3.0.2.jar + release\modules\ext\jbig2-imageio-3.0.2.jar + + + ext/sis-metadata-1.0.jar + release\modules\ext\sis-metadata-1.0.jar + + + ext/sis-storage-1.0.jar + release\modules\ext\sis-storage-1.0.jar + + + ext/pdfbox-tools-2.0.17.jar + release\modules\ext\pdfbox-tools-2.0.17.jar + + + ext/joda-time-2.2.jar + release\modules\ext\joda-time-2.2.jar + + + ext/openjson-1.0.11.jar + release\modules\ext\openjson-1.0.11.jar + + + ext/tagsoup-1.2.1.jar + release\modules\ext\tagsoup-1.2.1.jar + + + ext/xercesImpl-2.12.0.jar + release\modules\ext\xercesImpl-2.12.0.jar + + + ext/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar + release\modules\ext\listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar + + + ext/jsoup-1.12.1.jar + release\modules\ext\jsoup-1.12.1.jar + + + ext/rome-1.12.2.jar + release\modules\ext\rome-1.12.2.jar + + + ext/poi-4.1.1.jar + release\modules\ext\poi-4.1.1.jar + + + ext/udunits-4.5.5.jar + release\modules\ext\udunits-4.5.5.jar + + + ext/bcmail-jdk15on-1.64.jar + release\modules\ext\bcmail-jdk15on-1.64.jar + + + ext/commons-io-2.6.jar + release\modules\ext\commons-io-2.6.jar + + + ext/cxf-rt-rs-client-3.3.4.jar + release\modules\ext\cxf-rt-rs-client-3.3.4.jar + + + ext/sis-netcdf-1.0.jar + release\modules\ext\sis-netcdf-1.0.jar + + + ext/jackcess-encrypt-3.0.0.jar + release\modules\ext\jackcess-encrypt-3.0.0.jar + + + ext/netcdf4-4.5.5.jar + release\modules\ext\netcdf4-4.5.5.jar + + + ext/poi-scratchpad-4.1.1.jar + release\modules\ext\poi-scratchpad-4.1.1.jar + + + ext/cxf-rt-transports-http-3.3.4.jar + release\modules\ext\cxf-rt-transports-http-3.3.4.jar + + + ext/sentiment-analysis-parser-0.1.jar + release\modules\ext\sentiment-analysis-parser-0.1.jar + + + ext/commons-compress-1.19.jar + release\modules\ext\commons-compress-1.19.jar + + + ext/juniversalchardet-1.0.3.jar + release\modules\ext\juniversalchardet-1.0.3.jar + + + ext/HikariCP-java7-2.4.13.jar + release\modules\ext\HikariCP-java7-2.4.13.jar + + + ext/jsr305-3.0.2.jar + release\modules\ext\jsr305-3.0.2.jar + + + ext/jhighlight-1.0.3.jar + release\modules\ext\jhighlight-1.0.3.jar + + + ext/quartz-2.3.2.jar + release\modules\ext\quartz-2.3.2.jar + + + ext/animal-sniffer-annotations-1.18.jar + release\modules\ext\animal-sniffer-annotations-1.18.jar + + + ext/junrar-4.0.0.jar + release\modules\ext\junrar-4.0.0.jar + + + ext/istack-commons-runtime-3.0.8.jar + release\modules\ext\istack-commons-runtime-3.0.8.jar + + + ext/jcip-annotations-1.0.jar + release\modules\ext\jcip-annotations-1.0.jar + + + ext/commons-collections4-4.4.jar + release\modules\ext\commons-collections4-4.4.jar + + + ext/cxf-core-3.3.4.jar + release\modules\ext\cxf-core-3.3.4.jar + + + ext/jackson-databind-2.10.1.jar + release\modules\ext\jackson-databind-2.10.1.jar + + + ext/slf4j-api-1.7.28.jar + release\modules\ext\slf4j-api-1.7.28.jar + + + ext/ehcache-core-2.6.2.jar + release\modules\ext\ehcache-core-2.6.2.jar + + + ext/commons-lang3-3.9.jar + release\modules\ext\commons-lang3-3.9.jar + + + ext/dec-0.1.2.jar + release\modules\ext\dec-0.1.2.jar + + + ext/rome-utils-1.12.2.jar + release\modules\ext\rome-utils-1.12.2.jar + + + ext/checker-qual-2.8.1.jar + release\modules\ext\checker-qual-2.8.1.jar + + + ext/bcprov-jdk15on-1.64.jar + release\modules\ext\bcprov-jdk15on-1.64.jar + + + ext/commons-exec-1.3.jar + release\modules\ext\commons-exec-1.3.jar + + + ext/httpclient-4.5.10.jar + release\modules\ext\httpclient-4.5.10.jar + + + ext/jakarta.activation-1.2.1.jar + release\modules\ext\jakarta.activation-1.2.1.jar + + + ext/vorbis-java-tika-0.8.jar + release\modules\ext\vorbis-java-tika-0.8.jar + + + + diff --git a/Tika/nbproject/suite.properties b/Tika/nbproject/suite.properties new file mode 100755 index 0000000000..29d7cc9bd6 --- /dev/null +++ b/Tika/nbproject/suite.properties @@ -0,0 +1 @@ +suite.dir=${basedir}/.. diff --git a/Tika/src/org/sleuthkit/autopsy/Tika/Bundle.properties b/Tika/src/org/sleuthkit/autopsy/Tika/Bundle.properties new file mode 100755 index 0000000000..b30f5f62dd --- /dev/null +++ b/Tika/src/org/sleuthkit/autopsy/Tika/Bundle.properties @@ -0,0 +1 @@ +OpenIDE-Module-Name=Tika diff --git a/appveyor.yml b/appveyor.yml index 925d983670..bc3c7fa82d 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -4,10 +4,6 @@ cache: - C:\Users\appveyor\.ant - C:\ProgramData\chocolatey\bin - C:\ProgramData\chocolatey\lib - - C:\libewf_64bit - - C:\libvhdi_64bit - - C:\libvmdk_64bit - - C:\zlib - '%APPVEYOR_BUILD_FOLDER%\Core\test\qa-functional\data' @@ -16,9 +12,6 @@ platform: x64 environment: global: TSK_HOME: "C:\\sleuthkit" - LIBVHDI_HOME: "C:\\libvhdi_64bit" - LIBVMDK_HOME: "C:\\libvmdk_64bit\\libvmdk" - LIBEWF_HOME: "C:\\libewf_64bit" JDK_HOME: C:\Program Files\Java\jdk1.8.0 PYTHON: "C:\\Python36-x64" @@ -38,7 +31,6 @@ services: build_script: - cd %TSK_HOME% - nuget restore win32\libtsk -PackagesDirectory win32\packages - - python setupDevRepos.py - python win32\updateAndBuildAll.py -m - ps: pushd bindings/java - ps: ant -version diff --git a/build-windows.xml b/build-windows.xml index 7f03aa3dde..541c958fa4 100644 --- a/build-windows.xml +++ b/build-windows.xml @@ -22,12 +22,7 @@ - - - - - - + diff --git a/build.xml b/build.xml index 740f8b82ad..a7c64ef4ba 100644 --- a/build.xml +++ b/build.xml @@ -4,11 +4,11 @@ Builds the module suite Autopsy 4. - + - + diff --git a/developers/envvarsetup.py b/developers/envvarsetup.py index dc3e2a4043..1e872bd28a 100755 --- a/developers/envvarsetup.py +++ b/developers/envvarsetup.py @@ -62,9 +62,6 @@ def add_path(paths): set_var("JAVA_HOME", open_jdk_home) set_var("JRE_HOME", path_join(open_jdk_home, "jre")) set_var("JDK_HOME", open_jdk_home) -set_var("LIBEWF_HOME", path_join(source_base_path, "libewf_64bit")) -set_var("LIBVHDI_HOME", path_join(source_base_path, "libvhdi_64bit")) -set_var("LIBVMDK_HOME", path_join(source_base_path, "libvmdk_64bit", "libvmdk")) set_var("POSTGRESQL_HOME_64", postgres_home) set_var("TSK_HOME", path_join(source_base_path, "sleuthkit")) diff --git a/docs/doxygen-user/images/Personas/persona_edit.png b/docs/doxygen-user/images/Personas/persona_edit.png index 1dc07c01d8..2f2bde865f 100644 Binary files a/docs/doxygen-user/images/Personas/persona_edit.png and b/docs/doxygen-user/images/Personas/persona_edit.png differ diff --git a/docs/doxygen-user/images/Personas/personas_create.png b/docs/doxygen-user/images/Personas/personas_create.png index bacfb9e7c6..5da750d572 100644 Binary files a/docs/doxygen-user/images/Personas/personas_create.png and b/docs/doxygen-user/images/Personas/personas_create.png differ diff --git a/docs/doxygen-user/images/Personas/personas_main.png b/docs/doxygen-user/images/Personas/personas_main.png index 071ba57227..b5aa67bd5b 100644 Binary files a/docs/doxygen-user/images/Personas/personas_main.png and b/docs/doxygen-user/images/Personas/personas_main.png differ diff --git a/docs/doxygen-user/images/photo_rec_custom.png b/docs/doxygen-user/images/photo_rec_custom.png new file mode 100644 index 0000000000..fb48d787e3 Binary files /dev/null and b/docs/doxygen-user/images/photo_rec_custom.png differ diff --git a/docs/doxygen-user/images/photo_rec_extensions.png b/docs/doxygen-user/images/photo_rec_extensions.png new file mode 100644 index 0000000000..5d26757b0e Binary files /dev/null and b/docs/doxygen-user/images/photo_rec_extensions.png differ diff --git a/docs/doxygen-user/images/photo_rec_settings.PNG b/docs/doxygen-user/images/photo_rec_settings.PNG index 1133b4ae34..1c14373501 100644 Binary files a/docs/doxygen-user/images/photo_rec_settings.PNG and b/docs/doxygen-user/images/photo_rec_settings.PNG differ diff --git a/docs/doxygen-user/personas.dox b/docs/doxygen-user/personas.dox index 839df4b828..a443955445 100644 --- a/docs/doxygen-user/personas.dox +++ b/docs/doxygen-user/personas.dox @@ -37,10 +37,10 @@ By default, when the Personas Editor is launched, all the personas in the Centra To create a new persona, click the "New Persona" button. A "Create Persona" dialog box will pop up. The following is a description of each field:
              +
            • Name: The name of the persona
            • Created by: Will be automatically filled in with the current user
            • Created on: Will be automatically filled in after saving the persona
            • Comment: A description of the persona -
            • Name: The name of the persona
            • Accounts: At least one account belonging to the persona
            • Metadata: (Optional) Name/value pairs of data related to the persona
            • Aliases: (Optional) Any aliases for this persona diff --git a/docs/doxygen-user/photorec_carver.dox b/docs/doxygen-user/photorec_carver.dox index 3560f12fbb..6c5cc32742 100644 --- a/docs/doxygen-user/photorec_carver.dox +++ b/docs/doxygen-user/photorec_carver.dox @@ -1,45 +1,93 @@ /*! \page photorec_carver_page PhotoRec Carver Module -What Does It Do -======== +\section photorec_overview Overview The PhotoRec Carver module carves files from unallocated space in the data source and sends the files found through the ingest processing chain. This can help a reviewer discover more information about files that used to be on the device and were subsequently deleted. These are simply extra files that were found in "empty" portions of the device storage. -Configuration -======= +\section photorec_usage Using the Module -There is nothing to configure for this module. - - -Using the Module -====== Select the checkbox in the Ingest Modules settings screen to enable the PhotoRec Carver. Ensure that "Process Unallocated Space" is selected. -Ingest Settings ------- -The run-time setting for this module allows you to choose whether to keep corrupted files. +\subsection photorec_settings Ingest Settings + +The run-time setting for this module allows you to choose whether to keep corrupted files and to include or exclude certain file types. \image html photo_rec_settings.PNG -Also note that the "Run ingest modules on" selection needs to include unallocated space for this module to run. +For the "Focus on certain file types" option, you will enter a comma separated list of file types. Depending on which option you choose, PhotoRec will either carve only files of those types or all files except those types. You will see an error if an invalid type is entered. Note that file types are case-sensitive. + +\image html photo_rec_extensions.png + +The list of \ref photorec_extensions "valid file types" for the current version of Autopsy is at the bottom of this page. + +\subsection photorec_results Seeing Results -Seeing Results ------- The results of carving show up on the tree under the appropriate data source with the heading "$CarvedFiles". \image html photorec_output.PNG Applicable types also show up in the "Views", "File Types" portion of the the tree, depending upon the file type. -Custom File Signatures -====== +\section photorec_custom Custom File Signatures To add custom file signatures, create a file (if it does not exist) photorec.sig in the user home directory (for example - /home/john/photorec.sig, or C:\\Users\john\photorec.sig). The photorec.sig file should contain one expression per line. For example, to detect a file foo.bar which has header signature - 0x4141414141414141, add an expression bar 0 0x4141414141414141 -in photorec.sig where *bar* is the file extension, *0* is the signature offset, and *0x4141414141414141* is the signature. -Add another expression on a new line to detect another custom file based on its signature. +in photorec.sig where *bar* is the file extension, *0* is the signature offset, and *0x4141414141414141* is the signature. Add another expression on a new line to detect another custom file based on its signature. Note that custom signatures can not be used with the "Carve only the specified types" option. + +\image html photo_rec_custom.png + +\section photorec_extensions Valid File Types + +The following is the list of valid file types for the version of PhotoRec currently used by Autopsy: + +\verbatim +1cd caf dwg gp2 max pdb rw2 vfb +3dm cam dxf gp5 mb pdf rx2 vib +7z catdrawing e01 gpg mcd pds sav vmdk +a cdt eCryptfs gpx mdb pf save vmg +ab che edb gsm mdf pfx ses wallet +abr chm elf gz mfa plist sgcta wdp +acb class emf hdf mfg plr shn wee +accdb comicdoc ess hdr mft plt sib wim +ace cow evt hds mid png sit win +ado cp_ evtx hfsp mig pnm skd wks +afdesign cpi exe hm mk5 prc skp wld +ahn crw exs hr9 mkv prd snag wmf +aif csh ext http mlv prt snz wnk +all ctg fat ibd mobi ps sp3 woff +als cwk fbf icc mov psb sparseimage wpb +amd d2s fbk icns mov/mdat psd spe wpd +amr dad fcp ico mp3 psf spf wtv +apa dar fcs idx mpg psp sqlite wv +ape dat fdb ifo mpl pst sqm x3f +apple DB fds imb mrw ptb steuer2014 x3i +ari db fh10 indd msa ptf stl x4a +arj dbf fh5 info mus pyc studio xar +asf dbn fit iso mxf pzf swf xcf +asl dcm fits it MYI pzh tar xfi +asm ddf flac itu myo qbb tax xfs +atd dex flp jks nd2 qdf tg xm +au diskimage flv jpg nds qkt tib xml +axp djv fm jsonlz4 nes qxd tif xpt +axx dmp fob kdb njx r3d TiVo xsv +bac doc fos kdbx nk2 ra torrent xv +bdm dpx fp5 key nsf raf tph xz +bim drw fp7 ldf oci rar tpl z2d +bin ds2 freeway lit ogg raw ts zcode +binvox DS_Store frm lnk one rdc ttf zip +bkf dsc fs logic orf reg tx? zpr +blend dss fwd lso paf res txt +bmp dst gam luks pap rfp tz +bpg dta gct lxo par2 riff v2i +bvr dump gho lzh pcap rlv vault +bz2 dv gi lzo pcb rm vdi +c4d dvi gif m2ts pct rns vdj +cab dvr gm* mat pcx rpm veg + +\endverbatim + */ \ No newline at end of file diff --git a/nbproject/platform.properties b/nbproject/platform.properties index b03c3b5199..7a61a6e1b6 100644 --- a/nbproject/platform.properties +++ b/nbproject/platform.properties @@ -1,136 +1,341 @@ branding.token=autopsy # Version of platform that is automatically downloaded # IMPORTANT: autopsy/build.xml has a netbeans-plat-version property that MUST be kept in sync (manually) -netbeans-plat-version=8.2 +netbeans-plat-version=11.3 suite.dir=${basedir} + +nbplatform.active=download nbplatform.active.dir=${suite.dir}/netbeans-plat/${netbeans-plat-version} harness.dir=${nbplatform.active.dir}/harness -bootstrap.url=http://bits.netbeans.org/dev/nbms-and-javadoc/lastSuccessfulBuild/artifact/nbbuild/netbeans/harness/tasks.jar +bootstrap.url=https://netbeans-vm.apache.org/uc/${netbeans-plat-version}/tasks.jar # Where we get the platform from. To see what versions are available, open URL in browser up to the .../updates part of the URL -autoupdate.catalog.url=https://updates.netbeans.org/netbeans/updates/${netbeans-plat-version}/uc/final/distribution/catalog.xml.gz +autoupdate.catalog.url=https://netbeans-vm.apache.org/uc/${netbeans-plat-version}/updates.xml.gz cluster.path=\ ${nbplatform.active.dir}/harness:\ ${nbplatform.active.dir}/java:\ ${nbplatform.active.dir}/platform:\ ${nbplatform.active.dir}/cluster disabled.modules=\ - org.netbeans.modules.hudson.ant,\ - org.netbeans.libs.cglib,\ - org.netbeans.modules.maven.graph,\ - org.netbeans.modules.java.hints.declarative.test,\ - org.netbeans.libs.javacapi,\ - org.netbeans.modules.nashorn.execution,\ - org.netbeans.modules.java.metrics,\ - org.netbeans.modules.debugger.jpda.js,\ - org.netbeans.api.java,\ - org.netbeans.modules.debugger.jpda.ant,\ - org.netbeans.modules.java.source.ant,\ - org.netbeans.modules.maven.refactoring,\ - org.netbeans.modules.ant.debugger,\ - org.netbeans.modules.hibernatelib,\ - org.netbeans.modules.hibernate,\ - org.netbeans.lib.nbjavac,\ - org.netbeans.modules.debugger.jpda.kit,\ - org.netbeans.modules.maven.persistence,\ - org.netbeans.modules.javaee.injection,\ - org.netbeans.modules.maven,\ - org.netbeans.modules.performance,\ - org.netbeans.spi.java.hints,\ - org.netbeans.modules.spellchecker.bindings.java,\ - org.netbeans.modules.java.j2seproject,\ - org.netbeans.modules.javawebstart,\ - org.netbeans.modules.debugger.jpda,\ - org.netbeans.modules.ant.grammar,\ - org.netbeans.modules.maven.checkstyle,\ - org.netbeans.modules.java.source.queries,\ - org.netbeans.modules.refactoring.java,\ - org.netbeans.modules.java.examples,\ - org.netbeans.modules.j2ee.jpa.verification,\ - org.netbeans.modules.j2ee.jpa.refactoring,\ - org.netbeans.modules.j2ee.metadata.model.support,\ - org.netbeans.modules.classfile,\ - org.netbeans.modules.maven.coverage,\ - org.netbeans.modules.debugger.jpda.ui,\ - org.netbeans.modules.java.guards,\ - org.netbeans.modules.xml.jaxb,\ - org.netbeans.modules.java.preprocessorbridge,\ - org.netbeans.modules.debugger.jpda.jsui,\ + org.eclipse.core.contenttype,\ + org.eclipse.core.jobs,\ + org.eclipse.core.net,\ + org.eclipse.core.runtime,\ + org.eclipse.core.runtime.compatibility.auth,\ + org.eclipse.equinox.app,\ + org.eclipse.equinox.common,\ + org.eclipse.equinox.preferences,\ + org.eclipse.equinox.registry,\ + org.eclipse.equinox.security,\ + org.eclipse.jgit,\ + org.eclipse.jgit.java7,\ + org.eclipse.mylyn.bugzilla.core,\ + org.eclipse.mylyn.commons.core,\ + org.eclipse.mylyn.commons.net,\ + org.eclipse.mylyn.commons.repositories.core,\ + org.eclipse.mylyn.commons.xmlrpc,\ + org.eclipse.mylyn.tasks.core,\ + org.eclipse.mylyn.wikitext.confluence.core,\ + org.eclipse.mylyn.wikitext.core,\ + org.eclipse.mylyn.wikitext.markdown.core,\ + org.eclipse.mylyn.wikitext.textile.core,\ + org.netbeans.api.debugger,\ org.netbeans.api.debugger.jpda,\ - org.netbeans.modules.ant.freeform,\ - org.netbeans.modules.java.sourceui,\ - org.netbeans.modules.projectimport.eclipse.j2se,\ - org.netbeans.modules.form,\ - org.netbeans.modules.junit,\ - org.netbeans.modules.j2ee.persistence.kit,\ - org.netbeans.modules.j2ee.metadata,\ - org.netbeans.modules.java.j2seplatform,\ - org.netbeans.modules.javadoc,\ - org.netbeans.modules.debugger.jpda.projects,\ - org.netbeans.modules.java.source,\ - org.netbeans.modules.maven.spring,\ - org.netbeans.modules.maven.search,\ - org.netbeans.modules.java.debug,\ - org.netbeans.modules.maven.grammar,\ - org.netbeans.modules.java.kit,\ - org.netbeans.modules.testng,\ - org.netbeans.modules.spring.beans,\ - org.netbeans.modules.websvc.saas.codegen.java,\ - org.netbeans.modules.java.editor.lib,\ - org.netbeans.modules.java.testrunner,\ - org.netbeans.modules.java.source.queriesimpl,\ - org.netbeans.modules.maven.junit,\ - org.netbeans.modules.maven.hints,\ - org.netbeans.modules.xml.tools.java,\ - org.netbeans.modules.j2ee.persistenceapi,\ - org.netbeans.modules.java.j2seprofiles,\ - org.netbeans.modules.form.kit,\ - org.netbeans.modules.projectimport.eclipse.core,\ - org.netbeans.modules.form.refactoring,\ - org.apache.tools.ant.module,\ - org.netbeans.modules.testng.maven,\ - org.netbeans.modules.java.hints.test,\ - org.netbeans.modules.i18n.form,\ - org.netbeans.modules.maven.kit,\ - org.netbeans.modules.beans,\ - org.netbeans.modules.java.platform,\ - org.netbeans.modules.java.hints.legacy.spi,\ - org.netbeans.modules.java.lexer,\ - org.netbeans.modules.java.hints,\ - org.netbeans.modules.java.j2seembedded,\ - org.netbeans.modules.java.hints.ui,\ - org.netbeans.modules.java.editor,\ - org.netbeans.modules.websvc.jaxws21,\ - org.netbeans.modules.hudson.maven,\ - org.netbeans.modules.java.j2sedeploy,\ - org.netbeans.libs.javacimpl,\ - org.netbeans.modules.java.helpset,\ - org.netbeans.modules.i18n,\ - org.netbeans.modules.dbschema,\ + org.netbeans.api.htmlui,\ + org.netbeans.api.java,\ org.netbeans.api.maven,\ - org.netbeans.modules.findbugs.installer,\ - org.netbeans.modules.j2ee.eclipselinkmodelgen,\ - org.netbeans.modules.form.nb,\ - org.netbeans.modules.debugger.jpda.visual,\ - org.netbeans.modules.form.j2ee,\ - org.netbeans.modules.java.project,\ - org.netbeans.modules.java.api.common,\ - org.netbeans.modules.j2ee.persistence,\ - org.netbeans.modules.java.freeform,\ - org.netbeans.modules.whitelist,\ + org.netbeans.core.browser,\ + org.netbeans.core.browser.webview,\ + org.netbeans.core.multitabs,\ + org.netbeans.core.multitabs.project,\ + org.netbeans.core.nativeaccess,\ + org.netbeans.core.netigso,\ + org.netbeans.core.network,\ + org.netbeans.core.osgi,\ + org.netbeans.html.ko4j,\ + org.netbeans.html.xhr4j,\ + org.netbeans.lib.terminalemulator,\ + org.netbeans.lib.uihandler,\ + org.netbeans.libs.antlr3.runtime,\ + org.netbeans.libs.bytelist,\ + org.netbeans.libs.cglib,\ + org.netbeans.libs.commons_compress,\ + org.netbeans.libs.commons_net,\ + org.netbeans.libs.felix,\ + org.netbeans.libs.git,\ + org.netbeans.libs.graalsdk,\ + org.netbeans.libs.ini4j,\ + org.netbeans.libs.javafx,\ + org.netbeans.libs.jaxb,\ + org.netbeans.libs.jna,\ + org.netbeans.libs.jna.platform,\ + org.netbeans.libs.jsch.agentproxy,\ + org.netbeans.libs.json_simple,\ + org.netbeans.libs.jsr223,\ + org.netbeans.libs.junit5,\ + org.netbeans.libs.jvyamlb,\ + org.netbeans.libs.osgi,\ + org.netbeans.libs.smack,\ org.netbeans.libs.springframework,\ - org.netbeans.modules.maven.embedder,\ - org.netbeans.modules.ant.kit,\ - org.netbeans.modules.java.hints.declarative,\ - org.netbeans.modules.testng.ant,\ - org.netbeans.modules.form.binding,\ + org.netbeans.libs.svnClientAdapter,\ + org.netbeans.libs.svnClientAdapter.javahl,\ + org.netbeans.libs.testng,\ + org.netbeans.libs.xerces,\ org.netbeans.modules.ant.browsetask,\ + org.netbeans.modules.ant.debugger,\ + org.netbeans.modules.ant.freeform,\ + org.netbeans.modules.ant.grammar,\ + org.netbeans.modules.ant.kit,\ + org.netbeans.modules.beans,\ + org.netbeans.modules.bugtracking,\ + org.netbeans.modules.bugtracking.bridge,\ + org.netbeans.modules.bugtracking.commons,\ + org.netbeans.modules.bugzilla,\ + org.netbeans.modules.core.kit,\ + org.netbeans.modules.css.editor,\ + org.netbeans.modules.css.lib,\ + org.netbeans.modules.css.model,\ + org.netbeans.modules.css.prep,\ + org.netbeans.modules.css.visual,\ + org.netbeans.modules.db,\ + org.netbeans.modules.db.core,\ + org.netbeans.modules.db.dataview,\ + org.netbeans.modules.db.drivers,\ + org.netbeans.modules.db.kit,\ + org.netbeans.modules.db.metadata.model,\ + org.netbeans.modules.db.mysql,\ + org.netbeans.modules.db.sql.editor,\ + org.netbeans.modules.db.sql.visualeditor,\ + org.netbeans.modules.dbapi,\ + org.netbeans.modules.dbschema,\ + org.netbeans.modules.debugger.jpda,\ + org.netbeans.modules.debugger.jpda.ant,\ + org.netbeans.modules.debugger.jpda.js,\ + org.netbeans.modules.debugger.jpda.jsui,\ + org.netbeans.modules.debugger.jpda.kit,\ + org.netbeans.modules.debugger.jpda.projects,\ + org.netbeans.modules.debugger.jpda.projectsui,\ + org.netbeans.modules.debugger.jpda.truffle,\ + org.netbeans.modules.debugger.jpda.trufflenode,\ + org.netbeans.modules.debugger.jpda.ui,\ + org.netbeans.modules.debugger.jpda.visual,\ + org.netbeans.modules.derby,\ + org.netbeans.modules.dlight.nativeexecution,\ + org.netbeans.modules.dlight.nativeexecution.nb,\ + org.netbeans.modules.dlight.terminal,\ + org.netbeans.modules.docker.api,\ + org.netbeans.modules.docker.editor,\ + org.netbeans.modules.docker.ui,\ + org.netbeans.modules.editor.bookmarks,\ + org.netbeans.modules.editor.htmlui,\ + org.netbeans.modules.editor.kit,\ + org.netbeans.modules.editor.macros,\ + org.netbeans.modules.editor.structure,\ + org.netbeans.modules.extexecution.impl,\ + org.netbeans.modules.extexecution.process,\ + org.netbeans.modules.extexecution.process.jdk9,\ + org.netbeans.modules.findbugs.installer,\ + org.netbeans.modules.form,\ + org.netbeans.modules.form.kit,\ + org.netbeans.modules.form.nb,\ + org.netbeans.modules.form.refactoring,\ + org.netbeans.modules.git,\ + org.netbeans.modules.gsf.codecoverage,\ + org.netbeans.modules.html,\ + org.netbeans.modules.html.custom,\ + org.netbeans.modules.html.editor,\ + org.netbeans.modules.html.editor.lib,\ + org.netbeans.modules.html.lexer,\ + org.netbeans.modules.html.parser,\ + org.netbeans.modules.html.validation,\ + org.netbeans.modules.hudson,\ + org.netbeans.modules.hudson.ant,\ + org.netbeans.modules.hudson.git,\ + org.netbeans.modules.hudson.maven,\ + org.netbeans.modules.hudson.mercurial,\ + org.netbeans.modules.hudson.subversion,\ + org.netbeans.modules.hudson.tasklist,\ + org.netbeans.modules.hudson.ui,\ + org.netbeans.modules.i18n,\ + org.netbeans.modules.i18n.form,\ + org.netbeans.modules.ide.kit,\ org.netbeans.modules.j2ee.core.utilities,\ - org.netbeans.modules.performance.java,\ - org.netbeans.modules.websvc.jaxws21api,\ - org.netbeans.modules.maven.repository,\ org.netbeans.modules.j2ee.eclipselink,\ - org.netbeans.modules.maven.model,\ - org.netbeans.modules.hibernate4lib,\ + org.netbeans.modules.j2ee.eclipselinkmodelgen,\ + org.netbeans.modules.j2ee.jpa.refactoring,\ + org.netbeans.modules.j2ee.jpa.verification,\ + org.netbeans.modules.j2ee.metadata,\ + org.netbeans.modules.j2ee.metadata.model.support,\ + org.netbeans.modules.j2ee.persistence,\ + org.netbeans.modules.j2ee.persistence.kit,\ + org.netbeans.modules.j2ee.persistenceapi,\ + org.netbeans.modules.java.api.common,\ + org.netbeans.modules.java.completion,\ + org.netbeans.modules.java.debug,\ + org.netbeans.modules.java.editor,\ + org.netbeans.modules.java.editor.base,\ + org.netbeans.modules.java.editor.lib,\ + org.netbeans.modules.java.examples,\ + org.netbeans.modules.java.freeform,\ + org.netbeans.modules.java.graph,\ + org.netbeans.modules.java.hints,\ + org.netbeans.modules.java.hints.declarative,\ + org.netbeans.modules.java.hints.declarative.test,\ + org.netbeans.modules.java.hints.legacy.spi,\ + org.netbeans.modules.java.hints.test,\ + org.netbeans.modules.java.hints.ui,\ + org.netbeans.modules.java.j2sedeploy,\ + org.netbeans.modules.java.j2seembedded,\ + org.netbeans.modules.java.j2semodule,\ + org.netbeans.modules.java.j2seplatform,\ + org.netbeans.modules.java.j2seprofiles,\ + org.netbeans.modules.java.j2seproject,\ + org.netbeans.modules.java.kit,\ + org.netbeans.modules.java.lexer,\ + org.netbeans.modules.java.lsp.server,\ + org.netbeans.modules.java.metrics,\ + org.netbeans.modules.java.module.graph,\ org.netbeans.modules.java.navigation,\ + org.netbeans.modules.java.openjdk.project,\ + org.netbeans.modules.java.platform,\ + org.netbeans.modules.java.project.ui,\ + org.netbeans.modules.java.preprocessorbridge,\ + org.netbeans.modules.java.project,\ + org.netbeans.modules.java.source,\ + org.netbeans.modules.java.source.ant,\ + org.netbeans.modules.java.source.base,\ + org.netbeans.modules.java.source.compat8,\ + org.netbeans.modules.java.source.nbjavac,\ + org.netbeans.modules.java.sourceui,\ + org.netbeans.modules.java.testrunner,\ + org.netbeans.modules.java.testrunner.ant,\ + org.netbeans.modules.java.testrunner.ui,\ + org.netbeans.modules.javadoc,\ + org.netbeans.modules.javaee.injection,\ + org.netbeans.modules.javascript2.debug,\ + org.netbeans.modules.javascript2.debug.ui,\ + org.netbeans.modules.javawebstart,\ + org.netbeans.modules.jellytools.ide,\ + org.netbeans.modules.jshell.support,\ + org.netbeans.modules.junit,\ + org.netbeans.modules.junit.ant,\ + org.netbeans.modules.junit.ant.ui,\ + org.netbeans.modules.junit.ui,\ + org.netbeans.modules.junitlib,\ + org.netbeans.modules.keyring.fallback,\ + org.netbeans.modules.keyring.impl,\ + org.netbeans.modules.kotlin.editor,\ + org.netbeans.modules.languages,\ + org.netbeans.modules.languages.diff,\ + org.netbeans.modules.languages.manifest,\ + org.netbeans.modules.languages.yaml,\ + org.netbeans.modules.localhistory,\ + org.netbeans.modules.localtasks,\ + org.netbeans.modules.lsp.client,\ + org.netbeans.modules.masterfs.linux,\ + org.netbeans.modules.masterfs.macosx,\ + org.netbeans.modules.masterfs.windows,\ + org.netbeans.modules.maven,\ + org.netbeans.modules.maven.checkstyle,\ + org.netbeans.modules.maven.coverage,\ + org.netbeans.modules.maven.embedder,\ + org.netbeans.modules.maven.grammar,\ + org.netbeans.modules.maven.graph,\ + org.netbeans.modules.maven.hints,\ + org.netbeans.modules.maven.htmlui,\ org.netbeans.modules.maven.indexer,\ - org.netbeans.modules.maven.osgi + org.netbeans.modules.maven.indexer.ui,\ + org.netbeans.modules.maven.junit,\ + org.netbeans.modules.maven.junit.ui,\ + org.netbeans.modules.maven.kit,\ + org.netbeans.modules.maven.model,\ + org.netbeans.modules.maven.osgi,\ + org.netbeans.modules.maven.persistence,\ + org.netbeans.modules.maven.refactoring,\ + org.netbeans.modules.maven.repository,\ + org.netbeans.modules.maven.search,\ + org.netbeans.modules.maven.spring,\ + org.netbeans.modules.mercurial,\ + org.netbeans.modules.mylyn.util,\ + org.netbeans.modules.nashorn.execution,\ + org.netbeans.modules.netbinox,\ + org.netbeans.modules.notifications,\ + org.netbeans.modules.performance,\ + org.netbeans.modules.performance.java,\ + org.netbeans.modules.project.ant.compat8,\ + org.netbeans.modules.projectimport.eclipse.core,\ + org.netbeans.modules.projectimport.eclipse.j2se,\ + org.netbeans.modules.properties,\ + org.netbeans.modules.properties.syntax,\ + org.netbeans.modules.refactoring.java,\ + org.netbeans.modules.schema2beans,\ + org.netbeans.modules.selenium2,\ + org.netbeans.modules.selenium2.java,\ + org.netbeans.modules.selenium2.maven,\ + org.netbeans.modules.selenium2.server,\ + org.netbeans.modules.server,\ + org.netbeans.modules.spellchecker,\ + org.netbeans.modules.spellchecker.apimodule,\ + org.netbeans.modules.spellchecker.bindings.htmlxml,\ + org.netbeans.modules.spellchecker.bindings.java,\ + org.netbeans.modules.spellchecker.bindings.properties,\ + org.netbeans.modules.spellchecker.dictionary_en,\ + org.netbeans.modules.spellchecker.kit,\ + org.netbeans.modules.spring.beans,\ + org.netbeans.modules.subversion,\ + org.netbeans.modules.swing.validation,\ + org.netbeans.modules.target.iterator,\ + org.netbeans.modules.tasklist.kit,\ + org.netbeans.modules.tasklist.projectint,\ + org.netbeans.modules.tasklist.todo,\ + org.netbeans.modules.tasklist.ui,\ + org.netbeans.modules.team.commons,\ + org.netbeans.modules.team.ide,\ + org.netbeans.modules.templatesui,\ + org.netbeans.modules.terminal,\ + org.netbeans.modules.terminal.nb,\ + org.netbeans.modules.testng,\ + org.netbeans.modules.testng.ant,\ + org.netbeans.modules.testng.maven,\ + org.netbeans.modules.testng.ui,\ + org.netbeans.modules.textmate.lexer,\ + org.netbeans.modules.uihandler,\ + org.netbeans.modules.usersguide,\ + org.netbeans.modules.versioning,\ + org.netbeans.modules.versioning.core,\ + org.netbeans.modules.versioning.indexingbridge,\ + org.netbeans.modules.versioning.masterfs,\ + org.netbeans.modules.versioning.system.cvss.installer,\ + org.netbeans.modules.versioning.ui,\ + org.netbeans.modules.versioning.util,\ + org.netbeans.modules.web.browser.api,\ + org.netbeans.modules.web.common,\ + org.netbeans.modules.web.common.ui,\ + org.netbeans.modules.web.indent,\ + org.netbeans.modules.web.webkit.debugging,\ + org.netbeans.modules.websvc.jaxws21,\ + org.netbeans.modules.websvc.jaxws21api,\ + org.netbeans.modules.websvc.saas.codegen.java,\ + org.netbeans.modules.whitelist,\ + org.netbeans.modules.xml,\ + org.netbeans.modules.xml.axi,\ + org.netbeans.modules.xml.jaxb,\ + org.netbeans.modules.xml.jaxb.api,\ + org.netbeans.modules.xml.multiview,\ + org.netbeans.modules.xml.retriever,\ + org.netbeans.modules.xml.schema.completion,\ + org.netbeans.modules.xml.schema.model,\ + org.netbeans.modules.xml.tax,\ + org.netbeans.modules.xml.text,\ + org.netbeans.modules.xml.text.obsolete90,\ + org.netbeans.modules.xml.tools,\ + org.netbeans.modules.xml.tools.java,\ + org.netbeans.modules.xml.wsdl.model,\ + org.netbeans.modules.xsl,\ + org.netbeans.spi.debugger.jpda.ui,\ + org.netbeans.spi.debugger.ui,\ + org.netbeans.spi.java.hints,\ + org.openide.compat,\ + org.openide.execution.compat8,\ + org.openide.options,\ + org.openide.util.enumerations,\ + org.openidex.util \ No newline at end of file diff --git a/nbproject/project.properties b/nbproject/project.properties index d0eec3ae02..ab90694891 100644 --- a/nbproject/project.properties +++ b/nbproject/project.properties @@ -12,6 +12,7 @@ build.type=DEVELOPMENT project.org.netbeans.progress=org-netbeans-api-progress project.org.sleuthkit.autopsy.experimental=Experimental project.org.sleuthkit.autopsy.imagegallery=ImageGallery +project.org.sleuthkit.autopsy.Tika=Tika update_versions=false #custom JVM options #Note: can be higher on 64 bit systems, should be in sync with build.xml @@ -31,7 +32,8 @@ modules=\ ${project.org.sleuthkit.autopsy.core}:\ ${project.org.sleuthkit.autopsy.corelibs}:\ ${project.org.sleuthkit.autopsy.imagegallery}:\ - ${project.org.sleuthkit.autopsy.experimental} + ${project.org.sleuthkit.autopsy.experimental}:\ + ${project.org.sleuthkit.autopsy.Tika} project.org.sleuthkit.autopsy.core=Core project.org.sleuthkit.autopsy.corelibs=CoreLibs project.org.sleuthkit.autopsy.keywordsearch=KeywordSearch diff --git a/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/ChangeLog b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/ChangeLog new file mode 100755 index 0000000000..fa226e5f0b --- /dev/null +++ b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/ChangeLog @@ -0,0 +1,2130 @@ +2020-08-09 7.0.10-27 + * Release ImageMagick version 7.0.10-26 GIT revision 17525:ae6ace83c:20200809 + +2020-08-08 7.0.10-27 + * fix regression when detecting the libz delegate library. + +2020-08-08 7.0.10-26 + * Release ImageMagick version 7.0.10-26 GIT revision 17520:9c2744359:20200808 + +2020-08-02 7.0.10-26 + * Add animated webp blend method support (reference + https://github.com/ImageMagick/ImageMagick/pull/2351). + * Add support for OpenRaster (.ora) image format (reference + https://github.com/ImageMagick/ImageMagick/pull/2342). + * Paths in Photoshop EPS files are no longer corrupted (reference + https://github.com/ImageMagick/ImageMagick/issues/2380). + +2020-07-31 7.0.10-25 + * Release ImageMagick version 7.0.10-25 GIT revision 17497:0e12ff687:20200731 + +2020-07-25 7.0.10-25 + * Remove UseCIEColor setting from PDF code as its use is not recommended. + * Update to the latest documentation. + +2020-07-18 7.0.10-24 + * Release ImageMagick version 7.0.10-24 GIT revision 17483:d11a2ec03:20200718 + +2020-07-18 7.0.10-24 Dirk Lemstra + * To preserve compression of input image with the tiff encoder use: + -define tiff:preserve-compression=true. + +2020-07-05 7.0.10-24 + * Add support for the -white-balance command-line option. + * Discover hidden files when globbing (e.g. *.jpg) (reference + https://github.com/ImageMagick/ImageMagick/discussions/2239). + * New inverse-log evaluate operator. + +2020-07-04 7.0.10-23 + * Release ImageMagick version 7.0.10-23 GIT revision 17437:894231bc3:20200704 + +2020-06-28 7.0.10-23 + * Ensure that float is valid in ClampToQuantum() (reference + https://github.com/ImageMagick/ImageMagick/pull/2219). + * New pseudo-image format, ashlar, e.g. + convert *.jpg -resize 320x320 ashlar:canvas.png). + +2020-06-27 7.0.10-22 + * Release ImageMagick version 7.0.10-22 GIT revision 17415:5318a3e0a:20200627 + +2020-06-24 7.0.10-22 + * Fix wrapping of caption (reference + https://github.com/ImageMagick/ImageMagick/issues/2178). + * Sanity check of affine matrix when drawing. + +2020-06-22 7.0.10-21 + * Release ImageMagick version 7.0.10-21 GIT revision 17395:af81c28c9:20200622 + +2020-06-21 7.0.10-21 + * New image property, %N, only report the # of frames in an image sequence, + just once rather than on a per frame basis + * Problems converting CMYK to RGB regression (reference + https://github.com/ImageMagick/ImageMagick6/issues/83) + +2020-06-21 7.0.10-21 Dirk Lemstra + * Added support for 32 bit zip with prediction format to the PSD decoder + (reference https://github.com/ImageMagick/ImageMagick/issues/455). + +2020-06-20 7.0.10-20 + * Release ImageMagick version 7.0.10-20 GIT revision 17372:d91c43f3b:20200620 + +2020-06-14 7.0.10-20 + * Fix out-of-bounds vulnerability when reading sixel images (reference + https://github.com/ImageMagick/ImageMagick/issues/2143). + * Fix incorrect parsing of font family list (reference + https://github.com/ImageMagick/ImageMagick/issues/2153). + +2020-06-12 7.0.10-19 Cristy + * Release ImageMagick version 7.0.10-19, GIT revision 17343:e552d22:20200612 + +2020-06-09 7.0.10-19 Cristy + * Improve checking for write failures (reference + https://github.com/ImageMagick/ImageMagick/pull/2081). + +2020-06-08 7.0.10-18 Cristy + * Release ImageMagick version 7.0.10-18, GIT revision 17333:d071c2032:20200608 + +2020-06-08 7.0.10-18 Cristy + * Colorspace change will remove ICC profile (reference + https://github.com/ImageMagick/ImageMagick6/issues/82). + +2020-06-07 7.0.10-17 Cristy + * Release ImageMagick version 7.0.10-17, GIT revision 17311:8b5350f:20200607 + +2020-06-03 7.0.10-17 Cristy + * Free up memory after a ICC profile is removed. + +2020-05-31 7.0.10-16 Cristy + * Release ImageMagick version 7.0.10-16, GIT revision 17294:5be1abe:20200531 + +2020-05-30 7.0.10-16 Cristy + * Fix PDF XREF directory for image sequences with and without ICC profiles. + +2020-05-29 7.0.10-15 Cristy + * Release ImageMagick version 7.0.10-15, GIT revision 17282:9294896:20200529 + +2020-05-24 7.0.10-15 Cristy + * Clipping was not returning expected results (reference + https://github.com/ImageMagick/ImageMagick/discussions/2061). + * Don't write a ICC profile to PDF if the image is gray (reference + https://github.com/ImageMagick/ImageMagick/issues/2070). + +2020-05-22 7.0.10-14 Cristy + * Release ImageMagick version 7.0.10-14, GIT revision 17268:e9c804c93:20200522 + +2020-05-22 7.0.10-14 Cristy + * Errant warning when reading a profile file (reference + https://github.com/ImageMagick/ImageMagick/issues/2030). + * Fix one off error on PDF object for images with ICC profile. + +2020-05-17 7.0.10-13 Cristy + * Release ImageMagick version 7.0.10-13, GIT revision 17257:e3b442c:20200517. + +2020-05-17 7.0.10-13 Cristy + * Remove errant debugging statement in SVG coder. + +2020-05-15 7.0.10-12 Cristy + * Release ImageMagick version 7.0.10-12, GIT revision 17242:e14b3fb:20200515. + +2020-05-12 7.0.10-12 Cristy + * Black artefacts during quantization (reference + https://github.com/ImageMagick/ImageMagick/discussions/2007#discussioncomment-13546). + +2020-05-08 7.0.10-11 Cristy + * Release ImageMagick version 7.0.10-11, GIT revision 17230:088df0e:20200508. + +2020-04-28 7.0.10-11 Cristy + * Disable "random" OpenCL kernel. Previously the work load was distributed + but each started with the same random seed. + * Finished implementation of -distort rigid-affine. + * Enable threaded PNG coder. + +2020-04-27 7.0.10-10 Cristy + * Release ImageMagick version 7.0.10-10, GIT revision 17205:9b0340e:20200427 + +2020-04-27 7.0.10-10 Cristy + * Correction to allocate a colormap of the maximum colors when color + reducing an image sequence. + * Write to stdout for mp4:-. + +2020-04-25 7.0.10-9 Cristy + * Release ImageMagick version 7.0.10-9, GIT revision 17190:13fdcd1:20200426. + +2020-04-25 7.0.10-9 Cristy + * Allocate a colormap of the maximum colors when color reducing an image + sequence. + * Label was not centered properly (reference + https://github.com/ImageMagick/ImageMagick/issues/1879). + +2020-04-24 7.0.10-8 Cristy + * Release ImageMagick version 7.0.10-8, GIT revision 17175:481b85f:20200424. + +2020-04-23 7.0.10-8 Cristy + * Some configure --with-method-prefix methods were missing (reference + https://github.com/ImageMagick/ImageMagick/issues/1912). + +2020-04-19 7.0.10-7 Cristy + * Release ImageMagick version 7.0.10-7, GIT revision 17170:c635e88:20200419. + +2020-04-07 7.0.10-7 Cristy + * Fix erroneous "insufficient image data" exception (reference + https://github.com/ImageMagick/ImageMagick/issues/1883). + * Fix an unconditional jump for the XPM coder (reference + https://github.com/ImageMagick/ImageMagick/issues/1895). + * Improve unrotate value returned by the minimum bounding box (thanks + to Fred Weinhaus). + + https://github.com/ImageMagick/ImageMagick/discussions/1880). +2020-04-06 7.0.10-6 Cristy + * Release ImageMagick version 7.0.10-6, GIT revision 17146:634bbfd:20200406. + +2020-04-05 7.0.10-5 Cristy + * Release ImageMagick version 7.0.10-5, GIT revision 17143:8be18423e:20200405. + +2020-04-05 7.0.10-5 Cristy + * Default inkscape delegate to version 0.92 (reference + https://github.com/ImageMagick/ImageMagick/discussions/1880). + * Set monochrome image depth to 1 for Group4 compression. + +2020-04-05 7.0.10-4 Cristy + * Release ImageMagick version 7.0.10-4, GIT revision 17137:eeff0b6:20200405 + +2020-03-28 7.0.10-4 Cristy + * The X max attribute for certain fonts is zero (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=1&t=37723). + * Multi-value of jp2:quality does not work (reference + https://github.com/ImageMagick/ImageMagick/issues/1873). + * Return EPS & TIFF images from the EPT image format (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=37781). + +2020-03-27 7.0.10-3 Cristy + * Release ImageMagick version 7.0.10-3, GIT revision 17108:5a4f5a9:20200327. + +2020-03-22 7.0.10-3 Cristy + * The -charcoal option should ignore the alpha channel. + * Fix numerical instability issue when drawing lines + * Improve mono font rendering (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=1&t=37723). + +2020-03-21 7.0.10-2 Cristy + * Release ImageMagick version 7.0.10-2, GIT revision 17088:ed6f37f:20200322. + +2020-03-16 7.0.10-2 Cristy + * Fixed another sizing issue with the label coder when pointsize is set. + * Respect explicit image filename modified (e.g. png24:im.png) (reference + https://github.com/ImageMagick/ImageMagick/issues/1835). + * Add support for returning the minimum bounding box of an image with the + %[minimum-bounding-box] property. + * Stroked dash array render properly again. + +2020-03-15 7.0.10-1 Cristy + * Release ImageMagick version 7.0.10-1, GIT revision 17065:130e52e:20200315. + +2020-03-14 7.0.10-1 Cristy + * Add support for returning the convex hull of an image with the + %[canvas-hull] property. + +2020-03-09 7.0.10-1 Dirk Lemstra + * Added option to specify the preferred version when writing a PDF file with + -define pdf:version=version (e.g. 1.7). + +2020-03-07 7.0.10-1 Cristy + * Do not throw exception on empty draw path (reference + https://github.com/ImageMagick/ImageMagick/issues/974). + * Fix possible buffer overflow in ComplexImages(). + * SVG to MVG requires transforms to appear before clipping paths (reference + https://github.com/ImageMagick/ImageMagick/issues/1860). + +2020-03-06 7.0.10-0 Cristy + * Release ImageMagick version 7.0.10-0, GIT revision 17026:fd430ac9a:20200307 + +2020-03-01 7.0.10-0 Cristy + * Label text no longer gets cut-off (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=1&t=37621). + * Prevent heap overflow (reference + https://github.com/ImageMagick/ImageMagick/issues/1857). + +2020-02-29 7.0.9-27 Cristy + * Release ImageMagick version 7.0.9-27, GIT revision 17006:49d81b672:20200229 + +2020-02-24 7.0.9-27 Cristy + * Make sure we can grok this Fx expression: 1- -2. + * Do not advance when substituting a NULL string. + * Correct alpha for named colors in the Q32 non-HDRI build. + * Write Group4 compressed image as a single strip. + +2020-02-23 7.0.9-26 Cristy + * Release ImageMagick version 7.0.9-26, GIT revision 16972:49f1e4de2:20200223 + +2020-02-22 7.0.9-26 Cristy + * No percent sign in lab() color. + * Introducing the -color-threshold command-line option. + * Handle out of range HDRI values for -statistic option (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=37589). + * Fix improper casting when computing image signature (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=1&t=37594). + +2020-02-21 7.0.9-25 Cristy + * Release ImageMagick version 7.0.9-25, GIT revision 16931:2a56db8:20200221 + +2020-02-18 7.0.9-25 Cristy + * Adapt to a change in command-line options in the SVG inkscape delegate. + +2020-02-17 7.0.9-24 Cristy + * Release ImageMagick version 7.0.9-24, GIT revision 16919:41efef9de:20200217 + +2020-02-15 7.0.9-24 Cristy + * Support connected-components:eccentricity-threshold, + connected-components:major-axis-threshold, + connected-components:minor-axis-threshold, + connected-components:angle-threshold. + * Set the alpha channel if the write mask is not enabled. + * Corrected ellipse orientation when computing image moments. + +2020-02-14 7.0.9-23 Cristy + * Release ImageMagick version 7.0.9-23, GIT revision 16884:acb56cd:20200214 + +2020-02-08 7.0.9-23 Cristy + * Report gray(127.5) as gray(50%). + * Support -define connected-components:perimeter-threshold=min-max + +2020-02-07 7.0.9-22 Cristy + * Release ImageMagick version 7.0.9-22, GIT revision 16855:8733f3e:20200207 + +2020-02-03 7.0.9-22 Cristy + * More work on connect components, e.g. keep-colors, remove-colors, + keep-topids. + * Initialize mutex before locking if its not already initialized. + * Support 24-bit TIFF images. + +2020-02-01 7.0.9-21 Cristy + * Release ImageMagick version 7.0.9-21, GIT revision 16823:290cb93:20200201. + +2020-01-27 7.0.9-21 Cristy + * Support additional connected components defines. + * Refresh cache morphology when writing MPC images. + +2020-01-26 7.0.9-19 Cristy + * Release ImageMagick version 7.0.9-19, GIT revision 16789:bac6ecc:20200126 + +2020-01-26 7.0.9-19 Cristy + * Make PNG creation reproducible (reference + https://github.com/ImageMagick/ImageMagick/pull/1270). + * Refactor uninitialize variable patch for -fx "while(,)" expression. + +2020-01-25 7.0.9-18 Cristy + * Release ImageMagick version 7.0.9-18, GIT revision 16780:08beae5:20200125 + +2020-01-19 7.0.9-18 Cristy + * Alpha draw primitive no longer returns a parser exception. + * Support 32-bit tiled TIFF images. + * New -connected-component options (reference + https://imagemagick.org/script/connected-components.php). + + https://imagemagick.org/discourse-server/viewtopic.php?f=1&t=37391). +2020-01-18 7.0.9-17 Cristy + * Release ImageMagick version 7.0.9-17, GIT revision 16753:c300b3a:20200118 + +2020-01-12 7.0.9-17 Cristy + * Allow larger negative interline spacing (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=1&t=37391). + * Conditional compile for huge xml pages for RSVG delegate library. + * Put "width" property in the PNG namespace (reference + https://github.com/ImageMagick/ImageMagick/issues/1833). + * -combine -colorspace sRGB no longer returns grayscale output (reference + https://github.com/ImageMagick/ImageMagick/issues/1835). + * Support Jzazbz colorspace (contributed by snibgo @ + http://im.snibgo.com/jzazbz.htm). + +2020-01-12 7.0.9-16 Cristy + * Release ImageMagick version 7.0.9-16, GIT revision 16719:fefd765:20200112. + +2020-01-12 7.0.9-16 Cristy + * Fixed three failing Magick.NET unit tests. + +2020-01-11 7.0.9-15 Cristy + * Release ImageMagick version 7.0.9-15, GIT revision 16709:0000f6d:20200111. + +2020-01-11 7.0.9-15 Dirk Lemstra + * Also support svg:xml-parse-huge when using librsvg. + +2020-01-10 7.0.9-15 Cristy + * Optimize -evaluate-sequence option (reference + https://github.com/ImageMagick/ImageMagick/issues/1824). + * Support Fx do() iterator. + * `magick -size 100x100 xc:black black.pnm` no longer creates a white image + (reference https://github.com/ImageMagick/ImageMagick/issues/1817). + * setjmp/longjmp in jpeg.c no longer trigger undefind behavior (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=37379). + * Permit compositing in the CMYK colorspace (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=37368). + +2020-01-04 7.0.9-14 Cristy + * Release ImageMagick version 7.0.9-14, GIT revision 16654:89ef7ea:20200104. + +2020-01-01 7.0.9-14 Cristy + * Support extended Fx assignment operators (e.g. *=, /=, ++, --, etc.) + * Support Fx for() iterator. + * Optimize Fx performance. + * Ensure circle.rb renders the same for IMv6 and IMv7 (reference + https://github.com/rmagick/rmagick/issues/905). + +2019-12-30 7.0.9-13 Cristy + * Release ImageMagick version 7.0.9-13, GIT revision 16616:dbafe0b:20191230. + +2019-12-27 7.0.9-13 Cristy + * xc:white no longer creates a black PNM image (reference + https://github.com/ImageMagick/ImageMagick/issues/1817). + * Sync pixel cache for -kmeans option. + * Thread -kmeans option. + * PSD: only set the alpha channel when type is not 0. + * Fix Lab to custom profile (CMYK or RGB) conversion bug (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=37318). + +2019-12-26 7.0.9-12 Cristy + * Release ImageMagick version 7.0.9-12, GIT revision 16587:7d6a559:20191226. + +2019-12-26 7.0.9-12 Cristy + * Fix Build failure with MinGW-w64 (reference + https://github.com/ImageMagick/ImageMagick6/issues/67). + * Inject image profile properties immediately after the image is read. + +2019-12-23 7.0.9-11 Cristy + * Release ImageMagick version 7.0.9-11, GIT revision 16568:1d6c960:20191224. + +2019-12-18 7.0.9-11 Cristy + * Replace pseudo-random number generator with a Xoshiro generator. + * The -layers optimize option requires a fully transparent previous image. + +2019-12-22 7.0.9-10 Cristy + * Release ImageMagick version 7.0.9-10, GIT revision 16548:281649843:20191222. + +2019-12-18 7.0.9-10 Cristy + * Some clang releases do not support _aligned_alloc(). + * Support -kmeans command-line option. + +2019-12-07 7.0.9-9 Cristy + * Release ImageMagick version 7.0.9-9, GIT revision 16513:8ec82f4:20191215. + +2019-12-07 7.0.9-9 Cristy + * Build file clean-up (reference + https://github.com/ImageMagick/ImageMagick/pull/1798). + * Improve semaphore handling @ + https://github.com/ImageMagick/ImageMagick/pull/1798). + * Introduce HeapOverflowSanityCheckGetExtent() method (reference + https://github.com/ImageMagick/ImageMagick/pull/1798). + +2019-12-01 7.0.9-8 Cristy + * Release ImageMagick version 7.0.9-8, GIT revision 16474:0bc0e95:20191207. + +2019-12-01 7.0.9-8 Cristy + * -type bilevel behavior restored, it creates a black and white image. + +2019-11-30 7.0.9-7 Cristy + * Release ImageMagick version 7.0.9-7, GIT revision 16449:971ba06:20191130. + +2019-11-26 7.0.9-7 Cristy + * Support Pocketmod image format, e.g. + convert -density 300 pages?.pdf pocketmod:organize.pdf + * Fixed numerous issues posted to GitHub (reference + https://github.com/ImageMagick/ImageMagick/issues). + * Update documentation. + +2019-11-26 7.0.9-6 Cristy + * Release ImageMagick version 7.0.9-6, GIT revision 16407:1725ec3:20191126. + +2019-11-19 7.0.9-6 Cristy + * Increase the maximum number of bezier coordinates (reference + https://github.com/ImageMagick/ImageMagick/issues/1784). + * Santize "'" from SHOW and WIN delegates under Linux, '"\' for Windows + (thanks to Enzo Puig). + * Correct for TGA orientation (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=34757). + * The result for -compose Copy -extent on a MYK image is CMYK (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=37118). + * Fix potential buffer overflow when reading a fax image (alert from + Justin). + * Support dng:use-camera-wb option. + +2019-11-17 7.0.9-5 Cristy + * Release ImageMagick version 7.0.9-5, GIT revision 16369:747618e:20191117. + +2019-11-16 7.0.9-5 Cristy + * Ensure Ascii85 compression is thread safe. + * Fixed numerous issues posted to GitHub (reference + https://github.com/ImageMagick/ImageMagick/issues). + +2019-11-13 7.0.9-4 Cristy + * Release ImageMagick version 7.0.9-4, GIT revision 16354:5f53562:20191114. + +2019-11-10 7.0.9-4 Cristy + * Add exception parameter to CMS transform methods. + * Output exception there is an attempt to perform an operation not allowed by + the security policy + * Fixed numerous issues posted to GitHub (reference + https://github.com/ImageMagick/ImageMagick/issues). + +2019-10-30 7.0.9-2 Cristy + * Release ImageMagick version 7.0.9-2, GIT revision 16325:6f84d89:20191030. + +2019-10-29 7.0.9-2 Cristy + * JPEG and JPG are aliases in coder security policy. + * Fixed numerous issues posted to GitHub (reference + https://github.com/ImageMagick/ImageMagick/issues). + +2019-10-27 7.0.9-1 Cristy + * Release ImageMagick version 7.0.9-1, GIT revision 16313:e068be3:20191027. + +2019-10-27 7.0.9-1 Cristy + * Fixed numerous issues posted to GitHub (reference + https://github.com/ImageMagick/ImageMagick/issues). + +2019-10-23 7.0.9-0 Cristy + * Release ImageMagick version 7.0.9-0, GIT revision 16297:8744fd9:20191024 + +2019-10-06 7.0.9-0 Cristy + * Fixed numerous issues posted to GitHub (reference + https://github.com/ImageMagick/ImageMagick/issues). + * Support trim:background-color define for -trim option. + +2019-10-05 7.0.8-68 Cristy + * Release ImageMagick version 7.0.8-68, GIT revision 16184:b75b0e5:20191005. + +2019-09-30 7.0.8-68 Cristy + * Support animated WebP encoding/decoding (reference + https://github.com/ImageMagick/ImageMagick/pull/1708). + * Text stroke cut off (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=1&t=36829). + * Adds support for lossless JPEG1 recompression (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=2&t=36828). + +2019-09-29 7.0.8-67 Cristy + * Release ImageMagick version 7.0.8-67, GIT revision 16145:6f2feb9:20190929. + +2019-09-28 7.0.8-67 Cristy + * line endings renedered as empty boxes (reference + https://github.com/ImageMagick/ImageMagick/issues/1704). + +2019-09-21 7.0.8-66 Cristy + * Release ImageMagick version 7.0.8-66, GIT revision 16134:f6ce80a:20190921. + +2019-09-09 7.0.8-66 Cristy + * Support compound statements in FX while() (reference + https://github.com/ImageMagick/ImageMagick/issues/1701). + +2019-09-15 7.0.8-65 Cristy + * Release ImageMagick version 7.0.8-65, GIT revision 16130:254db34:20190915. + +2019-09-09 7.0.8-65 Cristy + * Eliminate fault when trace delegate is not available. + * Properly distinquish linear and non-linear gray colorspaces (reference + https://github.com/ImageMagick/ImageMagick/issues/1680). + +2019-09-07 7.0.8-64 Cristy + * Release ImageMagick version 7.0.8-64, GIT revision 16108:2ad3cbc:20190907. + +2019-09-02 7.0.8-64 Cristy + * Support XPM symbolic (reference + https://github.com/ImageMagick/ImageMagick/issues/1684). + * DilateIntensity is channel independent (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=36641). + +2019-08-31 7.0.8-63 Cristy + * Release ImageMagick version 7.0.8-63, GIT revision 16088:3b7a33d:20190831. + +2019-08-24 7.0.8-63 Cristy + * Properly identify the DNG and AI image format (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=36581). + +2019-08-23 7.0.8-62 Cristy + * Release ImageMagick version 7.0.8-62, GIT revision 16061:7525595:20190823. + +2019-08-23 7.0.8-62 Dirk Lemstra + * Added option to limit the maximum point size with -define + caption:max-pointsize=pointsize. + * Corrected JP2 numresolution calculation (reference: + https://github.com/ImageMagick/ImageMagick/issues/1673) + +2019-08-19 7.0.8-62 Cristy + * Conditionally compile call to AcquireCLocale() (reference + https://github.com/ImageMagick/ImageMagick/issues/1669). + * More robust support for converting bitmap to vector. + +2019-08-16 7.0.8-61 Cristy + * Release ImageMagick version 7.0.8-61, GIT revision 16033:0c5808c:20190816. + +2019-08-03 7.0.8-61 Cristy + * Issue with -background and -swirl (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=36512). + +2019-08-10 7.0.8-60 Cristy + * Release ImageMagick version 7.0.8-60, GIT revision 16020:52ff205:20190810. + +2019-08-07 7.0.8-60 Cristy + * Enable reading EXR image file from stdin. + +2019-08-04 7.0.8-59 Cristy + * Release ImageMagick version 7.0.8-59, GIT revision 15986:c3de0e7:20190804. + +2019-08-01 7.0.8-59 Cristy + * Module is a reserved keyword for C++ 20 (reference + https://github.com/ImageMagick/ImageMagick/issues/1650). + +2019-07-29 7.0.8-58 Cristy + * Release ImageMagick version 7.0.8-58, GIT revision 15962:cf00632:20190729. + +2019-07-27 7.0.8-58 Cristy + * Improve GetNextToken() performance. + +2019-07-26 7.0.8-57 Cristy + * Release ImageMagick version 7.0.8-57, GIT revision 15948:8fba4a3:20190726. + +2019-07-22 7.0.8-57 Cristy + * Heap-buffer-overflow in Postscript coder (reference + https://github.com/ImageMagick/ImageMagick/issues/1644). + * The -alpha shape option nondeteministic under OpenMP (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=36396). + * Correction to the ModulusAdd and ModulusSubtract composite op (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=2&t=36413). + +2019-07-20 7.0.8-56 Cristy + * Release ImageMagick version 7.0.8-56, GIT revision 15936:2ac4147:20190720. + +2019-07-20 7.0.8-56 Cristy + * Unexpected -alpha shape results (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=36396). + * Converting from PDF to PBM inverts the image (reference + https://github.com/ImageMagick/ImageMagick/issues/1643). + +2019-07-18 7.0.8-55 Cristy + * Release ImageMagick version 7.0.8-55, GIT revision 15930:ac09240:20190718. + +2019-07-18 7.0.8-55 Cristy + * Heap-buffer overflow (reference + https://github.com/ImageMagick/ImageMagick/issues/1641 + * PerlMagick test suite passes again (reference + https://github.com/ImageMagick/ImageMagick/issues/1640) + +2019-07-16 7.0.8-54 Cristy + * Release ImageMagick version 7.0.8-54, GIT revision 15916:e868e22:20190716. + +2019-07-08 7.0.8-54 Cristy + * resolve division by zero (reference + https://github.com/ImageMagick/ImageMagick/issues/1629). + * introducing MagickLevelImageColors() MagickWand method. + * Transient problem with text placement with gravity (reference + https://github.com/ImageMagick/ImageMagick/issues/1633). + * Support TIM2 image format (reference + https://github.com/ImageMagick/ImageMagick/pull/1571). + * For -magnify option, specify an alternative scaling method with -define + magnify:method=method, choose from these methods: eagle2X, eagle3X, + eagle3XB, epb2X, fish2X, hq2X, scale2X (default), scale3X, xbr2X. + +2019-07-05 7.0.8-53 Cristy + * Release ImageMagick version 7.0.8-53, GIT revision 15828:f5d59c0:20190705. + +2019-07-05 7.0.8-53 Cristy + * Fix -fx parsing issue (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=36314). + +2019-07-05 7.0.8-52 Cristy + * Release ImageMagick version 7.0.8-52, GIT revision 15825:ea47310:20190705. + +2019-07-01 7.0.8-52 Cristy + * Eliminate buffer overflow in TranslateEvent() (reference + https://github.com/ImageMagick/ImageMagick/issues/1621). + +2019-06-30 7.0.8-51 Cristy + * Release ImageMagick version 7.0.8-51, GIT revision 15812:51f11c4:20190630. + +2019-06-24 7.0.8-51 Cristy + * Clone rather than copy X window name/icon. + * Optimize PDF reader. + +2019-06-23 7.0.8-50 Cristy + * Release ImageMagick version 7.0.8-50, GIT revision 15778:4a60519:20190623 + +2019-06-14 7.0.8-50 Dirk Lemstra + * Added support for reading all images from a HEIC image (reference + https://github.com/ImageMagick/ImageMagick/issues/1391). + * Heap-buffer-overflow in MagickCore/fourier.c (reference + https://github.com/ImageMagick/ImageMagick/issues/1588). + * Fixed a number of issues (reference + https://imagemagick.org/discourse-server/viewforum.php?f=3). + * Fixed a number of issues (reference + https://github.com/ImageMagick/ImageMagick/issues). + +2019-06-08 7.0.8-49 Cristy + * Release ImageMagick version 7.0.8-49, GIT revision 15708:6d7e1db:20190608 + +2019-06-03 7.0.8-49 Cristy + * Add support for RGB565 image format (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=2&t=36078). + * Use user defined allocator instead of `malloc` (reference + https://github.com/ImageMagick/ImageMagick6/pull/49/). + * Add static decorator to accelerator kernels (reference + https://github.com/ImageMagick/ImageMagick/issues/1366). + +2019-06-01 7.0.8-48 Cristy + * Release ImageMagick version 7.0.8-48, GIT revision 15689:061a3bb82:20190601 + +2019-06-01 7.0.8-48 Cristy + * Fix transient convolution bug (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=36119). + +2019-05-26 7.0.8-47 Cristy + * Release ImageMagick version 7.0.8-47, GIT revision 15681:5cffc6cbb:20190526 + +2019-05-19 7.0.8-47 Cristy + * Support 16 and 32 bit tiled float TIFF images. + * Convolve morphology alpha channel fix (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=36086). + * Text improvements to the internal SVG renderer. + +2019-05-14 7.0.8-46 Cristy + * Release ImageMagick version 7.0.8-46, GIT revision 15655:84dd3301c:20190518 + +2019-05-14 7.0.8-46 Cristy + * PerlMagick unit tests pass again. + * Builds under MacOS X and FreeBSD works again. + * Return HEIC images in the sRGB colorspace. + +2019-05-12 7.0.8-45 Cristy + * Release ImageMagick version 7.0.8-45, GIT revision 15634:784105bcb:20190512 + +2019-05-06 7.0.8-45 Cristy + * Fix image signatures to ensure they are Q-depth invariant (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=1&t=35970). + * Fixed a number of issues (reference + https://imagemagick.org/discourse-server/viewforum.php?f=3). + * Fixed a number of issues (reference + https://github.com/ImageMagick/ImageMagick/issues). + +2019-05-03 7.0.8-44 Cristy + * Release ImageMagick version 7.0.8-44, GIT revision 15600:41f47759a:20190503 + +2019-05-03 7.0.8-44 Cristy + * Fixed a number of issues (reference + https://imagemagick.org/discourse-server/viewforum.php?f=3). + * Fixed a number of issues (reference + https://github.com/ImageMagick/ImageMagick/issues). + +2019-05-01 7.0.8-43 Cristy + * Release ImageMagick version 7.0.8-43, GIT revision 15595:0062cef74:20190502 + +2019-05-01 7.0.8-43 Cristy + * Fixed a number of issues (reference + https://imagemagick.org/discourse-server/viewforum.php?f=3). + * Fixed a number of issues (reference + https://github.com/ImageMagick/ImageMagick/issues). + +2019-04-29 7.0.8-42 Cristy + * Release ImageMagick version 7.0.8-42, GIT revision 15570:71190ccd0:20190424 + +2019-04-20 7.0.8-42 Cristy + * Fixed a number of issues (reference + https://imagemagick.org/discourse-server/viewforum.php?f=3). + * Fixed a number of issues (reference + https://github.com/ImageMagick/ImageMagick/issues). + +2019-04-19 7.0.8-41 Cristy + * Release ImageMagick version 7.0.8-41, GIT revision 15540:c78993d13:20190420 + +2019-04-13 7.0.8-41 Cristy + * Fixed a number of issues (reference + https://imagemagick.org/discourse-server/viewforum.php?f=3). + * Fixed a number of issues (reference + https://github.com/ImageMagick/ImageMagick/issues). + * Honor SOURCE_DATE_EPOCH environment variable (reference + https://github.com/ImageMagick/ImageMagick/pull/1496/). + * Standardize on UTC time for any image format timestamp. + * Add MagickAutoThresholdImage(), MagickCannyEdgeImage(), + MagickComplexImages(), MagickConnectedComponentsImage(), + MagickHoughLineImage(), MagickKuwaharaImage(), MagickLevelizeImageColors(), + MagickLevelImageColors(), MagickMeanShiftImage(), MagickPolynomialImage(), + MagickRangeThresholdImage(), MagickSetSeed(), MagickWaveletDenoiseImage() + methods to MagickWand API. + +2019-04-12 7.0.8-40 Cristy + * Release ImageMagick version 7.0.8-40, GIT revision 15510:7e503e231:20190412 + +2019-04-10 7.0.8-40 Cristy + * Fixed a number of issues (reference + https://imagemagick.org/discourse-server/viewforum.php?f=3). + * Fixed a number of issues (reference + https://github.com/ImageMagick/ImageMagick/issues). + + +2019-04-07 7.0.8-39 Cristy + * Release ImageMagick version 7.0.8-39, GIT revision 15489:6120f8bc1:20190406 + +2019-04-06 7.0.8-39 Cristy + * The -layers option compared pixels inocorrectly as opacity rather than + alpha. + * The -preview raise option now returns expected results. + * Initialise ghostscript instances with NULL (reference + https://github.com/ImageMagick/ImageMagick/pull/1538). + +2019-04-06 7.0.8-38 Cristy + * Release ImageMagick version 7.0.8-38, GIT revision 15483:23edcef04:20190406 + +2019-04-06 7.0.8-38 Cristy + * Modulo off by one patch for -virtual-pixel option (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=35789). + +2019-04-03 7.0.8-37 Cristy + * Release ImageMagick version 7.0.8-37, GIT revision 15470:477216fd7:20190403 + +2019-04-03 7.0.8-37 Cristy + * Fixed -virtual-pixel option (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=35789). + +2019-03-31 7.0.8-36 Cristy + * Release ImageMagick version 7.0.8-36, GIT revision 15464:3a928224d:20190331 + +2019-03-27 7.0.8-36 Cristy + * Fixed a number of issues (reference + https://github.com/ImageMagick/ImageMagick/issues). + +2019-03-24 7.0.8-35 Cristy + * Release ImageMagick version 7.0.8-35, GIT revision 15440:4a0a88e41:20190324 + +2019-03-23 7.0.8-35 Cristy + * -draw image DstOver is now responsive to the composite operator (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=1&t=35650). + * Fixed a number of issues (reference + https://github.com/ImageMagick/ImageMagick/issues). + +2019-03-15 7.0.8-34 Cristy + * Release ImageMagick version 7.0.8-34, GIT revision 15413:860af935d:20190315 + +2019-03-11 7.0.8-34 Cristy + * Associate one lock with each resource. + * Report exception if opening TIFF did not work out. + * Fixed numerous use of uninitialized values, integer overflow, memory + exceeded, and timeouts (credit to OSS Fuzz). + +2019-03-10 7.0.8-33 Cristy + * Release ImageMagick version 7.0.8-33, GIT revision 15401:c805e3205:20190310 + +2019-03-06 7.0.8-33 Cristy + * Fix SVG conversion infinite loop (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=35591). + * Initialize primitive drawing structure after resizing. + +2019-03-05 7.0.8-32 Cristy + * Release ImageMagick version 7.0.8-32, GIT revision 15386:58d9c4692:20190305 + +2019-03-05 7.0.8-32 Cristy + * Fix out-of-boundary LocaleLowerCase() @ + https://github.com/ImageMagick/ImageMagick/issues/1495 + +2019-03-04 7.0.8-31 Cristy + * Release ImageMagick version 7.0.8-31, GIT revision 15381:3122a669d:20190304 + +2019-03-04 7.0.8-31 Cristy + * -trim is no longer sensitive to the image virtual canvas. + +2019-03-03 7.0.8-30 Cristy + * Release ImageMagick version 7.0.8-30, GIT revision 15376:16d2b4e6a:20190303 + +2019-03-03 7.0.8-30 Cristy + * Support define to remove additional background from an image during a + trim, e.g. -fuzz 5% -define trim:percent-background=0% -trim. + +2019-02-28 7.0.8-29 Cristy + * Release ImageMagick version 7.0.8-29, GIT revision 15368:5d8ed9f56:20190228 + +2019-02-28 7.0.8-29 Cristy + * Fixed a number of issues (reference + https://github.com/ImageMagick/ImageMagick/issues). + * Fixed numerous use of uninitialized values, integer overflow, memory + exceeded, and timeouts (credit to OSS Fuzz). + +2019-02-18 7.0.8-28 Cristy + * Release ImageMagick version 7.0.8-28, GIT revision 15345:09a7c67dd:20190218 + +2019-02-12 7.0.8-28 Cristy + * Fixed a number of issues (reference + https://github.com/ImageMagick/ImageMagick/issues). + +2019-02-09 7.0.8-27 Cristy + * Release ImageMagick version 7.0.8-27, GIT revision 15315:5d48cd312:20190209 + +2019-02-09 7.0.8-27 Cristy + * Mod patch to properly handle subimage ranges (e.g. image.gif[2-3]). + +2019-02-03 7.0.8-26 Cristy + * Release ImageMagick version 7.0.8-26, GIT revision 15294:726bd82a3:20190203 + +2019-02-02 7.0.8-26 Cristy + * Fixed a number of issues (reference + https://github.com/ImageMagick/ImageMagick/issues). + +2019-01-27 7.0.8-25 Cristy + * Release ImageMagick version 7.0.8-25, GIT revision 15279:7da783a5b:20190127 + +2019-01-19 7.0.8-25 Cristy + * Eliminate spurious font warning (reference + https://github.com/ImageMagick/ImageMagick/issues/1458). + * Support HEIC EXIF & XMP profiles. + +2019-01-12 7.0.8-24 Cristy + * Release ImageMagick version 7.0.8-24, GIT revision 15233:db129ba64:20190112 + +2019-01-08 7.0.8-24 Cristy + * Support -clahe option real clip limit (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=2&t=35292). + * ShadeImage() kernels can return negative pixels, clamp to range (reference + https://github.com/ImageMagick/ImageMagick/issues/1319). + * Annotate with negative offsets no longer renders slanted text. + +2019-01-01 7.0.8-23 Cristy + * Release ImageMagick version 7.0.8-23, GIT revision 15199:ba07f7d07:20190101 + +2019-01-01 7.0.8-23 Cristy + * CacheInfo destructor must be aligned in DestroyPixelStream(). + +2018-12-30 7.0.8-22 Cristy + * Release ImageMagick version 7.0.8-22, GIT revision 15189:842164090:20181230 + +2018-12-29 7.0.8-22 Cristy + * Support negative rotations in a geometry (e.g. -10x-10+10+10). + * Return expected canvas offset after a crop with gravity. + +2018-12-27 7.0.8-21 Cristy + * Release ImageMagick version 7.0.8-21, GIT revision 15179:114be1716:20181227 + +2018-12-27 7.0.8-21 Cristy + * Check to ensure SeekBlob() offset can be represented in an off_t. + +2018-12-23 7.0.8-20 Cristy + * Release ImageMagick version 7.0.8-20, GIT revision 15170:8e8222e87:20181223 + +2018-12-23 7.0.8-20 Cristy + * Cube image format returns a HALD image. + * CLAHE tiles overlapped are now centered relative to the image. + +2018-12-19 7.0.8-19 Cristy + * Release ImageMagick version 7.0.8-19, GIT revision 15153:e74ed77f5:20181219 + +2018-12-18 7.0.8-18 Cristy + * Release ImageMagick version 7.0.8-18, GIT revision 15146:b5eccd295:20181218 + +2018-12-18 7.0.8-18 Cristy + * Fixed Magick++ compile error on Mac OS X. + +2018-12-17 7.0.8-17 Cristy + * Release ImageMagick version 7.0.8-17, GIT revision 15142:32f2d195e:20181217 + +2018-12-02 7.0.8-16 Cristy + * Support -clahe clip limit with percentages (e.g. -clahe 50x50%+128+3). + +2018-12-10 7.0.8-16 Cristy + * Release ImageMagick version 7.0.8-16, GIT revision 15109:9a9af88de:20181210. + +2018-12-02 7.0.8-16 Cristy + * Check for modulo underflow. + * Change SVG default DPI to 96 from 90 to meet recommendation of SVG2 & CSS. + +2018-12-01 7.0.8-15 Cristy + * Release ImageMagick version 7.0.8-15, GIT revision 15059:2fb22e07b:20181201 + +2018-11-21 7.0.8-15 Cristy + * Added support for the -clahe option: contrast limited adaptive histogram + equalization. + +2018-11-13 7.0.8-15 Dirk Lemstra + * Added support for GIMP 2.10 files (reference + https://github.com/ImageMagick/ImageMagick/pull/1381). + +2018-10-23 7.0.8-14 Cristy + * Release ImageMagick version 7.0.8-14, GIT revision 14943:1a0da3dd0:20181023 + +2018-10-21 7.0.8-13 Cristy + * Release ImageMagick version 7.0.8-13, GIT revision 14936:d3ec5abe2:20181021. + +2018-10-04 7.0.8-13 Dirk Lemstra + * Adding coder headers with magic.xml will no longer be supported. + * Adding coder aliases with coder.xml will no longer be supported. + +2018-09-16 7.0.8-12 Cristy + * Release ImageMagick version 7.0.8-12, GIT revision 14843:cb5cf1959:20180923 + +2018-09-15 7.0.8-12 Dirk Lemstra + * Added support for arithmetic coding to the jpeg encoder: + -define jpeg:arithmetic-coding=true. + +2018-09-08 7.0.8-12 Cristy + * Fixed numerous use of uninitialized values, integer overflow, memory + exceeded, and timeouts (credit to OSS Fuzz). + +2018-08-28 7.0.8-11 Cristy + * Release ImageMagick version 7.0.8-11, GIT revision 14729:798fbdb5b:20180828 + +2018-08-15 7.0.8-11 Cristy + * Fixed numerous use of uninitialized values, integer overflow, memory + exceeded, and timeouts (credit to OSS Fuzz). + * Add support for "module" security policy. + +2018-08-13 7.0.8-10 Cristy + * Release ImageMagick version 7.0.8-10, GIT revision 14646:48fba3256:20180813 + +2018-08-12 7.0.8-10 Dirk Lemstra + * Added dcraw coder (dcraw:img.cr2) that can be used to force the use of the + dcraw delegate when libraw is the default raw delegate. + * Restored thread support for the HEIC coder. + +2018-08-08 7.0.8-10 Cristy + * ThumbnailImage function no longer reveals sensitive information (reference + https://github.com/ImageMagick/ImageMagick/issues/1243). + +2018-08-06 7.0.8-9 Cristy + * Release ImageMagick version 7.0.8-9, GIT revision 14618:a3663c3dc:20180805. + +2018-07-24 7.0.8-9 Cristy + * XBM coder leaves the hex image data uninitialized if hex value of the + pixel is negative. + * More improvements to SVG text handling. + * New -range-threshold option that combines hard and soft thresholding. + +2018-07-23 7.0.8-8 Cristy + * Release ImageMagick version 7.0.8-8, GIT revision 14583:300fdbcfd:20180723. + +2018-07-20 7.0.8-8 Cristy + * Non-HDRI ScaleLongToQuantum() private method no longer adds a half interval. + * Fixed memset() negative-size-param (reference + https://github.com/ImageMagick/ImageMagick/issues/1217). + +2018-07-16 7.0.8-7 Cristy + * Release ImageMagick version 7.0.8-7, GIT revision 14561:f85c23180:20180716. + +2018-07-15 7.0.8-7 Cristy + * Fixed numerous use of uninitialized values, integer overflow, memory + exceeded, and timeouts (credit to OSS Fuzz). + +2018-07-08 7.0.8-6 Cristy + * Release ImageMagick version 7.0.8-6, GIT revision 14541:db940ccd2:20180708. + +2018-07-06 7.0.8-6 Cristy + * Improve SVG support for tspan element. + * Add support for -fx image.extent. + +2018-07-04 7.0.8-5 Cristy + * Release ImageMagick version 7.0.8-5, GIT revision 14514:bba545bbb:20180704. + +2018-07-04 7.0.8-5 Cristy + * Fixed a few potential memory leaks + https://github.com/ImageMagick/ImageMagick/issues). + +2018-07-02 7.0.8-4 Cristy + * Release ImageMagick version 7.0.8-4, GIT revision 14505:4613eed4a:20180702. + +2018-06-28 7.0.8-4 Cristy + * Small tweaks to compile under Cygwin. + * Fixed numerous use of uninitialized values, integer overflow, memory + exceeded, and timeouts (credit to OSS Fuzz). + * Support %B property, the image file size without any decorations. + +2018-06-24 7.0.8-3 Cristy + * Release ImageMagick version 7.0.8-3, GIT revision 14489:c63c504e8:20180624. + +2018-06-24 7.0.8-3 Cristy + * Apply translate component of SVG transform rotate. + +2018-06-18 7.0.8-2 Cristy + * Release ImageMagick version 7.0.8-2, GIT revision 14476:cda11d81d:20180618. + +2018-06-18 7.0.8-2 Cristy + * More robust SVG text handling. + +2018-06-16 7.0.8-1 Cristy + * Release ImageMagick version 7.0.8-1, GIT revision 14468:94cb08785:20180616. + +2018-06-16 7.0.8-1 Cristy + * Fixed numerous use of uninitialized values, integer overflow, memory + exceeded, and timeouts (credit to OSS Fuzz). + * Fixed an issue with stroke and label: (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=34142). + * PNG: set storage class to DirectClass if alpha enabled (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=34121). + +2018-06-12 7.0.8-0 Cristy + * Release ImageMagick version 7.0.8-0, GIT revision 14459:d7c892d5a:20180612. + +2018-06-11 7.0.8-0 + * Fixed numerous use of uninitialized values, integer overflow, memory + exceeded, and timeouts (credit to OSS Fuzz). + +2018-06-11 7.0.7-39 Cristy + * Release ImageMagick version 7.0.7-39, GIT revision 14445:cc962acde:20180611. + +2018-06-06 7.0.7-39 + * Fixed numerous use of uninitialized values, integer overflow, memory + exceeded, and timeouts (credit to OSS Fuzz). + +2018-06-02 7.0.7-38 Cristy + * Release ImageMagick version 7.0.7-38, GIT revision 14409:01e395a73:20180602. + +2018-05-30 7.0.7-38 + * Heap buffer overflow fix (reference + https://github.com/ImageMagick/ImageMagick/issues/1156). + * Boundary issues with -gamma option when HDRI is enabled (reference + https://github.com/ImageMagick/ImageMagick/issues/1151). + * Fixed numerous use of uninitialized values, integer overflow, memory + exceeded, and timeouts (credit to OSS Fuzz). + +2018-05-29 7.0.7-37 Cristy + * Release ImageMagick version 7.0.7-37, GIT revision 14393:61d7e8b17:20180529. + +2018-05-29 7.0.7-37 + * Properly initialize SVG color style. + +2018-05-28 7.0.7-36 Cristy + * Release ImageMagick version 7.0.7-36, GIT revision 14390:3a6bd703f:20180528. + +2018-05-28 7.0.7-36 + * A SVG rectangle with a width and height of 1 is a point. + +2018-05-21 7.0.7-35 Cristy + * Release ImageMagick version 7.0.7-35, GIT revision 14356:13507412c:20180521. + +2018-05-21 7.0.7-35 + * Fixed memory corruption for MVG paths. + +2018-05-20 7.0.7-34 Cristy + * Release ImageMagick version 7.0.7-34, GIT revision 14348:ac9ff6ba1:20180520. + +2018-05-20 7.0.7-34 Dirk Lemstra + * Added support for reading eXIf chunks to the PNG coder. + +2018-05-19 7.0.7-34 + * Fixed numerous use of uninitialized values, integer overflow, memory + exceeded, and timeouts (credit to OSS Fuzz). + * Improved clip / composite mask handling. + +2018-05-16 7.0.7-33 Cristy + * Release ImageMagick version 7.0.7-33, GIT revision 14326:58c2e4972:20180516. + +2018-05-03 7.0.7-33 + * Restore SetImageAlpha() behavior. + * Fix -clip and -mask options. + +2018-05-13 7.0.7-32 Cristy + * Release ImageMagick version 7.0.7-32, GIT revision 14307:f61f674e3:20180513. + +2018-05-03 7.0.7-31 + * Fixed numerous use of uninitialized values, integer overflow, memory + exceeded, and timeouts (credit to OSS Fuzz). + +2018-05-01 7.0.7-30 Cristy + * Release ImageMagick version 7.0.7-30, GIT revision 14242:730f1d1d3:20180501. + +2018-05-01 7.0.7-30 + * Missing break when checking "compliance" element. + +2018-04-30 7.0.7-29 Cristy + * Release ImageMagick version 7.0.7-29, GIT revision 14225:41edbdcea:20180430. + +2018-03-26 7.0.7-29 + * Fixed numerous use of uninitialized values, integer overflow, memory + exceeded, and timeouts (credit to OSS Fuzz). + +2018-03-24 7.0.7-28 Cristy + * Release ImageMagick version 7.0.7-28, GIT revision 23615:edd71782e:20180325. + +2018-03-21 7.0.7-28 + * Fixed numerous use of uninitialized values, integer overflow, memory + exceeded, and timeouts (credit to OSS Fuzz). + +2018-03-18 7.0.7-27 Cristy + * Release ImageMagick version 7.0.7-27, GIT revision 23466:734b146df:20180318. + +2018-03-17 7.0.7-27 + * Fixed numerous use of uninitialized values, integer overflow, memory + exceeded, and timeouts (credit to OSS Fuzz). + +2018-03-11 7.0.7-26 Cristy + * Release ImageMagick version 7.0.7-26, GIT revision 23344:7a03766ef:20180311. + +2018-03-10 7.0.7-26 + * Fixed numerous use of uninitialized values, integer overflow, memory + exceeded, and timeouts (credit to OSS Fuzz). + +2018-03-04 7.0.7-25 Cristy + * Release ImageMagick version 7.0.7-25, GIT revision 23177:17a986472:20180304. + +2018-03-04 7.0.7-25 Cristy + * Fixed numerous use of uninitialized values, integer overflow, memory + exceeded, and timeouts (credit to OSS Fuzz). + +2018-02-25 7.0.7-24 Cristy + * Release ImageMagick version 7.0.7-24, GIT revision 23079:7ccb76178:20180225. + +2018-02-19 7.0.7-24 Cristy + * Do not refer to page in OptimizeLayerFrames (reference + https://github.com/ImageMagick/ImageMagick/pull/987). + * PerlMagick unit tests pass again. + * Fixed numerous use of uninitialized values, integer overflow, + memory exceeded, and timeouts (credit to OSS Fuzz). + +2018-02-18 7.0.7-23 Cristy + * Release ImageMagick version 7.0.0-23, GIT revision 22969:c6b3a22b0:20180218. + +2018-02-09 7.0.7-23 Dirk Lemstra + * Add support for reading the HEIC image format to the Windows build. + +2018-01-23 7.0.7-23 Cristy + * Fixed numerous use of uninitialized values, integer overflow, + memory exceeded, and timeouts (credit to OSS Fuzz). + * Add list-length policy to limit the maximum image sequence length. + +2018-01-22 7.0.7-22 Cristy + * Release ImageMagick version 7.0.0-22, GIT revision 22391:e8be814f1:20180122. + +2018-01-06 7.0.7-22 Cristy + * Support aspect ratio geometry, e.g. -crop 3:2. + * Add support for reading the HEIC image format (reference + https://github.com/ImageMagick/ImageMagick/issues/507). + * Fixed numerous memory leaks, credit to OSS Fuzz. + +2018-01-06 7.0.7-21 Cristy + * Release ImageMagick version 7.0.0-21, GIT revision 22168:a91afc45b:20180106. + +2018-01-06 7.0.7-21 Dirk Lemstra + * Fix some enum values in the OpenCL code. + +2018-01-06 7.0.7-20 Cristy + * Release ImageMagick version 7.0.7-20, GIT revision 22161:33a04d3e5:20180105. + +2018-01-05 7.0.7-20 Cristy + * Fixed numerous memory leaks (reference + https://github.com/ImageMagick/ImageMagick/issues). + +2018-01-01 7.0.7-19 Cristy + * Release ImageMagick version 7.0.7-19, GIT revision 22133:977fe08bf:20180101. + +2017-12-29 7.0.7-19 Cristy + * Check for webpmux library version 0.4.4 (reference + https://github.com/ImageMagick/ImageMagick/issues/896). + +2017-12-26 7.0.7-18 Cristy + * Release ImageMagick version 7.0.7-18, GIT revision 22096:ad4bdeb40:20171228. + +2017-12-28 7.0.7-18 Cristy + * Fix error reading from pipe under Windows (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=33288). + +2017-12-26 7.0.7-17 Cristy + * Release ImageMagick version 7.0.7-17, GIT revision 22093:9caea323b:20171227. + +2017-12-26 7.0.7-17 Cristy + * Fix heap use after free error (reference + https://github.com/ImageMagick/ImageMagick/issues/918). + +2017-12-24 7.0.7-16 Cristy + * Release ImageMagick version 7.0.7-16, GIT revision 22038:e55dc7626:20171225. + +2017-12-18 7.0.7-16 Cristy + * Fix error reading multi-layer XCF image file. + * Fix possible stack overflow in WEBP reader (reference + https://github.com/ImageMagick/ImageMagick/issues/907) + * Fixed numerous memory leaks (reference + https://github.com/ImageMagick/ImageMagick/issues). + +2017-12-16 7.0.7-15 Cristy + * Release ImageMagick version 7.0.7-15, GIT revision 21924:30cb31746:20171216. + +2017-12-08 7.0.7-15 Cristy + * Overall standard deviation is the average of each pixel channel (reference + https://imagemagick.org/discourse-server/viewforum.php?f=3). + * Update to the latest ImageMagick documentation. + +2017-12-05 7.0.7-14 Cristy + * Release ImageMagick version 7.0.7-14, GIT revision 21855:dc73b2aba:20171205. + +2017-11-30 7.0.7-14 Cristy + * Support Stereo composite operator. + * Fix build failure with --without-modules (reference + https://github.com/ImageMagick/ImageMagick/issues/890). + +2017-11-30 7.0.7-13 Cristy + * Release ImageMagick version 7.0.7-13, GIT revision 21823:72cb0fd0c:20171130. + +2017-11-30 7.0.7-13 Cristy + * Fix build failure with libraw 0.14.8 (reference + https://github.com/ImageMagick/ImageMagick/issues/888). + +2017-11-29 7.0.7-12 Cristy + * Release ImageMagick version 7.0.7-12, GIT revision 21814:5ef2c5a67:20171129. + +2017-11-12 7.0.7-12 Cristy + * The -tint option no longer munges the alpha channel (reference + http://imagemagick.org/discourse-server/viewtopic.php?f=1&t=33070). + * Don't delete in-memory blob when reading an image (reference + https://github.com/ImageMagick/ImageMagick/issues/886). + * Support HDRI color profile management. + +2017-11-11 7.0.7-11 Cristy + * Release ImageMagick version 7.0.7-11, GIT revision 21635:0447c6b46:20171111. + +2017-11-05 7.0.7-10 Cristy + * Release ImageMagick version 7.0.7-10, GIT revision 21612:36e2aabfd:20171105. + +2017-11-03 7.0.7-10 Dirk Lemstra + * Fixed a problem with resource bookkeeping in AcquireMatrixInfo(). + +2017-10-30 7.0.7-9 Cristy + * Release ImageMagick version 7.0.7-9, GIT revision 21580:2682a311e:20171031. + +2017-10-20 7.0.7-9 Cristy + * Encode JSON control characters (reference + https://github.com/ImageMagick/ImageMagick/issues/848). + +2017-10-27 7.0.7-9 Dirk Lemstra + * Added support for reading mipmaps in dds images (reference + https://github.com/ImageMagick/ImageMagick/issues/845). + +2017-10-15 7.0.7-8 Cristy + * Release ImageMagick version 7.0.7-8, GIT revision 21507:63ffc9878:20171015. + +2017-10-08 7.0.7-8 Cristy + * Return expected results for a percent 0 -chop option argument (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=32806). + * Tweaks to OpenMP support within ImageMagick. + +2017-10-07 7.0.7-7 Cristy + * Release ImageMagick version 7.0.7-7, GIT revision 21432:29003eeed:20171007. + +2017-10-06 7.0.7-7 Cristy + * Correct handling of GIF transparency (reference + https://github.com/ImageMagick/ImageMagick/issues/831). + +2017-10-04 7.0.7-6 Cristy + * Release ImageMagick version 7.0.7-6, GIT revision 21426:0a1cb507b:20171004. + +2017-10-03 7.0.7-6 Cristy + * Reset the magick_list_initialized boolean when needed (reference + https://github.com/ImageMagick/ImageMagick/pull/826). + +2017-10-01 7.0.7-5 Cristy + * Release ImageMagick version 7.0.7-5, GIT revision 21382:3846f9d97:20171001. + +2017-09-28 7.0.7-5 Cristy + * Fixed numerous memory leaks (reference + https://github.com/ImageMagick/ImageMagick/issues). + * Support URW-base35 fonts. + +2017-09-26 7.0.7-5 Glenn Randers-Pehrson + * Removed "ping_preserve_iCCP=MagickTrue;" statement that was inadvertently + added to coders/png.c (reference + http://imagemagick.org/discourse-server/viewtopic.php?f=3&t=32771). + +2017-09-23 7.0.7-4 Cristy + * Release ImageMagick version 7.0.7-4, GIT revision 21265:bdbc14590:20170923. + +2017-09-23 7.0.7-4 Cristy + * Fixed numerous memory leaks (reference + https://github.com/ImageMagick/ImageMagick/pull/763). + +2017-09-17 7.0.7-3 Cristy + * Release ImageMagick version 7.0.7-3, GIT revision 21202:6e6907ac7:20170917. + +2017-09-17 7.0.7-3 ADLab of Venustech + * Fixed numerous memory leaks (reference + https://github.com/ImageMagick/ImageMagick/pull/763). + +2017-09-15 7.0.7-3 Glenn Randers-Pehrson + * Stop potential leaks in the JNG decoder (reference: + https://github.com/ImageMagick/ImageMagick/issues/760). + * Maximum valid hour is 23, not 24, in the PNG tIME chunk, and maximum + valid minute is 59, not 60. + +2017-09-12 7.0.7-2 Cristy + * Release ImageMagick version 7.0.7-2, GIT revision 21089:4e46ad9dd:20170912. + +2017-09-11 7.0.7-2 Glenn Randers-Pehrson + * Use signed integer arithmetic to calculate timezone corrections (reference + https://github.com/ImageMagick/ImageMagick/issues/685). + +2017-09-09 7.0.7-1 Cristy + * Release ImageMagick version 7.0.7-1, GIT revision 21065:ab2194121:20170909. + +2017-09-09 7.0.7-1 Cristy + * Fixed numerous memory leaks (reference + https://github.com/ImageMagick/ImageMagick/issues). + +2017-09-05 7.0.7-1 Dirk Lemstra + * Added -define tiff:write-layers=true to add support for writing layered + tiff files. + +2017-09-03 7.0.7-0 Cristy + * Release ImageMagick version 7.0.7-0, GIT revision 20996:2f8ac2203:20170903. + +2017-08-28 7.0.7-0 Cristy + * Fixed numerous memory leaks (reference + https://github.com/ImageMagick/ImageMagick/issues). + * Don't overwrite symbolic links when the shred policy is enabled. + +2017-08-27 7.0.6-10 Cristy + * Release ImageMagick version 7.0.6-10, GIT revision 20920:9940c367a:20170827. + +2017-08-27 7.0.6-10 Cristy + * Support -metric ssim, structual similarity index. + +2017-08-26 7.0.6-10 Dirk Lemstra + * Fixed thread safety issue inside the pango and librsvg decoder + (reference: https://github.com/dlemstra/Magick.NET/issues/91). + +2017-08-20 7.0.6-9 Cristy + * Release ImageMagick version 7.0.6-9, GIT revision 20860:3f307d8ad:20170820. + +2017-08-18 7.0.6-9 Glenn Randers-Pehrson + * Fixed bug with writing tIME chunk when timezone has a negative offset + (reference: https://github.com/ImageMagick/ImageMagick/issues/685) + +2017-08-18 7.0.6-8 Cristy + * Release ImageMagick version 7.0.6-8, GIT revision 20838:e2eb79427:20170818. + +2017-08-14 7.0.6-7 Cristy + * Fixed numerous memory leaks (reference + https://github.com/ImageMagick/ImageMagick/issues). + * Support CubicSpline resize filter. Define the lobes with the + -define filter:lobes={2,3,4} (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=2&t=32506). + * Prevent assertion failure when creating PDF thumbnail (reference + https://github.com/ImageMagick/ImageMagick/issues/674). + +2017-08-12 7.0.6-7 Cristy + * Release ImageMagick version 7.0.6-7, GIT revision 20799:0db4d8a16:20170812. + +2017-08-12 7.0.6-7 Cristy + * Improve EPS aliasing (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=32497). + +2017-08-11 7.0.6-7 Dirk Lemstra + * Added a new option called 'dds:fast-mipmaps' (reference + https://github.com/ImageMagick/ImageMagick/issues/558) + * The mipmaps of a dds image can now be created from a list of images with + -define dds:mipmaps=fromlist (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=2&t=30236). + +2017-08-10 7.0.6-6 Cristy + * Release ImageMagick version 7.0.6-6, GIT revision 20775:061d0fa25:20170810. + +2017-08-10 7.0.6-6 Cristy + * Fixed numerous memory leaks (reference + https://github.com/ImageMagick/ImageMagick/issues). + +2017-08-10 7.0.6-6 Glenn Randers-Pehrson + * tests/validate.c: Show the reason for failures in the test logs, + if available. + +2017-08-03 7.0.6-6 Glenn Randers-Pehrson + * Put UTC time in the PNG tIME chunk instead of local time (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=32447). + +2017-08-02 7.0.6-5 Cristy + * Release ImageMagick version 7.0.6-5, GIT revision 20715:26b28d50a:20170802. + +2017-08-01 7.0.6-5 Cristy + * Fixed numerous memory leaks (reference + https://github.com/ImageMagick/ImageMagick/issues). + +2017-07-29 7.0.6-5 Glenn Randers-Pehrson + * Properly set image->colorspace in the PNG decoder (previously + it was setting image->gamma, but only setting image->colorspace + for grayscale and gray-alpha images. Reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=32418). + * Fix improper use of NULL in the JNG decoder (CVE-2017-11750, Reference + https://github.com/ImageMagick/ImageMagick/issues/632). + * Added "-define png:ignore-crc" option to PNG decoder. When you know + your image has no CRC or ADLER32 errors, this can speed up decoding. + It is also helpful in debugging bug reports from "fuzzers". + +2017-07-29 7.0.6-5 Cristy + * Off by one error for gradient coder (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=32416), + https://github.com/ImageMagick/ImageMagick/issues/612). + +2017-07-28 7.0.6-4 Cristy + * Release ImageMagick version 7.0.6-4, GIT revision 20657:4e81160d6:20170728. + +2017-07-24 7.0.6-4 Cristy + * YUV coder no longer renders streaks (reference + https://github.com/ImageMagick/ImageMagick/issues/612). + * Fixed numerous memory leaks (reference + https://github.com/ImageMagick/ImageMagick/issues) including + https://github.com/ImageMagick/ImageMagick/issues/618 (CVE-2017-12676). + * coders/png.c: Initialized quantum_scanline and quantum_info + to prevent a bad free (reference + https://github.com/ImageMagick/ImageMagick/issues/621). + +2017-07-25 7.0.6-4 Glenn Randers-Pehrson + * Removed write_chunk_from_profile() from coders/png.c because it has + not worked at least since version 6.7.6. + * Removed many redundant checks before RelinquishMagickMemory(), which + is safe to call with a NULL argument. + * Added experimental PNG orNT chunk, to store image->orientation. + * Removed vpAg chunk write support (we are now writing caNv instead). + +2017-07-24 7.0.6-3 Cristy + * Release ImageMagick version 7.0.6-3, GIT revision 20598:cc9c43b44:20170724. + +2017-07-23 7.0.6-3 Cristy + * Fixed numerous memory leaks (reference + https://github.com/ImageMagick/ImageMagick/issues). + +2017-07-23 7.0.6-3 Glenn Randers-Pehrson + * Fix memory leaks when reading a malformed JNG image: + https://github.com/ImageMagick/ImageMagick/issues/600 (CVE-2017-13141), + https://github.com/ImageMagick/ImageMagick/issues/602 (CVE-2017-12565). + +2017-07-21 7.0.6-2 Cristy + * Release ImageMagick version 7.0.6-2, GIT revision 20549:62fcf3d96:20170721. + +2017-07-19 7.0.6-2 Cristy + * Fixed numerous memory leaks (reference + https://github.com/ImageMagick/ImageMagick/issues). + * The -monochrome option no longer returns a blank canvas (reference + https://github.com/ImageMagick/ImageMagick/issues/594). + * coders/png.c: fixed memory leak of quantum_info (CVE-2017-11539, reference + https://github.com/ImageMagick/ImageMagick/issues/582 + * coders/png.c: fixed NULL dereference when trying to write an empty MNG + (CVE-2017-11522, reference + https://github.com/ImageMagick/ImageMagick/issues/586). + +2017-07-15 7.0.6-2 Glenn Randers-Pehrson + * Added caNv, eXIf, and pHYs to the list of PNG chunks to be removed + by the "-strip" option. + +2017-07-15 7.0.6-1 Cristy + * Release ImageMagick version 7.0.6-1, GIT revision 20447:c2a315e10:20170715. + +2017-07-13 7.0.6-1 Glenn Randers-Pehrson + * Implemented PNG eXIf chunk support. + +2017-07-08 7.0.6-1 Cristy + * Support new -auto-threshold option. OTSU and Triangle methods are + currently supported. Look for the Kapur method in the next release. + * Fixed numerous memory leaks (reference + https://github.com/ImageMagick/ImageMagick/issues). + * Don't use variable float_t / double_t, bump SO (reference + https://github.com/ImageMagick/ImageMagick/issues/510). + * Support DNG images with libraw delegate library. + +2017-07-02 7.0.6-1 Glenn Randers-Pehrson + * Reject PNG file that is too small (under 60 bytes) to contain + a valid image. + * Reject JPEG file that is too small (under 107 bytes) to contain + a valid image. + * Reject JNG file that is too small (under 147 bytes) to contain + a valid image. + +2017-06-22 7.0.6-1 Glenn Randers-Pehrson + * Stop a memory leak in read_user_chunk_callback() (reference + https://github.com/ImageMagick/ImageMagick/issues/517, + CVE 2017-11310). + +2017-06-10 7.0.6-0 Cristy + * Release ImageMagick version 7.0.6-0, GIT revision 20194:b0c0d00:20170611. + +2017-06-10 7.0.6-0 Glenn Randers-Pehrson + * coders/png.c: Accept exIf chunks whose data segment + erroneously begins with "Exif\0\0". + +2017-06-10 7.0.6-0 Cristy + * Introduce SetMagickSecurityPolicy() (MagickCore) and + MagickSetSecurityPolicy() (MagickWand) to set the ImageMagick security + policy (reference https://github.com/ImageMagick/ImageMagick/issues/407). + +2017-06-02 7.0.5-10 Cristy + * Release ImageMagick version 7.0.5-10, GIT revision 20155:38ebc02:20170602. + +2017-06-01 7.0.5-10 Glenn Randers-Pehrson + * Removed experimental PNG zxIF chunk support; the proposal is dead. + +2017-06-01 7.0.5-10 Cristy + * Fix choppy bitmap font rendering (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=32071). + * The +opaque option is not longer a noop (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=32081). + * Add support for 'hex:' property. + +2017-05-28 7.0.5-9 Cristy + * Release ImageMagick version 7.0.5-9, GIT revision 20113:8b67333:20170528. + +2017-05-28 7.0.5-9 Cristy + * Transient error validating the JPEG-2000 image format (reference + https://github.com/ImageMagick/ImageMagick/issues/501). + * Properly allocate DCM image colormap (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=32063). + +2017-05-26 7.0.5-8 Cristy + * Release ImageMagick version 7.0.5-8, GIT revision 20099:870a016:20170526. + +2017-05-23 7.0.5-8 Cristy + * Improper allocation of memory for IM instances without threads (reference + https://github.com/ImageMagick/ImageMagick/issues/497). + * Delete corrupt image from list (reference + https://github.com/ImageMagick/ImageMagick/issues/500). + +2017-05-19 7.0.5-7 Cristy + * Release ImageMagick version 7.0.5-6, GIT revision 20078:7ce2d38:20170519. + +2017-05-15 7.0.5-7 Cristy + * Support various image operators for the compare utility (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=2&t=31938). + + 2017-05-12 7.0.5-6 Cristy + * Release ImageMagick version 7.0.5-6, GIT revision 20039:9371904:20170512. + +2017-05-10 7.0.5-6 John Cupitt + * Revise DICOM window and rescale handling (reference + https://github.com/ImageMagick/ImageMagick/pull/484) + +2017-05-06 7.0.5-6 Cristy + * Restore the -alpha Shape option (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=31879). + * Fix transient PDF bug (reference + https://github.com/ImageMagick/ImageMagick/issues/463). + * The +opaque option now works on all channels (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=31862). + * Ensure backwards compatibility for the -combine option (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=31855). + * Check for EOF conditions for RLE image format. + * Reset histogram page geometry (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=31920). + +2017-04-24 7.0.5-5 Cristy + * Release ImageMagick version 7.0.5-5, GIT revision 19915:12eec43:20170424. + +2017-03-26 7.0.5-5 Cristy + * Minimize buffer copies to improve OpenCL performance. + * Morphology thinning is no longer a no-op (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=31650). + * Patch two PCD writer problems, corrupt output and dark pixels (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=3164). + * Support ICC based PDF's (reference + https://github.com/ImageMagick/ImageMagick/issues/417). + * Fix improper EPS clip path rendering (reference + http://imagemagick.org/discourse-server/viewtopic.php?f=3&t=31722). + +2017-03-24 7.0.5-4 Cristy + * Release ImageMagick version 7.0.5-4, GIT revision 19754:350fff3:20170324. + +2017-03-21 7.0.5-4 Cristy + * Respect -loop option for animate -window (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=31619). + +2017-03-17 7.0.5-3 Cristy + * Release ImageMagick version 7.0.5-3, GIT revision 19741:070c3fb:20170317. + +2017-03-14 7.0.5-3 Cristy + * Support namespaces for the security policy. + * Support the -authenticate option for PDF (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=31530). + +2017-03-11 7.0.5-2 Cristy + * Release ImageMagick version 7.0.5-2, GIT revision 19696:da91a7c:20170311. + +2017-03-06 7.0.5-2 Cristy + * Respect throttle policy (reference + https://github.com/ImageMagick/ImageMagick/issues/393). + * Return proper minima / maxima (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=31377). + +2017-03-03 7.0.5-1 Cristy + * Release ImageMagick version 7.0.5-1, GIT revision 19662:b7f455a:20170303. + +2017-02-21 7.0.5-1 Cristy + * Fix Spurious memory allocation message (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=31438). + * Identical images should return inf for PSNR (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=31487). + +2017-02-20 7.0.5-0 Cristy + * Release ImageMagick version 7.0.5-0, GIT revision 19616:505fea9:20170220. + +2017-02-20 7.0.5-0 Cristy + * Fix transient bug with -separate option (reference + https://github.com/ImageMagick/ImageMagick/issues/385). + +2017-02-18 7.0.4-10 Cristy + * Release ImageMagick version 7.0.4-10, GIT revision 19608:fe757a2:20170218. + +2017-02-18 7.0.4-10 Dirk Lemstra + * Fixed fd leak for webp coder (reference + https://github.com/ImageMagick/ImageMagick/pull/382) + +2017-02-15 7.0.4-10 Cristy + * Prevent random pixel data for corrupt JPEG image (bug report from + Hirokazu Moriguchi, Sony). + * Restore -mattecolor option. + * Support pixel-cache and shred security policies. + * Bump Magick++ SO. Previously a global replace changed matteColor to + alphaColor. + +2017-02-14 7.0.4-9 Cristy + * Release ImageMagick version 7.0.4-9, GIT revision 19580:d474b37:20170214. + +2017-02-14 7.0.4-9 Cristy + * Revert patch that did not set update trait on alpha channel. + +2017-02-13 7.0.4-8 Cristy + * Release ImageMagick version 7.0.4-8, GIT revision 19574:7642384:20170213. + +2017-02-09 7.0.4-8 Dirk Lemstra + * Fixed memory leak when creating nested exceptions in Magick++ (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=23&p=142634) + +2017-02-09 7.0.4-8 Cristy + * Unbreak build without JPEG support (reference + https://github.com/ImageMagick/ImageMagick/pull/373). + * Document behavior change in the security policy (thanks to yoya @ + https://blog.awm.jp/2017/02/09/imagemagick-en/). + * Return unbiased standard deviation for image statistics (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=31377). + * Don't set update trait on alpha channel (private e-mail concerning + -levels-colors option). + +2017-02-04 7.0.4-7 Cristy + * Release ImageMagick version 7.0.4-7, GIT revision 19513:5783e57:20170204. + +2017-01-28 7.0.4-7 Cristy + * Sanitize comments that include braces for the MIFF image format (reference + https://github.com/ImageMagick/ImageMagick/issues/368). + +2017-01-27 7.0.4-7 Glenn Randers-Pehrson + * coders/png.c: Added support for a proposed new PNG chunk + (zxIf, read-only) that is currently being discussed on the + png-mng-misc at lists.sourceforge.net mailing list. Enable + exIf and zxIf with CPPFLAGS="-DexIf_SUPPORTED -DxzIf_SUPPORTED". + If exIf is enabled, only the uncompressed exIF chunk will be + written and the hex-encoded zTXt chunk containing the raw Exif + profile won't be written. + +2017-01-27 7.0.4-6 Cristy + * Release ImageMagick version 7.0.4-6, GIT revision 19442:4747de9:20170127. + +2017-01-27 7.0.4-6 Cristy + * Uninitialized data in MAT image format (reference + https://github.com/ImageMagick/ImageMagick/issues/362). + * Properly auto-fit caption (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=30887). + * Correction to composite Over operator (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=31282). + * Respect gravity option (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=31284). + +2017-01-22 7.0.4-6 Glenn Randers-Pehrson + * Renamed read_vpag_chunk_callback() function to png_user_chunk_callback() + in coders/png.c + * Implemented a private PNG caNv (canvas) chunk for remembering the + original dimensions and offsets when an image is cropped. Previously + we used the oFFs and vpAg chunks for this purpose, but this had potential + conflicts with other applications that also use the oFFs chunk. + * coders/png.c: Added support for a proposed new PNG chunk (exIf + read-write, eXIf read-only) that is currently being discussed on the + png-mng-misc at lists.sourceforge.net mailing list. + +2017-01-22 7.0.4-6 Dirk Lemstra + * Replaced CoderSeekableStreamFlag with CoderDecoderSeekableStreamFlag and + CoderEncoderSeekableStreamFlag. + +2017-01-21 7.0.4-5 Cristy + * Release ImageMagick version 7.0.4-5, GIT revision 19381:7ae396f:20170121. + +2017-01-18 7.0.4-5 Cristy + * Don't set background for transparent tiled images (reference + http://imagemagick.org/discourse-server/viewtopic.php?f=3&t=31210). + +2017-01-14 7.0.4-4 Cristy + * Release ImageMagick version 7.0.4-4, GIT revision 19361:a12953c:20170114. + +2017-01-14 7.0.4-4 Dirk Lemstra + * Added support for RGB555, RGB565, ARGB4444 and ARGB1555 to the + BMP encoder (reference + https://github.com/ImageMagick/ImageMagick/issues/344). + +2017-01-10 7.0.4-4 Cristy + * Recognize XML policy closing tags (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=31182). + * Fix memory leak in the MPC format. + +2017-01-07 7.0.4-3 Cristy + * Release ImageMagick version 7.0.4-3, GIT revision 19329:930ca78:20170107. + +2017-01-04 7.0.4-3 Cristy + * Increase memory allocation for TIFF pixels (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=31161). + +2017-01-03 7.0.4-2 Cristy + * Release ImageMagick version 7.0.4-2, GIT revision 19318:8766311:20170103. + +2017-01-02 7.0.4-2 Cristy + * Validation unit test for MNG works again. + +2016-12-31 7.0.4-1 Cristy + * Release ImageMagick version 7.0.4-1, GIT revision 19292:c5ccfa8:20161231. + +2016-12-26 7.0.4-1 Cristy + * Initialize draw_info alpha member to OpaqueAlpha. + * Monochrome images no longer have inverted colors (reference + https://github.com/ImageMagick/ImageMagick/issues/332). + +2016-12-18 7.0.4-0 Cristy + * Release ImageMagick version 7.0.4-0, GIT revision 19221:d5e8abc:20161218. + +2016-12-14 7.0.4-0 Cristy + * Do not close path for linejoins of round (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=31039). + +2016-12-10 7.0.3-10 Cristy + * Release ImageMagick version 7.0.3-10, GIT revision 19191:338f088:20161210. + +2016-12-07 7.0.3-10 Cristy + * Set colorspace to sRGB if -append has non-homogenous colorspaces (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=29105). + * Respect connected-components:area-threshold define (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=31006). + * Enable alpha channel if background color is non-opaque (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=31016). + * Return correct offset for negative index for -fx option (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=31019). + * Fixed improper scaling of certain FITS images (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=31028). + * Properly center text label (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=31027). + +2016-12-05 7.0.3-9 Cristy + * Release ImageMagick version 7.0.3-9, GIT revision 19139:6fed3f1:20161205. + +2016-11-26 7.0.3-9 Cristy + * Support the compare -read-mask option. + * Support read-masks for the -modulate option. + * Prevent buffer overflow when streaming an image (reference + https://github.com/ImageMagick/ImageMagick/issues/312). + * Fix possible buffer overflow when writing compressed TIFFS (vulnerability + report from Cisco Talos, CVE-2016-8707). + +2016-11-15 7.0.3-8 Cristy + * Release ImageMagick version 7.0.3-8, GIT revision 19067:5aceded:20161125. + +2016-11-18 7.0.3-8 Cristy + * Support the phash:colorspaces and phash:normalize options. + * If a convenient line break is not found, force it for caption: (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=30887). + * Set alpha member of draw structure to OpaqueAlpha (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=30894). + * Off by 1 error when computing the standard deviation (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=2&t=30866). + * Apply Debian patches, (reference + https://github.com/ImageMagick/ImageMagick/issues/304). + * Permit EPT images with just a TIFF or EPS image, not both (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=30921). + * The -clone option no longer leaks memory. + * Render to clip mask rather than image for clip-path MVG graphics primitive. + +2016-11-15 7.0.3-7 Cristy + * Release ImageMagick version 7.0.3-7, GIT revision 19024:87aca83:20161115. + +2016-11-10 7.0.3-7 Cristy + * Web pages were broken when we moved to HTTPS protocol. + +2016-11-08 7.0.3-6 Cristy + * Release ImageMagick version 7.0.3-6, GIT revision 19001:4cff747:20161108. + +2016-11-01 7.0.3-6 Cristy + * Off by one memory allocation (reference + https://github.com/ImageMagick/ImageMagick/issues/296). + * The -extent option now matches the results of IMv6 (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=1&t=30779). + * Prevent fault in MSL interpreter (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=30797). + * Mask composite produces proper results for the convert utility (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=29675). + +2016-10-10 7.0.3-5 Cristy + * Release ImageMagick version 7.0.3-5, GIT revision 18975:a8174a2:20161030. + +2016-10-16 7.0.3-5 Dirk Lemstra + * Added layer RLE compression to the PSD encoder. + +2016-10-10 7.0.3-4 Cristy + * Release ImageMagick version 7.0.3-4, GIT revision 18937:83da034:20161010. + +2016-10-10 7.0.3-4 Dirk Lemstra + * Fixed incorrect parsing with ordered dither. (reference + https://github.com/ImageMagick/ImageMagick/issues/254) + +2016-10-10 7.0.3-4 Cristy + * Unit test pass again after small SUN image patch. + +2016-10-08 7.0.3-3 Cristy + * Release ImageMagick version 7.0.3-3, GIT revision 18924:d6614e7:20161008. + +2016-10-07 7.0.3-3 Dirk Lemstra + * Fixed incorrect RLE decoding when reading a DCM image that contains + multiple segments. + +2016-10-02 7.0.3-2 Cristy + * Release ImageMagick version 7.0.3-2, GIT revision 18887:6b27c5b:20161002. + +2016-09-27 7.0.3-2 Dirk Lemstra + * Fixed incorrect RLE decoding when reading an SGI image (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=30514) + +2016-09-20 7.0.3-1 Cristy + * Release ImageMagick version 7.0.3-1, GIT revision 18851:ad91ea8:20160920. + +2016-09-16 7.0.3-1 Dirk Lemstra + * Added layer RLE compression to the PSD encoder. + * Added define 'psd:preserve-opacity-mask' to preserve the opacity mask + in a PSD file. + * Fixed issue where the display window was used instead of the data window + when reading EXR files (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&p=137849). + +2016-09-05 7.0.3-0 Cristy + * Release ImageMagick version 7.0.3-0, GIT revision 18786:10aa64c:20160905. + +2016-08-29 7.0.3-0 Dirk Lemstra + * Fixed reading DXT1 images with an alpha channel. + * Fixed incorrect padding calculation in PSD encoder. + +2016-08-27 7.0.2-10 Cristy + * Release ImageMagick version 7.0.2-10, GIT revision 18750:e3335b3:20160827. + +2016-08-27 7.0.2-10 Dirk Lemstra + * Added define 'psd:additional-info' to preserve the additional information + in a PSD file. + +2016-08-15 7.0.2-10 Cristy + * Prevent buffer overflow in BMP & SGI coders (bug report from + pwchen&rayzhong of tencent). + * Prevent buffer overflow and other problems in SIXEL, PDB, MAP, TIFF and + CALS coders (bug report from Donghai Zhu). + * The -stream option now increments the pixel pointer properly (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=30327). + +2016-08-14 7.0.2-9 Cristy + * Release ImageMagick version 7.0.2-9, GIT revision 18707:2c02f09:20160814. + +2016-08-14 7.0.2-9 Cristy + * Fix compile error in opencl.c (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=30289). + * Eliminate compiler warning. + +2016-08-14 7.0.2-8 Cristy + * Release ImageMagick version 7.0.2-8, GIT revision 18698:74b1d5d:20160814. + +2016-08-07 7.0.2-8 Cristy + * Prevent spurious removal of MPC cache files (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=30256). + * Note alpha channel when combining 4 or more images (reference + https://github.com/ImageMagick/ImageMagick/issues/250). + +2016-08-06 7.0.2-7 Cristy + * Release ImageMagick version 7.0.2-7, GIT revision 10980:ecc03a2:20160806. + +2016-08-01 7.0.2-7 Cristy + * Evaluate lazy pixel cache morphology to prevent buffer overflow (bug report + from Ibrahim M. El-Sayed). + * Prevent buffer overflow (bug report from Max Thrane). + * Prevent memory use after free (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=30245). + +2016-07-30 7.0.2-6 Cristy + * Release ImageMagick version 7.0.2-6, GIT revision 18651:df24175:20160729. + +2016-07-29 7.0.2-6 Cristy + * Support -region option (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=1&t=29692). + +2016-07-21 7.0.2-5 Cristy + * Release ImageMagick version 7.0.2-5, GIT revision 18627:2b5ddbd:20160721. + +2016-07-13 7.0.2-5 Cristy + * Fix MVG stroke-opacity (reference + https://github.com/ImageMagick/ImageMagick/issues/229). + * Prevent possible buffer overflow when reading TIFF images (bug report from + Shi Pu of MS509 Team). + * Initialize index channel to get expected results from the stegano coder. + +2016-07-11 7.0.2-4 Cristy + * Release ImageMagick version 7.0.2-4, GIT revision 18591:50debe5:20160710. + +2016-07-10 7.0.2-4 Cristy + * To comply with the SVG standard, use stroke-opacity for transparent strokes. + * Define CompositeChannels mask to Red, Green, Blue, Alpha, and Black. + +2016-07-09 7.0.2-3 Cristy + * Release ImageMagick version 7.0.2-3, GIT revision 18572:28560fc:20160709. + +2016-07-01 7.0.2-3 Cristy + * Patch so -kuwahara option can preserve colormapped edges. + * The histogram coder now returns the correct extent. + * Use CopyMagickString() rather than CopyMagickMemory() for strings. + +2016-06-26 7.0.2-2 Cristy + * Release ImageMagick version 7.0.2-2, GIT revision 18514:a7b5b46:20160626. + +2016-06-23 7.0.2-2 Cristy + * Correct for numerical instability (reference + https://github.com/ImageMagick/ImageMagick/issues/218). + +2016-06-21 7.0.2-1 Cristy + * Release ImageMagick version 7.0.2-1, GIT revision 18479:931319b:20160622. + +2016-06-17 7.0.2-1 Dirk Lemstra + * Added support for GROUP4 compression to the FAX coder. + +2016-06-12 7.0.2-1 Cristy + * Distort no longer converts grayscale image to sRGB (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=1&t=29895). + * Don't return a zero bounding box for QueryMultilineFontMetrics() (reference + https://github.com/ImageMagick/ImageMagick/issues/222). + +2016-06-12 7.0.2-0 Cristy + * Release ImageMagick version 7.0.2-0, GIT revision 10884:f0e15e8:20160612. + +2016-06-09 7.0.2-0 Cristy + * Backoff finite precision epsilon (reference + https://github.com/ImageMagick/ImageMagick/issues/215). + * Fix drawing glitch for stroke widths greater than 2 (reference + https://github.com/ImageMagick/ImageMagick/issues/218). + +2016-06-05 7.0.1-10 Cristy + * Release ImageMagick version 7.0.1-10, GIT revision 18406:ba4ad2d:20160607. + +2016-06-04 7.0.1-10 Cristy + * Deny indirect reads by policy, remove policy to permit, e.g., + convert caption:@mytext.txt ... + * RLE check for pixel offset less than 0 (heap overflow report from Craig + Young). + * Properly initialze PES blocks (reference + https://github.com/ImageMagick/ImageMagick/issues/213). + +2016-06-03 7.0.1-9 Cristy + * Release ImageMagick version 7.0.1-9, GIT revision 10847:339f803:20160602. + +2016-06-02 7.0.1-9 Cristy + * Fix small memory leak (patch provided by Ðндрей Черный). + * Coder path traversal is not authorized (bug report provided by + Masaaki Chida). + * Turn off alpha channel for the compare difference image (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=29828). + +2016-05-31 7.0.1-8 Cristy + * Release ImageMagick version 7.0.1-8, GIT revision 18334:97775b5:20160531. + +2016-05-31 7.0.1-8 Cristy + * Support configure script --enable-pipes option to enable pipes (|) in + filenames. + * Support configure script --enable-indirect-reads option to enable + indirect reads (@) in filenames. + +2016-05-30 7.0.1-7 Cristy + * Release ImageMagick version 7.0.1-7, GIT revision 18321:5511ef5:20160530. + +2016-05-25 7.0.1-7 Cristy + * Security improvements to TEXT coder broke it (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=29754). + * Fix stroke offset problem for -annotate (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=29626). + * Don't interpret -fx option arguments (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=29774); + * Add additional checks to DCM reader to prevent data-driven faults (bug + report from Hanno Böck). + +2016-05-21 7.0.1-6 Cristy + * Release ImageMagick version 7.0.1-6, GIT revision 18241:d4f277c:20160521. + +2016-05-20 7.0.1-6 Cristy + * Fixed proper placement of text annotation for east / west gravity. + +2016-05-18 7.0.1-5 Cristy + * Release ImageMagick version 7.0.1-5, GIT revision 10789:f7c2e89:20160518, + +2016-05-18 7.0.1-5 Cristy + * Process channels independently for -channel -equalize (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=29708). + * Fix pixel cache on disk regression (reference + https://github.com/ImageMagick/ImageMagick/issues/202). + +2016-05-15 7.0.1-4 Cristy + * Release ImageMagick version 7.0.1-4, GIT revision 10778:52dae14:20160516. + +2016-05-10 7.0.1-4 Cristy + * Prevent possible shell command injection vulnerability through the + authenticate parameter of the PDF, PCL and XPS coders (report from + Erez Turjeman). + * Quote passwords when passed to a delegate program. + * Iterate channels over source image rather than destination (bug report + from Hanno Böck). + * Can read geo-related EXIF metdata once-again (reference + https://github.com/ImageMagick/ImageMagick/issues/198). + * Sanitize all delegate emedded formatting characters. + * Don't sync pixel cache in AcquireAuthenticCacheView() (bug report from + Hanno Böck). + +2016-05-09 7.0.1-3 Cristy + * Release ImageMagick version 7.0.1-3, GIT revision 10755:d540dda:20160509. + +2016-05-07 7.0.1-3 Cristy + * Remove https delegate. + +2016-05-06 7.0.1-2 Cristy + * Release ImageMagick version 7.0.1-2, GIT revision 10741:5746147:20160507. + +2016-05-04 7.0.1-2 Cristy + * Check for buffer overflow in magick/draw.c/DrawStrokePolygon(). + * Replace show delegate title with image filename rather than label. + * Fix GetNextToken() off by one error. + * Remove support for internal ephemeral coder. + +2016-05-03 7.0.1-1 Cristy + * New version 7.0.1-1, GIT revision 10723:9fc8a0c:20160503. + +2016-05-03 7.0.1-1 Cristy + * Sanitize input filename for http / https delegates (improved patch). + * Fix for possible security vulnerabilities (reference + https://imagemagick.org/discourse-server/viewtopic.php?f=4&t=29588). + +2016-04-30 7.0.1-0 Cristy + * New version 7.0.1-0, GIT revision 10716:b527bce:20160430. + +2016-01-30 7.0.0-0 Fahad-Alsaidi & ShamsaHamed + * Add support for languages that require complex text layout (reference + https://github.com/ImageMagick/ImageMagick/pull/88). + +2012-04-27 7.0.0-0 Anthony thyssen + * Allow the use of set and escapes when no images in memory + (unless you attempt to access per-image meta-data) + Currently does not include %[fx:...] and %[pixel:...] + +2012-10-05 7.0.0-0 Anthony thyssen + * Rather than replicate 'options' into 'artifacts' make a link + from image to image_info and lookup a global option if no artifact + is defined. + +2012-09-11 7.0.0-0 Nicolas Robidoux + * sigmoidal-contrast: + * Remove unnecessary initial ClampToQuantum. + +2012-09-10 7.0.0-0 Nicolas Robidoux + * sigmoidal-contrast: + * Direct computation, without LUT; + * Fix re-declaration of i (at the top, and inside a conditional). + +2012-09-04 7.0.0-0 Nicolas Robidoux + * Add tanh/atanh clone of legacy sigmoidal map (faster & more accurate). + +2012-08-08 7.0.0-0 Nicolas Robidoux + * Add final ClampToQuantum in sigmoidal colormap loop. + * Remove OpenMP calls from colormap update loops. + +2011-08-01 7.0.0-0 Cristy + * New version 7.0.0-0. + diff --git a/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/IMDisplay.exe b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/IMDisplay.exe new file mode 100755 index 0000000000..59b2ad6adf Binary files /dev/null and b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/IMDisplay.exe differ diff --git a/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/ImageMagick.rdf b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/ImageMagick.rdf new file mode 100755 index 0000000000..92e74e853c --- /dev/null +++ b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/ImageMagick.rdf @@ -0,0 +1,166 @@ + + + + + ImageMagick + ImageMagick: convert, edit, or compose images. + + 2017-03-07 + + +Introduction to ImageMagick + + ImageMagick® is a software suite to create, edit, compose, or convert + bitmap images. It can read and write images in a variety of formats (over + 200) including PNG, JPEG, JPEG-2000, GIF, TIFF, DPX, EXR, WebP, Postscript, + PDF, and SVG. Use ImageMagick to resize, flip, mirror, rotate, distort, + shear and transform images, adjust image colors, apply various special + effects, or draw text, lines, polygons, ellipses and Bézier curves. + + The functionality of ImageMagick is typically utilized from the command + line or you can use the features from programs written in your favorite + language. Choose from these interfaces: G2F (Ada), MagickCore (C), + MagickWand (C), ChMagick (Ch), ImageMagickObject (COM+), Magick++ (C++), + JMagick (Java), L-Magick (Lisp), Lua, NMagick (Neko/haXe), Magick.NET + (.NET), PascalMagick (Pascal), PerlMagick (Perl), MagickWand for PHP + (PHP), IMagick (PHP), PythonMagick (Python), RMagick (Ruby), or TclMagick + (Tcl/TK). With a language interface, use ImageMagick to modify or create + images dynamically and automagically. + + ImageMagick utilizes multiple computational threads to increase performance + and can read, process, or write mega-, giga-, or tera-pixel image sizes. + + ImageMagick is free software delivered as a ready-to-run binary distribution + or as source code that you may use, copy, modify, and distribute in both open + and proprietary applications. It is distributed under the Apache 2.0 license. + + The ImageMagick development process ensures a stable API and ABI. Before + each ImageMagick release, we perform a comprehensive security assessment + that includes memory error and thread data race detection to prevent + security vulnerabilities. + + ImageMagick is available from + https://www.imagemagick.org/script/download.php. It runs on Linux, Windows, + Mac Os X, iOS, Android OS, and others. + + The authoritative ImageMagick web site is + https://www.imagemagick.org. The authoritative source code repository is + http://git.imagemagick.org/repos/ImageMagick/. + + +Features and Capabilities + + Here are just a few examples of what ImageMagick can do: + + * Format conversion: convert an image from one format to another (e.g. + PNG to JPEG). + * Transform: resize, rotate, deskew, crop, flip or trim an image. + * Transparency: render portions of an image invisible. + * Draw: add shapes or text to an image. + * Decorate: add a border or frame to an image. + * Special effects: blur, sharpen, threshold, or tint an image. + * Animation: create a GIF animation sequence from a group of images. + * Text & comments: insert descriptive or artistic text in an image. + * Image gradients: create a gradual blend of one color whose shape is + horizontal, vertical, circular, or ellipical. + * Image identification: describe the format and attributes of an image. + * Composite: overlap one image over another. + * Montage: juxtapose image thumbnails on an image canvas. + * Generalized pixel distortion: correct for, or induce image distortions + including perspective. + * Computer vision: Canny edge detection. + * Morphology of shapes: extract features, describe shapes and recognize + patterns in images. + * Motion picture support: read and write the common image formats used in + digital film work. + * Image calculator: apply a mathematical expression to an image or image + channels. + * Connected component labeling: uniquely label connected regions in an + image. + * Discrete Fourier transform: implements the forward and inverse DFT. + * Perceptual hash: maps visually identical images to the same or similar + hash-- useful in image retrieval, authentication, indexing, or copy + detection as well as digital watermarking. + * Complex text layout: bidirectional text support and shaping. + * Color management: accurate color management with color profiles or in + lieu of-- built-in gamma compression or expansion as demanded by the + colorspace. + * High dynamic-range images: accurately represent the wide range of + intensity levels found in real scenes ranging from the brightest direct + sunlight to the deepest darkest shadows. + * Encipher or decipher an image: convert ordinary images into + unintelligible gibberish and back again. + * Virtual pixel support: convenient access to pixels outside the image + region. + * Large image support: read, process, or write mega-, giga-, or + tera-pixel image sizes. + * Threads of execution support: ImageMagick is thread safe and most + internal algorithms are OpenMP-enabled to take advantage of speed-ups + offered by multicore processor chips. + * Distributed pixel cache: offload intermediate pixel storage to one or + more remote servers. + * Heterogeneous distributed processing: certain algorithms are + OpenCL-enabled to take advantage of speed-ups offered by executing in + concert across heterogeneous platforms consisting of CPUs, GPUs, and + other processors. + * ImageMagick on the iPhone: convert, edit, or compose images on your + iPhone or iPad. + + Examples of ImageMagick Usage shows how to use ImageMagick from the + command-line to accomplish any of these tasks and much more. Also, + see Fred's ImageMagick Scripts: a plethora of command-line scripts that + perform geometric transforms, blurs, sharpens, edging, noise removal, + and color manipulations. With Magick.NET, use ImageMagick without having + to install ImageMagick on your server or desktop. + + + + + ImageMagick Studio LLC + + + + + + + stable + 2017-03-07 + 7.0.5 + -0 + + + + + + + + + + + + + + + + + + + + + + + ImageMagick Studio LLC + + + + + + + diff --git a/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/LICENSE.txt b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/LICENSE.txt new file mode 100755 index 0000000000..d3be3cf2cf --- /dev/null +++ b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/LICENSE.txt @@ -0,0 +1,103 @@ +Before we get to the text of the license, lets just review what the license says in simple terms: + +It allows you to: + + * freely download and use ImageMagick software, in whole or in part, for personal, company internal, or commercial purposes; + * use ImageMagick software in packages or distributions that you create; + * link against a library under a different license; + * link code under a different license against a library under this license; + * merge code into a work under a different license; + * extend patent grants to any code using code under this license; + * and extend patent protection. + +It forbids you to: + + * redistribute any piece of ImageMagick-originated software without proper attribution; + * use any marks owned by ImageMagick Studio LLC in any way that might state or imply that ImageMagick Studio LLC endorses your distribution; + * use any marks owned by ImageMagick Studio LLC in any way that might state or imply that you created the ImageMagick software in question. + +It requires you to: + + * include a copy of the license in any redistribution you may make that includes ImageMagick software; + * provide clear attribution to ImageMagick Studio LLC for any distributions that include ImageMagick software. + +It does not require you to: + + * include the source of the ImageMagick software itself, or of any modifications you may have made to it, in any redistribution you may assemble that includes it; + * submit changes that you make to the software back to the ImageMagick Studio LLC (though such feedback is encouraged). + +A few other clarifications include: + + * ImageMagick is freely available without charge; + * you may include ImageMagick on a DVD as long as you comply with the terms of the license; + * you can give modified code away for free or sell it under the terms of the ImageMagick license or distribute the result under a different license, but you need to acknowledge the use of the ImageMagick software; + * the license is compatible with the GPL V3. + * when exporting the ImageMagick software, review its export classification. + +Terms and Conditions for Use, Reproduction, and Distribution + +The legally binding and authoritative terms and conditions for use, reproduction, and distribution of ImageMagick follow: + +Copyright 1999-2020 ImageMagick Studio LLC, a non-profit organization dedicated to making software imaging solutions freely available. + +1. Definitions. + +License shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +Licensor shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +Legal Entity shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, control means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +You (or Your) shall mean an individual or Legal Entity exercising permissions granted by this License. + +Source form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +Object form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +Work shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +Derivative Works shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +Contribution shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as Not a Contribution. + +Contributor shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + + * You must give any other recipients of the Work or Derivative Works a copy of this License; and + * You must cause any modified files to carry prominent notices stating that You changed the files; and + * You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + * If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. +You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an AS IS BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +How to Apply the License to your Work + +To apply the ImageMagick License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information (don't include the brackets). The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the ImageMagick License (the "License"); you may not use + this file except in compliance with the License. You may obtain a copy + of the License at + + https://imagemagick.org/script/license.php + + 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. diff --git a/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/NOTICE.txt b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/NOTICE.txt new file mode 100755 index 0000000000..6168f30562 --- /dev/null +++ b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/NOTICE.txt @@ -0,0 +1,1324 @@ +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + +1. ImageMagick copyright: + +Copyright 1999-2015 ImageMagick Studio LLC, a non-profit organization dedicated +to making software imaging solutions freely available. + +You may not use this file except in compliance with the License. You may obtain +a copy of the License at + + http://www.imagemagick.org/script/license.php + +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. + +The full text of this license is availaible in the LICENSE file. + +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + +2. E. I. du Pont de Nemours and Company copyright (ImageMagick was originally + developed and distributed by E. I. du Pont de Nemours and Company): + +Copyright 1999 E. I. du Pont de Nemours and Company + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files ("ImageMagick"), to deal in +ImageMagick without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of ImageMagick, and to permit persons to whom the ImageMagick is furnished to +do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of ImageMagick. + +The software is provided "as is", without warranty of any kind, express or +implied, including but not limited to the warranties of merchantability, +fitness for a particular purpose and noninfringement. In no event shall E. I. +du Pont de Nemours and Company be liable for any claim, damages or other +liability, whether in an action of contract, tort or otherwise, arising from, +out of or in connection with ImageMagick or the use or other dealings in +ImageMagick. + +Except as contained in this notice, the name of the E. I. du Pont de Nemours +and Company shall not be used in advertising or otherwise to promote the sale, +use or other dealings in ImageMagick without prior written authorization from +the E. I. du Pont de Nemours and Company. + +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + +3. OpenSSH copyright (this copyright is limited to magick/utility.c/ + Base64Decode() and Base64Encode(),incorporated from the OpenSSH package): + +Copyright (c) 2000 Markus Friedl. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR \`\`AS IS\'\' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + +4. Xfig copyright (this copyright is limited to the image patterns in + magick/nt-base.c, incorporated from the XFig package): + +| FIG : Facility for Interactive Generation of figures +| Copyright (c) 1985-1988 by Supoj Sutanthavibul +| Parts Copyright (c) 1989-2000 by Brian V. Smith +| Parts Copyright (c) 1991 by Paul King + +Any party obtaining a copy of these files is granted, free of charge, a full +and unrestricted irrevocable, world-wide, paid up, royalty-free, nonexclusive +right and license to deal in this software and documentation files (the +"Software"), including without limitation the rights to use, copy, modify, +merge, publish, distribute, sublicense, and/or sell copies of the Software, and +to permit persons who receive copies from any such party to do so, with the +only requirement being that this copyright notice remain intact. + +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + +5. ezXML copyright (This copyright is limited to code for reading XML files in + magick/xml-tree.c, incorporated from the ezxml package): + +Copyright 2004-2006 Aaron Voisine + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + +6. GraphicsMagick copyright (this copyright is limited to the Windows installer + and enhancements to the automake and autoconf configure scripts, + incorporated from the GraphicsMagick package): + +Copyright (C) 2002 - 2009 GraphicsMagick Group + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + +7. Magick++ copyright (this copyright is limited to the Magick++ API in the + Magick++ folder): + +Copyright 1999 - 2002 Bob Friesenhahn + +Permission is hereby granted, free of charge, to any person obtaining a copy of +the source files and associated documentation files ("Magick++"), to deal in +Magick++ without restriction, including without limitation of the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of Magick++, and to permit persons to whom the Magick++ is furnished to do so, +subject to the following conditions: + +This copyright notice shall be included in all copies or substantial portions +of Magick++. The copyright to Magick++ is retained by its author and shall not +be subsumed or replaced by any other copyright. + +The software is provided "as is", without warranty of any kind, express or +implied, including but not limited to the warranties of merchantability,fitness +for a particular purpose and noninfringement. In no event shall Bob Friesenhahn +be liable for any claim, damages or other liability, whether in an action of +contract, tort or otherwise, arising from, out of or in connection with +Magick++ or the use or other dealings in Magick++. + +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + +8. Thatcher Ulrich copyright (ImageMagick includes two fonts, + PerlMagick/t/ttf/input.ttf and PerlMagick/demo/Generic.ttf under this + copyright): + + Copyright: 2004-2007, Thatcher Ulrich + + I have placed these fonts in the Public Domain. This is all 100% my own work. + Usage is totally unrestricted. If you want to make derivative works for any + purpose, please go ahead. + +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + +9. Gsview copyright (ImageMagick incorporated a small portion of code from the + gsview package to locate Ghostscript under Windows. This source code is + distributed under the following license): + +Copyright (C) 2000-2002, Ghostgum Software Pty Ltd. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this file ("Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, distribute, +sublicense, and/or sell copies of this Software, and to permit persons to whom +this file is furnished to do so, subject to the following conditions: + +This Software is distributed with NO WARRANTY OF ANY KIND. No author or +distributor accepts any responsibility for the consequences of using it, or +for whether it serves any particular purpose or works at all, unless he or she +says so in writing. + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + +10. Libsquish copyright (this copyright is limited to the compression used in + coder/dds.c, incorporated from the libsquish library): + +Copyright (c) 2006 Simon Brown si@sjbrown.co.uk + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + +11. Bootstrap copyright (imageMagick utilizes CSS for its web pages under this + copyright): + +Bootstrap v3.3.5 (http://getbootstrap.com) +Copyright 2011-2015 Twitter, Inc. +Licensed under the MIT license + +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + +12. Libbzip2 copyright: + +This program, "bzip2", the associated library "libbzip2", and all documentation, +are copyright (C) 1996-2006 Julian R Seward. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. The origin of this software must not be misrepresented; you must not claim +that you wrote the original software. If you use this software in a product, +an acknowledgment in the product documentation would be appreciated but is +not required. + +3. Altered source versions must be plainly marked as such, and must not be +misrepresented as being the original software. + +4. The name of the author may not be used to endorse or promote products +derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT +OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. + +Julian Seward, Cambridge, UK. +jseward@bzip.org +bzip2/libbzip2 version 1.0.4 of 20 December 2006 + +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + +13. OpenEXR copyright: + +Copyright (c) 2006, Industrial Light & Magic, a division of Lucasfilm +Entertainment Company Ltd. Portions contributed and copyright held by +others as indicated. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above + copyright notice, this list of conditions and the following + disclaimer. + + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided with + the distribution. + + * Neither the name of Industrial Light & Magic nor the names of + any other contributors to this software may be used to endorse or + promote products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + +14. Libffi copyright: + +libffi - Copyright (c) 1996-2012 Anthony Green, Red Hat, Inc and others. +See source files for details. + +Permission is hereby granted, free of charge, to any person obtaininga copy +of this software and associated documentation files (the ``Software''), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + +15. JasPer copyright: + +JasPer License Version 2.0 + +Copyright (c) 2001-2006 Michael David Adams +Copyright (c) 1999-2000 Image Power, Inc. +Copyright (c) 1999-2000 The University of British Columbia + +All rights reserved. + +Permission is hereby granted, free of charge, to any person (the "User") +obtaining a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including without +limitation the rights to use, copy, modify, merge, publish, distribute, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +1. The above copyright notices and this permission notice (which includes +the disclaimer below) shall be included in all copies or substantial portions +of the Software. + +2. The name of a copyright holder shall not be used to endorse or promote +products derived from the Software without specific prior written permission. + +THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO +USE OF THE SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. THE +SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS "AS IS", WITHOUT WARRANTY OF ANY +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD +PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER +RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, +NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE +USE OR PERFORMANCE OF THIS SOFTWARE. NO ASSURANCES ARE PROVIDED BY THE +COPYRIGHT HOLDERS THAT THE SOFTWARE DOES NOT INFRINGE THE PATENT OR OTHER +INTELLECTUAL PROPERTY RIGHTS OF ANY OTHER ENTITY. EACH COPYRIGHT HOLDER +DISCLAIMS ANY LIABILITY TO THE USER FOR CLAIMS BROUGHT BY ANY OTHER ENTITY +BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR OTHERWISE. AS A +CONDITION TO EXERCISING THE RIGHTS GRANTED HEREUNDER, EACH USER HEREBY ASSUMES +SOLE RESPONSIBILITY TO SECURE ANY OTHER INTELLECTUAL PROPERTY RIGHTS NEEDED, IF +ANY. THE SOFTWARE IS NOT FAULT-TOLERANT AND IS NOT INTENDED FOR USE IN +MISSION-CRITICAL SYSTEMS, SUCH AS THOSE USED IN THE OPERATION OF NUCLEAR +FACILITIES, AIRCRAFT NAVIGATION OR COMMUNICATION SYSTEMS, AIR TRAFFIC CONTROL +SYSTEMS, DIRECT LIFE SUPPORT MACHINES, OR WEAPONS SYSTEMS, IN WHICH THE FAILURE +OF THE SOFTWARE OR SYSTEM COULD LEAD DIRECTLY TO DEATH,PERSONAL INJURY, OR +SEVERE PHYSICAL OR ENVIRONMENTAL DAMAGE ("HIGH RISK ACTIVITIES"). THE +COPYRIGHT HOLDERS SPECIFICALLY DISCLAIM ANY EXPRESS OR IMPLIED WARRANTY OF +FITNESS FOR HIGH RISK ACTIVITIES. + +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + +16. Libjpeg-turbo copyright: + +The authors make NO WARRANTY or representation, either express or implied, +with respect to this software, its quality, accuracy, merchantability, or +fitness for a particular purpose. This software is provided "AS IS", and you, +its user, assume the entire risk as to its quality and accuracy. + +This software is copyright (C) 1991-2012, Thomas G. Lane, Guido Vollbeding. +All Rights Reserved except as specified below. + +Permission is hereby granted to use, copy, modify, and distribute this +software (or portions thereof) for any purpose, without fee, subject to these +conditions: +(1) If any part of the source code for this software is distributed, then this +README file must be included, with this copyright and no-warranty notice +unaltered; and any additions, deletions, or changes to the original files +must be clearly indicated in accompanying documentation. +(2) If only executable code is distributed, then the accompanying +documentation must state that "this software is based in part on the work of +the Independent JPEG Group". +(3) Permission for use of this software is granted only if the user accepts +full responsibility for any undesirable consequences; the authors accept +NO LIABILITY for damages of any kind. + +These conditions apply to any software derived from or based on the IJG code, +not just to the unmodified library. If you use our work, you ought to +acknowledge us. + +Permission is NOT granted for the use of any IJG author's name or company name +in advertising or publicity relating to this software or products derived from +it. This software may be referred to only as "the Independent JPEG Group's +software". + +We specifically permit and encourage the use of this software as the basis of +commercial products, provided that all warranty or liability claims are +assumed by the product vendor. + + +The Unix configuration script "configure" was produced with GNU Autoconf. +It is copyright by the Free Software Foundation but is freely distributable. +The same holds for its supporting scripts (config.guess, config.sub, +ltmain.sh). Another support script, install-sh, is copyright by X Consortium +but is also freely distributable. + +The IJG distribution formerly included code to read and write GIF files. +To avoid entanglement with the Unisys LZW patent, GIF reading support has +been removed altogether, and the GIF writer has been simplified to produce +"uncompressed GIFs". This technique does not use the LZW algorithm; the +resulting GIF files are larger than usual, but are readable by all standard +GIF decoders. + +We are required to state that + "The Graphics Interchange Format(c) is the Copyright property of + CompuServe Incorporated. GIF(sm) is a Service Mark property of + CompuServe Incorporated." + +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + +17. Little CMS copyright: + +Little CMS +Copyright (c) 1998-2011 Marti Maria Saguer + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + +18. Libxml copyright: + +Copyright (C) 1998-2012 Daniel Veillard. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is fur- +nished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT- +NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + +19. Openjpeg copyright: + +/* + * The copyright in this software is being made available under the 2-clauses + * BSD License, included below. This software may be subject to other third + * party and contributor rights, including patent rights, and no such rights + * are granted under this license. + * + * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2014, Professor Benoit Macq + * Copyright (c) 2003-2014, Antonin Descampe + * Copyright (c) 2003-2009, Francois-Olivier Devaux + * Copyright (c) 2005, Herve Drolon, FreeImage Team + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2011-2012, Centre National d'Etudes Spatiales (CNES), France + * Copyright (c) 2012, CS Systemes d'Information, France + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + +20. Pixman copyright: + +The following is the MIT license, agreed upon by most contributors. +Copyright holders of new code should use this license statement where +possible. They may also add themselves to the list below. + +/* + * Copyright 1987, 1988, 1989, 1998 The Open Group + * Copyright 1987, 1988, 1989 Digital Equipment Corporation + * Copyright 1999, 2004, 2008 Keith Packard + * Copyright 2000 SuSE, Inc. + * Copyright 2000 Keith Packard, member of The XFree86 Project, Inc. + * Copyright 2004, 2005, 2007, 2008, 2009, 2010 Red Hat, Inc. + * Copyright 2004 Nicholas Miell + * Copyright 2005 Lars Knoll & Zack Rusin, Trolltech + * Copyright 2005 Trolltech AS + * Copyright 2007 Luca Barbato + * Copyright 2008 Aaron Plattner, NVIDIA Corporation + * Copyright 2008 Rodrigo Kumpera + * Copyright 2008 André Tupinambá + * Copyright 2008 Mozilla Corporation + * Copyright 2008 Frederic Plourde + * Copyright 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright 2009, 2010 Nokia Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + +21. Libpng copyright: + +This copy of the libpng notices is provided for your convenience. In case of +any discrepancy between this copy and the notices in the file png.h that is +included in the libpng distribution, the latter shall prevail. + +COPYRIGHT NOTICE, DISCLAIMER, and LICENSE: + +If you modify libpng you may insert additional notices immediately following +this sentence. + +This code is released under the libpng license. + +libpng versions 1.2.6, August 15, 2004, through 1.6.17, March 26, 2015, are +Copyright (c) 2004, 2006-2015 Glenn Randers-Pehrson, and are +distributed according to the same disclaimer and license as libpng-1.2.5 +with the following individual added to the list of Contributing Authors + + Cosmin Truta + +libpng versions 1.0.7, July 1, 2000, through 1.2.5 - October 3, 2002, are +Copyright (c) 2000-2002 Glenn Randers-Pehrson, and are +distributed according to the same disclaimer and license as libpng-1.0.6 +with the following individuals added to the list of Contributing Authors + + Simon-Pierre Cadieux + Eric S. Raymond + Gilles Vollant + +and with the following additions to the disclaimer: + + There is no warranty against interference with your enjoyment of the + library or against infringement. There is no warranty that our + efforts or the library will fulfill any of your particular purposes + or needs. This library is provided with all faults, and the entire + risk of satisfactory quality, performance, accuracy, and effort is with + the user. + +libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are +Copyright (c) 1998, 1999 Glenn Randers-Pehrson, and are +distributed according to the same disclaimer and license as libpng-0.96, +with the following individuals added to the list of Contributing Authors: + + Tom Lane + Glenn Randers-Pehrson + Willem van Schaik + +libpng versions 0.89, June 1996, through 0.96, May 1997, are +Copyright (c) 1996, 1997 Andreas Dilger +Distributed according to the same disclaimer and license as libpng-0.88, +with the following individuals added to the list of Contributing Authors: + + John Bowler + Kevin Bracey + Sam Bushell + Magnus Holmgren + Greg Roelofs + Tom Tanner + +libpng versions 0.5, May 1995, through 0.88, January 1996, are +Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc. + +For the purposes of this copyright and license, "Contributing Authors" +is defined as the following set of individuals: + + Andreas Dilger + Dave Martindale + Guy Eric Schalnat + Paul Schmidt + Tim Wegner + +The PNG Reference Library is supplied "AS IS". The Contributing Authors +and Group 42, Inc. disclaim all warranties, expressed or implied, +including, without limitation, the warranties of merchantability and of +fitness for any purpose. The Contributing Authors and Group 42, Inc. +assume no liability for direct, indirect, incidental, special, exemplary, +or consequential damages, which may result from the use of the PNG +Reference Library, even if advised of the possibility of such damage. + +Permission is hereby granted to use, copy, modify, and distribute this +source code, or portions hereof, for any purpose, without fee, subject +to the following restrictions: + +1. The origin of this source code must not be misrepresented. + +2. Altered versions must be plainly marked as such and must not + be misrepresented as being the original source. + +3. This Copyright notice may not be removed or altered from any + source or altered source distribution. + +The Contributing Authors and Group 42, Inc. specifically permit, without +fee, and encourage the use of this source code as a component to +supporting the PNG file format in commercial products. If you use this +source code in a product, acknowledgment is not required but would be +appreciated. + + +A "png_get_copyright" function is available, for convenient use in "about" +boxes and the like: + + printf("%s",png_get_copyright(NULL)); + +Also, the PNG logo (in PNG format, of course) is supplied in the +files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31). + +Libpng is OSI Certified Open Source Software. OSI Certified Open Source is a +certification mark of the Open Source Initiative. + +Glenn Randers-Pehrson +glennrp at users.sourceforge.net +March 26, 2015 + +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + +22. Libtiff copyright: + +Copyright (c) 1988-1997 Sam Leffler +Copyright (c) 1991-1997 Silicon Graphics, Inc. + +Permission to use, copy, modify, distribute, and sell this software and +its documentation for any purpose is hereby granted without fee, provided +that (i) the above copyright notices and this permission notice appear in +all copies of the software and related documentation, and (ii) the names of +Sam Leffler and Silicon Graphics may not be used in any advertising or +publicity relating to the software without the specific, prior written +permission of Sam Leffler and Silicon Graphics. + +THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, +EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY +WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + +IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR +ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, +OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF +LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE +OF THIS SOFTWARE. + +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + +23. Freetype copyright: + +Copyright 2006-2015 by +David Turner, Robert Wilhelm, and Werner Lemberg. + +This file is part of the FreeType project, and may only be used, +modified, and distributed under the terms of the FreeType project +license, LICENSE.TXT. By continuing to use, modify, or distribute +this file you indicate that you have read the license and understand +and accept it fully. + +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + +24. WebP copyright: + +Copyright (c) 2010, Google Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of Google nor the names of its contributors may + be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + +25. ZLib copyright: + + (C) 1995-2013 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + +If you use the zlib library in a product, we would appreciate *not* receiving +lengthy legal documents to sign. The sources are provided for free but without +warranty of any kind. The library has been entirely written by Jean-loup +Gailly and Mark Adler; it does not include third-party code. + +If you redistribute modified sources, we would appreciate that you include in +the file ChangeLog history information documenting your changes. Please read +the FAQ for more information on the distribution of modified source versions. + +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + +26. GNU LESSER GENERAL PUBLIC LICENSE (used by Cairo, Croco, Flif, Glib, + Librsvg, Lqr, Pango): + + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations +below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it +becomes a de-facto standard. To achieve this, non-free programs must +be allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control +compilation and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at least + three years, to give the same user the materials specified in + Subsection 6a, above, for a charge no more than the cost of + performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply, and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License +may add an explicit geographical distribution limitation excluding those +countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms +of the ordinary General Public License). + + To apply these terms, attach the following notices to the library. +It is safest to attach them to the start of each source file to most +effectively convey the exclusion of warranty; and each file should +have at least the "copyright" line and a pointer to where the full +notice is found. + + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or +your school, if any, to sign a "copyright disclaimer" for the library, +if necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James + Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * diff --git a/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/README.txt b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/README.txt new file mode 100755 index 0000000000..240f562e14 --- /dev/null +++ b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/README.txt @@ -0,0 +1,140 @@ +Introduction to ImageMagick + + ImageMagick® is a software suite to create, edit, compose, or convert + bitmap images. It can read and write images in a variety of formats (over + 200) including PNG, JPEG, GIF, HEIC, TIFF, DPX, EXR, WebP, Postscript, + PDF, and SVG. Use ImageMagick to resize, flip, mirror, rotate, distort, + shear and transform images, adjust image colors, apply various special + effects, or draw text, lines, polygons, ellipses and Bézier curves. + + The functionality of ImageMagick is typically utilized from the command + line or you can use the features from programs written in your favorite + language. Choose from these interfaces: G2F (Ada), MagickCore (C), + MagickWand (C), ChMagick (Ch), ImageMagickObject (COM+), Magick++ (C++), + JMagick (Java), L-Magick (Lisp), Lua, NMagick (Neko/haXe), Magick.NET + (.NET), PascalMagick (Pascal), PerlMagick (Perl), MagickWand for PHP + (PHP), IMagick (PHP), PythonMagick (Python), RMagick (Ruby), or TclMagick + (Tcl/TK). With a language interface, use ImageMagick to modify or create + images dynamically and automagically. + + ImageMagick utilizes multiple computational threads to increase performance + and can read, process, or write mega-, giga-, or tera-pixel image sizes. + + ImageMagick is free software delivered as a ready-to-run binary distribution + or as source code that you may use, copy, modify, and distribute in both open + and proprietary applications. It is distributed under a derived Apache 2.0 + license. + + The ImageMagick development process ensures a stable API and ABI. Before + each ImageMagick release, we perform a comprehensive security assessment + that includes memory error and thread data race detection to prevent + security vulnerabilities. + + The current release is the ImageMagick 7.0.9-* series. It runs on Linux, + Windows, Mac Os X, iOS, Android OS, and others. + + The authoritative ImageMagick web site is https://imagemagick.org. The + authoritative source code repository is https://github.com/ImageMagick. We + maintain a source code mirror at https://gitlab.com/ImageMagick. + + We continue to maintain the legacy release of ImageMagick, version 6, + at https://legacy.imagemagick.org. + + +Features and Capabilities + + Here are just a few examples of what ImageMagick can do: + + * Format conversion: convert an image from one format to another (e.g. + PNG to JPEG). + * Transform: resize, rotate, deskew, crop, flip or trim an image. + * Transparency: render portions of an image invisible. + * Draw: add shapes or text to an image. + * Decorate: add a border or frame to an image. + * Special effects: blur, sharpen, threshold, or tint an image. + * Animation: create a GIF animation sequence from a group of images. + * Text & comments: insert descriptive or artistic text in an image. + * Image gradients: create a gradual blend of one color whose shape is + horizontal, vertical, circular, or ellipical. + * Image identification: describe the format and attributes of an image. + * Composite: overlap one image over another. + * Montage: juxtapose image thumbnails on an image canvas. + * Generalized pixel distortion: correct for, or induce image distortions + including perspective. + * Computer vision: Canny edge detection. + * Morphology of shapes: extract features, describe shapes and recognize + patterns in images. + * Motion picture support: read and write the common image formats used in + digital film work. + * Image calculator: apply a mathematical expression to an image or image + channels. + * Connected component labeling: uniquely label connected regions in an + image. + * Discrete Fourier transform: implements the forward and inverse DFT. + * Perceptual hash: maps visually identical images to the same or similar + hash-- useful in image retrieval, authentication, indexing, or copy + detection as well as digital watermarking. + * Complex text layout: bidirectional text support and shaping. + * Color management: accurate color management with color profiles or in + lieu of-- built-in gamma compression or expansion as demanded by the + colorspace. + * High dynamic-range images: accurately represent the wide range of + intensity levels found in real scenes ranging from the brightest direct + sunlight to the deepest darkest shadows. + * Encipher or decipher an image: convert ordinary images into + unintelligible gibberish and back again. + * Virtual pixel support: convenient access to pixels outside the image + region. + * Large image support: read, process, or write mega-, giga-, or + tera-pixel image sizes. + * Threads of execution support: ImageMagick is thread safe and most + internal algorithms are OpenMP-enabled to take advantage of speed-ups + offered by multicore processor chips. + * Distributed pixel cache: offload intermediate pixel storage to one or + more remote servers. + * Heterogeneous distributed processing: certain algorithms are + OpenCL-enabled to take advantage of speed-ups offered by executing in + concert across heterogeneous platforms consisting of CPUs, GPUs, and + other processors. + * ImageMagick on the iPhone: convert, edit, or compose images on your + iPhone or iPad. + + Examples of ImageMagick Usage * https://imagemagick.org/Usage/ + shows how to use ImageMagick from the command-line to accomplish any + of these tasks and much more. Also, see Fred's ImageMagick Scripts @ + http://www.fmwconcepts.com/imagemagick/: a plethora of command-line scripts + that perform geometric transforms, blurs, sharpens, edging, noise removal, + and color manipulations. With Magick.NET, use ImageMagick without having + to install ImageMagick on your server or desktop. + + +News + + Now that ImageMagick version 7 is released, we continue + to maintain the legacy release of ImageMagick, version 6, at + https://legacy.imagemagick.org. Learn how ImageMagick version 7 differs + from previous versions with our porting guide. + + ImageMagick best practices strongly encourages you to configure a security + policy that suits your local environment. + + As an analog to linear (RGB) and non-linear (sRGB) color colorspaces, as + of ImageMagick 7.0.7-17, we introduce the LinearGray colorspace. Gray is + non-linear grayscale and LinearGray is linear (e.g. -colorspace linear-gray). + + Want more performance from ImageMagick? Try these options: + + Add more memory to your system, see the pixel cache; Add more cores to + your system, see threads of execution support; push large images to a + solid-state drive, see large image support. + + If these options are prohibitive, you can reduce the quality of the image + results. The default build is Q16 HDRI. If you disable HDRI, you use + half the memory and instead of predominately floating point operations, + you use the typically more efficient integer operations. The tradeoff + is reduced precision and you cannot process out of range pixel values + (e.g. negative). If you build the Q8 non-HDRI version of ImageMagick, + you again reduce the memory requirements in half-- and once again there + is a tradeoff, even less precision and no out of range pixel values. For + a Q8 non-HDRI build of ImageMagick, use these configure script options: + --with-quantum-depth=8 --disable-hdri. diff --git a/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/colors.xml b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/colors.xml new file mode 100755 index 0000000000..55bfb5d8c5 --- /dev/null +++ b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/colors.xml @@ -0,0 +1,28 @@ + + + + + + +]> + + + + + + + + + + + + diff --git a/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/compare.exe b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/compare.exe new file mode 100755 index 0000000000..14b3abfa11 Binary files /dev/null and b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/compare.exe differ diff --git a/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/composite.exe b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/composite.exe new file mode 100755 index 0000000000..5e4c6bce55 Binary files /dev/null and b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/composite.exe differ diff --git a/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/configure.xml b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/configure.xml new file mode 100755 index 0000000000..289db15951 --- /dev/null +++ b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/configure.xml @@ -0,0 +1,18 @@ + + + + + +]> + + + + + + + + + + + diff --git a/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/conjure.exe b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/conjure.exe new file mode 100755 index 0000000000..1c45b23b68 Binary files /dev/null and b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/conjure.exe differ diff --git a/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/convert.exe b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/convert.exe new file mode 100755 index 0000000000..3e1086bd6e Binary files /dev/null and b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/convert.exe differ diff --git a/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/dcraw.exe b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/dcraw.exe new file mode 100755 index 0000000000..347c5dcbf5 Binary files /dev/null and b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/dcraw.exe differ diff --git a/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/delegates.xml b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/delegates.xml new file mode 100755 index 0000000000..b012f750ea --- /dev/null +++ b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/delegates.xml @@ -0,0 +1,102 @@ + + + + + + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/english.xml b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/english.xml new file mode 100755 index 0000000000..d38285b6e1 --- /dev/null +++ b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/english.xml @@ -0,0 +1,1709 @@ + + + + + + + + + +]> + + + + + + unable to open image + + + unable to open file + + + unable to read blob + + + unable to write blob + + + unrecognized image format + + + zero-length blob not permitted + + + + + + + cache resources exhausted + + + incompatible API + + + no pixels defined in cache + + + pixel cache is not open + + + pixels are not authentic + + + unable to clone cache + + + unable to extend cache + + + unable to get cache nexus + + + unable to open pixel cache + + + unable to persist pixel cache + + + unable to read pixel cache + + + unable to write pixel cache + + + + + unable to acquire cache view + + + unable to extend pixel cache + + + + + + + colormap type not supported + + + colorspace model is not supported + + + compression not supported + + + data encoding scheme is not supported + + + data storage type is not supported + + + delta-PNG is not supported + + + encrypted WPG image file not supported + + + fractal compression not supported + + + image column or row size is not supported + + + image does not have a clip mask + + + image does not have an alpha channel + + + image does not have a EXIF thumbnail + + + image is not tiled + + + irregular channel geometry not supported + + + JNG compression not supported + + + JPEG compression not supported + + + JPEG embedding failed + + + location type is not supported + + + map storage type is not supported + + + multi-dimensional matrices are not supported + + + multiple record list not supported + + + no bitmap on clipboard + + + no APP1 data is available + + + no 8BIM data is available + + + no color profile is available + + + no data returned + + + no image vector graphics; unable to generate SVG + + + no IPTC profile available + + + number of images is not supported + + + only continuous tone picture supported + + + only level zero files Supported + + + PNG compression not supported + + + RLE compression not supported + + + unable to copy profile + + + unable to create bitmap + + + unable to create a DC + + + unable to decompress image + + + unable to write MPEG parameters + + + unable to zip-compress image + + + ZIP compression not supported + + + + + exif profile size exceeds limit and will be truncated + + + lossless to lossy JPEG conversion + + + + + + + include element nested too deeply + + + + + unable to access configure file + + + unable to open module file + + + + + + + + an error has occurred reading from file + + + an error has occurred writing to file + + + cipher support not enabled + + + colormap exceeded 256 colors + + + corrupt image + + + file format version mismatch + + + image depth not supported + + + image file does not contain any image data + + + image type not supported + + + improper image header + + + insufficient image data in file + + + invalid colormap index + + + invalid pixel + + + length and filesize do not match + + + maximum channels exceeded + + + missing image channel + + + negative or zero image size + + + non OS2 BMP header size less than 40 + + + not enough pixel data + + + not enough tiles found in level + + + too much image data in file + + + static planes value not equal to 1 + + + unable to read extension block + + + unable to read image header + + + unable to read image data + + + unable to runlength decode image + + + unable to uncompress image + + + unexpected end-of-file + + + unexpected sampling factor + + + unknown pattern type + + + unrecognized alpha channel option + + + unrecognized compression + + + unrecognized number of colors + + + unsupported bits per pixel + + + + + unable to persist key + + + + + insufficient image data in file + + + length and filesize do not match + + + corrupt PCD image, skipping to sync byte + + + + + + + + delegate failed + + + failed to compute output size + + + failed to render file + + + failed to scan file + + + no tag found + + + PCL delegate failed + + + Postscript delegate failed + + + unable to create image + + + unable to decode image file + + + unable to encode image file + + + unable to initialize FPX library + + + unable to initialize WMF library + + + unable to manage JP2 stream + + + unable to read aspect ratio + + + unable to read summary info + + + unable to set affine matrix + + + unable to set aspect ratio + + + unable to set color twist + + + unable to set contrast + + + unable to set filtering value + + + unable to set image title + + + unable to set JPEG level + + + unable to set region of interest + + + unable to set summary info + + + unable to write SVG format + + + XPS delegate failed + + + + + + + already pushing pattern definition + + + non-conforming drawing primitive definition + + + not a relative URL + + + not currently pushing pattern definition + + + segment stack overflow + + + too many bezier coordinates + + + unable to print + + + unbalanced graphic context push-pop + + + URL not found + + + vector graphics nested too deeply + + + + + + + + an error has occurred reading from file + + + unable to create temporary file + + + unable to open file + + + unable to write file + + + + + + + + angle is discontinuous + + + colormapped image required + + + color separated image required + + + color profile operates on another colorspace + + + image depth not supported + + + image sequence is required + + + image morphology differs + + + image list is required + + + image size differs + + + images too dissimilar + + + left and right image sizes differ + + + negative or zero image size + + + no images were found + + + no images were loaded + + + too many cluster + + + unable to create color transform + + + width or height exceeds limit + + + + + associate profile with image, a source and destination color profile required for transform + + + unable to transform colorspace + + + + + + + filter failed + + + + + + + + delegate library support not built-in + + + no decode delegate for this image format + + + no encode delegate for this image format + + + + + delegate library support not built-in + + + FreeType library is not available + + + LCMS color profile library is not available + + + no encode delegate for this image format + + + + + + + + image coder signature mismatch + + + image filter signature mismatch + + + unable to load module + + + unable to register image format + + + + + unable to initialize module loader + + + + + unable to close module + + + + + + + + attempt to perform an operation not allowed by the security policy + + + + + + + unable to get registry ID + + + unable to set registry + + + + + + + + list length exceeds limit + + + memory allocation failed + + + pixel cache allocation failed + + + too many exceptions + + + too many objects + + + unable to acquire string + + + unable to allocate colormap + + + unable to convert font + + + unable to create colormap + + + unable to dither image + + + unable to clone package info + + + unable to get package info + + + + + time limit exceeded + + + unable to allocate dash pattern + + + unable to allocate derivates + + + unable to allocate gamma map + + + unable to allocate image + + + unable to allocate image pixels + + + unable to destroy semaphore + + + unable to instantiate semaphore + + + unable to allocate string + + + Memory allocation failed + + + unable to concatenate string + + + unable to convert text + + + unable to create colormap + + + unable to clone image + + + unable to display image + + + unable to escape string + + + unable to interpret MSL image + + + unable to lock semaphore + + + unable to unlock semaphore + + + + + memory allocation failed + + + + + + + + font substitution required + + + unable to get type metrics + + + unable to initialize freetype library + + + unable to read font + + + unrecognized font encoding + + + + + unable to read font + + + + + + + image does not contain the stream geometry + + + no stream handler is defined + + + pixel cache is not open + + + + + + + invalid colormap index + + + zero region size + + + unable to open file + + + wand quantum depth does not match that of the core API + + + wand contains no images + + + wand contains no iterators + + + + + + + color is not known to server + + + no window with specified ID exists + + + standard Colormap is not initialized + + + unable to connect to remote display + + + unable to create bitmap + + + unable to create colormap + + + unable to create pixmap + + + unable to create property + + + unable to create standard colormap + + + unable to display image info + + + unable to get property + + + unable to get Standard Colormap + + + unable to get visual + + + unable to grab mouse + + + unable to load font + + + unable to match visual to Standard Colormap + + + unable to open X server + + + unable to read X window attributes + + + unable to read X window image + + + unrecognized colormap type + + + unrecognized gravity type + + + unrecognized visual specifier + + + + + unable to create X cursor + + + unable to create graphic context + + + unable to create standard colormap + + + unable to create text property + + + unable to create X window + + + unable to create X image + + + unable to create X pixmap + + + unable to display image + + + unable to get visual + + + unable to get pixel info + + + unable to load font + + + unable to make X window + + + unable to open X server + + + unable to view fonts + + + + + using default visual + + + unable to get visual + + + + + + + + add noise to image + + + + + append image sequence + + + + + assign image colors + + + + + average image sequence + + + + + chop image + + + + + classify image colors + + + + + replace color in image + + + + + colorize image + + + + + combine image + + + + + contrast-stretch image + + + + + convolve image + + + + + crop image + + + + + decode image + + + + + despeckle image + + + + + distort image + + + + + dither image colors + + + + + dull image contrast + + + + + encode image + + + + + equalize image + + + + + flip image + + + + + flop image + + + + + add frame to image + + + + + fx image + + + + + gamma correct image + + + + + compute image histogram + + + + + implode image + + + + + level image + + + + + load image + + + load images + + + + + magnfiy image + + + + + filter image with neighborhood ranking + + + + + minify image + + + + + modulate image + + + + + mogrify image + + + + + montage image + + + + + morph image sequence + + + + + mosaic image + + + + + negate image + + + + + oil paint image + + + + + set opaque color in image + + + + + plasma image + + + + + preview image + + + + + raise image + + + + + recolor color image + + + + + reduce image colors + + + + + reduce the image noise + + + + + render image + + + + + resize image + + + + + RGB transform image + + + + + roll image + + + + + rotate image + + + + + sample image + + + + + save image + + + save images + + + + + scale image + + + + + segment image + + + + + extract a channel from image + + + + + sepia-tone image + + + + + shade image + + + + + sharpen image + + + + + sharpen image contrast + + + + + sigmoidal contrast image + + + + + solarize image + + + + + splice image + + + + + spread image + + + + + stegano image + + + + + stereo image + + + + + swirl image + + + + + texture image + + + + + threshold image + + + + + tile image + + + + + tint image + + + + + transform RGB image + + + + + set transparent color in image + + + + + wave image + + + + + write image + + + + + x shear image + + + + + y shear image + + + + diff --git a/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/ffmpeg.exe b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/ffmpeg.exe new file mode 100755 index 0000000000..e1d931b4ce Binary files /dev/null and b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/ffmpeg.exe differ diff --git a/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/hp2xx.exe b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/hp2xx.exe new file mode 100755 index 0000000000..afda51939b Binary files /dev/null and b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/hp2xx.exe differ diff --git a/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/identify.exe b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/identify.exe new file mode 100755 index 0000000000..518a154a64 Binary files /dev/null and b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/identify.exe differ diff --git a/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/locale.xml b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/locale.xml new file mode 100755 index 0000000000..d593fba351 --- /dev/null +++ b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/locale.xml @@ -0,0 +1,48 @@ + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/log.xml b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/log.xml new file mode 100755 index 0000000000..8a290992a4 --- /dev/null +++ b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/log.xml @@ -0,0 +1,80 @@ + + + + + + + + + +]> + + + + + + + + + diff --git a/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/magick.exe b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/magick.exe new file mode 100755 index 0000000000..4b2dcd13ce Binary files /dev/null and b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/magick.exe differ diff --git a/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/mime.xml b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/mime.xml new file mode 100755 index 0000000000..9530fc8d06 --- /dev/null +++ b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/mime.xml @@ -0,0 +1,1145 @@ + + + + + + + + + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/mogrify.exe b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/mogrify.exe new file mode 100755 index 0000000000..1966a097fa Binary files /dev/null and b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/mogrify.exe differ diff --git a/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/montage.exe b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/montage.exe new file mode 100755 index 0000000000..66854edf4e Binary files /dev/null and b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/montage.exe differ diff --git a/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/policy.xml b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/policy.xml new file mode 100755 index 0000000000..9b807465d3 --- /dev/null +++ b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/policy.xml @@ -0,0 +1,74 @@ + + + + + +]> + + + + + + + + + + + + + + + + + + + diff --git a/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/quantization-table.xml b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/quantization-table.xml new file mode 100755 index 0000000000..fb718749a2 --- /dev/null +++ b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/quantization-table.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + +]> + + + + Luma Quantization Table + + 16, 16, 16, 18, 25, 37, 56, 85, + 16, 17, 20, 27, 34, 40, 53, 75, + 16, 20, 24, 31, 43, 62, 91, 135, + 18, 27, 31, 40, 53, 74, 106, 156, + 25, 34, 43, 53, 69, 94, 131, 189, + 37, 40, 62, 74, 94, 124, 169, 238, + 56, 53, 91, 106, 131, 169, 226, 311, + 85, 75, 135, 156, 189, 238, 311, 418 + +
              + +
              + diff --git a/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/sRGB.icc b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/sRGB.icc new file mode 100755 index 0000000000..cfbd03e1f7 Binary files /dev/null and b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/sRGB.icc differ diff --git a/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/stream.exe b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/stream.exe new file mode 100755 index 0000000000..0a0351d23f Binary files /dev/null and b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/stream.exe differ diff --git a/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/thresholds.xml b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/thresholds.xml new file mode 100755 index 0000000000..2ca2daba2d --- /dev/null +++ b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/thresholds.xml @@ -0,0 +1,334 @@ + + + + + + + + + +]> + + + + + + Threshold 1x1 (non-dither) + + 1 + + + + + Checkerboard 2x1 (dither) + + 1 2 + 2 1 + + + + + + Ordered 2x2 (dispersed) + + 1 3 + 4 2 + + + + + Ordered 3x3 (dispersed) + + 3 7 4 + 6 1 9 + 2 8 5 + + + + + + Ordered 4x4 (dispersed) + + 1 9 3 11 + 13 5 15 7 + 4 12 2 10 + 16 8 14 6 + + + + + + Ordered 8x8 (dispersed) + + 1 49 13 61 4 52 16 64 + 33 17 45 29 36 20 48 32 + 9 57 5 53 12 60 8 56 + 41 25 37 21 44 28 40 24 + 3 51 15 63 2 50 14 62 + 35 19 47 31 34 18 46 30 + 11 59 7 55 10 58 6 54 + 43 27 39 23 42 26 38 22 + + + + + + Halftone 4x4 (angled) + + 4 2 7 5 + 3 1 8 6 + 7 5 4 2 + 8 6 3 1 + + + + + Halftone 6x6 (angled) + + 14 13 10 8 2 3 + 16 18 12 7 1 4 + 15 17 11 9 6 5 + 8 2 3 14 13 10 + 7 1 4 16 18 12 + 9 6 5 15 17 11 + + + + + Halftone 8x8 (angled) + + 13 7 8 14 17 21 22 18 + 6 1 3 9 28 31 29 23 + 5 2 4 10 27 32 30 24 + 16 12 11 15 20 26 25 19 + 17 21 22 18 13 7 8 14 + 28 31 29 23 6 1 3 9 + 27 32 30 24 5 2 4 10 + 20 26 25 19 16 12 11 15 + + + + + + Halftone 4x4 (orthogonal) + + 7 13 11 4 + 12 16 14 8 + 10 15 6 2 + 5 9 3 1 + + + + + Halftone 6x6 (orthogonal) + + 7 17 27 14 9 4 + 21 29 33 31 18 11 + 24 32 36 34 25 22 + 19 30 35 28 20 10 + 8 15 26 16 6 2 + 5 13 23 12 3 1 + + + + + Halftone 8x8 (orthogonal) + + 7 21 33 43 36 19 9 4 + 16 27 51 55 49 29 14 11 + 31 47 57 61 59 45 35 23 + 41 53 60 64 62 52 40 38 + 37 44 58 63 56 46 30 22 + 15 28 48 54 50 26 17 10 + 8 18 34 42 32 20 6 2 + 5 13 25 39 24 12 3 1 + + + + + + Halftone 16x16 (orthogonal) + + 4 12 24 44 72 100 136 152 150 134 98 70 42 23 11 3 + 7 16 32 52 76 104 144 160 158 142 102 74 50 31 15 6 + 19 27 40 60 92 132 168 180 178 166 130 90 58 39 26 18 + 36 48 56 80 124 176 188 204 203 187 175 122 79 55 47 35 + 64 68 84 116 164 200 212 224 223 211 199 162 114 83 67 63 + 88 96 112 156 192 216 232 240 239 231 214 190 154 111 95 87 + 108 120 148 184 208 228 244 252 251 243 226 206 182 147 119 107 + 128 140 172 196 219 235 247 256 255 246 234 218 194 171 139 127 + 126 138 170 195 220 236 248 253 254 245 233 217 193 169 137 125 + 106 118 146 183 207 227 242 249 250 241 225 205 181 145 117 105 + 86 94 110 155 191 215 229 238 237 230 213 189 153 109 93 85 + 62 66 82 115 163 198 210 221 222 209 197 161 113 81 65 61 + 34 46 54 78 123 174 186 202 201 185 173 121 77 53 45 33 + 20 28 37 59 91 131 167 179 177 165 129 89 57 38 25 17 + 8 13 29 51 75 103 143 159 157 141 101 73 49 30 14 5 + 1 9 21 43 71 99 135 151 149 133 97 69 41 22 10 2 + + + + + + + Circles 5x5 (black) + + 1 21 16 15 4 + 5 17 20 19 14 + 6 21 25 24 12 + 7 18 22 23 11 + 2 8 9 10 3 + + + + + + Circles 5x5 (white) + + 25 21 10 11 22 + 20 9 6 7 12 + 19 5 1 2 13 + 18 8 4 3 14 + 24 17 16 15 23 + + + + + Circles 6x6 (black) + + 1 5 14 13 12 4 + 6 22 28 27 21 11 + 15 29 35 34 26 20 + 16 30 36 33 25 19 + 7 23 31 32 24 10 + 2 8 17 18 9 3 + + + + + Circles 6x6 (white) + + 36 32 23 24 25 33 + 31 15 9 10 16 26 + 22 8 2 3 11 17 + 21 7 1 4 12 18 + 30 14 6 5 13 27 + 35 29 20 19 28 34 + + + + + Circles 7x7 (black) + + 3 9 18 28 17 8 2 + 10 24 33 39 32 23 7 + 19 34 44 48 43 31 16 + 25 40 45 49 47 38 27 + 20 35 41 46 42 29 15 + 11 21 36 37 28 22 6 + 4 12 13 26 14 5 1 + + + + + + Circles 7x7 (white) + + 47 41 32 22 33 42 48 + 40 26 17 11 18 27 43 + 31 16 6 2 7 19 34 + 25 10 5 1 3 12 23 + 30 15 9 4 8 20 35 + 39 29 14 13 21 28 44 + 46 38 37 24 36 45 49 + + + + + + + diff --git a/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/type-ghostscript.xml b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/type-ghostscript.xml new file mode 100755 index 0000000000..6e08ef7553 --- /dev/null +++ b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/type-ghostscript.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/type.xml b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/type.xml new file mode 100755 index 0000000000..fa80ca6caa --- /dev/null +++ b/thirdparty/ImageMagick-7.0.10-27-portable-Q16-x64/type.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + +]> + + + diff --git a/thirdparty/junit/11.3/junit.zip b/thirdparty/junit/11.3/junit.zip new file mode 100644 index 0000000000..db1b83aea2 Binary files /dev/null and b/thirdparty/junit/11.3/junit.zip differ diff --git a/thunderbirdparser/nbproject/project.xml b/thunderbirdparser/nbproject/project.xml index 106d3d64a3..0dc27e4902 100644 --- a/thunderbirdparser/nbproject/project.xml +++ b/thunderbirdparser/nbproject/project.xml @@ -39,13 +39,21 @@ 9.4.1 + + org.sleuthkit.autopsy.Tika + + + + 1.0 + + org.sleuthkit.autopsy.core 10 - 10.20 + 10.21 diff --git a/thunderbirdparser/src/org/sleuthkit/autopsy/thunderbirdparser/Bundle_ja.properties b/thunderbirdparser/src/org/sleuthkit/autopsy/thunderbirdparser/Bundle_ja.properties index 1c54f49f57..2453e9652b 100644 --- a/thunderbirdparser/src/org/sleuthkit/autopsy/thunderbirdparser/Bundle_ja.properties +++ b/thunderbirdparser/src/org/sleuthkit/autopsy/thunderbirdparser/Bundle_ja.properties @@ -1,27 +1,26 @@ -OpenIDE-Module-Display-Category=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb -OpenIDE-Module-Long-Description=\ \ - Email\u30d1\u30fc\u30b5\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u3002\n\n\ - \u3053\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u306fMBOX\u3068PST e-mail\u30d5\u30a1\u30a4\u30eb\u3092\u62bd\u51fa\u3057\u3001Blackboard\u306b\u8f09\u305b\u307e\u3059\u3002 \n\ - Thunderbird\u306eMBOX\u30d5\u30a1\u30a4\u30eb\u306e\u30d5\u30a9\u30eb\u30c0\u69cb\u9020\u3092\u628a\u63e1\u3057\u3066\u3044\u307e\u3059\u3002 -OpenIDE-Module-Name=Email\u30d1\u30fc\u30b5 -OpenIDE-Module-Short-Description=MOBX\u3068PST\u30d5\u30a1\u30a4\u30eb\u3092\u30d1\u30fc\u30b9\u3057\u307e\u3059 -MboxParser.parse.errMsg.failedToReadFile=\u30c7\u30a3\u30b9\u30af\u304b\u3089mbox\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u53d6\u308c\u307e\u305b\u3093\u3067\u3057\u305f\u3002 -MboxParser.parse.errMsg.couldntFindCharset=\u9069\u5207\u306a\u6587\u5b57\u30bb\u30c3\u30c8\u30a8\u30f3\u30b3\u30fc\u30c0\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002 -MboxParser.parse.errMsg.failedToParseNMsgs={0}\u500b\u306eEmail\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u62bd\u51fa\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002 +#Tue Aug 18 18:09:21 UTC 2020 MboxParser.handleAttch.errMsg.failedToCreateOnDisk=MBOX\u306e\u6dfb\u4ed8\u30d5\u30a1\u30a4\u30eb\u3092\u30c7\u30a3\u30b9\u30af\: {0}\u3078\u62bd\u51fa\u3059\u308b\u306e\u306b\u5931\u6557\u3057\u307e\u3057\u305f MboxParser.handleAttch.failedWriteToDisk=\u6dfb\u4ed8\u30d5\u30a1\u30a4\u30eb\u3092\u30c7\u30a3\u30b9\u30af\: {0}\u3078\u62bd\u51fa\u3059\u308b\u306e\u306b\u5931\u6557\u3057\u307e\u3057\u305f -PstParser.parse.errMsg.failedToParseNMsgs={0}\u500b\u306eEmail\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u62bd\u51fa\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002 +MboxParser.parse.errMsg.couldntFindCharset=\u9069\u5207\u306a\u6587\u5b57\u30bb\u30c3\u30c8\u30a8\u30f3\u30b3\u30fc\u30c0\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002 +MboxParser.parse.errMsg.failedToParseNMsgs={0}\u500b\u306eEmail\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u62bd\u51fa\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002 +MboxParser.parse.errMsg.failedToReadFile=\u30c7\u30a3\u30b9\u30af\u304b\u3089mbox\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u53d6\u308c\u307e\u305b\u3093\u3067\u3057\u305f\u3002 +OpenIDE-Module-Display-Category=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb +OpenIDE-Module-Long-Description=\ Email\u30d1\u30fc\u30b5\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u3002\n\n\u3053\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u306fMBOX\u3068PST e-mail\u30d5\u30a1\u30a4\u30eb\u3092\u62bd\u51fa\u3057\u3001Blackboard\u306b\u8f09\u305b\u307e\u3059\u3002 \nThunderbird\u306eMBOX\u30d5\u30a1\u30a4\u30eb\u306e\u30d5\u30a9\u30eb\u30c0\u69cb\u9020\u3092\u628a\u63e1\u3057\u3066\u3044\u307e\u3059\u3002 +OpenIDE-Module-Name=Email\u30d1\u30fc\u30b5 +OpenIDE-Module-Short-Description=MOBX\u3068PST\u30d5\u30a1\u30a4\u30eb\u3092\u30d1\u30fc\u30b9\u3057\u307e\u3059 PstParser.extractAttch.errMsg.failedToExtractToDisk=PST\u306e\u6dfb\u4ed8\u30d5\u30a1\u30a4\u30eb\u3092\u30c7\u30a3\u30b9\u30af\: {0}\u3078\u62bd\u51fa\u3059\u308b\u306e\u306b\u5931\u6557\u3057\u307e\u3057\u305f -ThunderbirdMboxFileIngestModule.moduleName=Email\u30d1\u30fc\u30b5 -ThunderbirdMboxFileIngestModule.processPst.errMsg.outOfDiskSpace=\u30c7\u30a3\u30b9\u30af\u9818\u57df\u304c\u4e0d\u8db3\u3057\u3066\u3044\u307e\u3059\u3002\u30d1\u30fc\u30b9\u3059\u308b\u70ba\u306b{0}\u3092\u30b3\u30d4\u30fc\u3067\u304d\u307e\u305b\u3093\u3002 +PstParser.parse.errMsg.failedToParseNMsgs={0}\u500b\u306eEmail\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u62bd\u51fa\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002 ThunderbirdMboxFileIngestModule.encryptionFileLevel=\u30d5\u30a1\u30a4\u30eb\u30ec\u30d9\u30eb\u6697\u53f7\u5316 -ThunderbirdMboxFileIngestModule.processPst.errProcFile.msg={0}\u306e\u51e6\u7406\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -ThunderbirdMboxFileIngestModule.processPst.errProcFile.details=Outlook 2003\u304a\u3088\u3073\u305d\u308c\u4ee5\u964d\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u304b\u3089\u306e\u30d5\u30a1\u30a4\u30eb\u3057\u304b\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 -ThunderbirdMboxFileIngestModule.processPst.errProcFile.msg2={0}\u306e\u51e6\u7406\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -ThunderbirdMboxFileIngestModule.processMBox.errProcFile.msg={0}\u306e\u51e6\u7406\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -ThunderbirdMboxFileIngestModule.processMBox.errProfFile.details=\u30c7\u30a3\u30b9\u30af\u9818\u57df\u304c\u4e0d\u8db3\u3057\u3066\u3044\u307e\u3059\u3002\u30d1\u30fc\u30b9\u3059\u308b\u70ba\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u30b3\u30d4\u30fc\u3067\u304d\u307e\u305b\u3093\u3002 -ThunderbirdMboxFileIngestModule.processMBox.errProcFile.msg2={0}\u306e\u51e6\u7406\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f ThunderbirdMboxFileIngestModule.getDesc.text=\u3053\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u306fmbox\u304a\u3088\u3073pst/ost\u30d5\u30a1\u30a4\u30eb\u3092\u691c\u51fa\u3001\u30d1\u30fc\u30b9\u3057\u3001blackboard\u306eEmail\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u306b\u7d50\u679c\u3092\u6295\u5165\u3057\u307e\u3059\u3002 +ThunderbirdMboxFileIngestModule.handleAttch.addAttachmentsErrorMsg=\u30e1\u30fc\u30eb\u30e1\u30c3\u30bb\u30fc\u30b8\u306b\u6dfb\u4ed8\u30d5\u30a1\u30a4\u30eb\u3092\u8ffd\u52a0\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002 ThunderbirdMboxFileIngestModule.handleAttch.errMsg={0}\u306e\u51e6\u7406\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f ThunderbirdMboxFileIngestModule.handleAttch.errMsg.details={0}\u306e\u540d\u79f0\u3092\u6301\u3064\u6dfb\u4ed8\u30d5\u30a1\u30a4\u30eb\u3092\u30b1\u30fc\u30b9\u306b\u8ffd\u52a0\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002 +ThunderbirdMboxFileIngestModule.moduleName=Email\u30d1\u30fc\u30b5 ThunderbirdMboxFileIngestModule.notAvail=\u4f7f\u7528\u3067\u304d\u307e\u305b\u3093 +ThunderbirdMboxFileIngestModule.processMBox.errProcFile.msg={0}\u306e\u51e6\u7406\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f +ThunderbirdMboxFileIngestModule.processMBox.errProcFile.msg2={0}\u306e\u51e6\u7406\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f +ThunderbirdMboxFileIngestModule.processMBox.errProfFile.details=\u30c7\u30a3\u30b9\u30af\u9818\u57df\u304c\u4e0d\u8db3\u3057\u3066\u3044\u307e\u3059\u3002\u30d1\u30fc\u30b9\u3059\u308b\u70ba\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u30b3\u30d4\u30fc\u3067\u304d\u307e\u305b\u3093\u3002 +ThunderbirdMboxFileIngestModule.processPst.errMsg.outOfDiskSpace=\u30c7\u30a3\u30b9\u30af\u9818\u57df\u304c\u4e0d\u8db3\u3057\u3066\u3044\u307e\u3059\u3002\u30d1\u30fc\u30b9\u3059\u308b\u70ba\u306b{0}\u3092\u30b3\u30d4\u30fc\u3067\u304d\u307e\u305b\u3093\u3002 +ThunderbirdMboxFileIngestModule.processPst.errProcFile.details=Outlook 2003\u304a\u3088\u3073\u305d\u308c\u4ee5\u964d\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u304b\u3089\u306e\u30d5\u30a1\u30a4\u30eb\u3057\u304b\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 +ThunderbirdMboxFileIngestModule.processPst.errProcFile.msg={0}\u306e\u51e6\u7406\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f +ThunderbirdMboxFileIngestModule.processPst.errProcFile.msg2={0}\u306e\u51e6\u7406\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f