Merge branch 'develop' into 5718-invert-control-of-case-uco

This commit is contained in:
U-BASIS\dsmyda
2020-01-13 17:34:52 -05:00
400 changed files with 35112 additions and 5874 deletions
+1 -1
View File
@@ -137,7 +137,7 @@
</target>
<target name="get-deps" depends="init-ivy,getTSKJars,get-thirdparty-dependencies,get-InternalPythonModules, download-binlist,getTestDataFiles">
<target name="get-deps" depends="init-ivy,getTSKJars,get-thirdparty-dependencies,get-InternalPythonModules, download-binlist">
<mkdir dir="${ext.dir}"/>
<copy file="${thirdparty.dir}/LICENSE-2.0.txt" todir="${ext.dir}" />
<!-- fetch all the dependencies from Ivy and stick them in the right places -->
+9 -2
View File
@@ -42,14 +42,21 @@
<dependency conf="core->default" org="com.google.cloud" name="google-cloud-translate" rev="1.70.0"/>
<dependency conf="core->default" org="org.apache.opennlp" name="opennlp-tools" rev="1.9.1"/>
<dependency conf="core->default" org="com.ethteck.decodetect" name="decodetect-core" rev="0.3"/>
<dependency conf="core->default" org="com.beetstra.jutf7" name="jutf7" rev="1.0.0"/>
<dependency org="org.sejda.webp-imageio" name="webp-imageio-sejda" rev="0.1.0"/>
<dependency org="com.googlecode.libphonenumber" name="libphonenumber" rev="3.5" />
<dependency conf="core->default" org="commons-validator" name="commons-validator" rev="1.6"/>
<dependency conf="core->default" org="net.htmlparser.jericho" name="jericho-html" rev="3.3"/>
<dependency org="com.squareup.okhttp" name="okhttp" rev="2.7.5"/>
<!-- map support for geolocation -->
<dependency conf="core->default" org="org.jxmapviewer" name="jxmapviewer2" rev="2.4"/>
<!-- https://mvnrepository.com/artifact/javax.ws.rs/javax.ws.rs-api -->
<dependency org="javax.ws.rs" name="javax.ws.rs-api" rev="2.0"/>
<override org="jakarta.ws.rs" module="jakarta.ws.rs-api" rev="2.1.5"/>
<override org="jakarta.ws.rs" module="jakarta.ws.rs-api" rev="2.1.5"/>
</dependencies>
</ivy-module>
+4
View File
@@ -18,6 +18,7 @@ file.reference.commons-lang3-3.8.1.jar=release\\modules\\ext\\commons-lang3-3.8.
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.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
@@ -50,7 +51,10 @@ 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.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
+21 -4
View File
@@ -327,6 +327,7 @@
<package>org.sleuthkit.autopsy.datasourceprocessors</package>
<package>org.sleuthkit.autopsy.directorytree</package>
<package>org.sleuthkit.autopsy.events</package>
<package>org.sleuthkit.autopsy.exceptions</package>
<package>org.sleuthkit.autopsy.filesearch</package>
<package>org.sleuthkit.autopsy.guiutils</package>
<package>org.sleuthkit.autopsy.healthmonitor</package>
@@ -405,6 +406,10 @@
<runtime-relative-path>ext/okhttp-2.7.5.jar</runtime-relative-path>
<binary-origin>release/modules/ext/okhttp-2.7.5.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/libphonenumber-3.5.jar</runtime-relative-path>
<binary-origin>release/modules/ext/libphonenumber-3.5.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/tika-core-1.20.jar</runtime-relative-path>
<binary-origin>release\modules\ext\tika-core-1.20.jar</binary-origin>
@@ -449,6 +454,10 @@
<runtime-relative-path>ext/commons-pool2-2.4.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-pool2-2.4.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jxmapviewer2-2.4.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jxmapviewer2-2.4.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jdom-2.0.5-contrib.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jdom-2.0.5-contrib.jar</binary-origin>
@@ -517,6 +526,10 @@
<runtime-relative-path>ext/google-http-client-1.29.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/google-http-client-1.29.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/sleuthkit-postgresql-4.7.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/sleuthkit-postgresql-4.7.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/bcpkix-jdk15on-1.60.jar</runtime-relative-path>
<binary-origin>release\modules\ext\bcpkix-jdk15on-1.60.jar</binary-origin>
@@ -605,10 +618,6 @@
<runtime-relative-path>ext/jbig2-imageio-3.0.2.jar</runtime-relative-path>
<binary-origin>release\modules\ext\jbig2-imageio-3.0.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/sleuthkit-postgresql-4.7.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/sleuthkit-postgresql-4.7.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/apache-mime4j-dom-0.8.2.jar</runtime-relative-path>
<binary-origin>release\modules\ext\apache-mime4j-dom-0.8.2.jar</binary-origin>
@@ -785,6 +794,14 @@
<runtime-relative-path>ext/vorbis-java-tika-0.8.jar</runtime-relative-path>
<binary-origin>release\modules\ext\vorbis-java-tika-0.8.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/decodetect-core-0.3.jar</runtime-relative-path>
<binary-origin>release/modules/ext/decodetect-core-0.3.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jutf7-1.0.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jutf7-1.0.0.jar</binary-origin>
</class-path-extension>
</data>
</configuration>
</project>
@@ -1,7 +1,7 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2011-2018 Basis Technology Corp.
* Copyright 2011-2019 Basis Technology Corp.
* Contact: carrier <at> sleuthkit <dot> org
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -30,6 +30,7 @@ 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.Content;
import org.sleuthkit.datamodel.TagName;
import org.sleuthkit.datamodel.TskCoreException;
@@ -72,15 +73,24 @@ public class AddBlackboardArtifactTagAction extends AddTagAction {
@Override
protected void addTag(TagName tagName, String comment) {
/*
* The documentation for Lookup.lookupAll() explicitly says that the
* collection it returns may contain duplicates. Within this invocation
* of addTag(), we don't want to tag the same BlackboardArtifact more
* than once, so we dedupe the BlackboardArtifacts by stuffing them into
* a HashSet.
*/
final Collection<BlackboardArtifact> selectedArtifacts = new HashSet<>(Utilities.actionsGlobalContext().lookupAll(BlackboardArtifact.class));
final Collection<BlackboardArtifact> selectedArtifacts = new HashSet<>();
//If the contentToTag is empty look up the selected content
if (getContentToTag().isEmpty()) {
/*
* The documentation for Lookup.lookupAll() explicitly says that the
* collection it returns may contain duplicates. Within this
* invocation of addTag(), we don't want to tag the same
* BlackboardArtifact more than once, so we dedupe the
* BlackboardArtifacts by stuffing them into a HashSet.
*/
selectedArtifacts.addAll(Utilities.actionsGlobalContext().lookupAll(BlackboardArtifact.class));
} else {
for (Content content : getContentToTag()) {
if (content instanceof BlackboardArtifact) {
selectedArtifacts.add((BlackboardArtifact) content);
}
}
}
new Thread(() -> {
for (BlackboardArtifact artifact : selectedArtifacts) {
try {
@@ -1,7 +1,7 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2011-2018 Basis Technology Corp.
* Copyright 2011-2019 Basis Technology Corp.
* Contact: carrier <at> sleuthkit <dot> org
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -76,16 +76,26 @@ public class AddContentTagAction extends AddTagAction {
@Override
protected void addTag(TagName tagName, String comment) {
/*
* The documentation for Lookup.lookupAll() explicitly says that the
* collection it returns may contain duplicates. Within this invocation
* of addTag(), we don't want to tag the same AbstractFile more than
* once, so we dedupe the AbstractFiles by stuffing them into a HashSet.
*
* We don't want VirtualFile and DerivedFile objects to be tagged.
*/
final Collection<AbstractFile> selectedFiles = new HashSet<>(Utilities.actionsGlobalContext().lookupAll(AbstractFile.class));
final Collection<AbstractFile> selectedFiles = new HashSet<>();
//If the contentToTag is empty look up the selected content
if (getContentToTag().isEmpty()) {
/*
* The documentation for Lookup.lookupAll() explicitly says that the
* collection it returns may contain duplicates. Within this
* invocation of addTag(), we don't want to tag the same
* AbstractFile more than once, so we dedupe the AbstractFiles by
* stuffing them into a HashSet.
*
* We don't want VirtualFile and DerivedFile objects to be tagged.
*/
selectedFiles.addAll(Utilities.actionsGlobalContext().lookupAll(AbstractFile.class));
} else {
for (Content content : getContentToTag()) {
if (content instanceof AbstractFile) {
selectedFiles.add((AbstractFile) content);
}
}
}
new Thread(() -> {
for (AbstractFile file : selectedFiles) {
try {
@@ -1,7 +1,7 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2011-2018 Basis Technology Corp.
* Copyright 2011-2019 Basis Technology Corp.
* Contact: carrier <at> sleuthkit <dot> org
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -20,6 +20,9 @@ package org.sleuthkit.autopsy.actions;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
@@ -33,6 +36,7 @@ import org.sleuthkit.autopsy.casemodule.Case;
import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException;
import org.sleuthkit.autopsy.casemodule.services.TagsManager;
import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.datamodel.Content;
import org.sleuthkit.datamodel.TagName;
import org.sleuthkit.datamodel.TskCoreException;
import org.sleuthkit.datamodel.TskData;
@@ -45,6 +49,7 @@ abstract class AddTagAction extends AbstractAction implements Presenter.Popup {
private static final long serialVersionUID = 1L;
private static final String NO_COMMENT = "";
private final Collection<Content> content = new HashSet<>();
AddTagAction(String menuText) {
super(menuText);
@@ -52,6 +57,32 @@ abstract class AddTagAction extends AbstractAction implements Presenter.Popup {
@Override
public JMenuItem getPopupPresenter() {
content.clear();
return new TagMenu();
}
/**
* Get the collection of content which may have been specified for this
* action. Empty collection returned when no content was specified.
*
* @return The specified content for this action.
*/
Collection<Content> getContentToTag() {
return Collections.unmodifiableCollection(content);
}
/**
* Get the menu for adding tags to the specified collection of Content.
*
* @param contentToTag The collection of Content the menu actions will be
* applied to.
*
* @return The menu which will allow users to choose the tag they want to
* apply to the Content specified.
*/
public JMenuItem getMenuForContent(Collection<? extends Content> contentToTag) {
content.clear();
content.addAll(contentToTag);
return new TagMenu();
}
@@ -118,26 +149,26 @@ abstract class AddTagAction extends AbstractAction implements Presenter.Popup {
tagNameItem.addActionListener((ActionEvent e) -> {
getAndAddTag(entry.getKey(), entry.getValue(), NO_COMMENT);
});
// Show custom tags before predefined tags in the menu
// Show custom tags before predefined tags in the menu
if (standardTagNames.contains(tagDisplayName)) {
standardTagMenuitems.add(tagNameItem);
} else {
add(tagNameItem);
}
}
}
}
if (getItemCount() > 0) {
addSeparator();
}
standardTagMenuitems.forEach((menuItem) -> {
add(menuItem);
});
addSeparator();
// Create a "Choose Tag and Comment..." menu item. Selecting this item initiates
// a dialog that can be used to create or select a tag name with an
// optional comment and adds a tag with the resulting name.
@@ -150,7 +181,7 @@ abstract class AddTagAction extends AbstractAction implements Presenter.Popup {
}
});
add(tagAndCommentItem);
// Create a "New Tag..." menu item.
// Selecting this item initiates a dialog that can be used to create
// or select a tag name and adds a tag with the resulting name.
@@ -162,7 +193,7 @@ abstract class AddTagAction extends AbstractAction implements Presenter.Popup {
}
});
add(newTagMenuItem);
}
/**
@@ -194,10 +225,10 @@ abstract class AddTagAction extends AbstractAction implements Presenter.Popup {
tagName = openCase.getServices().getTagsManager().getDisplayNamesToTagNamesMap().get(tagDisplayName);
} catch (TskCoreException ex1) {
Logger.getLogger(AddTagAction.class.getName()).log(Level.SEVERE, tagDisplayName + " already exists in database but an error occurred in retrieving it.", ex1); //NON-NLS
}
}
} catch (TskCoreException ex) {
Logger.getLogger(AddTagAction.class.getName()).log(Level.SEVERE, "Error adding " + tagDisplayName + " tag name", ex); //NON-NLS
}
}
}
addTag(tagName, comment);
}
@@ -1,51 +1,97 @@
GetTagNameDialog.cancelButton.text=\u30ad\u30e3\u30f3\u30bb\u30eb
AddBlackboardArtifactTagAction.pluralTagResult=\u7d50\u679c\u30bf\u30b0\u3092\u8ffd\u52a0
AddBlackboardArtifactTagAction.singularTagResult=\u7d50\u679c\u30bf\u30b0\u3092\u8ffd\u52a0
AddBlackboardArtifactTagAction.taggingErr=\u30bf\u30b0\u4ed8\u3051\u30a8\u30e9\u30fc
# {0} - artifactName
AddBlackboardArtifactTagAction.unableToTag.msg={0} \u3092\u30bf\u30b0\u4ed8\u3051\u3067\u304d\u307e\u305b\u3093\u3002
AddContentTagAction.cannotApplyTagErr=\u30bf\u30b0\u3092\u9069\u7528\u3067\u304d\u307e\u305b\u3093
AddContentTagAction.pluralTagFile=\u30d5\u30a1\u30a4\u30eb\u30bf\u30b0\u3092\u8ffd\u52a0
AddContentTagAction.singularTagFile=\u30d5\u30a1\u30a4\u30eb\u30bf\u30b0\u3092\u8ffd\u52a0
# {0} - fileName
# {1} - tagName
AddContentTagAction.tagExists={0} \u304c {1} \u3068\u3057\u3066\u30bf\u30b0\u4ed8\u3051\u3055\u308c\u307e\u3057\u305f\u3002\u540c\u3058\u30bf\u30b0\u3092\u518d\u9069\u7528\u3067\u304d\u307e\u305b\u3093\u3002
AddContentTagAction.taggingErr=\u30bf\u30b0\u4ed8\u3051\u30a8\u30e9\u30fc
# {0} - fileName
AddContentTagAction.unableToTag.msg={0} \u3092\u30bf\u30b0\u4ed8\u3051\u3067\u304d\u307e\u305b\u3093\u3002\u901a\u5e38\u306e\u30d5\u30a1\u30a4\u30eb\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002
# {0} - fileName
AddContentTagAction.unableToTag.msg2={0} \u3092\u30bf\u30b0\u4ed8\u3051\u3067\u304d\u307e\u305b\u3093\u3002
CTL_ShowIngestProgressSnapshotAction=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30b9\u30c6\u30fc\u30bf\u30b9\u8a73\u7d30
DeleteBlackboardArtifactTagAction.deleteTag=\u9078\u629e\u3057\u305f\u30bf\u30b0\u3092\u524a\u9664
DeleteBlackboardArtifactTagAction.tagDelErr=\u30bf\u30b0\u524a\u9664\u30a8\u30e9\u30fc
# {0} - tagName
DeleteBlackboardArtifactTagAction.unableToDelTag.msg={0} \u3092Delete\u30bf\u30b0\u4ed8\u3051\u3067\u304d\u307e\u305b\u3093\u3002
DeleteContentTagAction.deleteTag=\u9078\u629e\u3057\u305f\u30bf\u30b0\u3092\u524a\u9664
DeleteContentTagAction.tagDelErr=\u30bf\u30b0\u524a\u9664\u30a8\u30e9\u30fc
# {0} - tagName
DeleteContentTagAction.unableToDelTag.msg={0} \u3092Delete\u30bf\u30b0\u4ed8\u3051\u3067\u304d\u307e\u305b\u3093\u3002
DeleteFileBlackboardArtifactTagAction.deleteTag=\u7d50\u679c\u30bf\u30b0\u3092\u524a\u9664
# {0} - artifactID
DeleteFileBlackboardArtifactTagAction.deleteTag.alert=\u904e\u53bb\u306e\u691c\u7d22\u7d50\u679c {0} \u3092\u30bf\u30b0\u306a\u3057\u306b\u3067\u304d\u307e\u305b\u3093\u3002
# {0} - artifactID
DeleteFileBlackboardArtifactTagAction.deleteTags.alert=\u904e\u53bb\u306e\u691c\u7d22\u7d50\u679c {0} \u3092\u30bf\u30b0\u306a\u3057\u306b\u3067\u304d\u307e\u305b\u3093\u3002
DeleteFileContentTagAction.deleteTag=\u30d5\u30a1\u30a4\u30eb\u30bf\u30b0\u3092\u524a\u9664
# {0} - fileID
DeleteFileContentTagAction.deleteTag.alert=\u904e\u53bb\u306e\u691c\u7d22\u7d50\u679c {0} \u3092\u30bf\u30b0\u306a\u3057\u306b\u3067\u304d\u307e\u305b\u3093\u3002
ExitAction.confirmationDialog.message=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u306e\u5b9f\u884c\u4e2d\u3067\u3059\u3002\u7d42\u4e86\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
ExitAction.confirmationDialog.title=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u306e\u5b9f\u884c\u4e2d\u3067\u3059
# {0} - \u4f8b\u5916\u30e1\u30c3\u30bb\u30fc\u30b8
ExitAction.messageBox.caseCloseExceptionMessage=\u6b21\u306e\u30b1\u30fc\u30b9\u3092\u9589\u3058\u3066\u3044\u308b\u9593\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: {0}
GetTagNameDialog.descriptionLabel.text=\u8a18\u8ff0:
GetTagNameDialog.notableCheckbox.text=\u30bf\u30b0\u306f\u9805\u76ee\u304c\u9855\u8457\u3067\u3042\u308b\u3068\u793a\u5506\u3057\u3066\u3044\u307e\u3059\u3002
GetTagNameDialog.tagDescriptionIllegalCharacters.message=\u30bf\u30b0\u306e\u8a18\u8ff0\u306b\u30ab\u30f3\u30de(,)\u3084\u30bb\u30df\u30b3\u30ed\u30f3(;)\u3092\u542b\u3081\u3089\u308c\u307e\u305b\u3093
GetTagNameDialog.tagDescriptionIllegalCharacters.title=\u30bf\u30b0\u306e\u8a18\u8ff0\u306b\u7121\u52b9\u306a\u6587\u5b57\u304c\u3042\u308a\u307e\u3059
GetTagNameDialog.tagNameAlreadyExists.message=\u30bf\u30b0\u540d\u306f\u4e00\u610f\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002\u3053\u306e\u540d\u524d\u306e\u30bf\u30b0\u306f\u3059\u3067\u306b\u5b58\u5728\u3057\u307e\u3059\u3002
GetTagNameDialog.tagNameAlreadyExists.title=\u30bf\u30b0\u540d\u3092\u8907\u88fd
GetTagNameDialog.tagNameField.text=
GetTagNameDialog.cancelButton.text=\u53d6\u308a\u6d88\u3057
GetTagNameDialog.okButton.text=OK
GetTagNameDialog.preexistingLabel.text=\u65e2\u5b58\u30bf\u30b0\uff1a
GetTagNameDialog.preexistingLabel.text=\u524d\u304b\u3089\u5b58\u5728\u3059\u308b\u30bf\u30b0\u540d:
GetTagNameDialog.newTagPanel.border.title=\u65b0\u898f\u30bf\u30b0
GetTagNameDialog.tagNameLabel.text=\u30bf\u30b0\u540d\uff1a
GetTagNameDialog.tagNameLabel.text=\u30bf\u30b0\u540d:
GetTagNameAndCommentDialog.newTagButton.text=\u65b0\u898f\u30bf\u30b0
GetTagNameAndCommentDialog.okButton.text=OK
GetTagNameAndCommentDialog.commentText.toolTipText=\u30bf\u30b0\u306e\u30aa\u30d7\u30b7\u30e7\u30ca\u30eb\u306e\u30b3\u30e1\u30f3\u30c8\u3092\u5165\u529b\u307e\u305f\u306f\u7a7a\u6b04\u306b\u3057\u3066\u304f\u3060\u3055\u3044
GetTagNameAndCommentDialog.commentLabel.text=\u30b3\u30e1\u30f3\u30c8\uff1a
GetTagNameAndCommentDialog.cancelButton.text=\u30ad\u30e3\u30f3\u30bb\u30eb
GetTagNameAndCommentDialog.tagLabel.text=\u30bf\u30b0\uff1a
AddBlackboardArtifactTagAction.singularTagResult=\u7d50\u679c\u306b\u30bf\u30b0\u3092\u8ffd\u52a0
AddBlackboardArtifactTagAction.pluralTagResult=\u7d50\u679c\u306b\u30bf\u30b0\u3092\u8ffd\u52a0
AddBlackboardArtifactTagAction.unableToTag.msg={0}\u306b\u30bf\u30b0\u3092\u8ffd\u52a0\u3067\u304d\u307e\u305b\u3093\u3002
AddBlackboardArtifactTagAction.taggingErr=\u30bf\u30b0\u4ed8\u3051\u30a8\u30e9\u30fc
AddContentTagAction.singularTagFile=\u30d5\u30a1\u30a4\u30eb\u306b\u30bf\u30b0\u3092\u8ffd\u52a0
AddContentTagAction.pluralTagFile=\u30d5\u30a1\u30a4\u30eb\u306b\u30bf\u30b0\u3092\u8ffd\u52a0
AddContentTagAction.unableToTag.msg={0}\u306b\u30bf\u30b0\u3092\u8ffd\u52a0\u3067\u304d\u307e\u305b\u3093\u3002\u901a\u5e38\u30d5\u30a1\u30a4\u30eb\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002
AddContentTagAction.unableToTag.msg2={0}\u306b\u30bf\u30b0\u3092\u8ffd\u52a0\u3067\u304d\u307e\u305b\u3093\u3002
AddContentTagAction.taggingErr=\u30bf\u30b0\u4ed8\u3051\u30a8\u30e9\u30fc
GetTagNameAndCommentDialog.commentText.toolTipText=\u4efb\u610f\u30bf\u30b0\u306e\u30b3\u30e1\u30f3\u30c8\u3092\u5165\u529b\u3059\u308b\u304b\u7a7a\u6b04\u306e\u307e\u307e\u306b\u3059\u308b
GetTagNameAndCommentDialog.commentText.text=
GetTagNameAndCommentDialog.commentLabel.text=\u30b3\u30e1\u30f3\u30c8:
# \u3053\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u5909\u66f4\u3059\u308b\u306b\u306f\u3001[\u30c4\u30fc\u30eb | \u30c6\u30f3\u30d7\u30ec\u30fc\u30c8] \u3092\u9078\u629e\u3057\u3001
# \u30a8\u30c7\u30a3\u30bf\u30fc\u3067\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u958b\u304d\u307e\u3059\u3002
GetTagNameAndCommentDialog.cancelButton.text=\u53d6\u308a\u6d88\u3057
GetTagNameAndCommentDialog.tagLabel.text=\u30bf\u30b0:
AddTagAction.bookmarkFile=\u30d6\u30c3\u30af\u30de\u30fc\u30af\u30d5\u30a1\u30a4\u30eb
AddTagAction.quickTag=\u30af\u30a4\u30c3\u30af\u30bf\u30b0
AddTagAction.noTags=\u30bf\u30b0\u7121\u3057
AddTagAction.newTag=\u65b0\u898f\u30bf\u30b0\u2026
AddTagAction.tagAndComment=\u30bf\u30b0\u3068\u30b3\u30e1\u30f3\u30c8\u3092\u8ffd\u52a0\u2026
GetTagNameAndCommentDialog.noTags=\u30bf\u30b0\u7121\u3057
AddTagAction.noTags=\u30bf\u30b0\u306a\u3057
AddTagAction.newTag=\u65b0\u898f\u30bf\u30b0...
AddTagAction.tagAndComment=\u30bf\u30b0\u3068\u30b3\u30e1\u30f3\u30c8...
AddBookmarkTagAction.bookmark.text=\u30d6\u30c3\u30af\u30de\u30fc\u30af
GetTagNameAndCommentDialog.noTags=\u30bf\u30b0\u306a\u3057
GetTagNameAndCommentDialog.selectTag=\u30bf\u30b0\u3092\u9078\u629e
GetTagNameAndCommentDialog.cancelName=\u30ad\u30e3\u30f3\u30bb\u30eb
GetTagNameAndCommentDialog.cancelName=\u53d6\u308a\u6d88\u3057
GetTagNameDialog.createTag=\u30bf\u30b0\u3092\u4f5c\u6210
GetTagNameDialog.cancelName=\u30ad\u30e3\u30f3\u30bb\u30eb
GetTagNameDialog.mustSupplyTtagName.msg=\u30bf\u30b0\u540d\u3092\u6307\u5b9a\u3057\u306a\u3051\u308c\u3070\u5148\u306b\u9032\u3081\u307e\u305b\u3093\u3002
GetTagNameDialog.cancelName=\u53d6\u308a\u6d88\u3057
GetTagNameDialog.mustSupplyTtagName.msg=\u7d9a\u884c\u3059\u308b\u306b\u306f\u30bf\u30b0\u540d\u3092\u63d0\u4f9b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
GetTagNameDialog.tagNameErr=\u30bf\u30b0\u540d
GetTagNameDialog.illegalCharsErr=\u4f7f\u7528\u3067\u304d\u306a\u3044\u6587\u5b57
GetTagNameDialog.unableToAddTagNameToCase.msg=\u30bf\u30b0\u540d{0}\u3092\u30b1\u30fc\u30b9\u306b\u8ffd\u52a0\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
GetTagNameDialog.illegalChars.msg=\u30bf\u30b0\u540d\u306b\u4e0d\u6b63\u306a\u6587\u5b57\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002\n\u6b21\u306e\u8a18\u53f7\u3092\u542b\u3081\u3089\u308c\u307e\u305b\u3093: \\ : * ? " < > | , ;
GetTagNameDialog.illegalCharsErr=\u4e0d\u6b63\u306a\u6587\u5b57
GetTagNameDialog.unableToAddTagNameToCase.msg={0} \u30bf\u30b0\u540d\u3092\u30b1\u30fc\u30b9\u306b\u8ffd\u52a0\u3067\u304d\u307e\u305b\u3093\u3002
GetTagNameDialog.taggingErr=\u30bf\u30b0\u4ed8\u3051\u30a8\u30e9\u30fc
GetTagNameDialog.tagNameAlreadyDef.msg=\u30bf\u30b0\u540d{0}\u306f\u65e2\u306b\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u307e\u3059\u3002
GetTagNameDialog.dupTagErr=\u30bf\u30b0\u306e\u91cd\u8907\u30a8\u30e9\u30fc
AddContentTagAction.cannotApplyTagErr=\u30bf\u30b0\u3092\u9069\u7528\u3067\u304d\u307e\u305b\u3093
OpenLogFolder.error1=\u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\uff1a{0}
CTL_OpenLogFolder=\u30ed\u30b0\u30d5\u30a9\u30eb\u30c0\u3092\u958b\u304f
ShowIngestProgressSnapshotAction.actionName.text=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30d7\u30ed\u30b0\u30ec\u30b9\u306e\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u3092\u53d6\u5f97
CTL_OpenPythonModulesFolderAction=Python\u30d7\u30e9\u30b0\u30a4\u30f3
GetTagNameDialog.tagNameAlreadyDef.msg={0} \u30bf\u30b0\u540d\u3092\u3059\u3067\u306b\u5b9a\u7fa9\u6e08\u307f\u3067\u3059\u3002
GetTagNameDialog.dupTagErr=\u30bf\u30b0\u8907\u88fd\u30a8\u30e9\u30fc
GetTagNameDialog.tagNameExistsTskCore.msg=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u5185\u306b {0} \u30bf\u30b0\u540d\u304c\u3059\u3067\u306b\u5b58\u5728\u3057\u307e\u3059\u304c\u3001\u691c\u7d22\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
OpenLogFolder.error1=\u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093: {0}
OpenLogFolder.CouldNotOpenLogFolder=\u30ed\u30b0\u30d5\u30a9\u30eb\u30c0\u30fc\u3092\u958b\u3051\u307e\u305b\u3093\u3067\u3057\u305f
CTL_OpenLogFolder=\u30ed\u30b0\u30d5\u30a9\u30eb\u30c0\u30fc\u3092\u958b\u304f
CTL_OpenOutputFolder=\u51fa\u529b\u30d5\u30a9\u30eb\u30c0\u30fc\u3092\u958b\u304f
OpenOutputFolder.error1=\u51fa\u529b\u30d5\u30a9\u30eb\u30c0\u30fc\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093: {0}
OpenOutputFolder.noCaseOpen=\u958b\u3044\u3066\u3044\u308b\u30b1\u30fc\u30b9\u306f\u306a\u3044\u305f\u3081\u3001\u73fe\u5728\u306e\u51fa\u529b\u30d5\u30a9\u30eb\u30c0\u30fc\u3092\u5229\u7528\u3067\u304d\u307e\u305b\u3093\u3002
OpenOutputFolder.CouldNotOpenOutputFolder=\u51fa\u529b\u30d5\u30a9\u30eb\u30c0\u30fc\u3092\u958b\u3051\u307e\u305b\u3093\u3067\u3057\u305f
# {0} - \u53e4\u3044\u30bf\u30b0\u540d
# {1} - artifactID
ReplaceBlackboardArtifactTagAction.replaceTag.alert=\u904e\u53bb\u306e\u691c\u7d22\u7d50\u679c {1} \u306e\u30bf\u30b0 {0} \u3092\u7f6e\u63db\u3067\u304d\u307e\u305b\u3093\u3002
# {0} - \u53e4\u3044\u30bf\u30b0\u540d
# {1} - \u30b3\u30f3\u30c6\u30f3\u30c4\u30aa\u30d6\u30b8\u30a7\u30af\u30c8ID
ReplaceContentTagAction.replaceTag.alert={1} \u306e\u30bf\u30b0 {0} \u3092\u7f6e\u63db\u3067\u304d\u307e\u305b\u3093\u3002
ReplaceTagAction.replaceTag=\u3067\u9078\u629e\u3057\u305f\u30bf\u30b0\u3092\u7f6e\u63db
ShowIngestProgressSnapshotAction.actionName.text=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u9032\u884c\u72b6\u6cc1\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u3092\u53d6\u5f97
OpenPythonModulesFolderAction.actionName.text=Python\u30d7\u30e9\u30b0\u30a4\u30f3
OpenPythonModulesFolderAction.errorMsg.folderNotFound=Python\u30d7\u30e9\u30b0\u30a4\u30f3\u30d5\u30a9\u30eb\u30c0\u30fc\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\uff1a{0}
AddContentTagAction.tagExists={0}\u306f\u65e2\u306b{1}\u3068\u30bf\u30b0\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u540c\u3058\u30bf\u30b0\u306f\u4f7f\u7528\u3067\u304d\u307e\u305b\u3093\u3002
OpenLogFolder.CouldNotOpenLogFolder=\u30ed\u30b0\u30d5\u30a9\u30eb\u30c0\u30fc\u3092\u958b\u3051\u307e\u305b\u3093\u3067\u3057\u305f
CTL_OpenOutputFolder=\u30a2\u30a6\u30c8\u30d7\u30c3\u30c8\u30d5\u30a9\u30eb\u30c0\u3092\u3092\u958b\u304f
OpenOutputFolder.error1=\u6b21\u306e\u30a2\u30a6\u30c8\u30d7\u30c3\u30c8\u30d5\u30a9\u30eb\u30c0\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\uff1a{0}
OpenOutputFolder.noCaseOpen=\u30aa\u30fc\u30d7\u30f3\u30b1\u30fc\u30b9\u304c\u306a\u3044\u306e\u3067\u3001\u4f5c\u696d\u4e2d\u306e\u30a2\u30a6\u30c8\u30d7\u30c3\u30c8\u30d5\u30a9\u30eb\u30c0\u304c\u3042\u308a\u307e\u305b\u3093\u3002
GetTagNameDialog.illegalChars.msg=\u4f7f\u7528\u3067\u304d\u306a\u3044\u6587\u5b57\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002\n\u6b21\u306e\u6587\u5b57\u306f\u4f7f\u7528\u3067\u304d\u307e\u305b\u3093\uff1a\\ \: * ? " < > |
OpenOutputFolder.CouldNotOpenOutputFolder=\u30a2\u30a6\u30c8\u30d7\u30c3\u30c8\u30d5\u30a9\u30eb\u30c0\u304c\u304c\u958b\u3051\u307e\u305b\u3093\u3067\u3057\u305f
OpenPythonModulesFolderAction.errorMsg.folderNotFound=Python\u30d7\u30e9\u30b0\u30a4\u30f3\u30d5\u30a9\u30eb\u30c0\u30fc\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093: {0}
CTL_OpenPythonModulesFolderAction=Python\u30d7\u30e9\u30b0\u30a4\u30f3
GetTagNameAndCommentDialog.tagCombo.toolTipText=\u4f7f\u7528\u3059\u308b\u30bf\u30b0\u3092\u9078\u629e
@@ -1,7 +1,7 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2017-2018 Basis Technology Corp.
* Copyright 2017-2019 Basis Technology Corp.
* Contact: carrier <at> sleuthkit <dot> org
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -82,6 +82,20 @@ public class DeleteFileBlackboardArtifactTagAction extends AbstractAction implem
return new TagMenu();
}
/**
* Get the menu for removing tags from the specified collection of
* BlackboardArtifacts.
*
* @param selectedArtifacts The collection of BlackboardArtifacts the menu
* actions will be applied to.
*
* @return The menu which will allow users to remove tags from the specified
* collection of BlackboardArtifacts.
*/
public JMenuItem getMenuForArtifacts(Collection<BlackboardArtifact> selectedArtifacts) {
return new TagMenu(selectedArtifacts);
}
@Override
public void actionPerformed(ActionEvent event) {
}
@@ -105,7 +119,7 @@ public class DeleteFileBlackboardArtifactTagAction extends AbstractAction implem
Platform.runLater(()
-> new Alert(Alert.AlertType.ERROR, Bundle.DeleteFileBlackboardArtifactTagAction_deleteTag_alert(artifactId)).show()
);
return null;
return null;
}
try {
@@ -144,11 +158,11 @@ public class DeleteFileBlackboardArtifactTagAction extends AbstractAction implem
private static final long serialVersionUID = 1L;
TagMenu() {
this(new HashSet<>(Utilities.actionsGlobalContext().lookupAll(BlackboardArtifact.class)));
}
TagMenu(Collection<BlackboardArtifact> selectedBlackboardArtifactsList) {
super(getActionDisplayName());
final Collection<BlackboardArtifact> selectedBlackboardArtifactsList
= new HashSet<>(Utilities.actionsGlobalContext().lookupAll(BlackboardArtifact.class));
if (!selectedBlackboardArtifactsList.isEmpty()) {
BlackboardArtifact artifact
= selectedBlackboardArtifactsList.iterator().next();
@@ -172,7 +186,7 @@ public class DeleteFileBlackboardArtifactTagAction extends AbstractAction implem
try {
List<BlackboardArtifactTag> existingTagsList
= Case.getCurrentCaseThrows().getServices().getTagsManager()
.getBlackboardArtifactTagsByArtifact(artifact);
.getBlackboardArtifactTagsByArtifact(artifact);
for (Map.Entry<String, TagName> entry : tagNamesMap.entrySet()) {
String tagDisplayName = entry.getKey();
@@ -185,7 +199,7 @@ public class DeleteFileBlackboardArtifactTagAction extends AbstractAction implem
tagNameItem.addActionListener((ActionEvent e) -> {
deleteTag(tagName, artifactTag, artifact.getArtifactID());
});
// Show custom tags before predefined tags in the menu
// Show custom tags before predefined tags in the menu
if (standardTagNames.contains(tagDisplayName)) {
standardTagMenuitems.add(tagNameItem);
} else {
@@ -200,7 +214,7 @@ public class DeleteFileBlackboardArtifactTagAction extends AbstractAction implem
}
}
if ((getItemCount() > 0) && !standardTagMenuitems.isEmpty() ){
if ((getItemCount() > 0) && !standardTagMenuitems.isEmpty()) {
addSeparator();
}
standardTagMenuitems.forEach((menuItem) -> {
@@ -1,15 +1,15 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2017-2018 Basis Technology Corp.
*
* Copyright 2017-2019 Basis Technology Corp.
* Contact: carrier <at> sleuthkit <dot> org
*
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*
* http://www.apache.org/licenses/LICENSE-2.0
*
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -53,7 +53,7 @@ import org.sleuthkit.datamodel.TskData;
"DeleteFileContentTagAction.deleteTag=Remove File Tag"
})
public class DeleteFileContentTagAction extends AbstractAction implements Presenter.Popup {
private static final Logger logger = Logger.getLogger(DeleteFileContentTagAction.class.getName());
private static final long serialVersionUID = 1L;
@@ -81,6 +81,19 @@ public class DeleteFileContentTagAction extends AbstractAction implements Presen
return new TagMenu();
}
/**
* Get the menu for removing tags from the specified collection of Files.
*
* @param selectedFiles The collection of AbstractFiles the menu actions
* will be applied to.
*
* @return The menu which will allow users to remove tags from the specified
* collection of Files.
*/
public JMenuItem getMenuForFiles(Collection<AbstractFile> selectedFiles) {
return new TagMenu(selectedFiles);
}
@Override
public void actionPerformed(ActionEvent e) {
}
@@ -102,19 +115,19 @@ public class DeleteFileContentTagAction extends AbstractAction implements Presen
tagsManager = Case.getCurrentCaseThrows().getServices().getTagsManager();
} catch (NoCurrentCaseException ex) {
logger.log(Level.SEVERE, "Error untagging file. No open case found.", ex); //NON-NLS
Platform.runLater(() ->
new Alert(Alert.AlertType.ERROR, Bundle.DeleteFileContentTagAction_deleteTag_alert(fileId)).show()
Platform.runLater(()
-> new Alert(Alert.AlertType.ERROR, Bundle.DeleteFileContentTagAction_deleteTag_alert(fileId)).show()
);
return null;
}
try {
logger.log(Level.INFO, "Removing tag {0} from {1}", new Object[]{tagName.getDisplayName(), contentTag.getContent().getName()}); //NON-NLS
tagsManager.deleteContentTag(contentTag);
} catch (TskCoreException tskCoreException) {
logger.log(Level.SEVERE, "Error untagging file", tskCoreException); //NON-NLS
Platform.runLater(() ->
new Alert(Alert.AlertType.ERROR, Bundle.DeleteFileContentTagAction_deleteTag_alert(fileId)).show()
Platform.runLater(()
-> new Alert(Alert.AlertType.ERROR, Bundle.DeleteFileContentTagAction_deleteTag_alert(fileId)).show()
);
}
return null;
@@ -141,15 +154,24 @@ public class DeleteFileContentTagAction extends AbstractAction implements Presen
private static final long serialVersionUID = 1L;
/**
* Construct an TagMenu object using the specified collection of files
* as the files to remove a tag from.
*/
TagMenu() {
this(new HashSet<>(Utilities.actionsGlobalContext().lookupAll(AbstractFile.class)));
}
/**
* Construct an TagMenu object using the specified collection of files
* as the files to remove a tag from.
*/
TagMenu(Collection<AbstractFile> selectedFiles) {
super(getActionDisplayName());
final Collection<AbstractFile> selectedAbstractFilesList =
new HashSet<>(Utilities.actionsGlobalContext().lookupAll(AbstractFile.class));
if(!selectedAbstractFilesList.isEmpty()) {
AbstractFile file = selectedAbstractFilesList.iterator().next();
if (!selectedFiles.isEmpty()) {
AbstractFile file = selectedFiles.iterator().next();
Map<String, TagName> tagNamesMap = null;
List<String> standardTagNames = TagsManager.getStandardTagNames();
List<JMenuItem> standardTagMenuitems = new ArrayList<>();
@@ -167,22 +189,22 @@ public class DeleteFileContentTagAction extends AbstractAction implements Presen
// a tag with the associated tag name.
if (null != tagNamesMap && !tagNamesMap.isEmpty()) {
try {
List<ContentTag> existingTagsList =
Case.getCurrentCaseThrows().getServices().getTagsManager()
List<ContentTag> existingTagsList
= Case.getCurrentCaseThrows().getServices().getTagsManager()
.getContentTagsByContent(file);
for (Map.Entry<String, TagName> entry : tagNamesMap.entrySet()) {
String tagDisplayName = entry.getKey();
TagName tagName = entry.getValue();
for(ContentTag contentTag : existingTagsList) {
if(tagDisplayName.equals(contentTag.getName().getDisplayName())) {
for (ContentTag contentTag : existingTagsList) {
if (tagDisplayName.equals(contentTag.getName().getDisplayName())) {
String notableString = tagName.getKnownStatus() == TskData.FileKnown.BAD ? TagsManager.getNotableTagLabel() : "";
JMenuItem tagNameItem = new JMenuItem(tagDisplayName + notableString);
tagNameItem.addActionListener((ActionEvent e) -> {
deleteTag(tagName, contentTag, file.getId());
});
// Show custom tags before predefined tags in the menu
if (standardTagNames.contains(tagDisplayName)) {
standardTagMenuitems.add(tagNameItem);
@@ -198,14 +220,14 @@ public class DeleteFileContentTagAction extends AbstractAction implements Presen
}
}
if ((getItemCount() > 0) && !standardTagMenuitems.isEmpty() ){
if ((getItemCount() > 0) && !standardTagMenuitems.isEmpty()) {
addSeparator();
}
standardTagMenuitems.forEach((menuItem) -> {
add(menuItem);
});
if(getItemCount() == 0) {
if (getItemCount() == 0) {
setEnabled(false);
}
}
@@ -0,0 +1,46 @@
AllCasesSearchAction.getName.text=\u3059\u3079\u3066\u306e\u30b1\u30fc\u30b9\u3092\u691c\u7d22
# {0} - \u30b1\u30fc\u30b9\u6570
AllCasesSearchDialog.caseLabel.text=\u73fe\u5728\u306e\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u306b\u306f {0} \u30b1\u30fc\u30b9\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u305b\u3093\u3002
AllCasesSearchDialog.correlationValueTextField.domainExample=\u4f8b: "domain.com"
AllCasesSearchDialog.correlationValueTextField.emailExample=\u4f8b: "user@host.com"
AllCasesSearchDialog.correlationValueTextField.filesExample=\u4f8b: "f0e1d2c3b4a5968778695a4b3c2d1e0f"
AllCasesSearchDialog.correlationValueTextField.iccidExample=\u4f8b: "89 91 19 1299 99 329451 0"
AllCasesSearchDialog.correlationValueTextField.imeiExample=\u4f8b: "351756061523999"
AllCasesSearchDialog.correlationValueTextField.imsiExample=\u4f8b: "310150123456789"
AllCasesSearchDialog.correlationValueTextField.macExample=\u4f8b: "0C-14-F2-01-AF-45"
AllCasesSearchDialog.correlationValueTextField.phoneExample=\u4f8b: "(800)123-4567"
AllCasesSearchDialog.correlationValueTextField.ssidExample=\u4f8b: "WirelessNetwork-5G"
AllCasesSearchDialog.correlationValueTextField.usbExample=\u4f8b: "4&1234567&0"
AllCasesSearchDialog.descriptionLabel.text=<html>\u76f8\u95a2\u5206\u6790\u30d7\u30ed\u30d1\u30c6\u30a3\u304c\u306a\u3044\u304b\u6307\u5b9a\u5024\u3067\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u3092\u691c\u7d22\u3057\u307e\u3059\u3002\u691c\u7d22\u306f\u5927\u6587\u5b57\u5c0f\u6587\u5b57\u3092\u533a\u5225\u3057\u307e\u305b\u3093\u3002</html>
AllCasesSearchDialog.dialogTitle.text=\u3059\u3079\u3066\u306e\u30b1\u30fc\u30b9\u3092\u691c\u7d22
AllCasesSearchDialog.emptyNode.text=\u8a72\u5f53\u3059\u308b\u7d50\u679c\u304c\u3042\u308a\u307e\u305b\u3093\u3002
AllCasesSearchDialog.errorLabel.text=\
AllCasesSearchDialog.correlationTypeLabel.text=\u76f8\u95a2\u5206\u6790\u30d7\u30ed\u30d1\u30c6\u30a3\u30bf\u30a4\u30d7:
AllCasesSearchDialog.resultsDescription.text=\u3059\u3079\u3066\u306e\u30b1\u30fc\u30b9\u306e\u691c\u7d22
AllCasesSearchDialog.resultsTitle.text=\u3059\u3079\u3066\u306e\u30b1\u30fc\u30b9
AllCasesSearchDialog.searchButton.AccessibleContext.accessibleDescription=
AllCasesSearchDialog.searchButton.AccessibleContext.accessibleName=\u691c\u7d22
AllCasesSearchDialog.searchButton.text=\u691c\u7d22
AllCasesSearchDialog.correlationValueTextField.text=
AllCasesSearchDialog.correlationValueLabel.text=\u76f8\u95a2\u5206\u6790\u30d7\u30ed\u30d1\u30c6\u30a3\u5024:
AllCasesSearchDialog.casesLabel.text=\
AllCasesSearchDialog.validation.genericMessage=\u63d0\u4f9b\u3055\u308c\u305f\u5024\u306f\u6709\u52b9\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002
AllCasesSearchDialog.validation.invalidDomain=\u63d0\u4f9b\u3055\u308c\u305f\u5024\u306f\u6709\u52b9\u306a\u30c9\u30e1\u30a4\u30f3\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002
AllCasesSearchDialog.validation.invalidEmail=\u63d0\u4f9b\u3055\u308c\u305f\u5024\u306f\u6709\u52b9\u306a\u96fb\u5b50\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002
AllCasesSearchDialog.validation.invalidHash=\u63d0\u4f9b\u3055\u308c\u305f\u5024\u306f\u6709\u52b9\u306aMD5\u30cf\u30c3\u30b7\u30e5\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002
AllCasesSearchDialog.validation.invalidIccid=\u63d0\u4f9b\u3055\u308c\u305f\u5024\u306f\u6709\u52b9\u306aICCID\u756a\u53f7\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002
AllCasesSearchDialog.validation.invalidImei=\u63d0\u4f9b\u3055\u308c\u305f\u5024\u306f\u6709\u52b9\u306aIMEI\u756a\u53f7\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002
AllCasesSearchDialog.validation.invalidImsi=\u63d0\u4f9b\u3055\u308c\u305f\u5024\u306f\u6709\u52b9\u306aIMSI\u756a\u53f7\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002
AllCasesSearchDialog.validation.invalidMac=\u63d0\u4f9b\u3055\u308c\u305f\u5024\u306f\u6709\u52b9\u306aMAC\u30a2\u30c9\u30ec\u30b9\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002
AllCasesSearchDialog.validation.invalidPhone=\u63d0\u4f9b\u3055\u308c\u305f\u5024\u306f\u6709\u52b9\u306a\u96fb\u8a71\u756a\u53f7\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002
AllCasesSearchDialog.validation.invalidSsid=\u63d0\u4f9b\u3055\u308c\u305f\u5024\u306f\u6709\u52b9\u306a\u30ef\u30a4\u30e4\u30ec\u30b9 \u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002
AllCasesSearchNode.getName.text=\u305d\u306e\u4ed6\u306e\u30b1\u30fc\u30b9\u306e\u691c\u7d22
CorrelationAttributeInstanceNode.columnName.case=\u30b1\u30fc\u30b9
CorrelationAttributeInstanceNode.columnName.comment=\u30b3\u30e1\u30f3\u30c8
CorrelationAttributeInstanceNode.columnName.dataSource=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9
CorrelationAttributeInstanceNode.columnName.device=\u30c7\u30d0\u30a4\u30b9
CorrelationAttributeInstanceNode.columnName.known=\u65e2\u77e5
CorrelationAttributeInstanceNode.columnName.name=\u540d\u524d
CorrelationAttributeInstanceNode.columnName.path=\u30d1\u30b9
CTL_AllCasesSearchAction=\u3059\u3079\u3066\u306e\u30b1\u30fc\u30b9\u3092\u691c\u7d22
@@ -50,7 +50,9 @@ public interface AutopsyService {
* @param context The case context which includes things such as the case, a
* progress indicator for the operation, a cancellation
* request flag, etc.
* @throws org.sleuthkit.autopsy.framework.AutopsyService.AutopsyServiceException
*
* @throws
* org.sleuthkit.autopsy.framework.AutopsyService.AutopsyServiceException
*/
default void openCaseResources(CaseContext context) throws AutopsyServiceException {
/*
@@ -64,7 +66,9 @@ public interface AutopsyService {
* @param context The case context which includes things such as the case, a
* progress indicator for the operation, a cancellation
* request flag, etc.
* @throws org.sleuthkit.autopsy.framework.AutopsyService.AutopsyServiceException
*
* @throws
* org.sleuthkit.autopsy.framework.AutopsyService.AutopsyServiceException
*/
default void closeCaseResources(CaseContext context) throws AutopsyServiceException {
/*
@@ -113,7 +117,9 @@ public interface AutopsyService {
/**
* Gets the progress indicator for the creation/opening/upgrading of
* case-level resources by a service.
* case-level resources by a service. IMPORTANT: The service should only
* call progress() on the progress indicator. Calling start() and
* finish() are the responsibility of the case providing the context.
*
* @return The progress indicator.
*/
@@ -1,49 +0,0 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2019 Basis Technology Corp.
* Contact: carrier <at> sleuthkit <dot> org
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.sleuthkit.autopsy.casemodule;
import java.io.File;
import java.nio.file.Paths;
import org.sleuthkit.autopsy.coreutils.PlatformUtil;
/**
* Class for methods to check if access should be limited to a feature
*
*/
final class AccessLimiterUtils {
private final static String MULTI_USER_ACCESS_FILE_NAME = "mualimit"; // NON-NLS
private final static String MULTI_USER_ACCESS_FILE_PATH = Paths.get(PlatformUtil.getUserConfigDirectory(), MULTI_USER_ACCESS_FILE_NAME).toString();
/**
* Check if privileges regarding multi-user cases should be restricted.
*
* @return True if privileges should be restricted, false otherwise.
*/
static boolean limitMultiUserAccess() {
return new File(MULTI_USER_ACCESS_FILE_PATH).exists();
}
/**
* Private constructor for a utility class
*/
private AccessLimiterUtils() {
//private constructer left empty intentionally
}
}
@@ -2,14 +2,13 @@ AddImageWizardIngestConfigPanel.name.text=Configure Ingest Modules
AddImageWizardSelectDspVisual.multiUserWarning.text=This type of Data Source Processor is not available in multi-user mode
# {0} - exception message
Case.closeException.couldNotCloseCase=Error closing case: {0}
Case.creationException.couldNotAcquireDirLock=Failed to get lock on case directory
Case.creationException.couldNotAcquireResourcesLock=Failed to get lock on case resources
Case.deleteCaseConfirmationDialog.message=Are you sure you want to close and delete the current case?
Case.deleteCaseConfirmationDialog.title=Delete Current Case?
# {0} - exception message
Case.deleteCaseFailureMessageBox.message=Error deleting case: {0}
Case.deleteCaseFailureMessageBox.title=Failed to Delete Case
Case.exceptionMessage.cancelledByUser=Cancelled by user.
Case.exceptionMessage.cancelled=Cancelled.
Case.exceptionMessage.cannotDeleteCurrentCase=Cannot delete current case, it must be closed first.
Case.exceptionMessage.cannotGetLockToDeleteCase=Cannot delete case because it is open for another user or host.
Case.exceptionMessage.cannotLocateMainWindow=Cannot locate main application window
@@ -32,10 +31,13 @@ Case.exceptionMessage.couldNotSaveCaseMetadata=Failed to save case metadata:\n{0
Case.exceptionMessage.couldNotSaveDbNameToMetadataFile=Failed to save case database name to case metadata file:\n{0}.
# {0} - exception message
Case.exceptionMessage.couldNotUpdateCaseNodeData=Failed to update coordination service node data:\n{0}.
Case.exceptionMessage.dataSourceNotFound=The data source was not found.
# {0} - case display name
Case.exceptionMessage.deletionInterrupted=Deletion of the case {0} was cancelled.
Case.exceptionMessage.emptyCaseDir=Must specify a case directory path.
Case.exceptionMessage.emptyCaseName=Must specify a case name.
Case.exceptionMessage.errorDeletingDataSourceFromCaseDb=An error occurred while removing the data source from the case database.
Case.exceptionMessage.errorDeletingDataSourceFromTextIndex=An error occurred while removing the data source from the text index.
Case.exceptionMessage.errorsDeletingCase=Errors occured while deleting the case. See the application log for details.
# {0} - exception message
Case.exceptionMessage.execExceptionWrapperMessage={0}
@@ -50,11 +52,14 @@ Case.exceptionMessage.failedToReadMetadata=Failed to read case metadata:\n{0}.
Case.exceptionMessage.metadataUpdateError=Failed to update case metadata
# {0} - exception message
Case.exceptionMessage.unsupportedSchemaVersionMessage=Unsupported case database schema version:\n{0}.
Case.lockingException.couldNotAcquireExclusiveLock=Failed to get a exclusive lock on the case.
Case.lockingException.couldNotAcquireSharedLock=Failed to get an shared lock on the case.
Case.open.exception.multiUserCaseNotEnabled=Cannot open a multi-user case if multi-user cases are not enabled. See Tools, Options, Multi-User.
Case.progressIndicatorCancelButton.label=Cancel
Case.progressIndicatorTitle.closingCase=Closing Case
Case.progressIndicatorTitle.creatingCase=Creating Case
Case.progressIndicatorTitle.deletingCase=Deleting Case
Case.progressIndicatorTitle.deletingDataSource=Removing Data Source
Case.progressIndicatorTitle.openingCase=Opening Case
Case.progressMessage.cancelling=Cancelling...
Case.progressMessage.clearingTempDirectory=Clearing case temp directory...
@@ -67,6 +72,7 @@ Case.progressMessage.creatingCaseNodeData=Creating coordination service node dat
Case.progressMessage.deletingCaseDatabase=Deleting case database...
Case.progressMessage.deletingCaseDirCoordSvcNode=Deleting case directory coordination service node...
Case.progressMessage.deletingCaseDirectory=Deleting case directory...
Case.progressMessage.deletingDataSource=Removing the data source from the case...
Case.progressMessage.deletingResourcesCoordSvcNode=Deleting case resources coordination service node...
Case.progressMessage.deletingTextIndex=Deleting text index...
Case.progressMessage.fetchingCoordSvcNodeData=Fetching coordination service node data for the case...
@@ -74,7 +80,6 @@ Case.progressMessage.openingApplicationServiceResources=Opening application serv
Case.progressMessage.openingCaseDatabase=Opening case database...
Case.progressMessage.openingCaseLevelServices=Opening case-level services...
Case.progressMessage.preparing=Preparing...
Case.progressMessage.preparingToOpenCaseResources=<html>Preparing to open case resources.<br>This may take time if another user is upgrading the case.</html>
Case.progressMessage.removingCaseFromRecentCases=Removing case from Recent Cases menu...
Case.progressMessage.savingCaseMetadata=Saving case metadata to file...
Case.progressMessage.settingUpNetworkCommunications=Setting up network communications...
@@ -118,6 +123,13 @@ CTL_CaseDetailsAction=Case Details
CTL_CaseDeleteAction=Delete Case
CTL_CaseOpenAction=Open Case
CTL_UnpackagePortableCaseAction=Unpack and Open Portable Case
DeleteDataSourceAction.confirmationDialog.message=Are you sure you want to remove the selected data source from the case?\nNote that the case will be closed and re-opened during the removal.
# {0} - exception message
DeleteDataSourceAction.exceptionMessage.couldNotReopenCase=Failed to re-open the case:\n{0}\nPlease see the application log for details.
# {0} - exception message
DeleteDataSourceAction.exceptionMessage.dataSourceDeletionError=An error occurred while removing the data source:\n{0}\nPlease see the application log for details.
DeleteDataSourceAction.ingestRunningWarningDialog.message=Data sources cannot be removed from a case when ingest is running.
DeleteDataSourceAction.name.text=Remove Data Source
EditOptionalCasePropertiesPanel.cancelButton.text=Cancel
EditOptionalCasePropertiesPanel.saveButton.text=Save
GeneralFilter.encaseImageDesc.text=Encase Images (*.e01)
@@ -342,6 +354,7 @@ UnpackagePortableCaseProgressDialog.title.text=Unpackage Portable Case Progress
UnpackageWorker.doInBackground.canceled=Unpackaging canceled by user
UnpackageWorker.doInBackground.errorCompressingCase=Error unpackaging case
UnpackageWorker.doInBackground.errorFinding7zip=Could not locate 7-Zip executable
UnpackageWorker.doInBackground.previousSeenCase=Case with name {0} has been previously opened do you want to open it again?
UpdateRecentCases.menuItem.clearRecentCases.text=Clear Recent Cases
UpdateRecentCases.menuItem.empty=-Empty-
AddImageWizardIngestConfigPanel.CANCEL_BUTTON.text=Cancel
@@ -1,198 +1,457 @@
AddImageWizardIngestConfigPanel.name.text=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u69cb\u6210
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}
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.title=\u30b1\u30fc\u30b9\u3092\u524a\u9664\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
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.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.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.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.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
Case.progressIndicatorTitle.deletingCase=\u30b1\u30fc\u30b9\u3092\u524a\u9664\u4e2d\u3067\u3059
Case.progressIndicatorTitle.openingCase=\u30b1\u30fc\u30b9\u3092\u958b\u3044\u3066\u3044\u307e\u3059
Case.progressMessage.cancelling=\u53d6\u308a\u6d88\u3057\u4e2d\u3067\u3059...
Case.progressMessage.clearingTempDirectory=\u30b1\u30fc\u30b9\u306e\u4e00\u6642\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u3092\u6d88\u53bb\u4e2d\u3067\u3059...
Case.progressMessage.closingApplicationServiceResources=\u30b1\u30fc\u30b9\u56fa\u6709\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30b5\u30fc\u30d3\u30b9\u30ea\u30bd\u30fc\u30b9\u3092\u9589\u3058\u3066\u3044\u307e\u3059...
Case.progressMessage.closingCaseDatabase=\u30b1\u30fc\u30b9\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u9589\u3058\u3066\u3044\u307e\u3059...
Case.progressMessage.closingCaseLevelServices=\u30b1\u30fc\u30b9\u30ec\u30d9\u30eb\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u9589\u3058\u3066\u3044\u307e\u3059...
Case.progressMessage.connectingToCoordSvc=\u5ea7\u6a19\u30b5\u30fc\u30d3\u30b9\u306b\u63a5\u7d9a\u4e2d\u3067\u3059...
Case.progressMessage.creatingCaseDatabase=\u30b1\u30fc\u30b9\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u4f5c\u6210\u4e2d\u3067\u3059...
Case.progressMessage.creatingCaseDirectory=\u30b1\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u3092\u4f5c\u6210\u4e2d\u3067\u3059...
Case.progressMessage.creatingCaseNodeData=\u5ea7\u6a19\u30b5\u30fc\u30d3\u30b9\u30ce\u30fc\u30c9\u30c7\u30fc\u30bf\u306e\u4f5c\u6210\u4e2d\u3067\u3059...
Case.progressMessage.deletingCaseDatabase=\u30b1\u30fc\u30b9\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u524a\u9664\u4e2d\u3067\u3059...
Case.progressMessage.deletingCaseDirCoordSvcNode=\u30b1\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u306e\u5ea7\u6a19\u30b5\u30fc\u30d3\u30b9\u30ce\u30fc\u30c9\u30c7\u30fc\u30bf\u3092\u524a\u9664\u4e2d\u3067\u3059...
Case.progressMessage.deletingCaseDirectory=\u30b1\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u3092\u524a\u9664\u4e2d\u3067\u3059...
Case.progressMessage.deletingResourcesCoordSvcNode=\u30b1\u30fc\u30b9\u30ea\u30bd\u30fc\u30b9\u306e\u5ea7\u6a19\u30b5\u30fc\u30d3\u30b9\u30ce\u30fc\u30c9\u30c7\u30fc\u30bf\u3092\u524a\u9664\u4e2d\u3067\u3059...
Case.progressMessage.deletingTextIndex=\u30c6\u30ad\u30b9\u30c8\u7d22\u5f15\u3092\u524a\u9664\u4e2d\u3067\u3059...
Case.progressMessage.fetchingCoordSvcNodeData=\u30b1\u30fc\u30b9\u306e\u5ea7\u6a19\u30b5\u30fc\u30d3\u30b9\u30ce\u30fc\u30c9\u30c7\u30fc\u30bf\u3092\u53d6\u5f97\u4e2d\u3067\u3059...
Case.progressMessage.openingApplicationServiceResources=\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30b5\u30fc\u30d3\u30b9\u306e\u30b1\u30fc\u30b9\u30ea\u30bd\u30fc\u30b9\u3092\u958b\u3044\u3066\u3044\u307e\u3059...
Case.progressMessage.openingCaseDatabase=\u30b1\u30fc\u30b9\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u958b\u3044\u3066\u3044\u307e\u3059...
Case.progressMessage.openingCaseLevelServices=\u30b1\u30fc\u30b9\u30ec\u30d9\u30eb\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u958b\u3044\u3066\u3044\u307e\u3059...
Case.progressMessage.preparing=\u6e96\u5099\u4e2d\u3067\u3059...
Case.progressMessage.preparingToOpenCaseResources=<html>\u30b1\u30fc\u30b9\u30ea\u30bd\u30fc\u30b9\u3092\u958b\u304f\u6e96\u5099\u3092\u3057\u3066\u3044\u307e\u3059\u3002<br>\u5225\u306e\u30e6\u30fc\u30b6\u30fc\u304c\u30b1\u30fc\u30b9\u3092\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3057\u3066\u3044\u308b\u5834\u5408\u306f\u6642\u9593\u304c\u304b\u304b\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002</html>
Case.progressMessage.removingCaseFromRecentCases=[\u6700\u8fd1\u306e\u30b1\u30fc\u30b9] \u30e1\u30cb\u30e5\u30fc\u304b\u3089\u30b1\u30fc\u30b9\u3092\u524a\u9664\u4e2d\u3067\u3059...
Case.progressMessage.savingCaseMetadata=\u30b1\u30fc\u30b9\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u30d5\u30a1\u30a4\u30eb\u306b\u4fdd\u5b58\u4e2d\u3067\u3059...
Case.progressMessage.settingUpNetworkCommunications=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u901a\u4fe1\u3092\u8a2d\u5b9a\u4e2d\u3067\u3059...
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
CaseDetailsPanel.casePanel.border.title=\u30b1\u30fc\u30b9
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.pnOrganization.border.title=\u7d44\u7e54
CaseInformationPanel.caseDetails.header=\u8a73\u7d30
CaseInformationPanel.editDetailsButton.text=\u8a73\u7d30\u3092\u7de8\u96c6
CaseInformationPanel.editDetailsDialog.title=\u30b1\u30fc\u30b9\u8a73\u7d30\u3092\u7de8\u96c6
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_CasePropertiesAction=\u30b1\u30fc\u30b9\u30d7\u30ed\u30d1\u30c6\u30a3
CTL_CaseDetailsAction=\u30b1\u30fc\u30b9\u8a73\u7d30
CTL_CaseDeleteAction=\u30b1\u30fc\u30b9\u3092\u524a\u9664
CTL_CaseOpenAction=\u30b1\u30fc\u30b9\u3092\u958b\u304f
Menu/Case/OpenRecentCase=\u6700\u8fd1\u958b\u3044\u305f\u30b1\u30fc\u30b9\u3092\u958b\u304f
CTL_UnpackagePortableCaseAction=\u30dd\u30fc\u30bf\u30d6\u30eb\u30b1\u30fc\u30b9\u3092\u958b\u5c01
EditOptionalCasePropertiesPanel.cancelButton.text=\u53d6\u308a\u6d88\u3057
EditOptionalCasePropertiesPanel.saveButton.text=\u4fdd\u5b58
GeneralFilter.encaseImageDesc.text=\u30a4\u30e1\u30fc\u30b8(*.e01)\u3092\u5305\u542b
GeneralFilter.executableDesc.text=\u5b9f\u884c\u53ef\u80fd\u30d5\u30a1\u30a4\u30eb(*.exe)
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)
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.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.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
IngestJobInfoPanel.IngestJobTableModel.EndTime.header=\u7d42\u4e86\u6642\u523b
IngestJobInfoPanel.IngestJobTableModel.IngestStatus.header=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30b9\u30c6\u30fc\u30bf\u30b9
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.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
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.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
LocalDiskSelectionDialog.columnName.diskName=\u30c7\u30a3\u30b9\u30af\u540d
LocalDiskSelectionDialog.columnName.diskSize=\u30c7\u30a3\u30b9\u30af\u30b5\u30a4\u30ba
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.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
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
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.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\uff1a
NewCaseVisualPanel1.caseDirLabel.text=\u30d9\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\uff1a
NewCaseVisualPanel1.caseDirBrowseButton.text=\u95b2\u89a7
NewCaseVisualPanel1.jLabel2.text_1=\u30b1\u30fc\u30b9\u30c7\u30fc\u30bf\u306f\u6b21\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u4fdd\u5b58\u3055\u308c\u307e\u3059\uff1a
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
OpenRecentCasePanel.cancelButton.text=\u30ad\u30e3\u30f3\u30bb\u30eb
OpenRecentCasePanel.jLabel1.text=\u6700\u8fd1\u958b\u3044\u305f\u30d5\u30a1\u30a4\u30eb
# {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\u3057\u307e\u3059
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\u307e\u3059
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.browseButton.text=\u95b2\u89a7
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=\u6b20\u843d\u3057\u305f\u30a4\u30e1\u30fc\u30b8\u306e\u691c\u7d22
MissingImageDialog.cancelButton.text=\u30ad\u30e3\u30f3\u30bb\u30eb
AddImageWizardAddingProgressVisual.statusLabel.text=\u30ed\u30fc\u30ab\u30eb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u304c\u8ffd\u52a0\u3055\u308c\u307e\u3057\u305f\u3002\u30d5\u30a1\u30a4\u30eb\u3092\u89e3\u6790\u4e2d\u3067\u3059\u3002
AddImageWizardAddingProgressVisual.progressLabel.text=\uff1c\u30d7\u30ed\u30b0\u30ec\u30b9\uff1e
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=\u30ed\u30fc\u30ab\u30eb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u60c5\u5831\u3092\u8ffd\u52a0\u4e2d\u3067\u3059\u3002\u3053\u3061\u3089\u304c\u5b8c\u4e86\u6b21\u7b2c\u3001\u30d5\u30a1\u30a4\u30eb\u89e3\u6790\u304c\u59cb\u307e\u308a\u307e\u3059\u3002
ImageFilePanel.descLabel.text=\uff08\u3088\u308a\u901f\u3044\u7d50\u679c\u3001\u3057\u304b\u3057\u4e00\u90e8\u306e\u30c7\u30fc\u30bf\u306f\u691c\u7d22\u3055\u308c\u307e\u305b\u3093\uff09
LocalDiskPanel.timeZoneLabel.text=\u30a4\u30f3\u30d7\u30c3\u30c8\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u9078\u629e\u3057\u3066\u4e0b\u3055\u3044\uff1a
LocalDiskPanel.descLabel.text=\uff08\u3088\u308a\u901f\u3044\u7d50\u679c\u3001\u3057\u304b\u3057\u4e00\u90e8\u306e\u30c7\u30fc\u30bf\u306f\u691c\u7d22\u3055\u308c\u307e\u305b\u3093\uff09
MissingImageDialog.browseButton.text=\u95b2\u89a7
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.browseButton.text=\u53c2\u7167
MissingImageDialog.pathNameTextField.text=
AddImageWizardAddingProgressVisual.progressTextArea.border.title=\u30b9\u30c6\u30fc\u30bf\u30b9
AddImageAction.wizard.title=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3092\u8ffd\u52a0
AddImageAction.ingestConfig.ongoingIngest.msg=<html>\u4ed6\u306e\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u304c\u51e6\u7406\u4e2d\u3067\u3059\u3002\u4eca\u65b0\u898f\u30bd\u30fc\u30b9\u3092\u8ffd\u52a0\u3059\u308b\u3068\u5b9f\u884c\u4e2d\u306e\u51e6\u7406\u304c\u9045\u304f\u306a\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002<br />\u3053\u306e\u307e\u307e\u5b9f\u884c\u3057\u3001\u65b0\u898f\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3092\u8ffd\u52a0\u3057\u307e\u3059\u304b\uff1f</html>
AddImageAction.ingestConfig.ongoingIngest.title=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u3092\u5b9f\u884c\u4e2d
AddImageTask.run.progress.adding=\u8ffd\u52a0\u4e2d\uff1a{0}
AddImageAction.ingestConfig.ongoingIngest.msg=<html>\u5225\u306e\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3067\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u304c\u9032\u884c\u4e2d\u3067\u3059\u3002\u65b0\u898f\u30bd\u30fc\u30b9\u3092\u4eca\u8ffd\u52a0\u3059\u308b\u3068\u3001\u73fe\u5728\u306e\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u306e\u51e6\u7406\u304c\u9045\u304f\u306a\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002<br />\u7d9a\u884c\u3057\u3066\u65b0\u898f\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3092\u4eca\u3059\u3050\u8ffd\u52a0\u3057\u307e\u3059\u304b?</html>
AddImageAction.ingestConfig.ongoingIngest.title=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u304c\u9032\u884c\u4e2d\u3067\u3059
AddImageTask.run.progress.adding=\u6b21\u3092\u8ffd\u52a0\u4e2d\u3067\u3059: {0}
AddImageTask.interrupt.exception.msg=\u30a4\u30e1\u30fc\u30b8\u8ffd\u52a0\u30d7\u30ed\u30bb\u30b9\u306e\u505c\u6b62\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
AddImageWizardAddingProgressPanel.isValid.focusNext=\u6b21 >
AddImageWizardAddingProgressPanel.stateStarted.progressBarText=*\u5927\u304d\u3044\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u306e\u5834\u5408\u3001\u3053\u306e\u30d7\u30ed\u30bb\u30b9\u306f\u6642\u9593\u304c\u304b\u304b\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002
AddImageWizardAddingProgressVisual.addingDsComplete.text=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3092\u8ffd\u52a0 - \u5b8c\u4e86
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\uff08\u81f4\u547d\u7684\u306a\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\uff09\u3002\u4e0b\u8a18\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u30ed\u30b0\u3092\u78ba\u8a8d\u3057\u3066\u4e0b\u3055\u3044\u3002
AddImageWizardAddingProgressVisual.showErrors.nonCritText=*\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u306e\u8ffd\u52a0\u306b\u5931\u6557\u3057\u307e\u3057\u305f\uff08\u81f4\u547d\u7684\u3067\u306f\u306a\u3044\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\uff09\u3002\u4e0b\u8a18\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u30ed\u30b0\u3092\u78ba\u8a8d\u3057\u3066\u4e0b\u3055\u3044\u3002
AddImageWizardChooseDataSourcePanel.moveFocusNext=\u6b21 >
AddImageWizardChooseDataSourceVisual.getName.text=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u60c5\u5831\u3092\u5165\u529b
AddImageWizardIngestConfigPanel.dsProcDone.noErrs.text=*\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u304c\u8ffd\u52a0\u3055\u308c\u307e\u3057\u305f\u3002
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\u8a2d\u5b9a
AddImageWizardIterator.stepXofN=\u30b9\u30c6\u30c3\u30d7{0}\uff0f{1}
AddLocalFilesTask.localFileAdd.progress.text=\u8ffd\u52a0\u4e2d\uff1a{0}/{1}
Case.getCurCase.exception.noneOpen=\u4f5c\u696d\u4e2d\u306e\u30b1\u30fc\u30b9\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\uff1b\u958b\u3044\u3066\u3044\u308b\u30b1\u30fc\u30b9\u304c\u3042\u308a\u307e\u305b\u3093\uff01
Case.open.msgDlg.updated.msg=\u30b1\u30fc\u30b9\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\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\u304c\u4f5c\u6210\u3055\u308c\u307e\u3057\u305f\uff1a\n\
{0}
Case.open.msgDlg.updated.title=\u30b1\u30fc\u30b9\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30b9\u30ad\u30fc\u30de\u3092\u66f4\u65b0
Case.checkImgExist.confDlg.doesntExist.title=\u6b20\u843d\u3057\u3066\u3044\u308b\u30a4\u30e1\u30fc\u30b8
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\u3092\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
Case.updateExaminer.exception.msg=\u8abf\u67fb\u62c5\u5f53\u8005\u3092\u66f4\u65b0\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
Case.updateCaseNum.exception.msg=\u30b1\u30fc\u30b9\u756a\u53f7\u3092\u66f4\u65b0\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\u3092\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\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u65e2\u306b\u5b58\u5728\u3057\u3001\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3067\u306f\u3042\u308a\u307e\u305b\u3093\uff1a{0}
Case.createCaseDir.exception.existCantRW=\u30b1\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u65e2\u306b\u5b58\u5728\u3057\u3001\u8aad\u307f\u53d6\u308a\uff0f\u66f8\u304d\u8fbc\u307f\u304c\u3067\u304d\u307e\u305b\u3093\uff1a{0}
Case.createCaseDir.exception.cantCreateCaseDir=\u30b1\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\uff1a {0}
Case.createCaseDir.exception.cantCreateModDir=\u30e2\u30b8\u30e5\u30fc\u30eb\u30a2\u30a6\u30c8\u30d7\u30c3\u30c8\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\uff1a{0}
CaseDeleteAction.closeConfMsg.text=\u3053\u306e\u30b1\u30fc\u30b9\u3092\u672c\u5f53\u306b\u9589\u3058\u3001\u524a\u9664\u3057\u307e\u3059\u304b\uff1f\n\
\u30b1\u30fc\u30b9\u540d\uff1a {0}\n\
\u30b1\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\: {1}
CaseDeleteAction.closeConfMsg.title=\u8b66\u544a\uff1a\u4f5c\u696d\u4e2d\u306e\u30b1\u30fc\u30b9\u3092\u9589\u3058\u307e\u3059
CaseDeleteAction.msgDlg.fileInUse.msg=\u5225\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u3067\u30d5\u30a9\u30eb\u30c0\u307e\u305f\u306f\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u3044\u3066\u3044\u308b\u306e\u3067\u3001\u524a\u9664\u3092\u5b8c\u4e86\u3067\u304d\u307e\u305b\u3093\u3002\n\n\
\u30d5\u30a9\u30eb\u30c0\u307e\u305f\u306f\u30d5\u30a1\u30a4\u30eb\u3092\u9589\u3058\u3066\u304b\u3089\u518d\u5b9f\u884c\u3059\u308b\u304b\u3001\u624b\u52d5\u3067\u30b1\u30fc\u30b9\u3092\u524a\u9664\u3057\u3066\u4e0b\u3055\u3044\u3002
CaseDeleteAction.msgDlg.fileInUse.title=\u30a8\u30e9\u30fc\uff1a\u30d5\u30a9\u30eb\u30c0\u304c\u4f7f\u7528\u4e2d
CaseDeleteAction.msgDlg.caseDelete.msg=\u30b1\u30fc\u30b9\u304c\u524a\u9664\u3055\u308c\u307e\u3057\u305f\u3002
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})
CaseOpenAction.msgDlg.cantOpenCase.title=\u30b1\u30fc\u30b9\u3092\u958b\u304f\u969b\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f
CasePropertiesAction.window.title=\u30b1\u30fc\u30b9\u30d7\u30ed\u30d1\u30c6\u30a3
CueBannerPanel.title.text=\u6700\u8fd1\u958b\u3044\u305f\u30b1\u30fc\u30b9\u3092\u958b\u304f
GeneralFilter.rawImageDesc.text=\u30ed\u30fc\u30a4\u30e1\u30fc\u30b8(*.img, *.dd, *.001, *.aa, *.raw, *.bin)
GeneralFilter.encaseImageDesc.text=\u30a8\u30f3\u30b1\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8(*.e01)
ImageDSProcessor.dsType.text=\u30a4\u30e1\u30fc\u30b8\u30d5\u30a1\u30a4\u30eb
ImageDSProcessor.allDesc.text=\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u5168\u30bf\u30a4\u30d7
ImageFilePanel.moduleErr=\u30e2\u30b8\u30e5\u30fc\u30eb\u30a8\u30e9\u30fc
ImageFilePanel.moduleErr.msg=ImageFilePanel\u306e\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3092\u78ba\u8a8d\u4e2d\u306b\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u30a8\u30e9\u30fc\u3092\u8d77\u3053\u3057\u307e\u3057\u305f\u3002\u3069\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u304b\u30ed\u30b0\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u4e00\u90e8\u306e\u30c7\u30fc\u30bf\u304c\u4e0d\u5b8c\u5168\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002
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
LocalDiskPanel.localDiskModel.loading.msg=\u30ed\u30fc\u30ab\u30eb\u30c7\u30a3\u30b9\u30af\u3092\u30ed\u30fc\u30c9\u4e2d\u2026
LocalDiskPanel.moduleErr=\u30e2\u30b8\u30e5\u30fc\u30eb\u30a8\u30e9\u30fc
LocalDiskPanel.moduleErr.msg=LocalDiskPanel\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3092\u78ba\u8a8d\u4e2d\u306b\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u30a8\u30e9\u30fc\u3092\u8d77\u3053\u3057\u307e\u3057\u305f\u3002\u3069\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u304b\u30ed\u30b0\u3092\u78ba\u8a8d\u3057\u3066\u4e0b\u3055\u3044\u3002\u4e00\u90e8\u306e\u30c7\u30fc\u30bf\u304c\u4e0d\u5b8c\u5168\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002
LocalDiskPanel.errLabel.disksNotDetected.text=\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\u304c\u5fc5\u8981\u3067\u3059\uff08\u3082\u3057\u304f\u306f\u300c\u7ba1\u7406\u8005\u3068\u3057\u3066\u5b9f\u884c\u3059\u308b\u300d\u304c\u5fc5\u8981\uff09\u3002
LocalDiskPanel.errLabel.disksNotDetected.toolTipText=\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\u304c\u5fc5\u8981\u3067\u3059\uff08\u3082\u3057\u304f\u306f\u300c\u7ba1\u7406\u8005\u3068\u3057\u3066\u5b9f\u884c\u3059\u308b\u300d\u304c\u5fc5\u8981\uff09\u3002
LocalDiskPanel.errLabel.drivesNotDetected.text=\u30ed\u30fc\u30ab\u30eb\u30c9\u30e9\u30a4\u30d6\u304c\u691c\u51fa\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u81ea\u52d5\u691c\u51fa\u306f\u3053\u306eOS\u3067\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u306a\u3044\u304b\u3001\u7ba1\u7406\u8005\u6a29\u9650\u304c\u5fc5\u8981\u3067\u3059\u3002
LocalDiskPanel.errLabel.drivesNotDetected.toolTipText=\u30ed\u30fc\u30ab\u30eb\u30c9\u30e9\u30a4\u30d6\u304c\u691c\u51fa\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u81ea\u52d5\u691c\u51fa\u306f\u3053\u306eOS\u3067\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u306a\u3044\u304b\u3001\u7ba1\u7406\u8005\u6a29\u9650\u304c\u5fc5\u8981\u3067\u3059\u3002
LocalDiskPanel.errLabel.someDisksNotDetected.text=\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\u304c\u5fc5\u8981\u3067\u3059\uff08\u3082\u3057\u304f\u306f\u300c\u7ba1\u7406\u8005\u3068\u3057\u3066\u5b9f\u884c\u3059\u308b\u300d\uff09\u3002
LocalDiskPanel.errLabel.someDisksNotDetected.toolTipText=\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\u304c\u5fc5\u8981\u3067\u3059\uff08\u3082\u3057\u304f\u306f\u300c\u7ba1\u7406\u8005\u3068\u3057\u3066\u5b9f\u884c\u3059\u308b\u300d\uff09\u3002
LocalFilesDSProcessor.dsType=\u30ed\u30b8\u30ab\u30eb\u30d5\u30a1\u30a4\u30eb
LocalFilesDSProcessor.toString.text=\u30ed\u30b8\u30ab\u30eb\u30d5\u30a1\u30a4\u30eb
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\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3092\u78ba\u8a8d\u4e2d\u306b\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u30a8\u30e9\u30fc\u3092\u8d77\u3053\u3057\u307e\u3057\u305f\u3002\u3069\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u304b\u30ed\u30b0\u3092\u78ba\u8a8d\u3057\u3066\u4e0b\u3055\u3044\u3002\u4e00\u90e8\u306e\u30c7\u30fc\u30bf\u304c\u4e0d\u5b8c\u5168\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002
MissingImageDialog.display.title=\u6b20\u843d\u30a4\u30e1\u30fc\u30b8\u3092\u691c\u7d22
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\u3092\u898b\u3064\u3051\u308b\n\u524d\u306b\u672c\u5f53\u306b\u7d42\u4e86\u3057\u307e\u3059\u304b\uff1f
MissingImageDialog.confDlg.noFileSel.title=\u6b20\u843d\u30a4\u30e1\u30fc\u30b8
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.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
NewCaseVisualPanel2.getName.text=\u4ed8\u52a0\u60c5\u5831
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
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
NewCaseWizardPanel1.validate.errMsg.invalidSymbols=\u30b1\u30fc\u30b9\u540d\u306b\u306f\u6b21\u306e\u8a18\u53f7\u3092\u542b\u3081\u307e\u305b\u3093\uff1a\\ / \: * ? " &lt; > |
NewCaseWizardPanel1.validate.errMsg.dirExists=\u30b1\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea''{0}''\u306f\u65e2\u306b\u5b58\u5728\u3057\u307e\u3059\u3002
NewCaseWizardPanel1.validate.confMsg.createDir.msg=\u30d9\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea''{0}''\u306f\u5b58\u5728\u3057\u307e\u305b\u3093\u3002\n\n\
\u3053\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u4f5c\u6210\u3057\u307e\u3059\u304b\uff1f
NewCaseWizardPanel1.validate.confMsg.createDir.title=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u4f5c\u6210
NewCaseWizardPanel1.validate.errMsg.cantCreateParDir.msg=\u30a8\u30e9\u30fc\uff1a\u30b1\u30fc\u30b9\u30da\u30a2\u30ec\u30f3\u30c8\u30c7\u30a3\u30ec\u30af\u30c8\u30ea{0}\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
NewCaseWizardPanel1.validate.errMsg.prevCreateBaseDir.msg=\u30d9\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea{0}\u306e\u4f5c\u6210\u3092\u9632\u6b62\u3055\u308c\u307e\u3057\u305f
NewCaseWizardPanel1.validate.errMsg.cantCreateDir=\u30a8\u30e9\u30fc\uff1a\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
NewCaseWizardPanel1.validate.errMsg.invalidBaseDir.msg=\u30a8\u30e9\u30fc\uff1a\u5165\u529b\u3057\u305f\u30d9\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306f\u6709\u52b9\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\n\u6709\u52b9\u306a\u30d9\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u5165\u529b\u3057\u3066\u4e0b\u3055\u3044\u3002
NewCaseWizardPanel1.createDir.errMsg.cantCreateDir.msg=\u30a8\u30e9\u30fc\uff1a\u30b1\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\n\u6709\u52b9\u306a\u30b1\u30fc\u30b9\u540d\u304a\u3088\u3073\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u5165\u529b\u3057\u3066\u4e0b\u3055\u3044\u3002
NewCaseWizardPanel2.validate.errCreateCase.msg=\u30b1\u30fc\u30b9\u306e\u4f5c\u6210\u30a8\u30e9\u30fc
NewCaseWizardAction.databaseProblem1.text=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3092\u958b\u3051\u307e\u305b\u3093\u3002\u30b1\u30fc\u30b9\u306e\u4f5c\u6210\u3092\u53d6\u308a\u6d88\u3057\u4e2d\u3067\u3059\u3002
NewCaseWizardAction.databaseProblem2.text=\u30a8\u30e9\u30fc
NewCaseWizardPanel1.validate.errMsg.invalidSymbols=\u30b1\u30fc\u30b9\u540d\u306b\u6b21\u306e\u8a18\u53f7\u3092\u542b\u3081\u3089\u308c\u307e\u305b\u3093: \\ / : * ? " &lt; > |
NewCaseWizardPanel1.validate.errMsg.dirExists=\u30b1\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc ''{0}'' \u306f\u3059\u3067\u306b\u5b58\u5728\u3057\u3066\u3044\u307e\u3059\u3002
NewCaseWizardPanel1.validate.confMsg.createDir.msg=\u30d9\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc "{0}" \u306f\u5b58\u5728\u3057\u307e\u305b\u3093\u3002\n\n\
\u305d\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u3092\u4f5c\u6210\u3057\u307e\u3059\u304b?
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.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
OpenRecentCasePanel.colName.caseName=\u30b1\u30fc\u30b9\u540d
OpenRecentCasePanel.colName.path=\u30d1\u30b9
RecentCases.exception.caseIdxOutOfRange.msg=\u6700\u8fd1\u306e\u30b1\u30fc\u30b9\u30a4\u30f3\u30c7\u30c3\u30af\u30b9{0}\u306f\u7bc4\u56f2\u5916\u3067\u3059\u3002
RecentCases.getName.text=\u6700\u8fd1\u958b\u3044\u305f\u30b1\u30fc\u30b9\u3092\u30af\u30ea\u30a2
RecentItems.openRecentCase.msgDlg.text=\u30a8\u30e9\u30fc\uff1a\u30b1\u30fc\u30b9{0}\u306f\u3082\u3046\u5b58\u5728\u3057\u307e\u305b\u3093\u3002
OptionalCasePropertiesPanel.bnNewOrganization.text=\u7d44\u7e54\u3092\u7ba1\u7406
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.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.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.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
SelectDataSourceProcessorPanel.name.text=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u306e\u30bf\u30a4\u30d7\u3092\u9078\u629e\u3057\u3066\u8ffd\u52a0
StartupWindow.title.text=\u3088\u3046\u3053\u305d
UpdateRecentCases.menuItem.clearRecentCases.text=\u6700\u8fd1\u958b\u3044\u305f\u30b1\u30fc\u30b9\u3092\u30af\u30ea\u30a2
UpdateRecentCases.menuItem.empty=-\u7a7a\u767d-
ImageFilePanel.noFatOrphansCheckbox.text=FAT\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u306e\u30aa\u30fc\u30d5\u30a1\u30f3\u30d5\u30a1\u30a4\u30eb\u306f\u7121\u8996
LocalDiskPanel.noFatOrphansCheckbox.text=FAT\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u306e\u30aa\u30fc\u30d5\u30a1\u30f3\u30d5\u30a1\u30a4\u30eb\u306f\u7121\u8996
AddImageWizardIngestConfigPanel.CANCEL_BUTTON.text=\u30ad\u30e3\u30f3\u30bb\u30eb
LocalFilesPanel.errorLabel.text=\u30a8\u30e9\u30fc\u30e9\u30d9\u30eb
ImageFilePanel.errorLabel.text=\u30a8\u30e9\u30fc\u30e9\u30d9\u30eb
NewCaseVisualPanel1.caseTypeLabel.text=\u30b1\u30fc\u30b9\u30bf\u30a4\u30d7\uff1a
Case.open.exception.multiUserCaseNotEnabled=\u8907\u6570\u30e6\u30fc\u30b6\u30fc\u306e\u30b1\u30fc\u30b9\u304c\u6709\u52b9\u5316\u3055\u308c\u3066\u3044\u306a\u3044\u3068\u3001\u8907\u6570\u30e6\u30fc\u30b6\u30fc\u306e\u30b1\u30fc\u30b9\u306f\u958b\u3051\u307e\u305b\u3093\u3002\u30c4\u30fc\u30eb\u3001\u30aa\u30d7\u30b7\u30e7\u30f3\u3001\u8907\u6570\u30e6\u30fc\u30b6\u30fc\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002
Case.createCaseDir.exception.cantCreateReportsDir=\u30ec\u30dd\u30fc\u30c8\u30a2\u30a6\u30c8\u30d7\u30c3\u30c8\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\uff1a{0}
Case.CollaborationSetup.FailNotify.ErrMsg=\u3053\u306e\u30b1\u30fc\u30b9\u3067\u4f7f\u308f\u308c\u3066\u3044\u308b\u304b\u3082\u3057\u308c\u306a\u3044\u30ce\u30fc\u30c9\u306b\u63a5\u7d9a\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
Case.CollaborationSetup.FailNotify.Title=\u63a5\u7d9a\u306b\u5931\u6557
Case.GetCaseTypeGivenPath.Failure=\u30b1\u30fc\u30b9\u30bf\u30a4\u30d7\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
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\u3067\u3057\u305f\u3002
Case.deleteReports.deleteFromDiskException.msg=\u30c7\u30a3\u30b9\u30af\u304b\u3089{0}\u30ec\u30dd\u30fc\u30c8\u3092\u524a\u9664\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\n{1}\u304b\u3089\u624b\u52d5\u3067\u524a\u9664\u3067\u304d\u307e\u3059\u3002
CaseCreateAction.msgDlg.cantCreateCase.msg=\u30b1\u30fc\u30b9\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093
IntervalErrorReport.NewIssues=\u65b0\u898f\u306e\u30a4\u30b7\u30e5\u30fc
IntervalErrorReport.TotalIssues=\u5168\u30a4\u30b7\u30e5\u30fc
IntervalErrorReport.ErrorText=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u63a5\u7d9a\u30a8\u30e9\u30fc
GeneralFilter.virtualMachineImageDesc.text=\u4eee\u60f3\u30de\u30b7\u30f3(*.vmdk, *.vhd)
LocalDiskPanel.localDiskModel.nodrives.msg=\u30a2\u30af\u30bb\u30b9\u3067\u304d\u308b\u30c9\u30e9\u30a4\u30d6\u304c\u3042\u308a\u307e\u305b\u3093
MissingImageDialog.ErrorSettingImage=\u30a4\u30e1\u30fc\u30b8\u30d1\u30b9\u3092\u8a2d\u5b9a\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u518d\u5ea6\u5b9f\u884c\u3057\u3066\u304f\u3060\u3055\u3044\u3002
NewCaseVisualPanel1.badCredentials.text=\u4f7f\u3048\u306a\u3044\u8907\u6570\u30e6\u30fc\u30b6\u30fc\u306e\u8a2d\u5b9a\uff08\u30c4\u30fc\u30eb\u3001\u30aa\u30d7\u30b7\u30e7\u30f3\u3001\u8907\u6570\u30e6\u30fc\u30b6\u30fc\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\uff09\u307e\u305f\u306f\u30b5\u30fc\u30d3\u30b9\u304c\u30c0\u30a6\u30f3\u3057\u3066\u3044\u307e\u3059\u3002
NewCaseWizardAction.databaseProblem1.text=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u958b\u3051\u307e\u305b\u3093\u3002\u30b1\u30fc\u30b9\u4f5c\u6210\u3092\u30ad\u30e3\u30f3\u30bb\u30eb\u3057\u3066\u3044\u307e\u3059\u3002
NewCaseWizardAction.databaseProblem2.text=\u30a8\u30e9\u30fc
DataSourceOnCDriveError.text=\u8b66\u544a\uff1a\u8907\u6570\u30e6\u30fc\u30b6\u30fc\u306e\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3078\u306e\u30d1\u30b9\u306f"C\:"\u30c9\u30e9\u30a4\u30d6\u306b\u3042\u308a\u307e\u3059
NewCaseVisualPanel1.CaseFolderOnCDriveError.text=\u8b66\u544a\uff1a\u8907\u6570\u30e6\u30fc\u30b6\u30fc\u306e\u30b1\u30fc\u30b9\u30d5\u30a9\u30eb\u30c0\u3078\u306e\u30d1\u30b9\u306f"C\:"\u30c9\u30e9\u30a4\u30d6\u306b\u3042\u308a\u307e\u3059
CollaborationMonitor.addingDataSourceStatus.msg={0}\u304c\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u8ffd\u52a0\u4e2d
CollaborationMonitor.analyzingDataSourceStatus.msg={0}\u304c{1}\u3092\u89e3\u6790\u4e2d
NewCaseVisualPanel1.multiUserCaseRadioButton.text=\u8907\u6570\u30e6\u30fc\u30b6\u30fc
NewCaseVisualPanel1.singleUserCaseRadioButton.text=\u5358\u6570\u30e6\u30fc\u30b6\u30fc
SingleUserCaseConverter.BadDatabaseFileName=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u304c\u5b58\u5728\u3057\u307e\u305b\u3093\uff01
SingleUserCaseConverter.AlreadyMultiUser=\u30b1\u30fc\u30b9\u306f\u65e2\u306b\u8907\u6570\u30e6\u30fc\u30b6\u30fc\u3067\u3059\uff01
SingleUserCaseConverter.NonUniqueDatabaseName=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u540d\u304c\u30e6\u30cb\u30fc\u30af\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\u3067\u3057\u305f\u3002
SingleUserCaseConverter.CanNotOpenDatabase=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u958b\u3051\u307e\u305b\u3093\u3067\u3057\u305f
CloseCaseWhileIngesting.Warning=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u304c\u5b9f\u884c\u4e2d\u3067\u3059\u3002\u3053\u306e\u30b1\u30fc\u30b9\u3092\u672c\u5f53\u306b\u9589\u3058\u307e\u3059\u304b\uff1f
CloseCaseWhileIngesting.Warning.title=\u8b66\u544a\uff1a\u3053\u308c\u3092\u5b9f\u884c\u3059\u308c\u3070\u4f5c\u696d\u4e2d\u306e\u30b1\u30fc\u30b9\u3092\u9589\u3058\u307e\u3059
Case_caseType_multiUser=\u8907\u6570\u30e6\u30fc\u30b6\u30fc\u30b1\u30fc\u30b9
Case_caseType_singleUser=\u5358\u6570\u30e6\u30fc\u30b6\u30fc\u30b1\u30fc\u30b9
CasePropertiesForm.imagesTable.columnModel.title0=\u30d1\u30b9
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.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.propertyChange.success=\u30b1\u30fc\u30b9\u3092\u6b63\u5e38\u306b\u958b\u5c01\u3057\u307e\u3057\u305f
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
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
OptionalCasePropertiesPanel.examinerLabel.text=\u8abf\u67fb\u62c5\u5f53\u8005\uff1a
OptionalCasePropertiesPanel.caseDisplayNameLabel.text=\u30b1\u30fc\u30b9\u756a\u53f7\uff1a
CueBannerPanel.openRecentCaseLabel.text=\u6700\u8fd1\u958b\u3044\u305f\u30b1\u30fc\u30b9\u3092\u958b\u304f
CueBannerPanel.openAutoIngestCaseLabel.text=\u65e2\u5b58\u30b1\u30fc\u30b9\u3092\u958b\u304f
CueBannerPanel.newCaseLabel.text=\u65b0\u898f\u30b1\u30fc\u30b9\u3092\u4f5c\u6210
CueBannerPanel.openCaseLabel.text=\u65e2\u5b58\u30b1\u30fc\u30b9\u3092\u958b\u304f
ImageFilePanel.sectorSizeLabel.text=\u30a4\u30f3\u30d7\u30c3\u30c8\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u9078\u629e\u3057\u3066\u4e0b\u3055\u3044\uff1a
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.clearButton.toolTipText=\u73fe\u5728\u9078\u629e\u3055\u308c\u3066\u3044\u308b\u30ed\u30fc\u30ab\u30eb\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9\u304c\u30af\u30ea\u30a2\u3055\u308c\u307e\u3059
LocalFilesPanel.clearButton.text=\u30af\u30ea\u30a2
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\u3092\u30ed\u30b8\u30ab\u30eb\u30d5\u30a1\u30a4\u30eb\u3068\u3057\u3066\u8ffd\u52a0\u3057\u307e\u3059
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\u3092\u9078\u629e
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\u3092\u30ed\u30b8\u30ab\u30eb\u30d5\u30a1\u30a4\u30eb\u3068\u3057\u3066\u8ffd\u52a0\u3057\u307e\u3059
LogicalEvidenceFilePanel.selectButton.text=\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\u3092\u9078\u629e
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\uff1a
CaseDetailsPanel.crDateLabel.text=\u4f5c\u6210\u65e5\uff1a
CaseDetailsPanel.caseDirLabel.text=\u30b1\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\uff1a
CaseDetailsPanel.caseNumberLabel.text=\u30b1\u30fc\u30b9\u756a\u53f7\uff1a
CaseDetailsPanel.lbDbName.text=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u540d\uff1a
CaseDetailsPanel.lbDbType.text=\u30b1\u30fc\u30b9\u30bf\u30a4\u30d7\uff1a
CaseDetailsPanel.caseNameLabel.text=\u30b1\u30fc\u30b9\u540d\uff1a
OpenMultiUserCasePanel.cancelButton.text=\u30ad\u30e3\u30f3\u30bb\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:
@@ -18,6 +18,7 @@
*/
package org.sleuthkit.autopsy.casemodule;
import org.sleuthkit.autopsy.featureaccess.FeatureAccessUtils;
import com.google.common.annotations.Beta;
import com.google.common.eventbus.Subscribe;
import org.sleuthkit.autopsy.casemodule.multiusercases.CaseNodeData;
@@ -77,6 +78,7 @@ import org.sleuthkit.autopsy.casemodule.events.CommentChangedEvent;
import org.sleuthkit.autopsy.casemodule.events.ContentTagAddedEvent;
import org.sleuthkit.autopsy.casemodule.events.ContentTagDeletedEvent;
import org.sleuthkit.autopsy.casemodule.events.DataSourceAddedEvent;
import org.sleuthkit.autopsy.casemodule.events.DataSourceDeletedEvent;
import org.sleuthkit.autopsy.casemodule.events.DataSourceNameChangedEvent;
import org.sleuthkit.autopsy.casemodule.events.ReportAddedEvent;
import org.sleuthkit.autopsy.casemodule.multiusercases.CaseNodeData.CaseNodeDataException;
@@ -104,6 +106,7 @@ import org.sleuthkit.autopsy.coreutils.Version;
import org.sleuthkit.autopsy.events.AutopsyEvent;
import org.sleuthkit.autopsy.events.AutopsyEventException;
import org.sleuthkit.autopsy.events.AutopsyEventPublisher;
import org.sleuthkit.autopsy.filequery.OpenFileDiscoveryAction;
import org.sleuthkit.autopsy.ingest.IngestJob;
import org.sleuthkit.autopsy.ingest.IngestManager;
import org.sleuthkit.autopsy.ingest.IngestServices;
@@ -121,11 +124,14 @@ import org.sleuthkit.datamodel.BlackboardArtifactTag;
import org.sleuthkit.datamodel.CaseDbConnectionInfo;
import org.sleuthkit.datamodel.Content;
import org.sleuthkit.datamodel.ContentTag;
import org.sleuthkit.datamodel.DataSource;
import org.sleuthkit.datamodel.Image;
import org.sleuthkit.datamodel.Report;
import org.sleuthkit.datamodel.SleuthkitCase;
import org.sleuthkit.datamodel.TimelineManager;
import org.sleuthkit.datamodel.SleuthkitCaseAdminUtil;
import org.sleuthkit.datamodel.TskCoreException;
import org.sleuthkit.datamodel.TskDataException;
import org.sleuthkit.datamodel.TskUnsupportedSchemaVersionException;
/**
@@ -133,8 +139,8 @@ import org.sleuthkit.datamodel.TskUnsupportedSchemaVersionException;
*/
public class Case {
private static final int DIR_LOCK_TIMOUT_HOURS = 12;
private static final int RESOURCES_LOCK_TIMOUT_HOURS = 12;
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";
private static final String EVENT_CHANNEL_NAME = "%s-Case-Events"; //NON-NLS
private static final String CACHE_FOLDER = "Cache"; //NON-NLS
@@ -153,13 +159,12 @@ public class Case {
private static volatile Frame mainFrame;
private static volatile Case currentCase;
private final CaseMetadata metadata;
private volatile ExecutorService caseLockingExecutor;
private CoordinationService.Lock caseDirLock;
private volatile ExecutorService caseActionExecutor;
private CoordinationService.Lock caseLock;
private SleuthkitCase caseDb;
private final SleuthkitEventListener sleuthkitEventListener;
private CollaborationMonitor collaborationMonitor;
private Services caseServices;
private boolean hasDataSources;
private final TSKCaseRepublisher tskEventForwarder = new TSKCaseRepublisher();
/*
* Get a reference to the main window of the desktop application to use to
@@ -167,11 +172,8 @@ public class Case {
* changing the main window title.
*/
static {
WindowManager.getDefault().invokeWhenUIReady(new Runnable() {
@Override
public void run() {
mainFrame = WindowManager.getDefault().getMainWindow();
}
WindowManager.getDefault().invokeWhenUIReady(() -> {
mainFrame = WindowManager.getDefault().getMainWindow();
});
}
@@ -398,30 +400,37 @@ public class Case {
* TimelineEvent that was added.
*/
TIMELINE_EVENT_ADDED,
/* An item in the central repository has had its comment
* modified. The old value is null, the new value is string for current
* comment.
/*
* An item in the central repository has had its comment modified. The
* old value is null, the new value is string for current comment.
*/
CR_COMMENT_CHANGED;
};
private final class TSKCaseRepublisher {
/**
* An instance of this class is registered as a listener on the event bus
* associated with the case database so that selected SleuthKit layer
* application events can be published as Autopsy application events.
*/
private final class SleuthkitEventListener {
@Subscribe
public void rebroadcastTimelineEventCreated(TimelineManager.TimelineEventAddedEvent event) {
public void publishTimelineEventAddedEvent(TimelineManager.TimelineEventAddedEvent event) {
eventPublisher.publish(new TimelineEventAddedEvent(event));
}
@SuppressWarnings("deprecation")
@Subscribe
public void rebroadcastArtifactsPosted(Blackboard.ArtifactsPostedEvent event) {
public void publishArtifactsPostedEvent(Blackboard.ArtifactsPostedEvent event) {
for (BlackboardArtifact.Type artifactType : event.getArtifactTypes()) {
/*
* fireModuleDataEvent is deprecated so module writers don't use
* it (they should use Blackboard.postArtifact(s) instead), but
* we still need a way to rebroadcast the ArtifactsPostedEvent
* as a ModuleDataEvent.
* IngestServices.fireModuleDataEvent is deprecated to
* discourage ingest module writers from using it (they should
* use org.sleuthkit.datamodel.Blackboard.postArtifact(s)
* instead), but a way to publish
* Blackboard.ArtifactsPostedEvents from the SleuthKit layer as
* Autopsy ModuleDataEvents is still needed.
*/
IngestServices.getInstance().fireModuleDataEvent(new ModuleDataEvent(
event.getModuleName(),
@@ -535,8 +544,8 @@ public class Case {
*/
public static boolean isValidName(String caseName) {
return !(caseName.contains("\\") || caseName.contains("/") || caseName.contains(":")
|| caseName.contains("*") || caseName.contains("?") || caseName.contains("\"")
|| caseName.contains("<") || caseName.contains(">") || caseName.contains("|"));
|| caseName.contains("*") || caseName.contains("?") || caseName.contains("\"")
|| caseName.contains("<") || caseName.contains(">") || caseName.contains("|"));
}
/**
@@ -668,14 +677,15 @@ public class Case {
* method should put all operations in an exception firewall with a try and
* catch-all block to handle the possibility of bad timing.
*
* TODO (JIRA-3825): Introduce a reference counting scheme for this get case
* method.
*
* @return The current case.
*
* @throws NoCurrentCaseException if there is no current case.
*/
public static Case getCurrentCaseThrows() throws NoCurrentCaseException {
/*
* TODO (JIRA-3825): Introduce a reference counting scheme for this get
* case method.
*/
Case openCase = currentCase;
if (openCase == null) {
throw new NoCurrentCaseException(NbBundle.getMessage(Case.class, "Case.getCurCase.exception.noneOpen"));
@@ -706,7 +716,7 @@ public class Case {
eventPublisher.publishLocally(new AutopsyEvent(Events.CURRENT_CASE.toString(), closedCase, null));
logger.log(Level.INFO, "Closing current case {0} ({1}) in {2}", new Object[]{closedCase.getDisplayName(), closedCase.getName(), closedCase.getCaseDirectory()}); //NON-NLS
currentCase = null;
closedCase.close();
closedCase.doCloseCaseAction();
logger.log(Level.INFO, "Closed current case {0} ({1}) in {2}", new Object[]{closedCase.getDisplayName(), closedCase.getName(), closedCase.getCaseDirectory()}); //NON-NLS
} catch (CaseActionException ex) {
logger.log(Level.SEVERE, String.format("Error closing current case %s (%s) in %s", closedCase.getDisplayName(), closedCase.getName(), closedCase.getCaseDirectory()), ex); //NON-NLS
@@ -738,6 +748,46 @@ public class Case {
}
}
/**
* Deletes a data source from the current case.
*
* @param dataSourceObjectID The object ID of the data source to delete.
*
* @throws CaseActionException If there is a problem deleting the case. The
* exception will have a user-friendly message
* and may be a wrapper for a lower-level
* exception.
*/
@Messages({
"Case.progressIndicatorTitle.deletingDataSource=Removing Data Source"
})
public static void deleteDataSourceFromCurrentCase(Long dataSourceObjectID) throws CaseActionException {
synchronized (caseActionSerializationLock) {
if (null == currentCase) {
return;
}
/*
* Close the current case to release the shared case lock.
*/
CaseMetadata caseMetadata = currentCase.getMetadata();
closeCurrentCase();
/*
* Re-open the case with an exclusive case lock, delete the data
* source, and close the case again, releasing the exclusive case
* lock.
*/
Case theCase = new Case(caseMetadata);
theCase.doOpenCaseAction(Bundle.Case_progressIndicatorTitle_deletingDataSource(), theCase::deleteDataSource, CaseLockType.EXCLUSIVE, false, dataSourceObjectID);
/*
* Re-open the case with a shared case lock.
*/
openAsCurrentCase(new Case(caseMetadata), false);
}
}
/**
* Deletes a case. The case to be deleted must not be the "current case."
* Deleting the current case must be done by calling Case.deleteCurrentCase.
@@ -799,6 +849,8 @@ public class Case {
* @throws CaseActionCancelledException If creating the case is cancelled.
*/
@Messages({
"Case.progressIndicatorTitle.creatingCase=Creating Case",
"Case.progressIndicatorTitle.openingCase=Opening Case",
"Case.exceptionMessage.cannotLocateMainWindow=Cannot locate main application window"
})
private static void openAsCurrentCase(Case newCurrentCase, boolean isNewCase) throws CaseActionException, CaseActionCancelledException {
@@ -816,7 +868,16 @@ public class Case {
}
try {
logger.log(Level.INFO, "Opening {0} ({1}) in {2} as the current case", new Object[]{newCurrentCase.getDisplayName(), newCurrentCase.getName(), newCurrentCase.getCaseDirectory()}); //NON-NLS
newCurrentCase.open(isNewCase);
String progressIndicatorTitle;
CaseAction<ProgressIndicator, Object, Void> openCaseAction;
if (isNewCase) {
progressIndicatorTitle = Bundle.Case_progressIndicatorTitle_creatingCase();
openCaseAction = newCurrentCase::create;
} else {
progressIndicatorTitle = Bundle.Case_progressIndicatorTitle_openingCase();
openCaseAction = newCurrentCase::open;
}
newCurrentCase.doOpenCaseAction(progressIndicatorTitle, openCaseAction, CaseLockType.SHARED, true, null);
currentCase = newCurrentCase;
logger.log(Level.INFO, "Opened {0} ({1}) in {2} as the current case", new Object[]{newCurrentCase.getDisplayName(), newCurrentCase.getName(), newCurrentCase.getCaseDirectory()}); //NON-NLS
if (RuntimeProperties.runningWithGUI()) {
@@ -978,14 +1039,14 @@ public class Case {
@Messages({
"Case.creationException.couldNotAcquireResourcesLock=Failed to get lock on case resources"
})
private static CoordinationService.Lock acquireExclusiveCaseResourcesLock(String caseDir) throws CaseActionException {
private static CoordinationService.Lock acquireCaseResourcesLock(String caseDir) throws CaseActionException {
try {
Path caseDirPath = Paths.get(caseDir);
String resourcesNodeName = CoordinationServiceUtils.getCaseResourcesNodePath(caseDirPath);
Lock lock = CoordinationService.getInstance().tryGetExclusiveLock(CategoryNode.CASES, resourcesNodeName, RESOURCES_LOCK_TIMOUT_HOURS, TimeUnit.HOURS);
Lock lock = CoordinationService.getInstance().tryGetExclusiveLock(CategoryNode.CASES, resourcesNodeName, CASE_RESOURCES_LOCK_TIMEOUT_HOURS, TimeUnit.HOURS);
return lock;
} catch (InterruptedException ex) {
throw new CaseActionCancelledException(Bundle.Case_exceptionMessage_cancelledByUser());
throw new CaseActionCancelledException(Bundle.Case_exceptionMessage_cancelled());
} catch (CoordinationServiceException ex) {
throw new CaseActionException(Bundle.Case_creationException_couldNotAcquireResourcesLock(), ex);
}
@@ -1049,7 +1110,7 @@ public class Case {
/*
* Enable the case-specific actions.
*/
CallableSystemAction.get(AddImageAction.class).setEnabled(Case.getCurrentCase().getMetadata().getCaseType() == CaseType.SINGLE_USER_CASE || !AccessLimiterUtils.limitMultiUserAccess());
CallableSystemAction.get(AddImageAction.class).setEnabled(FeatureAccessUtils.canAddDataSources());
CallableSystemAction.get(CaseCloseAction.class).setEnabled(true);
CallableSystemAction.get(CaseDetailsAction.class).setEnabled(true);
CallableSystemAction.get(DataSourceSummaryAction.class).setEnabled(true);
@@ -1058,6 +1119,7 @@ public class Case {
CallableSystemAction.get(OpenCommVisualizationToolAction.class).setEnabled(true);
CallableSystemAction.get(CommonAttributeSearchAction.class).setEnabled(true);
CallableSystemAction.get(OpenOutputFolderAction.class).setEnabled(false);
CallableSystemAction.get(OpenFileDiscoveryAction.class).setEnabled(true);
/*
* Add the case to the recent cases tracker that supplies a list
@@ -1112,6 +1174,7 @@ public class Case {
CallableSystemAction.get(OpenCommVisualizationToolAction.class).setEnabled(false);
CallableSystemAction.get(OpenOutputFolderAction.class).setEnabled(false);
CallableSystemAction.get(CommonAttributeSearchAction.class).setEnabled(false);
CallableSystemAction.get(OpenFileDiscoveryAction.class).setEnabled(false);
/*
* Clear the notifications in the notfier component in the lower
@@ -1366,16 +1429,14 @@ public class Case {
/**
* Gets the data sources for the case.
*
* @return A list of data sources.
* @return A list of data sources, possibly empty.
*
* @throws org.sleuthkit.datamodel.TskCoreException if there is a problem
* querying the case
* database.
*/
public List<Content> getDataSources() throws TskCoreException {
List<Content> list = caseDb.getRootObjects();
hasDataSources = (list.size() > 0);
return list;
return caseDb.getRootObjects();
}
/**
@@ -1416,12 +1477,11 @@ public class Case {
* @return True or false.
*/
public boolean hasData() {
if (!hasDataSources) {
try {
hasDataSources = (getDataSources().size() > 0);
} catch (TskCoreException ex) {
logger.log(Level.SEVERE, "Error accessing case database", ex); //NON-NLS
}
boolean hasDataSources = false;
try {
hasDataSources = (getDataSources().size() > 0);
} catch (TskCoreException ex) {
logger.log(Level.SEVERE, "Error accessing case database", ex); //NON-NLS
}
return hasDataSources;
}
@@ -1699,7 +1759,7 @@ public class Case {
*
*/
private Case(CaseType caseType, String caseDir, CaseDetails caseDetails) {
metadata = new CaseMetadata(caseType, caseDir, displayNameToUniqueName(caseDetails.getCaseDisplayName()), caseDetails);
this(new CaseMetadata(caseType, caseDir, displayNameToUniqueName(caseDetails.getCaseDisplayName()), caseDetails));
}
/**
@@ -1709,91 +1769,91 @@ public class Case {
*/
private Case(CaseMetadata caseMetaData) {
metadata = caseMetaData;
sleuthkitEventListener = new SleuthkitEventListener();
}
/**
* Opens this case by creating a task running in the same non-UI thread that
* will be used to close the case. If the case is a single-user case, this
* supports cancelling creation of the case by cancelling the task. If the
* case is a multi-user case, this ensures ensures that case directory lock
* held as long as the case is open is released in the same thread in which
* it was acquired, as is required by the coordination service.
* Performs a case action that involves creating or opening a case. If the
* case is a multi-user case, the action is done after acquiring a
* coordination service case lock. This case lock must be released in the
* same thread in which it was acquired, as required by the coordination
* service. A single-threaded executor is therefore created to do the case
* opening action, and is saved for an eventual case closing action.
*
* @param isNewCase True for a new case, false otherwise.
* IMPORTANT: If an open case action for a multi-user case is terminated
* because an exception is thrown or the action is cancelled, the action is
* responsible for releasing the case lock while still running in the case
* action executor's thread. This method assumes this has been done and
* performs an orderly shut down of the case action executor.
*
* @throws CaseActionException If there is a problem creating the case. The
* exception will have a user-friendly message
* and may be a wrapper for a lower-level
* exception.
* @param progressIndicatorTitle A title for the progress indicator for the
* case action.
* @param caseAction The case action method.
* @param caseLockType The type of case lock required for the case
* action.
* @param allowCancellation Whether or not to allow the action to be
* cancelled.
* @param additionalParams An Object that holds any additional
* parameters for a case action.
*
* @throws CaseActionException If there is a problem completing the action.
* The exception will have a user-friendly
* message and may be a wrapper for a
* lower-level exception.
*/
@Messages({
"Case.progressIndicatorTitle.creatingCase=Creating Case",
"Case.progressIndicatorTitle.openingCase=Opening Case",
"Case.progressIndicatorCancelButton.label=Cancel",
"Case.progressMessage.preparing=Preparing...",
"Case.progressMessage.preparingToOpenCaseResources=<html>Preparing to open case resources.<br>This may take time if another user is upgrading the case.</html>",
"Case.progressMessage.cancelling=Cancelling...",
"Case.exceptionMessage.cancelledByUser=Cancelled by user.",
"Case.exceptionMessage.cancelled=Cancelled.",
"# {0} - exception message", "Case.exceptionMessage.execExceptionWrapperMessage={0}"
})
private void open(boolean isNewCase) throws CaseActionException {
private void doOpenCaseAction(String progressIndicatorTitle, CaseAction<ProgressIndicator, Object, Void> caseAction, CaseLockType caseLockType, boolean allowCancellation, Object additionalParams) throws CaseActionException {
/*
* Create and start either a GUI progress indicator with a Cancel button
* or a logging progress indicator.
* Create and start either a GUI progress indicator (with or without a
* cancel button) or a logging progress indicator.
*/
CancelButtonListener cancelButtonListener = null;
ProgressIndicator progressIndicator;
if (RuntimeProperties.runningWithGUI()) {
cancelButtonListener = new CancelButtonListener(Bundle.Case_progressMessage_cancelling());
String progressIndicatorTitle = isNewCase ? Bundle.Case_progressIndicatorTitle_creatingCase() : Bundle.Case_progressIndicatorTitle_openingCase();
progressIndicator = new ModalDialogProgressIndicator(
mainFrame,
progressIndicatorTitle,
new String[]{Bundle.Case_progressIndicatorCancelButton_label()},
Bundle.Case_progressIndicatorCancelButton_label(),
cancelButtonListener);
if (allowCancellation) {
cancelButtonListener = new CancelButtonListener(Bundle.Case_progressMessage_cancelling());
progressIndicator = new ModalDialogProgressIndicator(
mainFrame,
progressIndicatorTitle,
new String[]{Bundle.Case_progressIndicatorCancelButton_label()},
Bundle.Case_progressIndicatorCancelButton_label(),
cancelButtonListener);
} else {
progressIndicator = new ModalDialogProgressIndicator(
mainFrame,
progressIndicatorTitle);
}
} else {
progressIndicator = new LoggingProgressIndicator();
}
progressIndicator.start(Bundle.Case_progressMessage_preparing());
/*
* Creating/opening a case is always done by creating a task running in
* the same non-UI thread that will be used to close the case, so a
* single-threaded executor service is created here and saved as case
* state (must be volatile for cancellation to work).
*
* --- If the case is a single-user case, this supports cancelling
* opening of the case by cancelling the task.
*
* --- If the case is a multi-user case, this still supports
* cancellation, but it also makes it possible for the shared case
* directory lock held as long as the case is open to be released in the
* same thread in which it was acquired, as is required by the
* coordination service.
* Do the case action in the single thread in the case action executor.
* If the case is a multi-user case, a case lock is acquired and held
* until explictly released and an exclusive case resources lock is
* aquired and held for the duration of the action.
*/
TaskThreadFactory threadFactory = new TaskThreadFactory(String.format(CASE_ACTION_THREAD_NAME, metadata.getCaseName()));
caseLockingExecutor = Executors.newSingleThreadExecutor(threadFactory);
Future<Void> future = caseLockingExecutor.submit(() -> {
caseActionExecutor = Executors.newSingleThreadExecutor(threadFactory);
Future<Void> future = caseActionExecutor.submit(() -> {
if (CaseType.SINGLE_USER_CASE == metadata.getCaseType()) {
open(isNewCase, progressIndicator);
caseAction.execute(progressIndicator, additionalParams);
} else {
/*
* First, acquire a shared case directory lock that will be held
* as long as this node has this case open. This will prevent
* deletion of the case by another node. Next, acquire an
* exclusive case resources lock to ensure only one node at a
* time can create/open/upgrade/close the case resources.
*/
progressIndicator.progress(Bundle.Case_progressMessage_preparingToOpenCaseResources());
acquireSharedCaseDirLock(metadata.getCaseDirectory());
try (CoordinationService.Lock resourcesLock = acquireExclusiveCaseResourcesLock(metadata.getCaseDirectory())) {
acquireCaseLock(caseLockType);
try (CoordinationService.Lock resourcesLock = acquireCaseResourcesLock(metadata.getCaseDirectory())) {
if (null == resourcesLock) {
throw new CaseActionException(Bundle.Case_creationException_couldNotAcquireResourcesLock());
}
open(isNewCase, progressIndicator);
caseAction.execute(progressIndicator, additionalParams);
} catch (CaseActionException ex) {
releaseSharedCaseDirLock(getMetadata().getCaseDirectory());
releaseCaseLock();
throw ex;
}
}
@@ -1804,44 +1864,31 @@ public class Case {
}
/*
* Wait for the case creation/opening task to finish.
* Wait for the case action task to finish.
*/
try {
future.get();
} catch (InterruptedException discarded) {
/*
* The thread this method is running in has been interrupted. Cancel
* the create/open task, wait for it to finish, and shut down the
* executor. This can be done safely because if the task is
* completed with a cancellation condition, the case will have been
* closed and the case directory lock released will have been
* released.
* The thread this method is running in has been interrupted.
*/
if (null != cancelButtonListener) {
cancelButtonListener.actionPerformed(null);
} else {
future.cancel(true);
}
ThreadUtils.shutDownTaskExecutor(caseLockingExecutor);
ThreadUtils.shutDownTaskExecutor(caseActionExecutor);
} catch (CancellationException discarded) {
/*
* The create/open task has been cancelled. Wait for it to finish,
* and shut down the executor. This can be done safely because if
* the task is completed with a cancellation condition, the case
* will have been closed and the case directory lock released will
* have been released.
* The case action has been cancelled.
*/
ThreadUtils.shutDownTaskExecutor(caseLockingExecutor);
throw new CaseActionCancelledException(Bundle.Case_exceptionMessage_cancelledByUser());
ThreadUtils.shutDownTaskExecutor(caseActionExecutor);
throw new CaseActionCancelledException(Bundle.Case_exceptionMessage_cancelled());
} catch (ExecutionException ex) {
/*
* The create/open task has thrown an exception. Wait for it to
* finish, and shut down the executor. This can be done safely
* because if the task is completed with an execution condition, the
* case will have been closed and the case directory lock released
* will have been released.
* The case action has thrown an exception.
*/
ThreadUtils.shutDownTaskExecutor(caseLockingExecutor);
ThreadUtils.shutDownTaskExecutor(caseActionExecutor);
throw new CaseActionException(Bundle.Case_exceptionMessage_execExceptionWrapperMessage(ex.getCause().getLocalizedMessage()), ex);
} finally {
progressIndicator.finish();
@@ -1849,55 +1896,48 @@ public class Case {
}
/**
* Opens the case database and services for this case.
* A case action (interface CaseAction<T, V, R>) that creates the case
* directory and case database and opens the application services for this
* case.
*
* @param isNewCase True for a new case, false otherwise.
* @param progressIndicator A progress indicator.
* @param additionalParams An Object that holds any additional parameters
* for a case action. For this action, this is
* null.
*
* @throws CaseActionException If there is a problem creating the case. The
* exception will have a user-friendly message
* and may be a wrapper for a lower-level
* exception.
* @throws CaseActionException If there is a problem completing the action.
* The exception will have a user-friendly
* message and may be a wrapper for a
* lower-level exception.
*/
private void open(boolean isNewCase, ProgressIndicator progressIndicator) throws CaseActionException {
private Void create(ProgressIndicator progressIndicator, Object additionalParams) throws CaseActionException {
assert (additionalParams == null);
try {
checkForUserCancellation();
checkForCancellation();
createCaseDirectoryIfDoesNotExist(progressIndicator);
checkForUserCancellation();
checkForCancellation();
switchLoggingToCaseLogsDirectory(progressIndicator);
checkForUserCancellation();
if (isNewCase) {
saveCaseMetadataToFile(progressIndicator);
}
checkForUserCancellation();
if (isNewCase) {
createCaseNodeData(progressIndicator);
} else {
updateCaseNodeData(progressIndicator);
}
checkForUserCancellation();
if (!isNewCase) {
deleteTempfilesFromCaseDirectory(progressIndicator);
}
checkForUserCancellation();
if (isNewCase) {
createCaseDatabase(progressIndicator);
} else {
openCaseDataBase(progressIndicator);
}
checkForUserCancellation();
checkForCancellation();
saveCaseMetadataToFile(progressIndicator);
checkForCancellation();
createCaseNodeData(progressIndicator);
checkForCancellation();
checkForCancellation();
createCaseDatabase(progressIndicator);
checkForCancellation();
openCaseLevelServices(progressIndicator);
checkForUserCancellation();
checkForCancellation();
openAppServiceCaseResources(progressIndicator);
checkForUserCancellation();
checkForCancellation();
openCommunicationChannels(progressIndicator);
return null;
} catch (CaseActionException ex) {
/*
* Cancellation or failure. Clean up by calling the close method.
* The sleep is a little hack to clear the interrupted flag for this
* thread if this is a cancellation scenario, so that the clean up
* can run to completion in the current thread.
* Cancellation or failure. The sleep is a little hack to clear the
* interrupted flag for this thread if this is a cancellation
* scenario, so that the clean up can run to completion in the
* current thread.
*/
try {
Thread.sleep(1);
@@ -1908,6 +1948,102 @@ public class Case {
}
}
/**
* A case action (interface CaseAction<T, V, R>) that opens the case
* database and application services for this case.
*
* @param progressIndicator A progress indicator.
* @param additionalParams An Object that holds any additional parameters
* for a case action. For this action, this is
* null.
*
* @throws CaseActionException If there is a problem completing the action.
* The exception will have a user-friendly
* message and may be a wrapper for a
* lower-level exception.
*/
private Void open(ProgressIndicator progressIndicator, Object additionalParams) throws CaseActionException {
assert (additionalParams == null);
try {
checkForCancellation();
switchLoggingToCaseLogsDirectory(progressIndicator);
checkForCancellation();
updateCaseNodeData(progressIndicator);
checkForCancellation();
deleteTempfilesFromCaseDirectory(progressIndicator);
checkForCancellation();
openCaseDataBase(progressIndicator);
checkForCancellation();
openCaseLevelServices(progressIndicator);
checkForCancellation();
openAppServiceCaseResources(progressIndicator);
checkForCancellation();
openCommunicationChannels(progressIndicator);
return null;
} catch (CaseActionException ex) {
/*
* Cancellation or failure. The sleep is a little hack to clear the
* interrupted flag for this thread if this is a cancellation
* scenario, so that the clean up can run to completion in the
* current thread.
*/
try {
Thread.sleep(1);
} catch (InterruptedException discarded) {
}
close(progressIndicator);
throw ex;
}
}
/**
* A case action (interface CaseAction<T, V, R>) that opens a case, deletes
* a data source from the case, and closes the case.
*
* @param progressIndicator A progress indicator.
* @param additionalParams An Object that holds any additional parameters
* for a case action. For this action, this the
* object ID of the data source to be deleted.
*
* @throws CaseActionException If there is a problem completing the action.
* The exception will have a user-friendly
* message and may be a wrapper for a
* lower-level exception.
*/
@Messages({
"Case.progressMessage.deletingDataSource=Removing the data source from the case...",
"Case.exceptionMessage.dataSourceNotFound=The data source was not found.",
"Case.exceptionMessage.errorDeletingDataSourceFromCaseDb=An error occurred while removing the data source from the case database.",
"Case.exceptionMessage.errorDeletingDataSourceFromTextIndex=An error occurred while removing the data source from the text index.",})
Void deleteDataSource(ProgressIndicator progressIndicator, Object additionalParams) throws CaseActionException {
assert (additionalParams instanceof Long);
open(progressIndicator, null);
try {
progressIndicator.progress(Bundle.Case_progressMessage_deletingDataSource());
Long dataSourceObjectID = (Long) additionalParams;
try {
DataSource dataSource = this.caseDb.getDataSource(dataSourceObjectID);
if (dataSource == null) {
throw new CaseActionException(Bundle.Case_exceptionMessage_dataSourceNotFound());
}
SleuthkitCaseAdminUtil.deleteDataSource(this.caseDb, dataSourceObjectID);
} catch (TskDataException | TskCoreException ex) {
throw new CaseActionException(Bundle.Case_exceptionMessage_errorDeletingDataSourceFromCaseDb(), ex);
}
try {
this.caseServices.getKeywordSearchService().deleteDataSource(dataSourceObjectID);
} catch (KeywordSearchServiceException ex) {
throw new CaseActionException(Bundle.Case_exceptionMessage_errorDeletingDataSourceFromTextIndex(), ex);
}
eventPublisher.publish(new DataSourceDeletedEvent(dataSourceObjectID));
return null;
} finally {
close(progressIndicator);
releaseCaseLock();
}
}
/**
* Create an empty portable case from the current case
*
@@ -1954,18 +2090,15 @@ public class Case {
* interrupted, assumes interrupt was
* due to a user action.
*/
private static void checkForUserCancellation() throws CaseActionCancelledException {
private static void checkForCancellation() throws CaseActionCancelledException {
if (Thread.currentThread().isInterrupted()) {
throw new CaseActionCancelledException(Bundle.Case_exceptionMessage_cancelledByUser());
throw new CaseActionCancelledException(Bundle.Case_exceptionMessage_cancelled());
}
}
/**
* Creates the case directory, if it does not already exist.
*
* TODO (JIRA-2180): Always create the case directory as part of the case
* creation process.
*
* @param progressIndicator A progress indicator.
*
* @throws CaseActionException If there is a problem completing the
@@ -1977,6 +2110,10 @@ public class Case {
"Case.progressMessage.creatingCaseDirectory=Creating case directory..."
})
private void createCaseDirectoryIfDoesNotExist(ProgressIndicator progressIndicator) throws CaseActionException {
/*
* TODO (JIRA-2180): Always create the case directory as part of the
* case creation process.
*/
progressIndicator.progress(Bundle.Case_progressMessage_creatingCaseDirectory());
if (new File(metadata.getCaseDirectory()).exists() == false) {
progressIndicator.progress(Bundle.Case_progressMessage_creatingCaseDirectory());
@@ -2186,8 +2323,12 @@ public class Case {
private void openCaseLevelServices(ProgressIndicator progressIndicator) {
progressIndicator.progress(Bundle.Case_progressMessage_openingCaseLevelServices());
this.caseServices = new Services(caseDb);
caseDb.registerForEvents(tskEventForwarder);
/*
* RC Note: JM put this initialization here. I'm not sure why. However,
* my attempt to put it in the openCaseDatabase method seems to lead to
* intermittent unchecked exceptions concerning a missing subscriber.
*/
caseDb.registerForEvents(sleuthkitEventListener);
}
/**
@@ -2217,7 +2358,9 @@ public class Case {
* one starts by awaiting termination of the executor service.
*/
progressIndicator.progress(Bundle.Case_progressMessage_openingApplicationServiceResources());
for (AutopsyService service : Lookup.getDefault().lookupAll(AutopsyService.class)) {
for (AutopsyService service : Lookup.getDefault().lookupAll(AutopsyService.class
)) {
/*
* Create a progress indicator for the task and start the task. If
* running with a GUI, the progress indicator will be a dialog box
@@ -2295,7 +2438,7 @@ public class Case {
ThreadUtils.shutDownTaskExecutor(executor);
appServiceProgressIndicator.finish();
}
checkForUserCancellation();
checkForCancellation();
}
}
@@ -2320,7 +2463,7 @@ public class Case {
progressIndicator.progress(Bundle.Case_progressMessage_settingUpNetworkCommunications());
try {
eventPublisher.openRemoteEventChannel(String.format(EVENT_CHANNEL_NAME, metadata.getCaseName()));
checkForUserCancellation();
checkForCancellation();
collaborationMonitor = new CollaborationMonitor(metadata.getCaseName());
} catch (AutopsyEventException ex) {
throw new CaseActionException(Bundle.Case_exceptionMessage_couldNotOpenRemoteEventChannel(ex.getLocalizedMessage()), ex);
@@ -2331,14 +2474,20 @@ public class Case {
}
/**
* Closes the case.
* Performs a case action that involves closing a case opened by calling
* doOpenCaseAction. If the case is a multi-user case, the coordination
* service case lock acquired by the call to doOpenCaseAction is released.
* This case lock must be released in the same thread in which it was
* acquired, as required by the coordination service. The single-threaded
* executor saved during the case opening action is therefore used to do the
* case closing action.
*
* @throws CaseActionException If there is a problem completing the
* operation. The exception will have a
* user-friendly message and may be a wrapper
* for a lower-level exception.
* @throws CaseActionException If there is a problem completing the action.
* The exception will have a user-friendly
* message and may be a wrapper for a
* lower-level exception.
*/
private void close() throws CaseActionException {
private void doCloseCaseAction() throws CaseActionException {
/*
* Set up either a GUI progress indicator without a Cancel button or a
* logging progress indicator.
@@ -2356,11 +2505,11 @@ public class Case {
/*
* Closing a case is always done in the same non-UI thread that
* opened/created the case. If the case is a multi-user case, this
* ensures that case directory lock that is held as long as the case is
* open is released in the same thread in which it was acquired, as is
* required by the coordination service.
* ensures that case lock that is held as long as the case is open is
* released in the same thread in which it was acquired, as is required
* by the coordination service.
*/
Future<Void> future = caseLockingExecutor.submit(() -> {
Future<Void> future = caseActionExecutor.submit(() -> {
if (CaseType.SINGLE_USER_CASE == metadata.getCaseType()) {
close(progressIndicator);
} else {
@@ -2370,7 +2519,7 @@ public class Case {
* resources.
*/
progressIndicator.progress(Bundle.Case_progressMessage_preparing());
try (CoordinationService.Lock resourcesLock = acquireExclusiveCaseResourcesLock(metadata.getCaseDirectory())) {
try (CoordinationService.Lock resourcesLock = acquireCaseResourcesLock(metadata.getCaseDirectory())) {
if (null == resourcesLock) {
throw new CaseActionException(Bundle.Case_creationException_couldNotAcquireResourcesLock());
}
@@ -2380,7 +2529,7 @@ public class Case {
* Always release the case directory lock that was acquired
* when the case was opened.
*/
releaseSharedCaseDirLock(metadata.getCaseName());
releaseCaseLock();
}
}
return null;
@@ -2392,13 +2541,13 @@ public class Case {
/*
* The wait has been interrupted by interrupting the thread running
* this method. Not allowing cancellation of case closing, so ignore
* the interrupt. Likewsie, cancellation of the case closing task is
* the interrupt. Likewise, cancellation of the case closing task is
* not supported.
*/
} catch (ExecutionException ex) {
throw new CaseActionException(Bundle.Case_exceptionMessage_execExceptionWrapperMessage(ex.getCause().getMessage()), ex);
} finally {
ThreadUtils.shutDownTaskExecutor(caseLockingExecutor);
ThreadUtils.shutDownTaskExecutor(caseActionExecutor);
progressIndicator.finish();
}
}
@@ -2440,7 +2589,7 @@ public class Case {
*/
if (null != caseDb) {
progressIndicator.progress(Bundle.Case_progressMessage_closingCaseDatabase());
caseDb.unregisterForEvents(tskEventForwarder);
caseDb.unregisterForEvents(sleuthkitEventListener);
caseDb.close();
}
@@ -2464,7 +2613,8 @@ public class Case {
* Each service gets its own independently cancellable task, and thus
* its own task progress indicator.
*/
for (AutopsyService service : Lookup.getDefault().lookupAll(AutopsyService.class)) {
for (AutopsyService service : Lookup.getDefault().lookupAll(AutopsyService.class
)) {
ProgressIndicator progressIndicator;
if (RuntimeProperties.runningWithGUI()) {
progressIndicator = new ModalDialogProgressIndicator(
@@ -2504,37 +2654,47 @@ public class Case {
}
/**
* Acquires a shared case directory lock for the current case.
* Acquires a case (case directory) lock for the current case.
*
* @param caseDir The full path of the case directory.
*
* @throws CaseActionException with a user-friendly message if the lock
* cannot be acquired.
* @throws CaseActionException If the lock cannot be acquired.
*/
@Messages({"Case.creationException.couldNotAcquireDirLock=Failed to get lock on case directory"})
private void acquireSharedCaseDirLock(String caseDir) throws CaseActionException {
@Messages({
"Case.lockingException.couldNotAcquireSharedLock=Failed to get an shared lock on the case.",
"Case.lockingException.couldNotAcquireExclusiveLock=Failed to get a exclusive lock on the case."
})
private void acquireCaseLock(CaseLockType lockType) throws CaseActionException {
String caseDir = metadata.getCaseDirectory();
try {
caseDirLock = CoordinationService.getInstance().tryGetSharedLock(CategoryNode.CASES, caseDir, DIR_LOCK_TIMOUT_HOURS, TimeUnit.HOURS);
if (null == caseDirLock) {
throw new CaseActionException(Bundle.Case_creationException_couldNotAcquireDirLock());
CoordinationService coordinationService = CoordinationService.getInstance();
caseLock = lockType == CaseLockType.SHARED
? coordinationService.tryGetSharedLock(CategoryNode.CASES, caseDir, CASE_LOCK_TIMEOUT_MINS, TimeUnit.MINUTES)
: coordinationService.tryGetExclusiveLock(CategoryNode.CASES, caseDir, CASE_LOCK_TIMEOUT_MINS, TimeUnit.MINUTES);
if (caseLock == null) {
if (lockType == CaseLockType.SHARED) {
throw new CaseActionException(Bundle.Case_lockingException_couldNotAcquireSharedLock());
} else {
throw new CaseActionException(Bundle.Case_lockingException_couldNotAcquireExclusiveLock());
}
}
} catch (InterruptedException | CoordinationServiceException ex) {
throw new CaseActionException(Bundle.Case_creationException_couldNotAcquireDirLock(), ex);
if (lockType == CaseLockType.SHARED) {
throw new CaseActionException(Bundle.Case_lockingException_couldNotAcquireSharedLock(), ex);
} else {
throw new CaseActionException(Bundle.Case_lockingException_couldNotAcquireExclusiveLock(), ex);
}
}
}
/**
* Releases a shared case directory lock for the current case.
*
* @param caseDir The full path of the case directory.
* Releases a case (case directory) lock for the current case.
*/
private void releaseSharedCaseDirLock(String caseDir) {
if (caseDirLock != null) {
private void releaseCaseLock() {
if (caseLock != null) {
try {
caseDirLock.release();
caseDirLock = null;
caseLock.release();
caseLock = null;
} catch (CoordinationService.CoordinationServiceException ex) {
logger.log(Level.SEVERE, String.format("Failed to release shared case directory lock for %s", caseDir), ex);
logger.log(Level.SEVERE, String.format("Failed to release shared case directory lock for %s", getMetadata().getCaseDirectory()), ex);
}
}
}
@@ -2807,7 +2967,9 @@ public class Case {
})
private static void deleteTextIndex(CaseMetadata metadata, ProgressIndicator progressIndicator) throws KeywordSearchServiceException {
progressIndicator.progress(Bundle.Case_progressMessage_deletingTextIndex());
for (KeywordSearchService searchService : Lookup.getDefault().lookupAll(KeywordSearchService.class)) {
for (KeywordSearchService searchService : Lookup.getDefault().lookupAll(KeywordSearchService.class
)) {
searchService.deleteTextIndex(metadata);
}
}
@@ -2908,9 +3070,41 @@ public class Case {
CaseNodeData.writeCaseNodeData(caseNodeData);
} catch (CaseNodeDataException ex) {
logger.log(Level.SEVERE, String.format("Error updating deleted item flag %s for %s (%s) in %s", flag.name(), caseNodeData.getDisplayName(), caseNodeData.getName(), caseNodeData.getDirectory()), ex);
}
}
/**
* Defines the signature for case action methods that can be passed as
* arguments to the doCaseAction method.
*
* @param <T> A ProgressIndicator
* @param <V> The optional parameters stored in an Object.
* @param <R> The return type of Void.
*/
private interface CaseAction<T, V, R> {
/**
* The signature for a case action method.
*
* @param progressIndicator A ProgressIndicator.
* @param additionalParams The optional parameters stored in an Object.
*
* @return A Void object (null).
*
* @throws CaseActionException
*/
R execute(T progressIndicator, V additionalParams) throws CaseActionException;
}
/**
* The choices for the case (case directory) coordination service lock used
* for multi-user cases.
*/
private enum CaseLockType {
SHARED, EXCLUSIVE;
}
/**
* A case operation Cancel button listener for use with a
* ModalDialogProgressIndicator when running with a GUI.
@@ -1,7 +1,7 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2011-2017 Basis Technology Corp.
* Copyright 2011-2019 Basis Technology Corp.
* Contact: carrier <at> sleuthkit <dot> org
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -50,7 +50,7 @@ import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil;
@ActionID(category = "Tools", id = "org.sleuthkit.autopsy.casemodule.CaseCloseAction")
@ActionRegistration(displayName = "#CTL_CaseCloseAct", lazy = false)
@ActionReferences(value = {
@ActionReference(path = "Toolbars/Case", position = 104)})
@ActionReference(path = "Toolbars/Case", position = 105)})
public final class CaseCloseAction extends CallableSystemAction implements Presenter.Toolbar {
private static final long serialVersionUID = 1L;
@@ -95,7 +95,7 @@ public final class CaseCloseAction extends CallableSystemAction implements Prese
logger.log(Level.SEVERE, "Unexpected interrupt closing the current case", ex);
} catch (ExecutionException ex) {
logger.log(Level.SEVERE, "Error closing the current case", ex);
MessageNotifyUtil.Message.error(Bundle.Case_closeException_couldNotCloseCase(ex.getMessage()));
MessageNotifyUtil.Message.error(Bundle.Case_closeException_couldNotCloseCase(ex.getMessage()));
}
WindowManager.getDefault().getMainWindow().setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
StartupWindowProvider.getInstance().open();
@@ -24,6 +24,7 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.StringWriter;
import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.text.DateFormat;
@@ -427,9 +428,10 @@ public final class CaseMetadata {
transformer.transform(source, streamResult);
/*
* Write the DOM to the metadata file.
* Write the DOM to the metadata file. Add UTF-8 Characterset so it writes to the file
* correctly for non-latin characters
*/
try (BufferedWriter fileWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(metadataFilePath.toFile())))) {
try (BufferedWriter fileWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(metadataFilePath.toFile()), StandardCharsets.UTF_8))) {
fileWriter.write(stringWriter.toString());
fileWriter.flush();
}
@@ -0,0 +1,152 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2019 Basis Technology Corp.
* Contact: carrier <at> sleuthkit <dot> org
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.sleuthkit.autopsy.casemodule;
import java.awt.event.ActionEvent;
import java.nio.file.Path;
import java.util.concurrent.ExecutionException;
import java.util.logging.Level;
import javax.swing.AbstractAction;
import javax.swing.SwingWorker;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil;
import org.sleuthkit.autopsy.featureaccess.FeatureAccessUtils;
import org.sleuthkit.autopsy.ingest.IngestManager;
/**
* An Action that allows a user to remove a data source from the current case.
*/
public final class DeleteDataSourceAction extends AbstractAction {
private static final long serialVersionUID = 1L;
private static final Logger logger = Logger.getLogger(DeleteDataSourceAction.class.getName());
private long dataSourceObjectID;
private Path caseMetadataFilePath;
/**
* Constructs an Action that allows a user to remove a data source from a
* case.
*
* @param dataSourceObjectID The object ID of the data source to be removed.
*/
@NbBundle.Messages({
"DeleteDataSourceAction.name.text=Remove Data Source"
})
public DeleteDataSourceAction(Long dataSourceObjectID) {
super(Bundle.DeleteDataSourceAction_name_text());
this.dataSourceObjectID = dataSourceObjectID;
this.setEnabled(FeatureAccessUtils.canDeleteDataSources());
}
@NbBundle.Messages({
"DeleteDataSourceAction.ingestRunningWarningDialog.message=Data sources cannot be removed from a case when ingest is running.",
"DeleteDataSourceAction.confirmationDialog.message=Are you sure you want to remove the selected data source from the case?\nNote that the case will be closed and re-opened during the removal.",
"# {0} - exception message", "DeleteDataSourceAction.exceptionMessage.dataSourceDeletionError=An error occurred while removing the data source:\n{0}\nPlease see the application log for details.",
"# {0} - exception message", "DeleteDataSourceAction.exceptionMessage.couldNotReopenCase=Failed to re-open the case:\n{0}\nPlease see the application log for details."
})
@Override
public void actionPerformed(ActionEvent event) {
if (IngestManager.getInstance().isIngestRunning()) {
MessageNotifyUtil.Message.warn(Bundle.DeleteDataSourceAction_ingestRunningWarningDialog_message());
return;
}
if (MessageNotifyUtil.Message.confirm(Bundle.DeleteDataSourceAction_confirmationDialog_message())) {
new DataSourceDeletionWorker().execute();
}
}
/**
* A SwingWorker to do the data source deletion.
*/
private class DataSourceDeletionWorker extends SwingWorker<Void, Void> {
@Override
protected Void doInBackground() throws Exception {
/*
* Save the case metadata file path so the case can be reopened if
* something goes wrong and the case ends up closed.
*/
caseMetadataFilePath = Case.getCurrentCase().getMetadata().getFilePath();
Case.deleteDataSourceFromCurrentCase(dataSourceObjectID);
return null;
}
@Override
protected void done() {
try {
get();
} catch (InterruptedException | ExecutionException ex) {
logger.log(Level.SEVERE, String.format("Error deleting data source (obj_id=%d)", dataSourceObjectID), ex);
MessageNotifyUtil.Message.show(Bundle.DeleteDataSourceAction_exceptionMessage_dataSourceDeletionError(ex.getLocalizedMessage()), MessageNotifyUtil.MessageType.ERROR);
if (!Case.isCaseOpen()) {
new CaseReopeningWorker().execute();
}
}
}
}
/**
* A SwingWorker to attempt to re-open the case after a data source deletion
* exception.
*/
private class CaseReopeningWorker extends SwingWorker<Void, Void> {
@Override
protected Void doInBackground() throws Exception {
Case.openAsCurrentCase(caseMetadataFilePath.toString());
return null;
}
@Override
protected void done() {
try {
get();
} catch (InterruptedException ex) {
logger.log(Level.WARNING, String.format("Interrupted reopening case after error deleting data source (obj_id=%d)", dataSourceObjectID), ex);
} catch (ExecutionException ex) {
logger.log(Level.SEVERE, String.format("Error reopening case after error deleting data source (obj_id=%d)", dataSourceObjectID), ex);
MessageNotifyUtil.Message.show(Bundle.DeleteDataSourceAction_exceptionMessage_dataSourceDeletionError(ex.getCause().getLocalizedMessage()), MessageNotifyUtil.MessageType.ERROR);
StartupWindowProvider.getInstance().open();
}
}
}
@Override
public DeleteDataSourceAction clone() throws CloneNotSupportedException {
DeleteDataSourceAction clonedObject = ((DeleteDataSourceAction) super.clone());
clonedObject.setDataSourceID(this.dataSourceObjectID);
return clonedObject;
}
/**
* Allows the setting of the data source object ID field of a clone of this
* action.
*
* @param dataSourceObjectID The data source object ID.
*/
private void setDataSourceID(long dataSourceObjectID) {
this.dataSourceObjectID = dataSourceObjectID;
}
}
@@ -18,6 +18,7 @@
*/
package org.sleuthkit.autopsy.casemodule;
import org.sleuthkit.autopsy.featureaccess.FeatureAccessUtils;
import java.awt.Component;
import org.openide.util.NbBundle;
@@ -61,7 +62,7 @@ final class NewCaseVisualPanel1 extends JPanel implements DocumentListener {
*/
void readSettings() {
caseNameTextField.setText("");
if (UserPreferences.getIsMultiUserModeEnabled() && !AccessLimiterUtils.limitMultiUserAccess()) {
if (FeatureAccessUtils.canCreateMultiUserCases()) {
multiUserCaseRadioButton.setEnabled(true);
multiUserCaseRadioButton.setSelected(true);
} else {
@@ -26,6 +26,7 @@ import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.file.Paths;
import java.util.Map;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.logging.Level;
import javax.swing.JFrame;
@@ -36,7 +37,10 @@ import org.openide.modules.InstalledFileLocator;
import org.openide.util.NbBundle;
import org.openide.windows.WindowManager;
import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil;
import org.sleuthkit.autopsy.coreutils.ModuleSettings;
import org.sleuthkit.autopsy.coreutils.PlatformUtil;
import org.sleuthkit.autopsy.coreutils.TimeStampUtils;
import org.sleuthkit.datamodel.TskCoreException;
/**
@@ -46,6 +50,9 @@ import org.sleuthkit.datamodel.TskCoreException;
class UnpackagePortableCaseProgressDialog extends javax.swing.JDialog implements PropertyChangeListener {
private UnpackageWorker worker;
private final static String CASES_OPENED_LOG_FILE = "portable_cases_opened"; //NON-NLS
private final static String PORTABLE_CASE_NAME = "portable_case_name"; //NON-NLS
private final static String PORTABLE_CASE_DIR = "portable_case_dir_opened"; //NON-NLS
/**
* Creates new form UnpackagePortableCaseProgressDialog
@@ -142,10 +149,23 @@ class UnpackagePortableCaseProgressDialog extends javax.swing.JDialog implements
@NbBundle.Messages({
"UnpackageWorker.doInBackground.errorFinding7zip=Could not locate 7-Zip executable",
"UnpackageWorker.doInBackground.errorCompressingCase=Error unpackaging case",
"UnpackageWorker.doInBackground.canceled=Unpackaging canceled by user",})
"UnpackageWorker.doInBackground.canceled=Unpackaging canceled by user",
"UnpackageWorker.doInBackground.previousSeenCase=Case with name {0} has been previously opened do you want to open it again?"})
@Override
protected Void doInBackground() throws Exception {
// Check to see if this case has been already opened before
String caseUnpackedBefore = getCaseIfUnpackedBefore(packagedCase);
if ((!caseUnpackedBefore.isEmpty())
&& (MessageNotifyUtil.Message.confirm(Bundle.UnpackageWorker_doInBackground_previousSeenCase(packagedCase)))) {
try {
Case.openAsCurrentCase(caseUnpackedBefore);
success.set(true);
return null;
} catch (CaseActionException ex) {
throw new TskCoreException("Error opening case after unpacking it.", ex); // NON-NLS
}
}
// Find 7-Zip
File sevenZipExe = locate7ZipExecutable();
if (sevenZipExe == null) {
@@ -191,16 +211,27 @@ class UnpackagePortableCaseProgressDialog extends javax.swing.JDialog implements
setDisplayError(Bundle.UnpackageWorker_doInBackground_errorCompressingCase());
throw new TskCoreException("Error unpackaging case", ex); // NON-NLS
}
try {
String caseFileDirectory = FilenameUtils.getBaseName(packagedCase);
String caseDirectory = StringUtils.substringBefore(caseFileDirectory, ".zip");
Case.openAsCurrentCase(outputFolder + File.separator + caseDirectory + File.separator + caseDirectory + ".aut"); // NON-NLS
String caseFileToOpen = outputFolder + File.separator + caseDirectory + File.separator + caseDirectory + ".aut";
Case.openAsCurrentCase(caseFileToOpen); // NON-NLS
String timestampFileOpened = TimeStampUtils.createTimeStamp();
if (ModuleSettings.configExists(CASES_OPENED_LOG_FILE)) {
ModuleSettings.setConfigSetting(CASES_OPENED_LOG_FILE, timestampFileOpened + "-" + PORTABLE_CASE_NAME, packagedCase);
ModuleSettings.setConfigSetting(CASES_OPENED_LOG_FILE, timestampFileOpened + "-" + PORTABLE_CASE_DIR, caseFileToOpen);
} else {
ModuleSettings.makeConfigFile(CASES_OPENED_LOG_FILE);
ModuleSettings.setConfigSetting(CASES_OPENED_LOG_FILE, timestampFileOpened + "-" + PORTABLE_CASE_NAME, packagedCase);
ModuleSettings.setConfigSetting(CASES_OPENED_LOG_FILE, timestampFileOpened + "-" + PORTABLE_CASE_DIR, caseFileToOpen);
}
} catch (CaseActionException ex) {
throw new TskCoreException("Error opening case after unpacking it.", ex); // NON-NLS
}
success.set(true);
return null;
}
@@ -261,6 +292,33 @@ class UnpackagePortableCaseProgressDialog extends javax.swing.JDialog implements
return exeFile;
}
/**
* Check to see if the case has been unpacked before
*/
private String getCaseIfUnpackedBefore(String packedCaseName) {
if (!ModuleSettings.configExists(CASES_OPENED_LOG_FILE)) {
return "";
}
Map<String, String> configEntries = ModuleSettings.getConfigSettings(CASES_OPENED_LOG_FILE);
for (Map.Entry<String, String> entries : configEntries.entrySet()) {
if (entries.getValue().contains(packedCaseName)) {
String entryFound = entries.getKey().substring(0, entries.getKey().indexOf('-'));
String caseFileName = ModuleSettings.getConfigSetting(CASES_OPENED_LOG_FILE, entryFound + "-" + PORTABLE_CASE_DIR);
File caseFile = new File(caseFileName);
if (caseFile.exists()) {
return caseFileName;
} else {
return "";
}
}
}
return "";
}
}
/**
@@ -0,0 +1,73 @@
CTL_DataSourceSummaryAction=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u30b5\u30de\u30ea\u30fc
DataSourceSummaryCountsPanel.FilesByCategoryTableModel.all.row=\u3059\u3079\u3066
DataSourceSummaryCountsPanel.FilesByCategoryTableModel.allocated.row=\u5272\u308a\u5f53\u3066\u6e08\u307f
DataSourceSummaryCountsPanel.FilesByCategoryTableModel.count.header=\u30ab\u30a6\u30f3\u30c8
DataSourceSummaryCountsPanel.FilesByCategoryTableModel.directory.row=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc
DataSourceSummaryCountsPanel.FilesByCategoryTableModel.slack.row=Slack
DataSourceSummaryCountsPanel.FilesByCategoryTableModel.type.header=\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7
DataSourceSummaryCountsPanel.FilesByCategoryTableModel.unallocated.row=\u672a\u4f7f\u7528
DataSourceSummaryCountsPanel.FilesByMimeTypeTableModel.audio.row=\u97f3\u58f0
DataSourceSummaryCountsPanel.FilesByMimeTypeTableModel.count.header=\u30ab\u30a6\u30f3\u30c8
DataSourceSummaryCountsPanel.FilesByMimeTypeTableModel.documents.row=\u6587\u66f8
DataSourceSummaryCountsPanel.FilesByMimeTypeTableModel.executables.row=\u5b9f\u884c\u53ef\u80fd\u30d5\u30a1\u30a4\u30eb
DataSourceSummaryCountsPanel.FilesByMimeTypeTableModel.images.row=\u30a4\u30e1\u30fc\u30b8
DataSourceSummaryCountsPanel.FilesByMimeTypeTableModel.type.header=\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7
DataSourceSummaryCountsPanel.FilesByMimeTypeTableModel.videos.row=\u52d5\u753b
DataSourceSummaryDetailsPanel.getDataSources.error.text=\u73fe\u5728\u306e\u30b1\u30fc\u30b9\u306e\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u30ea\u30b9\u30c8\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
DataSourceSummaryDetailsPanel.getDataSources.error.title=\u8aad\u307f\u8fbc\u307f\u5931\u6557
DataSourceSummaryDetailsPanel.units.bytes=\ \u30d0\u30a4\u30c8
DataSourceSummaryDetailsPanel.units.gigabytes=\ GB
DataSourceSummaryDetailsPanel.units.kilobytes=\ kB
DataSourceSummaryDetailsPanel.units.megabytes=\ MB
DataSourceSummaryDetailsPanel.units.petabytes=\ PB
DataSourceSummaryDetailsPanel.units.terabytes=\ TB
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:
DataSourceSummaryDetailsPanel.sectorSizeLabel.text=\u30bb\u30af\u30bf\u30fc\u30b5\u30a4\u30ba:
DataSourceSummaryDetailsPanel.md5HashLabel.text=MD5:
DataSourceSummaryDetailsPanel.sha1HashLabel.text=SHA1:
DataSourceSummaryDetailsPanel.sha256HashLabel.text=SHA256:
DataSourceSummaryDetailsPanel.filePathsLabel.text=\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9:
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=
DataSourceSummaryDetailsPanel.sizeValue.text=
DataSourceSummaryDetailsPanel.sectorSizeValue.text=
DataSourceSummaryDetailsPanel.md5HashValue.toolTipText=
DataSourceSummaryDetailsPanel.md5HashValue.text=
DataSourceSummaryDetailsPanel.sha1HashValue.text=
DataSourceSummaryDetailsPanel.sha256HashValue.text=
DataSourceSummaryDetailsPanel.filePathsTable.columnModel.title0=
DataSourceSummaryDetailsPanel.acquisitionDetailsTextArea.text=
DataSourceSummaryDetailsPanel.acquisitionDetailsLabel.text=\u53d6\u5f97\u306e\u8a73\u7d30:
DataSourceSummaryDetailsPanel.unallocatedSizeLabel.text=\u672a\u4f7f\u7528\u9818\u57df:
DataSourceSummaryDetailsPanel.unallocatedSizeValue.text=
DataSourceSummaryCountsPanel.byMimeTypeLabel.text=MIME\u30bf\u30a4\u30d7\u5225\u30d5\u30a1\u30a4\u30eb
DataSourceSummaryCountsPanel.byCategoryLabel.text=\u30ab\u30c6\u30b4\u30ea\u30fc\u5225\u30d5\u30a1\u30a4\u30eb
DataSourceSummaryCountsPanel.jLabel1.text=\u30bf\u30a4\u30d7\u5225\u7d50\u679c
DataSourceSummaryDialog.countsTab.title=\u30ab\u30a6\u30f3\u30c8
DataSourceSummaryDialog.detailsTab.title=\u8a73\u7d30
DataSourceSummaryDialog.ingestHistoryTab.title=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u5c65\u6b74
DataSourceSummaryDialog.window.title=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u30b5\u30de\u30ea\u30fc
DataSourceSummaryNode.column.dataSourceName.header=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u540d
DataSourceSummaryNode.column.files.header=\u30d5\u30a1\u30a4\u30eb
DataSourceSummaryNode.column.results.header=\u7d50\u679c
DataSourceSummaryNode.column.status.header=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30b9\u30c6\u30fc\u30bf\u30b9
DataSourceSummaryNode.column.tags.header=\u30bf\u30b0
DataSourceSummaryNode.column.type.header=\u30bf\u30a4\u30d7
DataSourceSummaryNode.viewDataSourceAction.text=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u306b\u79fb\u52d5
ViewSummaryInformationAction.name.text=\u30b5\u30de\u30ea\u30fc\u60c5\u5831\u3092\u8868\u793a
@@ -0,0 +1,53 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2019 Basis Technology Corp.
* Contact: carrier <at> sleuthkit <dot> org
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.sleuthkit.autopsy.casemodule.events;
import java.io.Serializable;
import org.sleuthkit.autopsy.casemodule.Case;
import org.sleuthkit.autopsy.events.AutopsyEvent;
/**
* An application event that is published when a data source has been deleted.
*/
public class DataSourceDeletedEvent extends AutopsyEvent implements Serializable {
private static final long serialVersionUID = 1L;
private final long dataSourceID;
/**
* Constructs an application event that is published when a data source has
* been deleted.
*
* @param dataSourceId The object ID of the data source that was deleted.
*/
public DataSourceDeletedEvent(Long dataSourceId) {
super(Case.Events.DATA_SOURCE_DELETED.toString(), dataSourceId, null);
this.dataSourceID = dataSourceId;
}
/**
* Gets the object ID of the data source that was deleted.
*
* @return The data source id.
*/
public long getDataSourceId() {
return dataSourceID;
}
}
@@ -0,0 +1,12 @@
MultiUserCaseBrowserCustomizer.column.caseDbDeleteStatus=\u30b1\u30fc\u30b9\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u524a\u9664\u3057\u307e\u3057\u305f
MultiUserCaseBrowserCustomizer.column.caseDirDeleteStatus=\u30b1\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u3092\u524a\u9664\u3057\u307e\u3057\u305f
MultiUserCaseBrowserCustomizer.column.createTime=\u6642\u523b\u3092\u4f5c\u6210
MultiUserCaseBrowserCustomizer.column.dataSourcesDeleteStatus=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3092\u524a\u9664\u3057\u307e\u3057\u305f
MultiUserCaseBrowserCustomizer.column.directory=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc
MultiUserCaseBrowserCustomizer.column.displayName=\u540d\u524d
MultiUserCaseBrowserCustomizer.column.lastAccessTime=\u6700\u7d42\u30a2\u30af\u30bb\u30b9\u6642\u523b
MultiUserCaseBrowserCustomizer.column.manifestFileZNodesDeleteStatus=\u30de\u30cb\u30d5\u30a7\u30b9\u30c8Znode\u3092\u524a\u9664\u3057\u307e\u3057\u305f
MultiUserCaseBrowserCustomizer.column.textIndexDeleteStatus=\u30c6\u30ad\u30b9\u30c8\u7d22\u5f15\u3092\u524a\u9664\u3057\u307e\u3057\u305f
MultiUserCaseNode.column.createTime=False
MultiUserCaseNode.columnValue.true=True
MultiUserCasesBrowserPanel.waitNode.message=\u304a\u5f85\u3061\u304f\u3060\u3055\u3044...
@@ -1,3 +1,31 @@
TagsManager.predefTagNames.bookmark.text=\u30d6\u30c3\u30af\u30de\u30fc\u30af
Blackboard.unableToIndexArtifact.error.msg=blackboard\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8{0}\u3092\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
TagOptionsPanel.ingestRunningWarningLabel.text=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u3092\u5b9f\u884c\u4e2d\u306b\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u5b9a\u7fa9\u3092\u5909\u66f4\u3067\u304d\u307e\u305b\u3093\uff01
OptionsCategory_Name_TagNamesOptions=\u30bf\u30b0
OptionsCategory_TagNames=TagNames
TagNameDefinition.predefTagNames.bookmark.text=\u30d6\u30c3\u30af\u30de\u30fc\u30af
TagNameDefinition.predefTagNames.followUp.text=\u30d5\u30a9\u30ed\u30fc\u30a2\u30c3\u30d7
TagNameDefinition.predefTagNames.notableItem.text=\u9855\u8457\u306a\u9805\u76ee
TagNameDialog.descriptionLabel.text=\u8a18\u8ff0:
TagNameDialog.editTitle.text=\u30bf\u30b0\u3092\u7de8\u96c6
TagNameDialog.JOptionPane.tagDescriptionIllegalCharacters.message=\u30bf\u30b0\u306e\u8a18\u8ff0\u306b\u30ab\u30f3\u30de(,)\u3084\u30bb\u30df\u30b3\u30ed\u30f3(;)\u3092\u542b\u3081\u3089\u308c\u307e\u305b\u3093
TagNameDialog.JOptionPane.tagDescriptionIllegalCharacters.title=\u30bf\u30b0\u306e\u8a18\u8ff0\u306b\u7121\u52b9\u306a\u6587\u5b57\u304c\u3042\u308a\u307e\u3059
TagNameDialog.notableCheckbox.text=\u30bf\u30b0\u306f\u9805\u76ee\u304c\u9855\u8457\u3067\u3042\u308b\u3068\u793a\u5506\u3057\u3066\u3044\u307e\u3059\u3002
TagNameDialog.title.text=\u65b0\u898f\u30bf\u30b0
TagNameDialog.JOptionPane.tagNameIllegalCharacters.message=\u30bf\u30b0\u540d\u306b\u6b21\u306e\u8a18\u53f7\u3092\u542b\u3081\u3089\u308c\u307e\u305b\u3093: \\ : * ? " < > | , ;
TagNameDialog.JOptionPane.tagNameIllegalCharacters.title=\u30bf\u30b0\u540d\u306b\u7121\u52b9\u306a\u6587\u5b57\u304c\u3042\u308a\u307e\u3059
TagNameDialog.JOptionPane.tagNameEmpty.message=\u30bf\u30b0\u540d\u306f\u7a7a(\u672a\u5165\u529b)\u306e\u72b6\u614b\u306b\u3067\u304d\u307e\u305b\u3093\u3002
TagNameDialog.JOptionPane.tagNameEmpty.title=\u7a7a(\u672a\u5165\u529b)\u306e\u72b6\u614b\u306e\u30bf\u30b0\u540d
TagOptionsPanel.descriptionLabel.text=\u30bf\u30b0\u306e\u8a18\u8ff0:
TagOptionsPanel.editTagNameButton.text=\u30bf\u30b0\u3092\u7de8\u96c6
TagOptionsPanel.ingestRunningWarningLabel.text=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u5b9f\u884c\u4e2d\u306f\u65e2\u5b58\u306e\u30bf\u30b0\u3092\u5909\u66f4\u3067\u304d\u307e\u305b\u3093!
TagOptionsPanel.isNotableLabel.text=\u30bf\u30b0\u306f\u9805\u76ee\u304c\u9855\u8457\u3067\u3042\u308b\u3068\u793a\u5506\u3057\u3066\u3044\u307e\u3059:
TagOptionsPanel.notableYesOrNoLabel.text=
TagOptionsPanel.panelDescriptionTextArea.text=\u30bf\u30b0\u3092\u4f5c\u6210\u3057\u3066\u7ba1\u7406\u3057\u307e\u3059\u3002\u30bf\u30b0\u3092\u30b1\u30fc\u30b9\u306e\u30d5\u30a1\u30a4\u30eb\u3068\u7d50\u679c\u306b\u9069\u7528\u3067\u304d\u307e\u3059\u3002\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u306e\u4f7f\u7528\u4e2d\u3001\u9855\u8457\u306a\u30bf\u30b0\u3067\u30bf\u30b0\u4ed8\u3051\u3055\u308c\u305f\u9805\u76ee\u306b\u9855\u8457\u3068\u30d5\u30e9\u30b0\u304c\u7acb\u3066\u3089\u308c\u307e\u3059\u3002\u30bf\u30b0\u306e\u30b9\u30c6\u30fc\u30bf\u30b9\u5909\u66f4\u306f\u73fe\u5728\u306e\u30b1\u30fc\u30b9\u306e\u9805\u76ee\u306b\u306e\u307f\u5f71\u97ff\u3057\u307e\u3059\u3002
TagOptionsPanel.TagNameDialog.tagNameAlreadyExists.message=\u30bf\u30b0\u540d\u306f\u4e00\u610f\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002\u3053\u306e\u540d\u524d\u306e\u30bf\u30b0\u306f\u3059\u3067\u306b\u5b58\u5728\u3057\u307e\u3059\u3002
TagOptionsPanel.TagNameDialog.tagNameAlreadyExists.title=\u30bf\u30b0\u540d\u3092\u8907\u88fd
TagOptionsPanel.tagTypesListLabel.text=\u30bf\u30b0\u540d:
TagOptionsPanel.deleteTagNameButton.text=\u30bf\u30b0\u3092\u524a\u9664
TagOptionsPanel.newTagNameButton.text=\u65b0\u898f\u30bf\u30b0
TagNameDialog.okButton.text=OK
TagNameDialog.cancelButton.text=\u53d6\u308a\u6d88\u3057
TagNameDialog.tagNameTextField.text=
TagNameDialog.newTagNameLabel.text=\u540d\u524d:
TagsManager.notableTagEnding.text=\ (\u9855\u8457)
@@ -103,8 +103,8 @@ public class Services implements Closeable {
/**
* Closes the services for the current case.
*
* @throws IOException if there is a problem closing the services.
* @deprecated Do not use.
* @throws IOException if there is a problem closing the services.
* @deprecated Do not use.
*/
@Deprecated
@Override
@@ -0,0 +1,53 @@
DataContentViewerOtherCases.caseDetailsDialog.noCaseNameError=\u30a8\u30e9\u30fc
DataContentViewerOtherCases.caseDetailsDialog.noDetails=\u3053\u306e\u30b1\u30fc\u30b9\u306e\u8a73\u7d30\u306f\u3042\u308a\u307e\u305b\u3093\u3002
DataContentViewerOtherCases.caseDetailsDialog.noDetailsReference=\u30b0\u30ed\u30fc\u30d0\u30eb\u30ec\u30d5\u30a1\u30ec\u30f3\u30b9\u30d7\u30ed\u30d1\u30c6\u30a3\u306e\u30b1\u30fc\u30b9\u8a73\u7d30\u306f\u3042\u308a\u307e\u305b\u3093\u3002
DataContentViewerOtherCases.caseDetailsDialog.notSelected=\u884c\u304c\u9078\u629e\u3055\u308c\u3066\u3044\u307e\u305b\u3093
# {0} - \u5171\u6709\u6027\u306e\u5272\u5408
# {1} - \u76f8\u95a2\u5206\u6790\u30bf\u30a4\u30d7
# {2} - \u76f8\u95a2\u5206\u6790\u5024
DataContentViewerOtherCases.correlatedArtifacts.byType=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u306e {0}% \u306b {2} \u304c\u3042\u308a\u307e\u3059(\u30bf\u30a4\u30d7: {1})\n
DataContentViewerOtherCases.correlatedArtifacts.failed=\u983b\u5ea6\u306e\u8a73\u7d30\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
DataContentViewerOtherCases.correlatedArtifacts.isEmpty=\u76f8\u95a2\u5206\u6790\u3059\u308b\u305f\u3081\u306e\u30d5\u30a1\u30a4\u30eb\u3084\u904e\u53bb\u306e\u691c\u7d22\u7d50\u679c\u304c\u3042\u308a\u307e\u305b\u3093\u3002
DataContentViewerOtherCases.correlatedArtifacts.title=\u5c5e\u6027\u983b\u5ea6
DataContentViewerOtherCases.dataSources.header.text=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u540d
DataContentViewerOtherCases.earliestCaseNotAvailable=\ \u6709\u52b9\u306b\u306a\u3063\u3066\u3044\u307e\u305b\u3093\u3002
DataContentViewerOtherCases.foundIn.text=%d \u306e\u30b1\u30fc\u30b9\u3068 %d \u306e\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u5185\u306b %d \u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f\u3002
DataContentViewerOtherCases.noOpenCase.errMsg=\u958b\u3044\u3066\u3044\u308b\u30b1\u30fc\u30b9\u306f\u3042\u308a\u307e\u305b\u3093\u3002
DataContentViewerOtherCases.showCaseDetailsMenuItem.text=\u30b1\u30fc\u30b9\u8a73\u7d30\u3092\u8868\u793a
DataContentViewerOtherCases.table.noArtifacts=\u9805\u76ee\u306b\u691c\u7d22\u306b\u5229\u7528\u3067\u304d\u308b\u5c5e\u6027\u306f\u3042\u308a\u307e\u305b\u3093\u3002
DataContentViewerOtherCases.table.noResultsFound=\u8a72\u5f53\u3059\u308b\u7d50\u679c\u304c\u3042\u308a\u307e\u305b\u3093\u3002
DataContentViewerOtherCases.table.toolTip.text=\u5217\u540d\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u30bd\u30fc\u30c8\u3057\u307e\u3059\u3002\u30c6\u30fc\u30d6\u30eb\u3092\u53f3\u30af\u30ea\u30c3\u30af\u3057\u3066\u3055\u3089\u306a\u308b\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u8868\u793a\u3057\u307e\u3059\u3002
DataContentViewerOtherCases.exportToCSVMenuItem.text=\u305d\u306e\u4ed6\u3059\u3079\u3066\u306e\u767a\u751f\u3092CSV\u306b\u30a8\u30af\u30b9\u30dd\u30fc\u30c8
DataContentViewerOtherCases.showCommonalityMenuItem.text=\u983b\u5ea6\u3092\u8868\u793a
DataContentViewerOtherCases.earliestCaseDate.text=\u6700\u3082\u53e4\u3044\u30b1\u30fc\u30b9\u65e5\u4ed8
DataContentViewerOtherCases.earliestCaseLabel.toolTipText=
DataContentViewerOtherCases.earliestCaseLabel.text=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u958b\u59cb\u65e5:
DataContentViewerOtherCases.foundInLabel.text=
DataContentViewerOtherCases.title=\u305d\u306e\u4ed6\u306e\u767a\u751f
DataContentViewerOtherCases.toolTip=\u305d\u306e\u4ed6\u306e\u767a\u751f\u304b\u3089\u9078\u629e\u3057\u305f\u30d5\u30a1\u30a4\u30eb/\u904e\u53bb\u306e\u691c\u7d22\u7d50\u679c\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u8868\u793a\u3057\u307e\u3059\u3002
DataContentViewerOtherCasesModel.csvHeader.attribute=\u4e00\u81f4\u3057\u305f\u5c5e\u6027
DataContentViewerOtherCasesModel.csvHeader.case=\u30b1\u30fc\u30b9
DataContentViewerOtherCasesModel.csvHeader.comment=\u30b3\u30e1\u30f3\u30c8
DataContentViewerOtherCasesModel.csvHeader.dataSource=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9
DataContentViewerOtherCasesModel.csvHeader.device=\u30c7\u30d0\u30a4\u30b9
DataContentViewerOtherCasesModel.csvHeader.known=\u65e2\u77e5
DataContentViewerOtherCasesModel.csvHeader.path=\u30d1\u30b9
DataContentViewerOtherCasesModel.csvHeader.value=\u5c5e\u6027\u5024
OccurrencePanel.caseCreatedDateLabel.text=\u4f5c\u6210\u65e5:
OccurrencePanel.caseDetails.text=\u30b1\u30fc\u30b9\u8a73\u7d30
OccurrencePanel.caseNameLabel.text=\u540d\u524d:
OccurrencePanel.commonProperties.text=\u5171\u901a\u306e\u30d7\u30ed\u30d1\u30c6\u30a3
OccurrencePanel.commonPropertyCommentLabel.text=\u30b3\u30e1\u30f3\u30c8:
OccurrencePanel.commonPropertyKnownStatusLabel.text=\u65e2\u77e5\u306e\u30b9\u30c6\u30fc\u30bf\u30b9:
OccurrencePanel.commonPropertyTypeLabel.text=\u30bf\u30a4\u30d7:
OccurrencePanel.commonPropertyValueLabel.text=\u5024:
OccurrencePanel.dataSourceDetails.text=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u8a73\u7d30
OccurrencePanel.dataSourceNameLabel.text=\u540d\u524d:
OccurrencePanel.fileDetails.text=\u30d5\u30a1\u30a4\u30eb\u8a73\u7d30
OccurrencePanel.filePathLabel.text=\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9:
OtherOccurrencesCasesTableModel.case=\u30b1\u30fc\u30b9
OtherOccurrencesCasesTableModel.noData=\u30c7\u30fc\u30bf\u304c\u3042\u308a\u307e\u305b\u3093\u3002
OtherOccurrencesDataSourcesTableModel.dataSourceName=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u540d
OtherOccurrencesDataSourcesTableModel.noData=\u30c7\u30fc\u30bf\u304c\u3042\u308a\u307e\u305b\u3093\u3002
OtherOccurrencesFilesTableModel.fileName=\u30d5\u30a1\u30a4\u30eb\u540d
OtherOccurrencesFilesTableModel.noData=\u30c7\u30fc\u30bf\u304c\u3042\u308a\u307e\u305b\u3093\u3002
@@ -2269,6 +2269,45 @@ abstract class AbstractSqlEamDb implements EamDb {
EamDbUtil.closeConnection(conn);
}
}
/**
* Process a SELECT query
*
* @param selectClause query string to execute
* @param instanceTableCallback callback to process the instance
*
* @throws EamDbException
*/
@Override
public void processSelectClause(String selectClause, InstanceTableCallback instanceTableCallback) throws EamDbException {
if (instanceTableCallback == null) {
throw new EamDbException("Callback interface is null");
}
if (selectClause == null) {
throw new EamDbException("Select clause is null");
}
Connection conn = connect();
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
StringBuilder sql = new StringBuilder(300);
sql.append("select ")
.append(selectClause);
try {
preparedStatement = conn.prepareStatement(sql.toString());
resultSet = preparedStatement.executeQuery();
instanceTableCallback.process(resultSet);
} catch (SQLException ex) {
throw new EamDbException("Error running query", ex);
} finally {
EamDbUtil.closeStatement(preparedStatement);
EamDbUtil.closeResultSet(resultSet);
EamDbUtil.closeConnection(conn);
}
}
@Override
public EamOrganization newOrganization(EamOrganization eamOrg) throws EamDbException {
@@ -3298,10 +3337,10 @@ abstract class AbstractSqlEamDb implements EamDb {
try {
minorVersion = Integer.parseInt(minorVersionStr);
} catch (NumberFormatException ex) {
throw new EamDbException(Bundle.AbstractSqlEamDb_badMinorSchema_message(minorVersionStr), ex);
throw new EamDbException("Bad value for schema minor version (" + minorVersionStr + ") - database is corrupt", Bundle.AbstractSqlEamDb_badMinorSchema_message(minorVersionStr), ex);
}
} else {
throw new EamDbException(Bundle.AbstractSqlEamDb_failedToReadMinorVersion_message());
throw new EamDbException("Failed to read schema minor version from db_info table", Bundle.AbstractSqlEamDb_failedToReadMinorVersion_message());
}
int majorVersion = 0;
@@ -3312,10 +3351,10 @@ abstract class AbstractSqlEamDb implements EamDb {
try {
majorVersion = Integer.parseInt(majorVersionStr);
} catch (NumberFormatException ex) {
throw new EamDbException(Bundle.AbstractSqlEamDb_badMajorSchema_message(majorVersionStr), ex);
throw new EamDbException("Bad value for schema version (" + majorVersionStr + ") - database is corrupt", Bundle.AbstractSqlEamDb_badMajorSchema_message(majorVersionStr), ex);
}
} else {
throw new EamDbException(Bundle.AbstractSqlEamDb_failedToReadMajorVersion_message());
throw new EamDbException("Failed to read schema major version from db_info table", Bundle.AbstractSqlEamDb_failedToReadMajorVersion_message());
}
/*
@@ -3393,7 +3432,7 @@ abstract class AbstractSqlEamDb implements EamDb {
addObjectIdIndexTemplate = SqliteEamDbSettings.getAddObjectIdIndexTemplate();
break;
default:
throw new EamDbException(Bundle.AbstractSqlEamDb_cannotUpgrage_message(selectedPlatform.name()));
throw new EamDbException("Currently selected database platform \"" + selectedPlatform.name() + "\" can not be upgraded.", Bundle.AbstractSqlEamDb_cannotUpgrage_message(selectedPlatform.name()));
}
final String dataSourcesTableName = "data_sources";
final String dataSourceObjectIdColumnName = "datasource_obj_id";
@@ -3553,7 +3592,7 @@ abstract class AbstractSqlEamDb implements EamDb {
statement.execute("DROP TABLE old_data_sources");
break;
default:
throw new EamDbException(Bundle.AbstractSqlEamDb_cannotUpgrage_message(selectedPlatform.name()));
throw new EamDbException("Currently selected database platform \"" + selectedPlatform.name() + "\" can not be upgraded.", Bundle.AbstractSqlEamDb_cannotUpgrage_message(selectedPlatform.name()));
}
}
updateSchemaVersion(conn);
@@ -39,6 +39,7 @@ EamDbUtil.centralRepoUpgradeFailed.message=Failed to upgrade Central Repository.
EamDbUtil.exclusiveLockAquisitionFailure.message=Unable to acquire exclusive lock for Central Repository.
PostgresEamDb.centralRepoDisabled.message=Central Repository module is not enabled.
PostgresEamDb.connectionFailed.message=Error getting connection to database.
PostgresEamDb.multiUserLockError.message=Error acquiring database lock
SqliteEamDb.centralRepositoryDisabled.message=Central Repository module is not enabled.
SqliteEamDb.connectionFailedMessage.message=Error getting connection to database.
SqliteEamDb.databaseMissing.message=Central repository database missing
@@ -277,10 +277,10 @@ public class CorrelationAttributeInstance implements Serializable {
* @param enabled Is this Type currently enabled.
*/
@Messages({"CorrelationAttributeInstance.nullName.message=Database name is null.",
"CorrelationAttributeInstance.invalidName.message=Invalid database table name. Name must start with a lowercase letter and can only contain lowercase letters, numbers, and '_'."})
"CorrelationAttributeInstance.invalidName.message=Invalid database table name. Name must start with a lowercase letter and can only contain lowercase letters, numbers, and '_'."})
public Type(int typeId, String displayName, String dbTableName, Boolean supported, Boolean enabled) throws EamDbException {
if (dbTableName == null) {
throw new EamDbException(Bundle.CorrelationAttributeInstance_nullName_message());
throw new EamDbException("dbTableName is null", Bundle.CorrelationAttributeInstance_nullName_message());
}
this.typeId = typeId;
this.displayName = displayName;
@@ -288,7 +288,7 @@ public class CorrelationAttributeInstance implements Serializable {
this.supported = supported;
this.enabled = enabled;
if (!Pattern.matches(DB_NAMES_REGEX, dbTableName)) {
throw new EamDbException(Bundle.CorrelationAttributeInstance_invalidName_message()); // NON-NLS
throw new EamDbException("Invalid database table name. Name must start with a lowercase letter and can only contain lowercase letters, numbers, and '_'.", Bundle.CorrelationAttributeInstance_invalidName_message()); // NON-NLS
}
}
@@ -794,4 +794,13 @@ public interface EamDb {
*/
void processInstanceTableWhere(CorrelationAttributeInstance.Type type, String whereClause, InstanceTableCallback instanceTableCallback) throws EamDbException;
/**
* Process a SELECT query
*
* @param selectClause query string to execute
* @param instanceTableCallback callback to process the instance
*
* @throws EamDbException
*/
public void processSelectClause(String selectClause, InstanceTableCallback instanceTableCallback) throws EamDbException;
}
@@ -1,7 +1,7 @@
/*
* Central Repository
*
* Copyright 2015-2017 Basis Technology Corp.
* Copyright 2015-2019 Basis Technology Corp.
* Contact: carrier <at> sleuthkit <dot> org
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -18,10 +18,12 @@
*/
package org.sleuthkit.autopsy.centralrepository.datamodel;
/*
import org.sleuthkit.autopsy.exceptions.AutopsyException;
/**
* An exception to be thrown by an artifact manager.
*/
public class EamDbException extends Exception {
public class EamDbException extends AutopsyException {
private static final long serialVersionUID = 1L;
@@ -34,6 +36,28 @@ public class EamDbException extends Exception {
super(message);
}
/**
* Constructs an exception to be thrown by an artifact manager with a user exception.
*
* @param message Exception message.
* @param userMessage the user friendly message to include in this exception
*/
public EamDbException(String message, String userMessage) {
super(message, userMessage);
}
/**
* Constructs an exception to be thrown by an artifact manager with a user
* exception.
*
* @param message Exception message.
* @param userMessage the user friendly message to include in this exception
* @param cause Exception cause.
*/
public EamDbException(String message, String userMessage, Throwable cause) {
super(message, userMessage, cause);
}
/**
* Constructs an exception to be thrown by an artifact manager.
*
@@ -181,32 +181,39 @@ public class EamDbUtil {
}
EamDb db = null;
CoordinationService.Lock lock = null;
String messageForDialog = "";
//get connection
try {
db = EamDb.getInstance();
} catch (EamDbException ex) {
LOGGER.log(Level.SEVERE, "Error updating central repository, unable to make connection", ex);
messageForDialog = Bundle.EamDbUtil_centralRepoConnectionFailed_message() + Bundle.EamDbUtil_centralRepoDisabled_message();
}
//get lock necessary for upgrade
if (db != null) {
try {
// This may return null if locking isn't supported, which is fine. It will
// throw an exception if locking is supported but we can't get the lock
// (meaning the database is in use by another user)
lock = db.getExclusiveMultiUserDbLock();
//perform upgrade
db = EamDb.getInstance();
} catch (EamDbException ex) {
LOGGER.log(Level.SEVERE, "Error updating central repository, unable to make connection", ex);
throw new EamDbException("Error updating central repository, unable to make connection", Bundle.EamDbUtil_centralRepoConnectionFailed_message() + Bundle.EamDbUtil_centralRepoDisabled_message(), ex);
}
//get lock necessary for upgrade
if (db != null) {
try {
// This may return null if locking isn't supported, which is fine. It will
// throw an exception if locking is supported but we can't get the lock
// (meaning the database is in use by another user)
lock = db.getExclusiveMultiUserDbLock();
//perform upgrade
} catch (EamDbException ex) {
LOGGER.log(Level.SEVERE, "Error updating central repository, unable to acquire exclusive lock", ex);
throw new EamDbException("Error updating central repository, unable to acquire exclusive lock", Bundle.EamDbUtil_exclusiveLockAquisitionFailure_message() + Bundle.EamDbUtil_centralRepoDisabled_message(), ex);
}
try {
db.upgradeSchema();
} catch (EamDbException | SQLException | IncompatibleCentralRepoException ex) {
} catch (EamDbException ex) {
LOGGER.log(Level.SEVERE, "Error updating central repository", ex);
messageForDialog = Bundle.EamDbUtil_centralRepoUpgradeFailed_message() + Bundle.EamDbUtil_centralRepoDisabled_message();
if (ex instanceof IncompatibleCentralRepoException) {
messageForDialog = ex.getMessage() + "\n\n" + messageForDialog;
} else if (ex instanceof EamDbException) {
messageForDialog = ex.getMessage() + Bundle.EamDbUtil_centralRepoDisabled_message();
}
throw new EamDbException("Error updating central repository", ex.getUserMessage() + Bundle.EamDbUtil_centralRepoDisabled_message(), ex);
} catch (SQLException ex) {
LOGGER.log(Level.SEVERE, "Error updating central repository", ex);
throw new EamDbException("Error updating central repository", Bundle.EamDbUtil_centralRepoUpgradeFailed_message() + Bundle.EamDbUtil_centralRepoDisabled_message(), ex);
} catch (IncompatibleCentralRepoException ex) {
LOGGER.log(Level.SEVERE, "Error updating central repository", ex);
throw new EamDbException("Error updating central repository", ex.getMessage() + "\n\n" + Bundle.EamDbUtil_centralRepoUpgradeFailed_message() + Bundle.EamDbUtil_centralRepoDisabled_message(), ex);
} finally {
if (lock != null) {
try {
@@ -216,16 +223,11 @@ public class EamDbUtil {
}
}
}
} catch (EamDbException ex) {
LOGGER.log(Level.SEVERE, "Error updating central repository, unable to acquire exclusive lock", ex);
messageForDialog = Bundle.EamDbUtil_exclusiveLockAquisitionFailure_message() + Bundle.EamDbUtil_centralRepoDisabled_message();
} else {
throw new EamDbException("Unable to connect to database", Bundle.EamDbUtil_centralRepoConnectionFailed_message() + Bundle.EamDbUtil_centralRepoDisabled_message());
}
} else {
messageForDialog = Bundle.EamDbUtil_centralRepoConnectionFailed_message() + Bundle.EamDbUtil_centralRepoDisabled_message();
}
// Disable the central repo and clear the current settings.
if (!messageForDialog.isEmpty()) {
} catch (EamDbException ex) {
// Disable the central repo and clear the current settings.
try {
if (null != EamDb.getInstance()) {
EamDb.getInstance().shutdownConnections();
@@ -235,8 +237,7 @@ public class EamDbUtil {
}
EamDbPlatformEnum.setSelectedPlatform(EamDbPlatformEnum.DISABLED.name());
EamDbPlatformEnum.saveSelectedPlatform();
throw new EamDbException(messageForDialog);
throw ex;
}
}
@@ -190,7 +190,7 @@ final class PostgresEamDb extends AbstractSqlEamDb {
protected Connection connect() throws EamDbException {
synchronized (this) {
if (!EamDb.isEnabled()) {
throw new EamDbException(Bundle.PostgresEamDb_centralRepoDisabled_message()); // NON-NLS
throw new EamDbException("Central Repository module is not enabled", Bundle.PostgresEamDb_centralRepoDisabled_message()); // NON-NLS
}
if (connectionPool == null) {
@@ -200,7 +200,7 @@ final class PostgresEamDb extends AbstractSqlEamDb {
try {
return connectionPool.getConnection();
} catch (SQLException ex) {
throw new EamDbException(Bundle.PostgresEamDb_connectionFailed_message(), ex); // NON-NLS
throw new EamDbException("Error getting connection from connection pool.", Bundle.PostgresEamDb_connectionFailed_message(), ex); // NON-NLS
}
}
@@ -221,6 +221,7 @@ final class PostgresEamDb extends AbstractSqlEamDb {
* to get the lock
*/
@Override
@Messages({"PostgresEamDb.multiUserLockError.message=Error acquiring database lock"})
public CoordinationService.Lock getExclusiveMultiUserDbLock() throws EamDbException {
try {
// First check if multi user mode is enabled - if not there's no point trying to get a lock
@@ -234,9 +235,9 @@ final class PostgresEamDb extends AbstractSqlEamDb {
if (lock != null) {
return lock;
}
throw new EamDbException("Error acquiring database lock");
throw new EamDbException("Error acquiring database lock", Bundle.PostgresEamDb_multiUserLockError_message());
} catch (InterruptedException ex) {
throw new EamDbException("Error acquiring database lock");
throw new EamDbException("Error acquiring database lock", Bundle.PostgresEamDb_multiUserLockError_message(), ex);
} catch (CoordinationService.CoordinationServiceException ex) {
// This likely just means the coordination service isn't running, which is ok
return null;
@@ -158,7 +158,7 @@ final class SqliteEamDb extends AbstractSqlEamDb {
private void setupConnectionPool(boolean foreignKeysEnabled) throws EamDbException {
if (dbSettings.dbFileExists() == false) {
throw new EamDbException(Bundle.SqliteEamDb_databaseMissing_message());
throw new EamDbException("Central repository database missing", Bundle.SqliteEamDb_databaseMissing_message());
}
connectionPool = new BasicDataSource();
@@ -194,7 +194,7 @@ final class SqliteEamDb extends AbstractSqlEamDb {
protected Connection connect(boolean foreignKeys) throws EamDbException {
synchronized (this) {
if (!EamDb.isEnabled()) {
throw new EamDbException(Bundle.SqliteEamDb_centralRepositoryDisabled_message()); // NON-NLS
throw new EamDbException("Central repository database missing", Bundle.SqliteEamDb_centralRepositoryDisabled_message()); // NON-NLS
}
if (connectionPool == null) {
setupConnectionPool(foreignKeys);
@@ -202,7 +202,7 @@ final class SqliteEamDb extends AbstractSqlEamDb {
try {
return connectionPool.getConnection();
} catch (SQLException ex) {
throw new EamDbException(Bundle.SqliteEamDb_connectionFailedMessage_message(), ex); // NON-NLS
throw new EamDbException("Error getting connection from connection pool.", Bundle.SqliteEamDb_connectionFailedMessage_message(), ex); // NON-NLS
}
}
}
@@ -810,6 +810,24 @@ final class SqliteEamDb extends AbstractSqlEamDb {
}
}
/**
* Process a SELECT query
*
* @param selectClause query string to execute
* @param instanceTableCallback callback to process the instance
*
* @throws EamDbException
*/
@Override
public void processSelectClause(String selectClause, InstanceTableCallback instanceTableCallback) throws EamDbException {
try {
acquireSharedLock();
super.processSelectClause(selectClause, instanceTableCallback);
} finally {
releaseSharedLock();
}
}
/**
* Check whether a reference set with the given name/version is in the
* central repo. Used to check for name collisions when creating reference
@@ -224,6 +224,7 @@ public class IngestEventsListener {
* in the central repository.
*
* @param originalArtifact the artifact to create the interesting item for
* @param caseDisplayNames the case names the artifact was previously seen in
*/
@NbBundle.Messages({"IngestEventsListener.prevExists.text=Previously Seen Devices (Central Repository)",
"# {0} - typeName",
@@ -64,7 +64,7 @@ public class Installer extends ModuleInstall {
if (RuntimeProperties.runningWithGUI()) {
WindowManager.getDefault().invokeWhenUIReady(() -> {
JOptionPane.showMessageDialog(null,
ex.getMessage(),
ex.getUserMessage(),
NbBundle.getMessage(this.getClass(),
"Installer.centralRepoUpgradeFailed.title"),
JOptionPane.ERROR_MESSAGE);
@@ -1,13 +1,12 @@
CentralRepoIngestModel_name_header=Name:<br>
CentralRepoIngestModel_previous_case_header=<br>Previous Cases:<br>
CentralRepoIngestModule.errorMessage.isNotEnabled=Central repository settings are not initialized, cannot run Correlation Engine ingest module.
CentralRepoIngestModule.notfyBubble.title=Central Repository Not Initialized
CentralRepoIngestModule.postToBB.eamHit=Central Repository
CentralRepoIngestModule.postToBB.fileName=File Name
CentralRepoIngestModule.postToBB.hashSetSource=Source of Hash
# {0} - Name of file that is Notable
CentralRepoIngestModule.postToBB.knownBadMsg=Notable: {0}
CentralRepoIngestModule.postToBB.md5Hash=MD5 Hash
CentralRepoIngestModule.prevCaseComment.text=Previous Case:
CentralRepoIngestModule.prevTaggedSet.text=Previously Tagged As Notable (Central Repository)
CentralRepoIngestModule_notable_message_header=<html>A file in this data source was previously seen and tagged as Notable.<br>
# {0} - Name of file that is Notable
CentralRepoIngestModule_postToBB_knownBadMsg=Notable: {0}
CentralRepoIngestModuleFactory.ingestmodule.desc=Saves properties to the central repository for later correlation
CentralRepoIngestModuleFactory.ingestmodule.name=Correlation Engine
IngestSettingsPanel.ingestSettingsLabel.text=Ingest Settings
@@ -18,7 +18,6 @@
*/
package org.sleuthkit.autopsy.centralrepository.ingestmodule;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
@@ -54,7 +53,6 @@ import org.sleuthkit.datamodel.BlackboardAttribute;
import static org.sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE.TSK_COMMENT;
import static org.sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE.TSK_SET_NAME;
import org.sleuthkit.datamodel.HashUtility;
import org.sleuthkit.datamodel.SleuthkitCase;
import org.sleuthkit.datamodel.TskCoreException;
import org.sleuthkit.datamodel.TskData;
@@ -276,7 +274,7 @@ final class CentralRepoIngestModule implements FileIngestModule {
// Don't allow sqlite central repo databases to be used for multi user cases
if ((autopsyCase.getCaseType() == Case.CaseType.MULTI_USER_CASE)
&& (EamDbPlatformEnum.getSelectedPlatform() == EamDbPlatformEnum.SQLITE)) {
&& (EamDbPlatformEnum.getSelectedPlatform() == EamDbPlatformEnum.SQLITE)) {
logger.log(Level.SEVERE, "Cannot run correlation engine on a multi-user case with a SQLite central repository.");
throw new IngestModuleException("Cannot run on a multi-user case with a SQLite central repository."); // NON-NLS
}
@@ -302,7 +300,7 @@ final class CentralRepoIngestModule implements FileIngestModule {
} catch (EamDbException ex) {
throw new IngestModuleException("Unable to get case from central repository database ", ex);
}
try {
eamDataSource = CorrelationDataSource.fromTSKDataSource(eamCase, context.getDataSource());
} catch (EamDbException ex) {
@@ -313,7 +311,7 @@ final class CentralRepoIngestModule implements FileIngestModule {
// if we are the first thread / module for this job, then make sure the case
// and image exist in the DB before we associate artifacts with it.
if (refCounter.incrementAndGet(jobId)
== 1) {
== 1) {
// ensure we have this data source in the EAM DB
try {
if (null == centralRepoDb.getDataSource(eamCase, eamDataSource.getDataSourceObjectID())) {
@@ -355,7 +353,7 @@ final class CentralRepoIngestModule implements FileIngestModule {
logger.log(Level.SEVERE, "Unable to index blackboard artifact " + tifArtifact.getArtifactID(), ex); //NON-NLS
}
// send inbox message
sendBadFileInboxMessage(tifArtifact, abstractFile.getName(), abstractFile.getMd5Hash());
sendBadFileInboxMessage(tifArtifact, abstractFile.getName(), abstractFile.getMd5Hash(), caseDisplayNames);
}
} catch (TskCoreException ex) {
logger.log(Level.SEVERE, "Failed to create BlackboardArtifact.", ex); // NON-NLS
@@ -364,50 +362,32 @@ final class CentralRepoIngestModule implements FileIngestModule {
}
}
@Messages({
"CentralRepoIngestModule_notable_message_header=<html>A file in this data source was previously seen and tagged as Notable.<br>",
"CentralRepoIngestModel_name_header=Name:<br>",
"CentralRepoIngestModel_previous_case_header=<br>Previous Cases:<br>",
"# {0} - Name of file that is Notable",
"CentralRepoIngestModule_postToBB_knownBadMsg=Notable: {0}"
})
/**
* Post a message to the ingest inbox alerting the user that a bad file was
* found.
*
* @param artifact badFile Blackboard Artifact
* @param name badFile's name
* @param md5Hash badFile's md5 hash
* @param artifact badFile Blackboard Artifact
* @param name badFile's name
* @param md5Hash badFile's md5 hash
* @param caseDisplayNames List of cases that the artifact appears in.
*/
@Messages({"CentralRepoIngestModule.postToBB.fileName=File Name",
"CentralRepoIngestModule.postToBB.md5Hash=MD5 Hash",
"CentralRepoIngestModule.postToBB.hashSetSource=Source of Hash",
"CentralRepoIngestModule.postToBB.eamHit=Central Repository",
"# {0} - Name of file that is Notable",
"CentralRepoIngestModule.postToBB.knownBadMsg=Notable: {0}"})
public void sendBadFileInboxMessage(BlackboardArtifact artifact, String name, String md5Hash) {
StringBuilder detailsSb = new StringBuilder();
//details
detailsSb.append("<table border='0' cellpadding='4' width='280'>"); //NON-NLS
//hit
detailsSb.append("<tr>"); //NON-NLS
detailsSb.append("<th>") //NON-NLS
.append(Bundle.CentralRepoIngestModule_postToBB_fileName())
.append("</th>"); //NON-NLS
detailsSb.append("<td>") //NON-NLS
.append(name)
.append("</td>"); //NON-NLS
detailsSb.append("</tr>"); //NON-NLS
detailsSb.append("<tr>"); //NON-NLS
detailsSb.append("<th>") //NON-NLS
.append(Bundle.CentralRepoIngestModule_postToBB_md5Hash())
.append("</th>"); //NON-NLS
detailsSb.append("<td>").append(md5Hash).append("</td>"); //NON-NLS
detailsSb.append("</tr>"); //NON-NLS
detailsSb.append("<tr>"); //NON-NLS
detailsSb.append("<th>") //NON-NLS
.append(Bundle.CentralRepoIngestModule_postToBB_hashSetSource())
.append("</th>"); //NON-NLS
detailsSb.append("<td>").append(Bundle.CentralRepoIngestModule_postToBB_eamHit()).append("</td>"); //NON-NLS
detailsSb.append("</tr>"); //NON-NLS
detailsSb.append("</table>"); //NON-NLS
private void sendBadFileInboxMessage(BlackboardArtifact artifact, String name, String md5Hash, List<String> caseDisplayNames) {
StringBuilder detailsSb = new StringBuilder(1024);
detailsSb.append(Bundle.CentralRepoIngestModule_notable_message_header()).append(Bundle.CentralRepoIngestModel_name_header());
detailsSb.append(name).append(Bundle.CentralRepoIngestModel_previous_case_header());
for (String str : caseDisplayNames) {
detailsSb.append(str).append("<br>");
}
detailsSb.append("</html>");
services.postMessage(IngestMessage.createDataMessage(CentralRepoIngestModuleFactory.getModuleName(),
Bundle.CentralRepoIngestModule_postToBB_knownBadMsg(name),
detailsSb.toString(),
@@ -33,7 +33,7 @@ EamDbSettingsDialog.validation.finished=Click OK to save your database settings
EamDbSettingsDialog.validation.incompleteFields=Fill in all values for the selected database.
EamOptionsController.moduleErr=Error processing value changes.
EamOptionsController.moduleErr.msg=Value change processing failed.
GlobalSettingsPanel.updateFailed.title=Central repository upgrade failed
GlobalSettingsPanel.updateFailed.title=Central repository disabled
GlobalSettingsPanel.validationErrMsg.ingestRunning=You cannot change settings while ingest is running.
GlobalSettingsPanel.validationerrMsg.mustConfigure=Configure the database to enable this module.
ManageCasesDialog.title.text=Manage Cases
@@ -0,0 +1,145 @@
AddNewOrganizationDialog.addNewOrg.msg=\u65b0\u898f\u7d44\u7e54\u3092\u8ffd\u52a0
AddNewOrganizationDialog.bnOk.addFailed.text=\u65b0\u898f\u7d44\u7e54\u3092\u8ffd\u52a0\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
AddNewOrganizationDialog.validation.incompleteFields=\u7d44\u7e54\u540d\u304c\u5fc5\u8981\u3067\u3059\u3002
CasesTableModel.case=\u30b1\u30fc\u30b9\u540d
CasesTableModel.creationDate=\u4f5c\u6210\u65e5
CasesTableModel.noData=\u30b1\u30fc\u30b9\u306f\u3042\u308a\u307e\u305b\u3093
DataSourcesTableModel.dataSource=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u540d
DataSourcesTableModel.deviceId=\u30c7\u30d0\u30a4\u30b9ID
DataSourcesTableModel.noData=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u306f\u3042\u308a\u307e\u305b\u3093
EamDbSettingsDialog.chooserPath.failedToGetDbPathMsg=\u9078\u629e\u3057\u305f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306f\u7121\u52b9\u3067\u3059\u3002\u3082\u3046\u4e00\u5ea6\u304a\u8a66\u3057\u304f\u3060\u3055\u3044\u3002
EamDbSettingsDialog.fcDatabasePath.title=central_repository.db\u306e\u5834\u6240\u3092\u9078\u629e
EamDbSettingsDialog.lbDatabaseType.text=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30bf\u30a4\u30d7 :
EamDbSettingsDialog.lbSingleUserSqLite.text=SQLite\u306f\u4e00\u5ea6\u306b1\u4eba\u306e\u8abf\u67fb\u54e1\u306e\u307f\u304c\u4f7f\u7528\u3057\u307e\u3059\u3002
EamDbSettingsDialog.okButton.connectionErrorMsg.text=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u30fb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u63a5\u7d9a\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
EamDbSettingsDialog.okButton.corruptDatabaseExists.message=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306f\u5b58\u5728\u3057\u307e\u3059\u304c\u3001\u6b63\u3057\u3044\u5f62\u5f0f\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u624b\u52d5\u3067\u524a\u9664\u3059\u308b\u304b\u5225\u306e\u30d1\u30b9\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044(\u5fc5\u8981\u306b\u5fdc\u3058\u3066)\u3002
EamDbSettingsDialog.okButton.corruptDatabaseExists.title=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u8aad\u307f\u8fbc\u307f\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f
EamDbSettingsDialog.okButton.createDbDialog.message=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306f\u5b58\u5728\u3057\u307e\u305b\u3093\u3002\u4f5c\u6210\u3057\u307e\u3059\u304b?
EamDbSettingsDialog.okButton.createDbDialog.title=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306f\u5b58\u5728\u3057\u307e\u305b\u3093
EamDbSettingsDialog.okButton.createDbError.title=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093
EamDbSettingsDialog.okButton.createPostgresDbError.message=Postgres\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3002Postgres\u30b5\u30fc\u30d0\u30fc\u306e\u30a2\u30c9\u30ec\u30b9\u3001\u30dd\u30fc\u30c8\u3001\u30ed\u30b0\u30a4\u30f3\u8cc7\u683c\u60c5\u5831\u304c\u6b63\u3057\u3044\u304b\u78ba\u8a8d\u3057\u3066\u304b\u3089\u3082\u3046\u4e00\u5ea6\u304a\u8a66\u3057\u304f\u3060\u3055\u3044\u3002
EamDbSettingsDialog.okButton.createSQLiteDbError.message=SQLite\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3002\u5834\u6240\u304c\u5b58\u5728\u3057\u3001\u66f8\u304d\u8fbc\u307f\u6a29\u9650\u304c\u3042\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304b\u3089\u3082\u3046\u4e00\u5ea6\u304a\u8a66\u3057\u304f\u3060\u3055\u3044\u3002
EamDbSettingsDialog.okButton.databaseConnectionFailed.message=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u63a5\u7d9a\u3067\u304d\u307e\u305b\u3093\u3002\u8a2d\u5b9a\u3092\u78ba\u8a8d\u3057\u3066\u304b\u3089\u3082\u3046\u4e00\u5ea6\u304a\u8a66\u3057\u304f\u3060\u3055\u3044\u3002
EamDbSettingsDialog.okButton.databaseConnectionFailed.title=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u63a5\u7d9a\u306b\u5931\u6557\u3057\u307e\u3057\u305f
EamDbSettingsDialog.okButton.errorMsg.text=Autopsy\u3092\u518d\u8d77\u52d5\u3057\u3066\u3001\u65b0\u898f\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u306e\u4f7f\u7528\u3092\u958b\u59cb\u3057\u3066\u304f\u3060\u3055\u3044\u3002
EamDbSettingsDialog.okButton.errorTitle.text=\u518d\u8d77\u52d5\u304c\u5fc5\u8981\u3067\u3059\u3002
EamDbSettingsDialog.textPrompt.dbName=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u540d
EamDbSettingsDialog.textPrompt.hostnameOrIP=\u30db\u30b9\u30c8\u540d\u307e\u305f\u306fIP\u30a2\u30c9\u30ec\u30b9
EamDbSettingsDialog.textPrompt.password=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30e6\u30fc\u30b6\u30fc\u306e\u30d1\u30b9\u30ef\u30fc\u30c9
EamDbSettingsDialog.textPrompt.port=\u30dd\u30fc\u30c8\u756a\u53f7
EamDbSettingsDialog.textPrompt.user=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30e6\u30fc\u30b6\u30fc
EamDbSettingsDialog.title.text=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u30fb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u69cb\u6210
EamDbSettingsDialog.validation.finished=[OK] \u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u8a2d\u5b9a\u3092\u4fdd\u5b58\u3057\u3001[\u30aa\u30d7\u30b7\u30e7\u30f3] \u306b\u623b\u308a\u307e\u3059\u3002\u3042\u308b\u3044\u306f\u3001\u5225\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30bf\u30a4\u30d7\u3092\u9078\u629e\u3057\u307e\u3059\u3002
EamDbSettingsDialog.validation.incompleteFields=\u9078\u629e\u3057\u305f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u3059\u3079\u3066\u306e\u5024\u3092\u5165\u529b\u3057\u307e\u3059\u3002
EamOptionsController.moduleErr=\u5024\u306e\u5909\u66f4\u3092\u51e6\u7406\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
EamOptionsController.moduleErr.msg=\u5024\u306e\u5909\u66f4\u306e\u51e6\u7406\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002
GlobalSettingsPanel.updateFailed.title=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u306e\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u306b\u5931\u6557\u3057\u307e\u3057\u305f
GlobalSettingsPanel.validationErrMsg.ingestRunning=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u5b9f\u884c\u4e2d\u306f\u8a2d\u5b9a\u3092\u5909\u66f4\u3067\u304d\u307e\u305b\u3093\u3002
GlobalSettingsPanel.validationerrMsg.mustConfigure=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u69cb\u6210\u3057\u3066\u3053\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u6709\u52b9\u5316\u3057\u307e\u3059\u3002
ManageCasesDialog.title.text=\u30b1\u30fc\u30b9\u3092\u7ba1\u7406
ManageCorrelationPropertiesDialog.noneSelected=\u76f8\u95a2\u5206\u6790\u30d7\u30ed\u30d1\u30c6\u30a3\u304c\u6709\u52b9\u306b\u306a\u3063\u3066\u3044\u307e\u305b\u3093\u3002
ManageCorrelationPropertiesDialog.okbutton.failure=\u66f4\u65b0\u3057\u305f\u9078\u629e\u306e\u4fdd\u5b58\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
ManageCorrelationPropertiesDialog.title=\u76f8\u95a2\u5206\u6790\u30d7\u30ed\u30d1\u30c6\u30a3\u3092\u7ba1\u7406
ManageOrganizationsDialog.closeButton.text=\u9589\u3058\u308b
ManageOrganizationsDialog.confirmDeletion.message=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u304b\u3089\u9078\u629e\u3057\u305f\u7d44\u7e54\u3092\u524a\u9664\u3057\u3066\u3082\u672c\u5f53\u306b\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
ManageOrganizationsDialog.confirmDeletion.title=\u524a\u9664\u3092\u78ba\u5b9a
ManageOrganizationsDialog.deleteButton.text=\u524a\u9664
ManageOrganizationsDialog.editButton.text=\u7de8\u96c6
ManageOrganizationsDialog.newButton.text=\u65b0\u898f
ManageOrganizationsDialog.orgDescriptionTextArea.text=\u7d44\u7e54\u306f\u3001\u95a2\u9023\u4ed8\u3051\u3089\u308c\u3066\u3044\u308b\u8ffd\u52a0\u306e\u9023\u7d61\u5148\u60c5\u5831\u3092\u63d0\u4f9b\u3059\u308b\u969b\u306b\u4f7f\u7528\u3057\u307e\u3059\u3002
ManageOrganizationsDialog.orgDetailsLabel.text=\u7d44\u7e54\u8a73\u7d30
ManageOrganizationsDialog.orgListLabel.text=\u7d44\u7e54
ManageOrganizationsDialog.orgNameLabel.text=\u7d44\u7e54\u540d:
ManageOrganizationsDialog.pocEmailLabel.text=\u9023\u7d61\u5148\u306e\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9:
ManageOrganizationsDialog.pocNameLabel.text=\u9023\u7d61\u5148\u540d:
ManageOrganizationsDialog.pocPhoneLabel.text=\u9023\u7d61\u5148\u306e\u96fb\u8a71\u756a\u53f7:
ManageOrganizationsDialog.title.text=\u7d44\u7e54\u3092\u7ba1\u7406
ManageOrganizationsDialog.unableToDeleteOrg.message=\u9078\u629e\u3057\u305f\u7d44\u7e54\u3092\u524a\u9664\u3067\u304d\u307e\u305b\u3093\u3002
ManageOrganizationsDialog.unableToDeleteOrg.title=\u524a\u9664\u3067\u304d\u307e\u305b\u3093
OptionsCategory_Name_Central_Repository_Options=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc
OptionsCategory_Keywords_Central_Repository_Options=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u8a2d\u5b9a
ImportHashDatabaseDialog.known.text=\u65e2\u77e5
ImportHashDatabaseDialog.knownBad.text=\u9855\u8457
EamPostgresSettingsDialog.lbUserPassword.text=\u30e6\u30fc\u30b6\u30fc\u30d1\u30b9\u30ef\u30fc\u30c9 :
EamPostgresSettingsDialog.lbUserName.text=\u30e6\u30fc\u30b6\u30fc\u540d :
EamPostgresSettingsDialog.bnCancel.text=\u53d6\u308a\u6d88\u3057
EamPostgresSettingsDialog.lbPort.text=\u30dd\u30fc\u30c8 :
EamPostgresSettingsDialog.lbHostName.text=\u30db\u30b9\u30c8\u540d / IP :
EamPostgresSettingsDialog.bnTestConnection.text=\u30c6\u30b9\u30c8\u63a5\u7d9a
EamPostgresSettingsDialog.lbDatabaseName.text=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u540d :
EamSqliteSettingsDialog.bnCancel.text=\u53d6\u308a\u6d88\u3057
EamSqliteSettingsDialog.lbTestDatabase.text=
EamSqliteSettingsDialog.bnTestDatabase.text=\u30c6\u30b9\u30c8\u63a5\u7d9a
EamSqliteSettingsDialog.lbTestDatabaseWarning.text=
EamSqliteSettingsDialog.bnDatabasePathFileOpen.text=\u53c2\u7167...
EamSqliteSettingsDialog.tfDatabasePath.toolTipText=SQLite db\u30d5\u30a1\u30a4\u30eb\u306b\u683c\u7d0d\u3059\u308b\u30d5\u30a1\u30a4\u30eb\u540d\u3068\u30d1\u30b9
EamSqliteSettingsDialog.tfDatabasePath.text=
EamSqliteSettingsDialog.lbDatabasePath.text=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30d1\u30b9 :
ImportHashDatabaseDialog.tfDatabaseName.tooltip=\u3053\u306e\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306e\u540d\u524d
ImportHashDatabaseDialog.tfDatabaseVersion.tooltip.text=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u756a\u53f7
ImportHashDatabaseDialog.tfDatabaseName.tooltip=\u3053\u306e\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306e\u540d\u524d
ImportHashDatabaseDialog.tfDatabaseVersion.tooltip.text=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u756a\u53f7
GlobalSettingsPanel.tbOops.text=
GlobalSettingsPanel.lbDatabaseSettings.text=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u8a2d\u5b9a
GlobalSettingsPanel.bnImportDatabase.label=\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u3092\u30a4\u30f3\u30dd\u30fc\u30c8
AddNewOrganizationDialog.lbPocPhone.text=\u96fb\u8a71\u756a\u53f7:
AddNewOrganizationDialog.lbPocEmail.text=\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9:
AddNewOrganizationDialog.lbPocName.text=\u540d\u524d:
AddNewOrganizationDialog.lbPocHeading.text=\u9023\u7d61\u5148:
AddNewOrganizationDialog.lbOrganizationName.text=\u7d44\u7e54\u540d:
AddNewOrganizationDialog.bnCancel.text=\u53d6\u308a\u6d88\u3057
AddNewOrganizationDialog.bnOK.text=OK
AddNewOrganizationDialog.tfName.tooltip=POC\u540d
ManageTagsDialog.okButton.text=OK
ManageTagsDialog.cancelButton.text=\u53d6\u308a\u6d88\u3057
ManageArtifactTypesDialog.taInstructionsMsg.text=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u4e2d\u306e\u76f8\u95a2\u5206\u6790\u306b\u4f7f\u7528\u3059\u308b\u76f8\u95a2\u5206\u6790\u30d7\u30ed\u30d1\u30c6\u30a3\u30921\u3064\u4ee5\u4e0a\u6709\u52b9\u5316\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u306f\u30b0\u30ed\u30fc\u30d0\u30eb\u3067\u3042\u308b\u305f\u3081\u3001\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u306e\u3059\u3079\u3066\u306e\u30e6\u30fc\u30b6\u30fc\u306b\u5f71\u97ff\u3057\u307e\u3059\u3002
EamSqliteSettingsDialog.bnOk.text=OK
EamPostgresSettingsDialog.bnSave.text=\u4fdd\u5b58
EamDbSettingsDialog.bnDatabasePathFileOpen.text=\u53c2\u7167...
EamDbSettingsDialog.tfDatabasePath.toolTipText=SQLite db\u30d5\u30a1\u30a4\u30eb\u306b\u683c\u7d0d\u3059\u308b\u30d5\u30a1\u30a4\u30eb\u540d\u3068\u30d1\u30b9
EamDbSettingsDialog.tfDatabasePath.text=
EamDbSettingsDialog.lbDatabasePath.text=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30d1\u30b9 :
EamDbSettingsDialog.bnCancel.text=\u53d6\u308a\u6d88\u3057
EamDbSettingsDialog.bnOk.text=OK
EamDbSettingsDialog.lbHostName.text=\u30db\u30b9\u30c8\u540d / IP :
EamDbSettingsDialog.lbUserPassword.text=\u30e6\u30fc\u30b6\u30fc\u30d1\u30b9\u30ef\u30fc\u30c9 :
EamDbSettingsDialog.lbUserName.text=\u30e6\u30fc\u30b6\u30fc\u540d :
EamDbSettingsDialog.lbPort.text=\u30dd\u30fc\u30c8 :
GlobalSettingsPanel.pnDatabaseConfiguration.title=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u69cb\u6210
GlobalSettingsPanel.lbDbPlatformTypeLabel.text=\u30bf\u30a4\u30d7:
GlobalSettingsPanel.lbDbNameLabel.text=\u540d\u524d:
GlobalSettingsPanel.bnDbConfigure.text=\u69cb\u6210
GlobalSettingsPanel.lbDbLocationLabel.text=\u5834\u6240:
ManageCorrelationPropertiesDialog.lbWarningMsg.text=\u8b66\u544a\u30e1\u30c3\u30bb\u30fc\u30b8
ManageCorrelationPropertiesDialog.cancelButton.text=\u53d6\u308a\u6d88\u3057
ManageCorrelationPropertiesDialog.okButton.text=OK
GlobalSettingsPanel.bnManageProperties.text=\u76f8\u95a2\u5206\u6790\u30d7\u30ed\u30d1\u30c6\u30a3\u3092\u7ba1\u7406
EamDbSettingsDialog.lbDatabaseDesc.text=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb:
EamDbSettingsDialog.lbFullDbPath.text=
GlobalSettingsPanel.cbUseCentralRepo.text=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u3092\u4f7f\u7528
GlobalSettingsPanel.organizationTextArea.text=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u5185\u3067\u7d44\u7e54\u60c5\u5831\u3092\u8ffd\u8de1\u3067\u304d\u307e\u3059\u3002
GlobalSettingsPanel.manageOrganizationButton.text=\u7d44\u7e54\u3092\u7ba1\u7406
GlobalSettingsPanel.lbCentralRepository.text=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u3092\u4f7f\u7528\u3059\u308b\u3068\u3001\u30b1\u30fc\u30b9\u9593\u306e\u30d5\u30a1\u30a4\u30eb\u3068\u7d50\u679c\u3092\u76f8\u95a2\u5206\u6790\u3067\u304d\u307e\u3059\u3002\u30b1\u30fc\u30b9\u304c\u958b\u3044\u3066\u3044\u308b\u9593\u306f\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u69cb\u6210\u3092\u4fee\u6b63\u3067\u304d\u307e\u305b\u3093\u3002
GlobalSettingsPanel.pnCorrelationProperties.border.title=\u76f8\u95a2\u5206\u6790\u30d7\u30ed\u30d1\u30c6\u30a3
GlobalSettingsPanel.organizationPanel.border.title=\u7d44\u7e54
GlobalSettingsPanel.casesPanel.border.title=\u30b1\u30fc\u30b9\u8a73\u7d30
GlobalSettingsPanel.showCasesButton.text=\u30b1\u30fc\u30b9\u3092\u7ba1\u7406
ShowCasesDialog.closeButton.AccessibleContext.accessibleName=\u9589\u3058\u308b
ShowCasesDialog.closeButton.actionCommand=\u9589\u3058\u308b
ShowCasesDialog.closeButton.text=\u9589\u3058\u308b
ShowCasesDialog.caseDetailsTable.toolTipText=\u5217\u540d\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u30bd\u30fc\u30c8\u3057\u307e\u3059\u3002\u30c6\u30fc\u30d6\u30eb\u3092\u53f3\u30af\u30ea\u30c3\u30af\u3057\u3066\u3055\u3089\u306a\u308b\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u8868\u793a\u3057\u307e\u3059\u3002
ShowCasesDialog.title=\u30b1\u30fc\u30b9\u8a73\u7d30
GlobalSettingsPanel.Case\ Details.AccessibleContext.accessibleName=\u30b1\u30fc\u30b9\u8a73\u7d30
ShowCasesDialog.caseDetailsTable.AccessibleContext.accessibleDescription=\u5217\u540d\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u30bd\u30fc\u30c8\u3057\u307e\u3059\u3002
GlobalSettingsPanel.casesTextArea.text=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u306e\u30b1\u30fc\u30b9\u8a73\u7d30\u3092\u4e00\u89a7\u8868\u793a\u3059\u308b\u30c6\u30fc\u30d6\u30eb\u3092\u8868\u793a\u3057\u307e\u3059\u3002
GlobalSettingsPanel.ingestRunningWarningLabel.text=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u5b9f\u884c\u4e2d\u306f\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u8a2d\u5b9a\u3092\u5909\u66f4\u3067\u304d\u307e\u305b\u3093!
GlobalSettingsPanel.correlationPropertiesTextArea.text=\u5f8c\u3067\u76f8\u95a2\u5206\u6790\u3067\u304d\u308b\u3088\u3046\u3001\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u306b\u3069\u306e\u30d5\u30a1\u30a4\u30eb\u3068\u7d50\u679c\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u3092\u4fdd\u7ba1\u3059\u308b\u304b\u9078\u629e\u3057\u307e\u3059\u3002\n
ManageCasesDialog.examinerPhoneLabel.text=\u8abf\u67fb\u54e1\u306e\u96fb\u8a71\u756a\u53f7:
ManageCasesDialog.examinerNameLabel.text=\u8abf\u67fb\u54e1\u540d:
ManageCasesDialog.examinerEmailLabel.text=\u8abf\u67fb\u54e1\u306e\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9:
ManageCasesDialog.caseNumberLabel.text=\u30b1\u30fc\u30b9\u756a\u53f7:
ManageCasesDialog.orgLabel.text=\u7d44\u7e54:
ManageCasesDialog.closeButton.text=\u9589\u3058\u308b
ManageCasesDialog.notesLabel.text=\u5099\u8003:
ManageCasesDialog.dataSourcesLabel.text=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9:
ManageCasesDialog.caseInfoLabel.text=\u30b1\u30fc\u30b9\u60c5\u5831:
@@ -77,7 +77,7 @@ public final class GlobalSettingsPanel extends IngestModuleGlobalSettingsPanel i
ingestStateUpdated(Case.isCaseOpen());
}
@Messages({"GlobalSettingsPanel.updateFailed.title=Central repository upgrade failed"})
@Messages({"GlobalSettingsPanel.updateFailed.title=Central repository disabled"})
private void updateDatabase() {
if (EamDbPlatformEnum.getSelectedPlatform().equals(DISABLED)) {
@@ -91,7 +91,7 @@ public final class GlobalSettingsPanel extends IngestModuleGlobalSettingsPanel i
} catch (EamDbException ex) {
setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
JOptionPane.showMessageDialog(this,
ex.getMessage(),
ex.getUserMessage(),
NbBundle.getMessage(this.getClass(),
"GlobalSettingsPanel.updateFailed.title"),
JOptionPane.WARNING_MESSAGE);
@@ -0,0 +1,17 @@
OpenIDE-Module-Name=CommandLineAutopsy
OptionsCategory_Keywords_Command_Line_Ingest_Settings=\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u8a2d\u5b9a
OptionsCategory_Keywords_General=\u30aa\u30d7\u30b7\u30e7\u30f3
OptionsCategory_Name_Command_Line_Ingest=\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8
CommandLineIngestSettingsPanel.ResultsDirectoryUnspecified=\u51fa\u529b\u30d5\u30a9\u30eb\u30c0\u30fc\u3092\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059
AutopsyOptionsPanel.agencyLogoPathFieldValidationLabel.invalidPath.text=\u30d1\u30b9\u306f\u6709\u52b9\u3067\u306f\u3042\u308a\u307e\u305b\u3093
CommandLineIngestSettingsPanel.CannotAccess=\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u305b\u3093
CommandLineIngestSettingsPanel.CheckPermissions=\u30a2\u30af\u30bb\u30b9\u6a29\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002
CommandLineIngestSettingsPanel.jLabelSelectOutputFolder.text=\u51fa\u529b\u30d5\u30a9\u30eb\u30c0\u30fc\u3092\u9078\u629e:
CommandLineIngestSettingsPanel.jLabelInvalidResultsFolder.text=jLabelInvalidOutputFolder
CommandLineIngestSettingsPanel.outputPathTextField.toolTipText=\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u51e6\u7406\u7528\u306e\u51fa\u529b\u30d5\u30a9\u30eb\u30c0\u30fc(\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u51e6\u7406\u30e2\u30fc\u30c9\u3067\u30b1\u30fc\u30b9\u30d5\u30a9\u30eb\u30c0\u30fc\u304c\u4f5c\u6210\u3055\u308c\u308b\u5834\u6240)\u3067\u3059\u3002
CommandLineIngestSettingsPanel.outputPathTextField.text=
CommandLineIngestSettingsPanel.browseOutputFolderButton.text=\u53c2\u7167
CommandLineIngestSettingsPanel.bnEditIngestSettings.toolTipText=\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u51e6\u7406\u30e2\u30fc\u30c9\u306e\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u306e\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30b8\u30e7\u30d6\u8a2d\u5b9a\u3067\u3059\u3002
CommandLineIngestSettingsPanel.bnEditIngestSettings.text=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u8a2d\u5b9a
CommandLinePanel.jLabel1.text=\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u304b\u3089\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u3092\u5b9f\u884c\u4e2d\u3067\u3059
CommandLineStartupWindow.title.text=\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30e2\u30fc\u30c9\u3067\u5b9f\u884c\u4e2d\u3067\u3059
@@ -0,0 +1,116 @@
AbstractCommonFilesMetadataBuilder.buildCategorySelectionString.all=\u3059\u3079\u3066\u306e\u30d5\u30a1\u30a4\u30eb\u30ab\u30c6\u30b4\u30ea\u30fc
AbstractCommonFilesMetadataBuilder.buildCategorySelectionString.doc=\u6587\u66f8
AbstractCommonFilesMetadataBuilder.buildCategorySelectionString.media=\u30e1\u30c7\u30a3\u30a2
# {0} - \u3057\u304d\u3044\u5024\u306e\u30d1\u30fc\u30bb\u30f3\u30c6\u30fc\u30b8
AbstractCommonFilesMetadataBuilder.getPercentFilter.thresholdPercent=, \u3057\u304d\u3044\u5024 {0}%
# {0} - \u5c5e\u6027\u30bf\u30a4\u30d7
# {1} - \u3057\u304d\u3044\u5024\u306e\u6587\u5b57\u5217
AllInterCaseCommonAttributeSearcher.buildTabTitle.titleInterAll=\u5171\u901a\u30d7\u30ed\u30d1\u30c6\u30a3(\u3059\u3079\u3066\u306e\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u30b1\u30fc\u30b9, {0}{1})
# {0} - \u30d3\u30eb\u30c9\u30ab\u30c6\u30b4\u30ea\u30fc
# {1} - \u3057\u304d\u3044\u5024\u306e\u6587\u5b57\u5217
AllIntraCaseCommonAttributeSearcher.buildTabTitle.titleIntraAll=\u5171\u901a\u30d7\u30ed\u30d1\u30c6\u30a3(\u3059\u3079\u3066\u306e\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9, {0}{1})
# {0} - \u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u6570
CommonAttributePanel.dataSourcesLabel.text=\u73fe\u5728\u306e\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u306b\u306f {0} \u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002
CommonAttributePanel.exception=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u306e\u8aad\u307f\u8fbc\u307f\u4e2d\u306b\u4e88\u671f\u305b\u306c\u4f8b\u5916\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
CommonAttributePanel.frame.title=\u5171\u901a\u30d7\u30ed\u30d1\u30c6\u30a3\u3092\u691c\u7d22
CommonAttributePanel.incompleteResults.continueText=\n\n \u305d\u308c\u3067\u3082\u3053\u306e\u691c\u7d22\u3092\u7d9a\u884c\u3057\u307e\u3059\u304b?
CommonAttributePanel.incompleteResults.introText=\u7d50\u679c\u306f\u4e0d\u5b8c\u5168\u3067\u3042\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u73fe\u5728\u306e\u30b1\u30fc\u30b9\u306e\u3059\u3079\u3066\u306e\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u304c\u73fe\u5728\u306e\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u306b\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u3055\u308c\u305f\u308f\u3051\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u6b21\u306e\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u304c\u51e6\u7406\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f:
CommonAttributePanel.incompleteResults.title=\u691c\u7d22\u306f\u4e0d\u5b8c\u5168\u3067\u3042\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059
CommonAttributePanel.intraCasePanel.title=\u73fe\u5728\u306e\u30b1\u30fc\u30b9\u30aa\u30d7\u30b7\u30e7\u30f3
CommonAttributePanel.search.done.exception=[\u5171\u901a\u30d7\u30ed\u30d1\u30c6\u30a3\u3092\u691c\u7d22] \u306e\u5b9f\u884c\u4e2d\u306b\u4e88\u671f\u305b\u306c\u4f8b\u5916\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
CommonAttributePanel.search.done.interupted=\u5171\u901a\u30d7\u30ed\u30d1\u30c6\u30a3\u3092\u691c\u7d22\u4e2d\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
CommonAttributePanel.search.done.noCurrentCaseException=\u30b1\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u3051\u307e\u305b\u3093\u3002
CommonAttributePanel.search.done.noResults=\u8a72\u5f53\u3059\u308b\u7d50\u679c\u304c\u3042\u308a\u307e\u305b\u3093\u3002
CommonAttributePanel.search.done.searchProgressDisplay=\u5171\u901a\u30d7\u30ed\u30d1\u30c6\u30a3\u306e\u691c\u7d22\u7d50\u679c\u3092\u8868\u793a\u4e2d\u3067\u3059\u3002
CommonAttributePanel.search.done.searchProgressGathering=\u5171\u901a\u30d7\u30ed\u30d1\u30c6\u30a3\u306e\u691c\u7d22\u7d50\u679c\u3092\u53ce\u96c6\u4e2d\u3067\u3059\u3002
CommonAttributePanel.search.done.sqlException=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u30af\u30a8\u30ea\u3057\u3066\u30d7\u30ed\u30d1\u30c6\u30a3\u307e\u305f\u306f\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3092\u691c\u7d22\u3067\u304d\u307e\u305b\u3093\u3002
CommonAttributePanel.search.done.tskCoreException=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u5bfe\u3057\u3066\u30af\u30a8\u30ea\u3092\u5b9f\u884c\u3067\u304d\u307e\u305b\u3093\u3002
CommonAttributePanel.search.results.pathText=\u5171\u901a\u30d7\u30ed\u30d1\u30c6\u30a3\u306e\u691c\u7d22\u7d50\u679c
CommonAttributePanel.setupCases.done.exeutionException=\u30b1\u30fc\u30b9\u306e\u8aad\u307f\u8fbc\u307f\u4e2d\u306b\u4e88\u671f\u305b\u306c\u4f8b\u5916\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
CommonAttributePanel.setupCases.done.interruptedException=[\u5171\u901a\u30d7\u30ed\u30d1\u30c6\u30a3\u3092\u691c\u7d22] \u30c0\u30a4\u30a2\u30ed\u30b0\u30dc\u30c3\u30af\u30b9\u306e\u4f5c\u6210\u4e2d\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
CommonAttributePanel.setupDataSources.done.exception=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u306e\u8aad\u307f\u8fbc\u307f\u4e2d\u306b\u4e88\u671f\u305b\u306c\u4f8b\u5916\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
CommonAttributePanel.setupDataSources.done.interupted=[\u5171\u901a\u30d7\u30ed\u30d1\u30c6\u30a3\u3092\u691c\u7d22] \u30c0\u30a4\u30a2\u30ed\u30b0\u30dc\u30c3\u30af\u30b9\u306e\u4f5c\u6210\u4e2d\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
CommonAttributePanel.setupDataSources.done.noCurrentCaseException=\u30b1\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u3051\u307e\u305b\u3093\u3002
CommonAttributePanel.setupDataSources.done.sqlException=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u30af\u30a8\u30ea\u3057\u3066\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3092\u691c\u7d22\u3067\u304d\u307e\u305b\u3093\u3002
CommonAttributePanel.setupDataSources.done.tskCoreException=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u5bfe\u3057\u3066\u30af\u30a8\u30ea\u3092\u5b9f\u884c\u3067\u304d\u307e\u305b\u3093\u3002
CommonAttributePanel.setupDataSources.updateUi.noDataSources=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002
CommonAttributePanel.title=[\u5171\u901a\u30d7\u30ed\u30d1\u30c6\u30a3] \u30d1\u30cd\u30eb
CommonAttributeSearchAction.getName.text=\u5171\u901a\u30d7\u30ed\u30d1\u30c6\u30a3\u3092\u691c\u7d22
CommonAttributeSearchAction.openPanel.caseNotInCentralRepo=\n - \u73fe\u5728\u306e\u30b1\u30fc\u30b9\u306f\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u306b\u5b58\u5728\u3057\u307e\u305b\u3093\u3002
CommonAttributeSearchAction.openPanel.centralRepoDisabled=\n - \u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u306f\u7121\u52b9\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002
CommonAttributeSearchAction.openPanel.centralRepoInvalid=\n - \u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u306e\u69cb\u6210\u306f\u7121\u52b9\u3067\u3059\u3002
CommonAttributeSearchAction.openPanel.intro=\u6b21\u306e\u7406\u7531\u306b\u3088\u308a\u3001\u5171\u901a\u30d7\u30ed\u30d1\u30c6\u30a3\u691c\u7d22\u6a5f\u80fd\u306f\u5229\u7528\u3067\u304d\u307e\u305b\u3093:
CommonAttributeSearchAction.openPanel.noCaseOpen=\n - \u30b1\u30fc\u30b9\u306f\u958b\u304b\u308c\u3066\u3044\u307e\u305b\u3093\u3002
CommonAttributeSearchAction.openPanel.notEnoughCases=\n - \u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u306b2\u3064\u4ee5\u4e0b\u306e\u30b1\u30fc\u30b9\u304c\u5b58\u5728\u3057\u307e\u3059\u3002
CommonAttributeSearchAction.openPanel.notEnoughDataSources=\n - \u73fe\u5728\u306e\u30b1\u30fc\u30b9\u306b\u8907\u6570\u306e\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u306f\u5b58\u5728\u3057\u307e\u305b\u3093\u3002
CommonAttributeSearchAction.openPanel.resolution=\n\n\u3053\u308c\u3089\u306e\u554f\u984c\u306e1\u3064\u306b\u5bfe\u51e6\u3057\u3066\u3001\u3053\u306e\u6a5f\u80fd\u3092\u6709\u52b9\u5316\u3057\u3066\u304f\u3060\u3055\u3044\u3002
CommonAttributeValueNode.CommonAttributeValueNode.format=\u5024: %s
CommonFilesNode.getName.text=\u5171\u901a\u30d5\u30a1\u30a4\u30eb
CommonFilesPanel.commonFilesSearchLabel.text=<html>\u73fe\u5728\u306e\u30b1\u30fc\u30b9\u306e\u8907\u6570\u306e\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3067\u30d5\u30a1\u30a4\u30eb\u3092\u691c\u7d22\u3057\u307e\u3059\u3002</html>
CommonFilesPanel.text=\u91cd\u8907\u306e\u691c\u7d22\u4e2d\u306b\u3069\u306e\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3092\u691c\u8a0e\u3059\u3079\u304d\u304b\u3092\u793a\u3057\u307e\u3059:
CommonFilesPanel.jRadioButton1.text=jRadioButton1
CommonFilesPanel.jRadioButton2.text=\u73fe\u5728\u306e\u30b1\u30fc\u30b9\u3068\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u306e\u30b1\u30fc\u30b9\u9593
CommonFilesPanel.intraCaseRadio.label=\u73fe\u5728\u306e\u30b1\u30fc\u30b9\u3067\u306e\u307f\u76f8\u95a2\u5206\u6790
CommonFilesPanel.interCaseRadio.label=\u65e2\u77e5\u306e\u30b1\u30fc\u30b9\u9593\u3067\u76f8\u95a2(\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u3092\u4f7f\u7528)
CommonFilesSearchResultsViewerTable.caseColLbl=\u30b1\u30fc\u30b9
CommonFilesSearchResultsViewerTable.dataSourceColLbl=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9
CommonFilesSearchResultsViewerTable.instancesColLbl=\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9
CommonFilesSearchResultsViewerTable.localPath=\u73fe\u5728\u306e\u30b1\u30fc\u30b9\u306e\u89aa\u30d1\u30b9
CommonFilesSearchResultsViewerTable.noDescText=\
CommonFilesSearchResultsViewerTable.pathColLbl=\u89aa\u30d1\u30b9
CommonFilesSearchResultsViewerTable.valueColLbl=\u5024
InstanceCountNode.createSheet.noDescription=\
InstanceCountNode.displayName=%s \u30c7\u30fc\u30bf\u30bd\u30fc\u30b9(%s)\u306b\u5b58\u5728
IntraCasePanel.selectDataSourceComboBox.actionCommand=
CommonAttributePanel.jCheckBox1.text=\u6b21\u306e\u7bc4\u56f2\u3067\u898b\u3064\u304b\u3063\u305f\u30d5\u30a1\u30a4\u30eb\u3092\u975e\u8868\u793a
CommonAttributePanel.jLabel1.text=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u306e% \u304c\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u306b\u5b58\u5728\u3057\u307e\u3059\u3002
CommonAttributePanel.percentageThresholdCheck.text_1=\u6b21\u306e\u7bc4\u56f2\u3067\u898b\u3064\u304b\u3063\u305f\u30d5\u30a1\u30a4\u30eb\u3092\u975e\u8868\u793a
CommonAttributePanel.jCheckBox1.text=\u6b21\u306e\u7bc4\u56f2\u3067\u898b\u3064\u304b\u3063\u305f\u30d5\u30a1\u30a4\u30eb\u3092\u975e\u8868\u793a
CommonAttributePanel.jLabel1.text=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u306e% \u304c\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u306b\u5b58\u5728\u3057\u307e\u3059\u3002
CommonAttributePanel.percentageThreshold.text=20
CommonAttributePanel.jLabel1.text_1=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u306e% \u304c\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u306b\u5b58\u5728\u3057\u307e\u3059\u3002
InterCasePanel.correlationTypeComboBox.toolTipText=\u9078\u629e\u3057\u305f\u76f8\u95a2\u5206\u6790\u30bf\u30a4\u30d7
IntraCasePanel.selectedFileCategoriesButton.text=\u9078\u629e\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u306e\u307f:
IntraCasePanel.categoriesLabel.text=\u8868\u793a\u3059\u308b\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7:
IntraCasePanel.allFileCategoriesRadioButton.toolTipText=\u7d50\u679c\u306b\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u304c\u9069\u7528\u3055\u308c\u3066\u3044\u307e\u305b\u3093...
IntraCasePanel.allFileCategoriesRadioButton.text=\u3059\u3079\u3066\u306e\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7
IntraCasePanel.documentsCheckbox.text=\u6587\u66f8
IntraCasePanel.pictureVideoCheckbox.text=\u5199\u771f\u3068\u52d5\u753b
IntraCasePanel.selectedFileCategoriesButton.toolTipText=\u4ee5\u4e0b\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u304b\u3089\u9078\u629e...
CommonAttributePanel.percentageThresholdTextTwo.text_1=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u306e% \u304c\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u306b\u5b58\u5728\u3057\u307e\u3059\u3002
CommonAttributePanel.percentageThresholdCheck.text_1_1=\u6b21\u306e\u7bc4\u56f2\u3067\u898b\u3064\u304b\u3063\u305f\u9805\u76ee\u3092\u975e\u8868\u793a
CommonAttributePanel.intraCaseRadio.text=\u73fe\u5728\u306e\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u9593
CommonAttributePanel.errorText.text=<html>\u691c\u7d22\u3059\u308b\u306b\u306f\u3001\u30d5\u30a1\u30a4\u30eb\u30ab\u30c6\u30b4\u30ea\u30fc\u3092\u9078\u629e\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002</html>
CommonAttributePanel.searchButton.text=\u691c\u7d22
InterCasePanel.categoriesLabel.text=\u8868\u793a\u3059\u308b\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7:
InterCasePanel.documentsCheckbox.text=\u6587\u66f8
InterCasePanel.pictureVideoCheckbox.text=\u5199\u771f\u3068\u52d5\u753b
InterCasePanel.selectedFileCategoriesButton.toolTipText=\u4ee5\u4e0b\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u304b\u3089\u9078\u629e...
InterCasePanel.selectedFileCategoriesButton.text=\u9078\u629e\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u306e\u307f:
InterCasePanel.allFileCategoriesRadioButton.toolTipText=\u7d50\u679c\u306b\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u304c\u9069\u7528\u3055\u308c\u3066\u3044\u307e\u305b\u3093...
InterCasePanel.allFileCategoriesRadioButton.text=\u3059\u3079\u3066\u306e\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7
InterCasePanel.specificCentralRepoCaseCheckbox.text=\u5171\u901a\u9805\u76ee\u306f\u7279\u5b9a\u306e\u30b1\u30fc\u30b9\u306b\u5b58\u5728\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059:
IntraCasePanel.onlySpecificDataSourceCheckbox.text=\u5171\u901a\u9805\u76ee\u306f\u7279\u5b9a\u306e\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u306b\u5b58\u5728\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059:
CommonAttributePanel.interCasePanel.border.title=\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u30aa\u30d7\u30b7\u30e7\u30f3
CommonAttributePanel.intraCasePanel.border.title=\u73fe\u5728\u306e\u30b1\u30fc\u30b9\u30aa\u30d7\u30b7\u30e7\u30f3
CommonAttributePanel.commonItemSearchDescription.text=<html>\u8907\u6570\u306e\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u307e\u305f\u306f\u30b1\u30fc\u30b9\u306b\u5b58\u5728\u3059\u308b\u9805\u76ee\u3092\u691c\u7d22</html>
CommonAttributePanel.scopeLabel.text=\u691c\u7d22\u7bc4\u56f2:
InterCasePanel.correlationComboBoxLabel.text=\u4e00\u81f4\u3059\u308b\u30d7\u30ed\u30d1\u30c6\u30a3\u30bf\u30a4\u30d7:
CommonAttributePanel.percentageThresholdInputBox.text=20
CommonAttributePanel.resultsDisplayLabel.text_2=\u6b21\u306b\u3088\u3063\u3066\u6574\u7406\u3055\u308c\u305f\u7d50\u679c\u3092\u8868\u793a:
CommonAttributePanel.organizeByCaseRadio.text=\u30b1\u30fc\u30b9
CommonAttributePanel.organizeByCountRadio.text=\u767a\u751f\u6570
CommonAttributePanel.caseResultsRadioButton.text=\u30b1\u30fc\u30b9
CommonAttributePanel.countResultsRadioButton.text=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u6570
CommonAttributePanel.displayResultsLabel.text_2=\u6b21\u306b\u3088\u3063\u3066\u6574\u7406\u3055\u308c\u305f\u7d50\u679c\u3092\u8868\u793a:
# {0} - \u30b1\u30fc\u30b9\u540d
# {1} - \u5c5e\u6027\u30bf\u30a4\u30d7
# {2} - \u3057\u304d\u3044\u5024\u306e\u6587\u5b57\u5217
SingleInterCaseCommonAttributeSearcher.buildTabTitle.titleInterSingle=\u5171\u901a\u30d7\u30ed\u30d1\u30c6\u30a3(\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u30b1\u30fc\u30b9: {0}, {1}{2})
# {0} - \u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u540d
# {1} - \u30d3\u30eb\u30c9\u30ab\u30c6\u30b4\u30ea\u30fc
# {2} - \u3057\u304d\u3044\u5024\u306e\u6587\u5b57\u5217
SingleIntraCaseCommonAttributeSearcher.buildTabTitle.titleIntraSingle=\u5171\u901a\u30d7\u30ed\u30d1\u30c6\u30a3(\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9: {0}, {1}{2})
UserInputErrorManager.categories=\u691c\u7d22\u306b\u30d5\u30a1\u30a4\u30eb\u30ab\u30c6\u30b4\u30ea\u30fc\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u305b\u3093\u3002
UserInputErrorManager.frequency=\u7121\u52b9\u306a\u983b\u5ea6\u306e\u5272\u5408: 0 < % < 100\u3002
ValueNode.createSheet.noDescription=\
@@ -0,0 +1,97 @@
AccountNode.accountName=\u30a2\u30ab\u30a6\u30f3\u30c8
AccountNode.accountType=\u30bf\u30a4\u30d7
AccountNode.device=\u30c7\u30d0\u30a4\u30b9
AccountNode.messageCount=\u9805\u76ee
applyText=\u9069\u7528
CTL_OpenCVTAction=\u30b3\u30df\u30e5\u30cb\u30b1\u30fc\u30b7\u30e7\u30f3
CVTTopComponent.name=\ \u30b3\u30df\u30e5\u30cb\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u53ef\u8996\u5316
CVTTopComponent.TabConstraints.tabTitle=\u53ef\u8996\u5316
CVTTopComponent.accountsBrowser.TabConstraints.tabTitle=\u53c2\u7167
FiltersPanel.applyFiltersButton.text=\u9069\u7528
FiltersPanel.devicesLabel.text=\u30c7\u30d0\u30a4\u30b9:
FiltersPanel.accountTypesLabel.text=\u30a2\u30ab\u30a6\u30f3\u30c8\u30bf\u30a4\u30d7:
FiltersPanel.filtersTitleLabel.text=\u30d5\u30a3\u30eb\u30bf\u30fc
FiltersPanel.unCheckAllAccountTypesButton.text=\u3059\u3079\u3066\u306e\u30c1\u30a7\u30c3\u30af\u3092\u5916\u3059
FiltersPanel.checkAllAccountTypesButton.text=\u3059\u3079\u3066\u306e\u30c1\u30a7\u30c3\u30af
FiltersPanel.unCheckAllDevicesButton.text=\u3059\u3079\u3066\u306e\u30c1\u30a7\u30c3\u30af\u3092\u5916\u3059
FiltersPanel.checkAllDevicesButton.text=\u3059\u3079\u3066\u306e\u30c1\u30a7\u30c3\u30af
FiltersPanel.dateRangeLabel.text=\u65e5\u4ed8\u7bc4\u56f2:
FiltersPanel.startCheckBox.text=\u958b\u59cb:
FiltersPanel.endCheckBox.text=\u7d42\u4e86:
FiltersPanel.refreshButton.text=\u66f4\u65b0
FiltersPanel.deviceRequiredLabel.text=\u5c11\u306a\u304f\u3068\u30821\u3064\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002
FiltersPanel.accountTypeRequiredLabel.text=\u5c11\u306a\u304f\u3068\u30821\u3064\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002
FiltersPanel.needsRefreshLabel.text=\u8868\u793a\u3055\u308c\u3066\u3044\u308b\u30c7\u30fc\u30bf\u306f\u53e4\u3044\u3067\u3059\u3002[\u66f4\u65b0] \u3092\u62bc\u3057\u3066\u304f\u3060\u3055\u3044\u3002
OpenCVTAction.displayName=\u30b3\u30df\u30e5\u30cb\u30b1\u30fc\u30b7\u30e7\u30f3
PinAccountsAction.pluralText=\u9078\u629e\u3057\u305f\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u53ef\u8996\u5316\u306b\u8ffd\u52a0
PinAccountsAction.singularText=\u9078\u629e\u3057\u305f\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u53ef\u8996\u5316\u306b\u8ffd\u52a0
refreshText=\u7d50\u679c\u3092\u66f4\u65b0
ResetAndPinAccountsAction.pluralText=\u9078\u629e\u3057\u305f\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u307f\u3092\u53ef\u8996\u5316
ResetAndPinAccountsAction.singularText=\u9078\u629e\u3057\u305f\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u307f\u3092\u53ef\u8996\u5316
UnpinAccountsAction.pluralText=\u9078\u629e\u3057\u305f\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u524a\u9664
UnpinAccountsAction.singularText=\u9078\u629e\u3057\u305f\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u524a\u9664
VisalizationPanel.paintingError=\u53ef\u8996\u5316\u306e\u63cf\u753b\u4e2d\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
# {0} - \u30c7\u30d5\u30a9\u30eb\u30c8\u540d
VisualizationPane_accept_defaultName=\u30ec\u30dd\u30fc\u30c8\u540d\u304c\u7a7a(\u672a\u5165\u529b)\u3067\u3057\u305f\u3002[OK] \u3092\u62bc\u3057\u3066\u6b21\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30ec\u30dd\u30fc\u30c8\u540d\u3092\u8a31\u53ef\u3057\u3066\u304f\u3060\u3055\u3044: {0}
VisualizationPane_blank_report_title=\u7a7a(\u672a\u5165\u529b)\u306e\u72b6\u614b\u306e\u30ec\u30dd\u30fc\u30c8\u540d
VisualizationPane_DisplayName=\u30ec\u30dd\u30fc\u30c8\u3092\u958b\u304f
VisualizationPane_fileName_prompt=\u30b3\u30df\u30e5\u30cb\u30b1\u30fc\u30b7\u30e7\u30f3\u30fb\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u30fb\u30ec\u30dd\u30fc\u30c8\u306e\u540d\u524d\u3092\u5165\u529b:
VisualizationPane_MessageBoxTitle=\u30ec\u30dd\u30fc\u30c8\u30aa\u30fc\u30d7\u30f3\u5931\u6557
VisualizationPane_MissingReportFileMessage=\u30ec\u30dd\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u306f\u3059\u3067\u306b\u5b58\u5728\u3057\u307e\u305b\u3093\u3002
VisualizationPane_NoAssociatedEditorMessage=\u3053\u306e\u30bf\u30a4\u30d7\u306e\u30ec\u30dd\u30fc\u30c8\u306b\u95a2\u9023\u4ed8\u3051\u3089\u308c\u3066\u3044\u308b\u30a8\u30c7\u30a3\u30bf\u30fc\u304c\u306a\u3044\u304b\u3001\u95a2\u9023\u4ed8\u3051\u3089\u308c\u3066\u3044\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u8d77\u52d5\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
VisualizationPane_NoOpenInEditorSupportMessage=\u3053\u306e\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0(\u30aa\u30da\u30ec\u30fc\u30c6\u30a3\u30f3\u30b0\u30b7\u30b9\u30c6\u30e0)\u306f\u3053\u306e\u65b9\u6cd5\u3067\u30a8\u30c7\u30a3\u30bf\u30fc\u3067\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304f\u3053\u3068\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u305b\u3093\u3002
VisualizationPane_Open_Report=\u30ec\u30dd\u30fc\u30c8\u3092\u958b\u304f
# {0} - \u30ec\u30dd\u30fc\u30c8\u540d
VisualizationPane_overrite_exiting=\u65e2\u5b58\u306e\u30ec\u30dd\u30fc\u30c8\u3092\u4e0a\u66f8\u304d\u3057\u307e\u3059\u304b?\n{0}
VisualizationPane_Report_OK_Button=OK
# {0} - \u30ec\u30dd\u30fc\u30c8\u30d1\u30b9
VisualizationPane_Report_Success=\u6b21\u306e\u5834\u6240\u306b\u30ec\u30dd\u30fc\u30c8\u304c\u6b63\u5e38\u306b\u4f5c\u6210\u3055\u308c\u307e\u3057\u305f:\n{0}
VisualizationPane_ReportFileOpenPermissionDeniedMessage=\u30ec\u30dd\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304f\u8a31\u53ef\u304c\u62d2\u5426\u3055\u308c\u307e\u3057\u305f\u3002
VisualizationPane_reportName=\u30b3\u30df\u30e5\u30cb\u30b1\u30fc\u30b7\u30e7\u30f3\u30fb\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8
VisualizationPanel.cancelButton.text=\u53d6\u308a\u6d88\u3057
VisualizationPanel.computingLayout=\u30ec\u30a4\u30a2\u30a6\u30c8\u3092\u8a08\u7b97\u4e2d\u3067\u3059
VisualizationPanel.jButton1.text=\u8fc5\u901f\u304b\u3064\u6709\u6a5f\u7684
CVTTopComponent.vizPanel.TabConstraints.tabTitle=\u53ef\u8996\u5316
CVTTopComponent.accountsBrowser.TabConstraints.tabTitle_1=\u53c2\u7167
CVTTopComponent.browseVisualizeTabPane.AccessibleContext.accessibleName=\u53ef\u8996\u5316
CVTTopComponent.vizPanel.TabConstraints.tabTitle_1=\u53ef\u8996\u5316
VisualizationPanel.fitGraphButton.text=
VisualizationPanel.jTextArea1.text=[\u30a2\u30ab\u30a6\u30f3\u30c8\u53c2\u7167] \u30c6\u30fc\u30d6\u30eb\u3067\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u53f3\u30af\u30ea\u30c3\u30af\u3057\u3001[\u53ef\u8996\u5316] \u3092\u9078\u629e\u3057\u3066\u958b\u59cb\u3057\u307e\u3059\u3002
# {0} - \u30ec\u30a4\u30a2\u30a6\u30c8\u540d
VisualizationPanel.layoutFail.text={0} \u30ec\u30a4\u30a2\u30a6\u30c8\u304c\u5931\u6557\u3057\u307e\u3057\u305f\u3002\u5225\u306e\u30ec\u30a4\u30a2\u30a6\u30c8\u3092\u304a\u8a66\u3057\u304f\u3060\u3055\u3044\u3002
# {0} - \u30ec\u30a4\u30a2\u30a6\u30c8\u540d
VisualizationPanel.layoutFailWithLockedVertices.text=\u9802\u70b9\u304c\u30ed\u30c3\u30af\u3055\u308c\u305f {0} \u30ec\u30a4\u30a2\u30a6\u30c8\u304c\u5931\u6557\u3057\u307e\u3057\u305f\u3002\u4e00\u90e8\u306e\u9802\u70b9\u306e\u30ed\u30c3\u30af\u3092\u89e3\u9664\u3059\u308b\u304b\u3001\u5225\u306e\u30ec\u30a4\u30a2\u30a6\u30c8\u3092\u304a\u8a66\u3057\u304f\u3060\u3055\u3044\u3002
VisualizationPanel.lockAction.pluralText=\u9078\u629e\u3057\u305f\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u30ed\u30c3\u30af
VisualizationPanel.lockAction.singularText=\u9078\u629e\u3057\u305f\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u30ed\u30c3\u30af
VisualizationPanel.unlockAction.pluralText=\u9078\u629e\u3057\u305f\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u30ed\u30c3\u30af\u3092\u89e3\u9664
VisualizationPanel.unlockAction.singularText=\u9078\u629e\u3057\u305f\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u30ed\u30c3\u30af
VisualizationPanel.zoomLabel.text=100%
VisualizationPanel.jLabel2.text=\u30ba\u30fc\u30e0:
VisualizationPanel.fitZoomButton.toolTipText=\u53ef\u8996\u5316\u3092\u9069\u5408
VisualizationPanel.fitZoomButton.text=
VisualizationPanel.zoomActualButton.toolTipText=\u30ba\u30fc\u30e0\u3092\u30ea\u30bb\u30c3\u30c8
VisualizationPanel.zoomActualButton.text=
VisualizationPanel.zoomInButton.toolTipText=\u30ba\u30fc\u30e0\u30a4\u30f3
VisualizationPanel.zoomInButton.text=
VisualizationPanel.zoomOutButton.toolTipText=\u30ba\u30fc\u30e0\u30a2\u30a6\u30c8
VisualizationPanel.zoomOutButton.text=
VisualizationPanel.fastOrganicLayoutButton.text=
VisualizationPanel.backButton.text_1=
VisualizationPanel.circleLayoutButton.text=\u5186\u5f62
VisualizationPanel.organicLayoutButton.text=\u6709\u6a5f\u7684
VisualizationPanel.hierarchyLayoutButton.text=\u968e\u5c64\u7684
VisualizationPanel.clearVizButton.text_1=
VisualizationPanel.snapshotButton.text_1=\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u30fb\u30ec\u30dd\u30fc\u30c8
VisualizationPanel.clearVizButton.actionCommand=
VisualizationPanel.backButton.toolTipText=\u30af\u30ea\u30c3\u30af\u3057\u3066\u623b\u308b
VisualizationPanel.forwardButton.toolTipText=\u30af\u30ea\u30c3\u30af\u3057\u3066\u9032\u3080
VisualizationPanel.fastOrganicLayoutButton.toolTipText=\u30af\u30ea\u30c3\u30af\u3057\u3066\u30c1\u30e3\u30fc\u30c8\u3092\u518d\u63cf\u753b
VisualizationPanel.clearVizButton.toolTipText=\u30af\u30ea\u30c3\u30af\u3057\u3066\u30c1\u30e3\u30fc\u30c8\u3092\u6d88\u53bb
FiltersPanel.limitHeaderLabel.text=\u30b3\u30df\u30e5\u30cb\u30b1\u30fc\u30b7\u30e7\u30f3\u9650\u754c\u5024:
FiltersPanel.mostRecentLabel.text=\u6700\u65b0:
FiltersPanel.limitErrorMsgLabel.text=\u7121\u52b9\u306a\u6574\u6570\u5024\u3067\u3059\u3002
VisualizationPanel.forwardButton.text=
VisualizationPanel_action_dialogs_title=\u30b3\u30df\u30e5\u30cb\u30b1\u30fc\u30b7\u30e7\u30f3
VisualizationPanel_action_name_text=\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u30fb\u30ec\u30dd\u30fc\u30c8
VisualizationPanel_module_name=\u30b3\u30df\u30e5\u30cb\u30b1\u30fc\u30b7\u30e7\u30f3
VisualizationPanel_snapshot_report_failure=\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u30fb\u30ec\u30dd\u30fc\u30c8\u304c\u4f5c\u6210\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u4f5c\u6210\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
@@ -0,0 +1,153 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2019 Basis Technology Corp.
* Contact: carrier <at> sleuthkit <dot> org
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obt ain 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.communications.relationships;
import com.google.gson.Gson;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;
import java.util.function.Consumer;
import java.util.logging.Level;
import org.openide.nodes.Children;
import org.openide.nodes.Node;
import org.openide.nodes.Sheet;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.autopsy.datamodel.AbstractAbstractFileNode;
import org.sleuthkit.autopsy.datamodel.FileNode;
import org.sleuthkit.datamodel.AbstractFile;
import org.sleuthkit.datamodel.BlackboardArtifact;
import org.sleuthkit.datamodel.BlackboardAttribute;
import org.sleuthkit.datamodel.Content;
import org.sleuthkit.datamodel.TskCoreException;
import org.sleuthkit.datamodel.blackboardutils.FileAttachment;
import org.sleuthkit.datamodel.blackboardutils.MessageAttachments;
/**
* Factory for creating thumbnail children nodes.
*/
final class AttachmentThumbnailsChildren extends Children.Keys<AbstractFile> {
private static final Logger LOGGER = Logger.getLogger(AttachmentThumbnailsChildren.class.getName());
private final Set<BlackboardArtifact> artifacts;
/*
* Creates the list of thumbnails from the given list of
* BlackboardArtifacts.
*
* The thumbnails will be initialls sorted by size, then name so that they
* appear sorted by size by default.
*/
AttachmentThumbnailsChildren(Set<BlackboardArtifact> artifacts) {
super(false);
this.artifacts = artifacts;
}
@Override
protected Node[] createNodes(AbstractFile t) {
return new Node[]{new AttachementThumbnailNode(t)};
}
@Override
protected void addNotify() {
super.addNotify();
Set<AbstractFile> thumbnails = new TreeSet<>((AbstractFile file1, AbstractFile file2) -> {
int result = Long.compare(file1.getSize(), file2.getSize());
if (result == 0) {
result = file1.getName().compareTo(file2.getName());
}
return result;
});
artifacts.forEach(new Consumer<BlackboardArtifact>() {
@Override
public void accept(BlackboardArtifact bba) {
try {
// Get the attachments from TSK_ATTACHMENTS attribute.
BlackboardAttribute attachmentsAttr = bba.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_ATTACHMENTS));
if (attachmentsAttr != null) {
String jsonVal = attachmentsAttr.getValueString();
MessageAttachments msgAttachments = new Gson().fromJson(jsonVal, MessageAttachments.class);
Collection<FileAttachment> fileAttachments = msgAttachments.getFileAttachments();
for (FileAttachment fileAttachment : fileAttachments) {
long attachedFileObjId = fileAttachment.getObjectId();
if (attachedFileObjId >= 0) {
AbstractFile attachedFile = bba.getSleuthkitCase().getAbstractFileById(attachedFileObjId);
thumbnails.add(attachedFile);
}
}
} else { // backward compatibility - email message attachments are derived files, children of the message.
for (Content childContent : bba.getChildren()) {
if (childContent instanceof AbstractFile) {
thumbnails.add((AbstractFile) childContent);
}
}
}
} catch (TskCoreException ex) {
LOGGER.log(Level.WARNING, "Unable to get children from artifact.", ex); //NON-NLS
}
}
});
setKeys(thumbnails);
}
/**
* A node for representing a thumbnail.
*/
static class AttachementThumbnailNode extends FileNode {
AttachementThumbnailNode(AbstractFile file) {
super(file, false);
}
@Override
protected Sheet createSheet() {
Sheet sheet = super.createSheet();
Set<String> keepProps = new HashSet<>(Arrays.asList(
NbBundle.getMessage(AbstractAbstractFileNode.class, "AbstractAbstractFileNode.nameColLbl"),
NbBundle.getMessage(AbstractAbstractFileNode.class, "AbstractAbstractFileNode.createSheet.score.name"),
NbBundle.getMessage(AbstractAbstractFileNode.class, "AbstractAbstractFileNode.createSheet.comment.name"),
NbBundle.getMessage(AbstractAbstractFileNode.class, "AbstractAbstractFileNode.createSheet.count.name"),
NbBundle.getMessage(AbstractAbstractFileNode.class, "AbstractAbstractFileNode.sizeColLbl"),
NbBundle.getMessage(AbstractAbstractFileNode.class, "AbstractAbstractFileNode.mimeType"),
NbBundle.getMessage(AbstractAbstractFileNode.class, "AbstractAbstractFileNode.knownColLbl")));
//Remove all other props except for the ones above
Sheet.Set sheetSet = sheet.get(Sheet.PROPERTIES);
for (Node.Property<?> p : sheetSet.getProperties()) {
if (!keepProps.contains(p.getName())) {
sheetSet.remove(p.getName());
}
}
return sheet;
}
}
}
@@ -26,3 +26,4 @@ SummaryViewer.attachmentsLabel.text=Total Attachments:
SummaryViewer.referencesLabel.text=Communication References:
SummaryViewer.referencesDataLabel.text=<reference count>
SummaryViewer.contactsLabel.text=Book Entries:
SummaryViewer.accountCountry.text=<account country>
@@ -46,6 +46,7 @@ SummaryViewer_Account_Description=This account represents a device in the case.
SummaryViewer_Account_Description_MuliSelect=Summary information is not available when multiple accounts are selected.
SummaryViewer_CaseRefNameColumn_Title=Case Name
SummaryViewer_CentralRepository_Message=<Enable Central Respository to see Other Occurrences>
SummaryViewer_Country_Code=Country:
SummaryViewer_Creation_Date_Title=Creation Date
SummaryViewer_Device_Account_Description=This account was referenced by a device in the case.
SummaryViewer_FileRef_Message=<Select a single account to see File References>
@@ -71,3 +72,4 @@ SummaryViewer.attachmentsLabel.text=Total Attachments:
SummaryViewer.referencesLabel.text=Communication References:
SummaryViewer.referencesDataLabel.text=<reference count>
SummaryViewer.contactsLabel.text=Book Entries:
SummaryViewer.accountCountry.text=<account country>
@@ -0,0 +1,58 @@
ContactDetailsPane.nameLabel.text=\u30d7\u30ec\u30fc\u30b9\u30db\u30eb\u30c0\u30fc
ContactNode_Email=\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9
ContactNode_Home_Number=\u81ea\u5b85\u96fb\u8a71\u756a\u53f7
ContactNode_Mobile_Number=\u643a\u5e2f\u96fb\u8a71\u756a\u53f7
ContactNode_Name=\u540d\u524d
ContactNode_Office_Number=\u4f1a\u793e\u96fb\u8a71\u756a\u53f7
ContactNode_Phone=\u96fb\u8a71\u756a\u53f7
ContactNode_URL=URL
ContactsViewer_columnHeader_Email=\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9
ContactsViewer_columnHeader_Name=\u540d\u524d
ContactsViewer_columnHeader_Phone=\u96fb\u8a71\u756a\u53f7
ContactsViewer_noContacts_message=<\u9078\u629e\u3057\u305f\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u9023\u7d61\u5148\u306f\u3042\u308a\u307e\u305b\u3093>
ContactsViewer_tabTitle=\u9023\u7d61\u5148
MediaViewer_Name=\u30e1\u30c7\u30a3\u30a2\u6dfb\u4ed8\u30d5\u30a1\u30a4\u30eb
MessageNode_Node_Property_Attms=\u6dfb\u4ed8\u30d5\u30a1\u30a4\u30eb
MessageNode_Node_Property_Date=\u65e5\u4ed8
MessageNode_Node_Property_From=\u5dee\u51fa\u4eba
MessageNode_Node_Property_Subject=\u4ef6\u540d
MessageNode_Node_Property_To=\u5b9b\u5148
MessageNode_Node_Property_Type=\u30bf\u30a4\u30d7
MessageViewer_columnHeader_Attms=\u6dfb\u4ed8\u30d5\u30a1\u30a4\u30eb
MessageViewer_columnHeader_Date=\u65e5\u4ed8
MessageViewer_columnHeader_EarlyDate=\u6700\u3082\u53e4\u3044\u30e1\u30c3\u30bb\u30fc\u30b8
MessageViewer_columnHeader_From=\u5dee\u51fa\u4eba
MessageViewer_columnHeader_Subject=\u4ef6\u540d
MessageViewer_columnHeader_To=\u5b9b\u5148
MessageViewer_no_messages=<\u9078\u629e\u3057\u305f\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u306f\u3042\u308a\u307e\u305b\u3093>
MessageViewer_tabTitle=\u30e1\u30c3\u30bb\u30fc\u30b8
MessageViewer_viewMessage_all=\u3059\u3079\u3066
MessageViewer_viewMessage_calllogs=\u901a\u8a71\u30ed\u30b0
MessageViewer_viewMessage_selected=\u9078\u629e\u6e08\u307f
MessageViewer_viewMessage_unthreaded=\u30b9\u30ec\u30c3\u30c9\u89e3\u9664\u6e08\u307f
SummaryViewer.countsPanel.border.title=\u30ab\u30a6\u30f3\u30c8
SummaryViewer.contactsLabel.text=\u9023\u7d61\u5148:
SummaryViewer.attachmentsLabel.text=\u30e1\u30c7\u30a3\u30a2\u6dfb\u4ed8\u30d5\u30a1\u30a4\u30eb:
OutlineViewPanel.messageLabel.text=<\u30b3\u30f3\u30c8\u30ed\u30fc\u30eb\u3092\u7121\u52b9\u5316\u3057\u307e\u3057\u305f>
SummaryViewer.messagesDataLabel.text=\u30e1\u30c3\u30bb\u30fc\u30b8
SummaryViewer.callLogsDataLabel.text=callLogs
SummaryViewer.contactsDataLabel.text=\u9023\u7d61\u5148
SummaryViewer.attachmentsDataLabel.text=\u6dfb\u4ed8\u30d5\u30a1\u30a4\u30eb
SummaryViewer.messagesLabel.text=\u30e1\u30c3\u30bb\u30fc\u30b8:
SummaryViewer.callLogsLabel.text=\u901a\u8a71\u30ed\u30b0:
SummaryViewer_CaseRefNameColumn_Title=\u30b1\u30fc\u30b9\u540d
SummaryViewer_CentralRepository_Message=<\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u3092\u6709\u52b9\u5316\u3057\u3066\u305d\u306e\u4ed6\u306e\u767a\u751f\u3092\u8868\u793a>
SummaryViewer_Creation_Date_Title=\u4f5c\u6210\u65e5
SummaryViewer_FileRefNameColumn_Title=\u30d1\u30b9
SummaryViewer_TabTitle=\u30b5\u30de\u30ea\u30fc
SummeryViewer_FileRef_Message=<\u30a2\u30ab\u30a6\u30f3\u30c8\u30921\u3064\u9078\u629e\u3057\u3066\u30d5\u30a1\u30a4\u30eb\u30ec\u30d5\u30a1\u30ec\u30f3\u30b9\u3092\u8868\u793a>
ThreadRootMessagePanel.showAllCheckBox.text=\u3059\u3079\u3066\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u8868\u793a
ThreadPane.backButton.text=<---
SummaryViewer.caseReferencesPanel.border.title=\u305d\u306e\u4ed6\u306e\u767a\u751f
SummaryViewer.fileReferencesPanel.border.title=\u73fe\u5728\u306e\u30b1\u30fc\u30b9\u306e\u30d5\u30a1\u30a4\u30eb\u30ec\u30d5\u30a1\u30ec\u30f3\u30b9
MessageViewer.threadsLabel.text=\u30b9\u30ec\u30c3\u30c9\u3092\u9078\u629e\u3057\u3066\u8868\u793a
MessageViewer.threadNameLabel.text=<threadName>
MessageViewer.showingMessagesLabel.text=\u6b21\u306e\u30b9\u30ec\u30c3\u30c9\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u8868\u793a\u4e2d\u3067\u3059:
MessageViewer.backButton.AccessibleContext.accessibleDescription=
MessageViewer.backButton.text=\u30b9\u30ec\u30c3\u30c9
MessageViewer.showAllButton.text=\u3059\u3079\u3066\u306e\u30e1\u30c3\u30bb\u30fc\u30b8
@@ -36,6 +36,7 @@ import static org.sleuthkit.datamodel.BlackboardAttribute.TSK_BLACKBOARD_ATTRIBU
import org.sleuthkit.datamodel.TimeUtilities;
import org.sleuthkit.datamodel.TskCoreException;
import org.sleuthkit.autopsy.communications.Utils;
import org.sleuthkit.autopsy.coreutils.PhoneNumUtil;
import org.sleuthkit.datamodel.AbstractFile;
import org.sleuthkit.datamodel.Content;
@@ -70,7 +71,7 @@ final class ContactNode extends BlackboardArtifactNode {
@Override
protected Sheet createSheet() {
Sheet sheet = new Sheet();
final BlackboardArtifact artifact = getArtifact();
BlackboardArtifact.ARTIFACT_TYPE fromID = BlackboardArtifact.ARTIFACT_TYPE.fromID(artifact.getArtifactTypeID());
if (fromID != TSK_CONTACT) {
@@ -103,26 +104,26 @@ final class ContactNode extends BlackboardArtifactNode {
otherList.add(bba);
}
}
addPropertiesToSheet(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_NAME.getLabel(),
sheetSet, nameList);
addPropertiesToSheet(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PHONE_NUMBER.getLabel(),
sheetSet, phoneNumList);
addPropertiesToSheet(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_EMAIL.getLabel(),
sheetSet, emailList);
addPropertiesToSheet(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_NAME.getLabel(),
sheetSet, nameList);
addPropertiesToSheet(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PHONE_NUMBER.getLabel(),
sheetSet, phoneNumList);
addPropertiesToSheet(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_EMAIL.getLabel(),
sheetSet, emailList);
for (BlackboardAttribute bba : otherList) {
sheetSet.put(new NodeProperty<>(bba.getAttributeType().getTypeName(), bba.getAttributeType().getDisplayName(), "", bba.getDisplayString()));
}
List<Content> children = artifact.getChildren();
if(children != null) {
if (children != null) {
int count = 0;
String imageLabelPrefix = "Image";
for(Content child: children) {
if(child instanceof AbstractFile) {
for (Content child : children) {
if (child instanceof AbstractFile) {
String imageLabel = imageLabelPrefix;
if(count > 0) {
if (count > 0) {
imageLabel = imageLabelPrefix + "-" + count;
}
sheetSet.put(new NodeProperty<>(imageLabel, imageLabel, imageLabel, child.getName()));
@@ -136,14 +137,32 @@ final class ContactNode extends BlackboardArtifactNode {
return sheet;
}
private void addPropertiesToSheet(String propertyID, Sheet.Set sheetSet, List<BlackboardAttribute> attributeList) {
int count = 0;
for (BlackboardAttribute bba : attributeList) {
if (count++ > 0) {
sheetSet.put(new NodeProperty<>(propertyID + "_" + count, bba.getAttributeType().getDisplayName(), "", bba.getDisplayString()));
if (bba.getAttributeType().getTypeName().startsWith("TSK_PHONE")) {
String phoneNumCountry = PhoneNumUtil.getCountryCode(bba.getValueString());
if (phoneNumCountry.equals("")) {
sheetSet.put(new NodeProperty<>(propertyID + "_" + count, bba.getAttributeType().getDisplayName(), "", bba.getDisplayString()));
} else {
sheetSet.put(new NodeProperty<>(propertyID + "_" + count, bba.getAttributeType().getDisplayName(), "", bba.getDisplayString() + " [" + phoneNumCountry + "]"));
}
} else {
sheetSet.put(new NodeProperty<>(propertyID + "_" + count, bba.getAttributeType().getDisplayName(), "", bba.getDisplayString()));
}
} else {
sheetSet.put(new NodeProperty<>(propertyID, bba.getAttributeType().getDisplayName(), "", bba.getDisplayString()));
if (bba.getAttributeType().getTypeName().startsWith("TSK_PHONE")) {
String phoneNumCountry = PhoneNumUtil.getCountryCode(bba.getValueString());
if (phoneNumCountry.equals("")) {
sheetSet.put(new NodeProperty<>(propertyID, bba.getAttributeType().getDisplayName(), "", bba.getDisplayString()));
} else {
sheetSet.put(new NodeProperty<>(propertyID, bba.getAttributeType().getDisplayName(), "", bba.getDisplayString() + " [" + phoneNumCountry + "]"));
}
} else {
sheetSet.put(new NodeProperty<>(propertyID, bba.getAttributeType().getDisplayName(), "", bba.getDisplayString()));
}
}
}
}
@@ -175,4 +194,5 @@ final class ContactNode extends BlackboardArtifactNode {
public String getSourceName() {
return getDisplayName();
}
}
@@ -129,7 +129,7 @@ final class MediaViewer extends JPanel implements RelationshipsViewer, ExplorerM
thumbnailViewer.resetComponent();
thumbnailViewer.setNode(new TableFilterNode(new DataResultFilterNode(new AbstractNode(new AttachmentsChildren(artifactList)), tableEM), true, this.getClass().getName()));
thumbnailViewer.setNode(new TableFilterNode(new DataResultFilterNode(new AbstractNode(new AttachmentThumbnailsChildren(artifactList)), tableEM), true, this.getClass().getName()));
}
@Override
@@ -18,6 +18,7 @@
*/
package org.sleuthkit.autopsy.communications.relationships;
import com.google.gson.Gson;
import java.util.logging.Level;
import javax.swing.Action;
import org.apache.commons.lang3.StringUtils;
@@ -38,6 +39,8 @@ import static org.sleuthkit.autopsy.communications.relationships.RelationshipsNo
import org.sleuthkit.autopsy.datamodel.BlackboardArtifactNode;
import static org.sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE.TSK_EMAIL_MSG;
import static org.sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE.TSK_MESSAGE;
import org.sleuthkit.datamodel.BlackboardAttribute;
import org.sleuthkit.datamodel.blackboardutils.MessageAttachments;
/**
* Wraps a BlackboardArtifact as an AbstractNode for use in an OutlookView
@@ -97,7 +100,7 @@ class MessageNode extends BlackboardArtifactNode {
sheetSet.put(new NodeProperty<>("Subject", Bundle.MessageNode_Node_Property_Subject(), "",
getAttributeDisplayString(artifact, TSK_SUBJECT))); //NON-NLS
try {
sheetSet.put(new NodeProperty<>("Attms", Bundle.MessageNode_Node_Property_Attms(), "", artifact.getChildrenCount())); //NON-NLS
sheetSet.put(new NodeProperty<>("Attms", Bundle.MessageNode_Node_Property_Attms(), "", getAttachmentsCount())); //NON-NLS
} catch (TskCoreException ex) {
logger.log(Level.WARNING, "Error loading attachment count for " + artifact, ex); //NON-NLS
}
@@ -144,4 +147,21 @@ class MessageNode extends BlackboardArtifactNode {
public Action getPreferredAction() {
return preferredAction;
}
private int getAttachmentsCount() throws TskCoreException {
final BlackboardArtifact artifact = getArtifact();
int attachmentsCount;
// Attachments are specified in an attribute TSK_ATTACHMENTS as JSON attribute
BlackboardAttribute attachmentsAttr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_ATTACHMENTS));
if (attachmentsAttr != null) {
String jsonVal = attachmentsAttr.getValueString();
MessageAttachments msgAttachments = new Gson().fromJson(jsonVal, MessageAttachments.class);
attachmentsCount = msgAttachments.getAttachmentsCount();
} else { // legacy attachments may be children of message artifact.
attachmentsCount = artifact.getChildrenCount();
}
return attachmentsCount;
}
}
@@ -61,6 +61,7 @@ public final class RelationshipBrowser extends JPanel implements Lookup.Provider
*/
public void setSelectionInfo(SelectionInfo info) {
currentSelection = info;
tabPane.setSelectedIndex(0);
((RelationshipsViewer) tabPane.getSelectedComponent()).setSelectionInfo(info);
}
@@ -1,154 +1,6 @@
<?xml version="1.0" encoding="UTF-8" ?>
<Form version="1.5" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
<NonVisualComponents>
<Container class="javax.swing.JPanel" name="summaryPanel">
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
<SubComponents>
<Component class="javax.swing.JLabel" name="accountLabel">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/communications/relationships/Bundle.properties" key="SummaryViewer.accountLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="0" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="15" insetsLeft="9" insetsBottom="0" insetsRight="9" anchor="18" weightX="0.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JLabel" name="accoutDescriptionLabel">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/communications/relationships/Bundle.properties" key="SummaryViewer.accoutDescriptionLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="1" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="15" insetsLeft="9" insetsBottom="15" insetsRight="9" anchor="18" weightX="1.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Container class="javax.swing.JPanel" name="countsPanel">
<Properties>
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
<Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
<TitledBorder title="Communications">
<ResourceString PropertyName="titleX" bundle="org/sleuthkit/autopsy/communications/relationships/Bundle.properties" key="SummaryViewer.countsPanel.border.title" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</TitledBorder>
</Border>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="-1" gridY="-1" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
</Constraint>
</Constraints>
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
<SubComponents>
<Component class="javax.swing.JLabel" name="messagesLabel">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/communications/relationships/Bundle.properties" key="SummaryViewer.messagesLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="0" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="9" insetsLeft="15" insetsBottom="9" insetsRight="15" anchor="18" weightX="0.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JLabel" name="callLogsLabel">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/communications/relationships/Bundle.properties" key="SummaryViewer.callLogsLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="1" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="15" insetsBottom="9" insetsRight="15" anchor="18" weightX="0.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JLabel" name="thumbnailCntLabel">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/communications/relationships/Bundle.properties" key="SummaryViewer.thumbnailCntLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="2" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="15" insetsBottom="9" insetsRight="15" anchor="18" weightX="0.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JLabel" name="thumbnailsDataLabel">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/communications/relationships/Bundle.properties" key="SummaryViewer.thumbnailsDataLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="1" gridY="2" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="9" insetsRight="15" anchor="18" weightX="0.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JLabel" name="messagesDataLabel">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/communications/relationships/Bundle.properties" key="SummaryViewer.messagesDataLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="1" gridY="0" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="9" insetsLeft="0" insetsBottom="9" insetsRight="15" anchor="18" weightX="1.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JLabel" name="callLogsDataLabel">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/communications/relationships/Bundle.properties" key="SummaryViewer.callLogsDataLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="1" gridY="1" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="9" insetsRight="15" anchor="18" weightX="0.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JLabel" name="attachmentsLabel">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/communications/relationships/Bundle.properties" key="SummaryViewer.attachmentsLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="3" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="15" insetsBottom="9" insetsRight="15" anchor="18" weightX="0.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JLabel" name="attachmentDataLabel">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/communications/relationships/Bundle.properties" key="SummaryViewer.attachmentDataLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="1" gridY="3" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="9" insetsRight="15" anchor="18" weightX="0.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
</SubComponents>
</Container>
</SubComponents>
</Container>
</NonVisualComponents>
<AuxValues>
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
@@ -164,38 +16,169 @@
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
<SubComponents>
<Component class="org.sleuthkit.autopsy.communications.relationships.OutlineViewPanel" name="fileReferencesPanel">
<Container class="javax.swing.JPanel" name="summaryPanel">
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="-1" gridY="-1" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="18" weightX="0.0" weightY="0.0"/>
</Constraint>
</Constraints>
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
<SubComponents>
<Component class="javax.swing.JLabel" name="accountLabel">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/communications/relationships/Bundle.properties" key="SummaryViewer.accountLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="0" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="15" insetsLeft="9" insetsBottom="0" insetsRight="9" anchor="18" weightX="0.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JLabel" name="accountCountry">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/communications/relationships/Bundle.properties" key="SummaryViewer.accountCountry.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="1" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="9" insetsBottom="0" insetsRight="9" anchor="18" weightX="0.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JLabel" name="accoutDescriptionLabel">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/communications/relationships/Bundle.properties" key="SummaryViewer.accoutDescriptionLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="2" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="15" insetsLeft="9" insetsBottom="15" insetsRight="9" anchor="18" weightX="1.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
</SubComponents>
</Container>
<Container class="javax.swing.JPanel" name="countsPanel">
<Properties>
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
<Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
<TitledBorder title="File References in Current Case">
<ResourceString PropertyName="titleX" bundle="org/sleuthkit/autopsy/communications/relationships/Bundle.properties" key="SummaryViewer.fileReferencesPanel.border.title" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
<TitledBorder title="Communications">
<ResourceString PropertyName="titleX" bundle="org/sleuthkit/autopsy/communications/relationships/Bundle.properties" key="SummaryViewer.countsPanel.border.title" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</TitledBorder>
</Border>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="3" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="9" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="18" weightX="1.0" weightY="1.0"/>
<GridBagConstraints gridX="0" gridY="1" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="18" weightX="0.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="org.sleuthkit.autopsy.communications.relationships.OutlineViewPanel" name="caseReferencesPanel">
<Properties>
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
<Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
<TitledBorder title="Other Occurrences">
<ResourceString PropertyName="titleX" bundle="org/sleuthkit/autopsy/communications/relationships/Bundle.properties" key="SummaryViewer.caseReferencesPanel.border.title" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</TitledBorder>
</Border>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="4" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="9" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="18" weightX="1.0" weightY="1.0"/>
</Constraint>
</Constraints>
</Component>
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
<SubComponents>
<Component class="javax.swing.JLabel" name="messagesLabel">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/communications/relationships/Bundle.properties" key="SummaryViewer.messagesLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="0" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="9" insetsLeft="15" insetsBottom="9" insetsRight="15" anchor="18" weightX="0.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JLabel" name="callLogsLabel">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/communications/relationships/Bundle.properties" key="SummaryViewer.callLogsLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="1" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="15" insetsBottom="9" insetsRight="15" anchor="18" weightX="0.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JLabel" name="thumbnailCntLabel">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/communications/relationships/Bundle.properties" key="SummaryViewer.thumbnailCntLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="2" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="15" insetsBottom="9" insetsRight="15" anchor="18" weightX="0.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JLabel" name="thumbnailsDataLabel">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/communications/relationships/Bundle.properties" key="SummaryViewer.thumbnailsDataLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="1" gridY="2" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="9" insetsRight="15" anchor="18" weightX="0.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JLabel" name="messagesDataLabel">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/communications/relationships/Bundle.properties" key="SummaryViewer.messagesDataLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="1" gridY="0" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="9" insetsLeft="0" insetsBottom="9" insetsRight="15" anchor="18" weightX="1.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JLabel" name="callLogsDataLabel">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/communications/relationships/Bundle.properties" key="SummaryViewer.callLogsDataLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="1" gridY="1" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="9" insetsRight="15" anchor="18" weightX="0.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JLabel" name="attachmentsLabel">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/communications/relationships/Bundle.properties" key="SummaryViewer.attachmentsLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="3" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="15" insetsBottom="9" insetsRight="15" anchor="18" weightX="0.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JLabel" name="attachmentDataLabel">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/communications/relationships/Bundle.properties" key="SummaryViewer.attachmentDataLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="1" gridY="3" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="9" insetsRight="15" anchor="18" weightX="0.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
</SubComponents>
</Container>
<Container class="javax.swing.JPanel" name="contanctsPanel">
<Properties>
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
@@ -208,7 +191,7 @@
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="1" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="18" weightX="0.0" weightY="0.0"/>
<GridBagConstraints gridX="0" gridY="2" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="18" weightX="0.0" weightY="0.0"/>
</Constraint>
</Constraints>
@@ -270,5 +253,37 @@
</Component>
</SubComponents>
</Container>
<Component class="org.sleuthkit.autopsy.communications.relationships.OutlineViewPanel" name="fileReferencesPanel">
<Properties>
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
<Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
<TitledBorder title="File References in Current Case">
<ResourceString PropertyName="titleX" bundle="org/sleuthkit/autopsy/communications/relationships/Bundle.properties" key="SummaryViewer.fileReferencesPanel.border.title" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</TitledBorder>
</Border>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="3" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="9" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="18" weightX="1.0" weightY="1.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="org.sleuthkit.autopsy.communications.relationships.OutlineViewPanel" name="caseReferencesPanel">
<Properties>
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
<Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
<TitledBorder title="Other Occurrences">
<ResourceString PropertyName="titleX" bundle="org/sleuthkit/autopsy/communications/relationships/Bundle.properties" key="SummaryViewer.caseReferencesPanel.border.title" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</TitledBorder>
</Border>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="4" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="9" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="18" weightX="1.0" weightY="1.0"/>
</Constraint>
</Constraints>
</Component>
</SubComponents>
</Form>
@@ -29,6 +29,7 @@ import org.openide.util.Lookup;
import org.openide.util.NbBundle.Messages;
import org.sleuthkit.autopsy.centralrepository.datamodel.EamDb;
import org.sleuthkit.datamodel.Account;
import org.sleuthkit.autopsy.coreutils.PhoneNumUtil;
/**
* Account Summary View Panel. This panel shows a list of various counts related
@@ -49,7 +50,8 @@ public class SummaryViewer extends javax.swing.JPanel implements RelationshipsVi
"SummaryViewer_FileRef_Message=<Select a single account to see File References>",
"SummaryViewer_Device_Account_Description=This account was referenced by a device in the case.",
"SummaryViewer_Account_Description=This account represents a device in the case.",
"SummaryViewer_Account_Description_MuliSelect=Summary information is not available when multiple accounts are selected."
"SummaryViewer_Account_Description_MuliSelect=Summary information is not available when multiple accounts are selected.",
"SummaryViewer_Country_Code=Country: "
})
/**
@@ -110,7 +112,16 @@ public class SummaryViewer extends javax.swing.JPanel implements RelationshipsVi
Account[] accountArray = info.getAccounts().toArray(new Account[1]);
Account account = accountArray[0];
accountLabel.setText(account.getTypeSpecificID());
if (account.getAccountType().getTypeName().contains("PHONE")) {
String countryCode = PhoneNumUtil.getCountryCode(account.getTypeSpecificID());
accountLabel.setText(PhoneNumUtil.convertToInternational(account.getTypeSpecificID()));
accountCountry.setText(Bundle.SummaryViewer_Country_Code() + countryCode);
accountCountry.setEnabled(true);
} else {
accountLabel.setText(account.getTypeSpecificID());
accountCountry.setText("");
accountCountry.setEnabled(false);
}
if (account.getAccountType().equals(Account.Type.DEVICE)) {
accoutDescriptionLabel.setText(Bundle.SummaryViewer_Account_Description());
@@ -173,6 +184,7 @@ public class SummaryViewer extends javax.swing.JPanel implements RelationshipsVi
accountLabel.setText("");
accoutDescriptionLabel.setText("");
referencesDataLabel.setText("");
accountCountry.setText("");
fileReferencesPanel.setNode(new AbstractNode(Children.LEAF));
caseReferencesPanel.setNode(new AbstractNode(Children.LEAF));
@@ -210,6 +222,7 @@ public class SummaryViewer extends javax.swing.JPanel implements RelationshipsVi
summaryPanel = new javax.swing.JPanel();
accountLabel = new javax.swing.JLabel();
accountCountry = new javax.swing.JLabel();
accoutDescriptionLabel = new javax.swing.JLabel();
countsPanel = new javax.swing.JPanel();
messagesLabel = new javax.swing.JLabel();
@@ -220,13 +233,15 @@ public class SummaryViewer extends javax.swing.JPanel implements RelationshipsVi
callLogsDataLabel = new javax.swing.JLabel();
attachmentsLabel = new javax.swing.JLabel();
attachmentDataLabel = new javax.swing.JLabel();
fileReferencesPanel = new org.sleuthkit.autopsy.communications.relationships.OutlineViewPanel();
caseReferencesPanel = new org.sleuthkit.autopsy.communications.relationships.OutlineViewPanel();
contanctsPanel = new javax.swing.JPanel();
contactsLabel = new javax.swing.JLabel();
contactsDataLabel = new javax.swing.JLabel();
referencesLabel = new javax.swing.JLabel();
referencesDataLabel = new javax.swing.JLabel();
fileReferencesPanel = new org.sleuthkit.autopsy.communications.relationships.OutlineViewPanel();
caseReferencesPanel = new org.sleuthkit.autopsy.communications.relationships.OutlineViewPanel();
setLayout(new java.awt.GridBagLayout());
summaryPanel.setLayout(new java.awt.GridBagLayout());
@@ -238,15 +253,27 @@ public class SummaryViewer extends javax.swing.JPanel implements RelationshipsVi
gridBagConstraints.insets = new java.awt.Insets(15, 9, 0, 9);
summaryPanel.add(accountLabel, gridBagConstraints);
org.openide.awt.Mnemonics.setLocalizedText(accoutDescriptionLabel, org.openide.util.NbBundle.getMessage(SummaryViewer.class, "SummaryViewer.accoutDescriptionLabel.text")); // NOI18N
org.openide.awt.Mnemonics.setLocalizedText(accountCountry, org.openide.util.NbBundle.getMessage(SummaryViewer.class, "SummaryViewer.accountCountry.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new java.awt.Insets(0, 9, 0, 9);
summaryPanel.add(accountCountry, gridBagConstraints);
org.openide.awt.Mnemonics.setLocalizedText(accoutDescriptionLabel, org.openide.util.NbBundle.getMessage(SummaryViewer.class, "SummaryViewer.accoutDescriptionLabel.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(15, 9, 15, 9);
summaryPanel.add(accoutDescriptionLabel, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
add(summaryPanel, gridBagConstraints);
countsPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(SummaryViewer.class, "SummaryViewer.countsPanel.border.title"))); // NOI18N
countsPanel.setLayout(new java.awt.GridBagLayout());
@@ -315,31 +342,12 @@ public class SummaryViewer extends javax.swing.JPanel implements RelationshipsVi
gridBagConstraints.insets = new java.awt.Insets(0, 0, 9, 15);
countsPanel.add(attachmentDataLabel, gridBagConstraints);
summaryPanel.add(countsPanel, new java.awt.GridBagConstraints());
setLayout(new java.awt.GridBagLayout());
fileReferencesPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(SummaryViewer.class, "SummaryViewer.fileReferencesPanel.border.title"))); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 3;
gridBagConstraints.gridy = 1;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
gridBagConstraints.insets = new java.awt.Insets(9, 0, 0, 0);
add(fileReferencesPanel, gridBagConstraints);
caseReferencesPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(SummaryViewer.class, "SummaryViewer.caseReferencesPanel.border.title"))); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 4;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
gridBagConstraints.insets = new java.awt.Insets(9, 0, 0, 0);
add(caseReferencesPanel, gridBagConstraints);
add(countsPanel, gridBagConstraints);
contanctsPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(SummaryViewer.class, "SummaryViewer.contanctsPanel.border.title"))); // NOI18N
contanctsPanel.setLayout(new java.awt.GridBagLayout());
@@ -381,14 +389,37 @@ public class SummaryViewer extends javax.swing.JPanel implements RelationshipsVi
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.gridy = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
add(contanctsPanel, gridBagConstraints);
fileReferencesPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(SummaryViewer.class, "SummaryViewer.fileReferencesPanel.border.title"))); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 3;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
gridBagConstraints.insets = new java.awt.Insets(9, 0, 0, 0);
add(fileReferencesPanel, gridBagConstraints);
caseReferencesPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(SummaryViewer.class, "SummaryViewer.caseReferencesPanel.border.title"))); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 4;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
gridBagConstraints.insets = new java.awt.Insets(9, 0, 0, 0);
add(caseReferencesPanel, gridBagConstraints);
}// </editor-fold>//GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JLabel accountCountry;
private javax.swing.JLabel accountLabel;
private javax.swing.JLabel accoutDescriptionLabel;
private javax.swing.JLabel attachmentDataLabel;
@@ -93,3 +93,7 @@ MediaPlayerPanel.playButton.text=\u25ba
MediaPlayerPanel.infoLabel.text=No Errors
MediaPlayerPanel.VolumeIcon.text=Volume
MediaPlayerPanel.playBackSpeedLabel.text=Speed:
ContextViewer.jSourceGoToResultButton.text=Go to Result
ContextViewer.jSourceNameLabel.text=jSourceNameLabel
ContextViewer.jSourceTextLabel.text=jLabel2
ContextViewer.jSourceLabel.text=Source
@@ -10,6 +10,17 @@ AnnotationsContentViewer.title=Annotations
AnnotationsContentViewer.toolTip=Displays tags and comments associated with the selected content.
ApplicationContentViewer.title=Application
ApplicationContentViewer.toolTip=Displays file contents.
ContextViewer.attachmentSource=Attached to:
ContextViewer.downloadedOn=On
ContextViewer.downloadSource=Downloaded from:
ContextViewer.downloadURL=URL
ContextViewer.email=Email
ContextViewer.message=Message
ContextViewer.messageFrom=From
ContextViewer.messageOn=On
ContextViewer.messageTo=From
ContextViewer.title=Context Viewer
ContextViewer.toolTip=Displays context for selected file.
FXVideoPanel.pauseButton.infoLabel.playbackErr=Unable to play video.
FXVideoPanel.progress.bufferingCancelled=media buffering was canceled
FXVideoPanel.progress.bufferingInterrupted=media buffering was interrupted
@@ -23,6 +34,7 @@ GstVideoPanel.noOpenCase.errMsg=No open case available.
Html_text_display_error=The HTML text cannot be displayed, it may not be correctly formed HTML.
HtmlPanel_showImagesToggleButton_hide=Hide Images
HtmlPanel_showImagesToggleButton_show=Download Images
HtmlViewer_encoding_error=This file has unsupported encoding
HtmlViewer_file_error=This file is missing or unreadable.
MediaFileViewer.initGst.gstException.msg=Error initializing gstreamer for audio/video viewing and frame extraction capabilities. Video and audio viewing will be disabled.
GstVideoPanel.setupVideo.infoLabel.text=Playback of deleted videos is not supported, use an external player.
@@ -163,6 +175,10 @@ MediaPlayerPanel.playButton.text=\u25ba
MediaPlayerPanel.infoLabel.text=No Errors
MediaPlayerPanel.VolumeIcon.text=Volume
MediaPlayerPanel.playBackSpeedLabel.text=Speed:
ContextViewer.jSourceGoToResultButton.text=Go to Result
ContextViewer.jSourceNameLabel.text=jSourceNameLabel
ContextViewer.jSourceTextLabel.text=jLabel2
ContextViewer.jSourceLabel.text=Source
# {0} - tableName
SQLiteViewer.readTable.errorText=Error getting rows for table: {0}
# {0} - tableName
@@ -1,36 +1,81 @@
FXVideoPanel.pauseButton.infoLabel.playbackErr=\u30d3\u30c7\u30aa\u3092\u518d\u751f\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
FXVideoPanel.progress.bufferingCancelled=\u30e1\u30c7\u30a3\u30a2\u306e\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0\u304c\u30ad\u30e3\u30f3\u30bb\u30eb\u3055\u308c\u307e\u3057\u305f
FXVideoPanel.progress.bufferingInterrupted=\u30e1\u30c7\u30a3\u30a2\u306e\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0\u304c\u4e2d\u65ad\u3055\u308c\u307e\u3057\u305f
FXVideoPanel.progress.errorWritingVideoToDisk=\u30d3\u30c7\u30aa\u3092\u30c7\u30a3\u30b9\u30af\u3078\u66f8\u304d\u8fbc\u307f\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f
FXVideoPanel.mediaPane.infoLabel=\u524a\u9664\u3055\u308c\u305f\u30d3\u30c7\u30aa\u306e\u518d\u751f\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u5916\u90e8\u30d7\u30ec\u30fc\u30e4\u30fc\u3092\u4f7f\u7528\u3057\u3066\u4e0b\u3055\u3044\u3002
FXVideoPanel.progress.bufferingFile={0}\u3092\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0
FXVideoPanel.progressLabel.buffering=\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0\u4e2d\u2026
AnnotationsContentViewer.centralRepositoryEntryDataLabel.case=\u30b1\u30fc\u30b9:
AnnotationsContentViewer.centralRepositoryEntryDataLabel.comment=\u30b3\u30e1\u30f3\u30c8:
AnnotationsContentViewer.centralRepositoryEntryDataLabel.path=\u30d1\u30b9:
AnnotationsContentViewer.centralRepositoryEntryDataLabel.type=\u30bf\u30a4\u30d7:
AnnotationsContentViewer.tagEntryDataLabel.comment=\u30b3\u30e1\u30f3\u30c8:
AnnotationsContentViewer.tagEntryDataLabel.tag=\u30bf\u30b0:
AnnotationsContentViewer.tagEntryDataLabel.tagUser=\u30bf\u30b0\u30e6\u30fc\u30b6\u30fc:
AnnotationsContentViewer.title=\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3
AnnotationsContentViewer.toolTip=\u9078\u629e\u3057\u305f\u30b3\u30f3\u30c6\u30f3\u30c4\u3068\u95a2\u9023\u4ed8\u3051\u3089\u308c\u3066\u3044\u308b\u30bf\u30b0\u3068\u30b3\u30e1\u30f3\u30c8\u3092\u8868\u793a\u3057\u307e\u3059\u3002
ApplicationContentViewer.title=\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3
ApplicationContentViewer.toolTip=\u30d5\u30a1\u30a4\u30eb\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u8868\u793a\u3057\u307e\u3059\u3002
FXVideoPanel.pauseButton.infoLabel.playbackErr=\u52d5\u753b\u3092\u518d\u751f\u3067\u304d\u307e\u305b\u3093\u3002
FXVideoPanel.progress.bufferingCancelled=\u30e1\u30c7\u30a3\u30a2\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0\u304c\u53d6\u308a\u6d88\u3055\u308c\u307e\u3057\u305f\u3002
FXVideoPanel.progress.bufferingInterrupted=\u30e1\u30c7\u30a3\u30a2\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0\u304c\u4e2d\u65ad\u3055\u308c\u307e\u3057\u305f\u3002
FXVideoPanel.progress.errorWritingVideoToDisk=\u52d5\u753b\u3092\u30c7\u30a3\u30b9\u30af\u306b\u66f8\u304d\u8fbc\u307f\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f
FXVideoPanel.mediaPane.infoLabel=\u524a\u9664\u3057\u305f\u52d5\u753b\u306e\u518d\u751f\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u5916\u90e8\u30d7\u30ec\u30fc\u30e4\u30fc\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002
FXVideoPanel.progress.bufferingFile={0} \u3092\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0\u4e2d\u3067\u3059
FXVideoPanel.progressLabel.buffering=\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0\u4e2d\u3067\u3059...
FXVideoPanel.media.unsupportedFormat=\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u306a\u3044\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3067\u3059\u3002
GstVideoPanel.cannotProcFile.err=\u30e1\u30c7\u30a4\u30a2\u30d7\u30ec\u30fc\u30e4\u30fc\u3067\u306f\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u51e6\u7406\u3067\u304d\u307e\u305b\u3093\u3002
GstVideoPanel.initGst.gstException.msg=\u30aa\u30fc\u30c7\u30a3\u30aa\uff0f\u30d3\u30c7\u30aa\u306e\u518d\u751f\u304a\u3088\u3073\u30d5\u30ec\u30fc\u30e0\u306e\u62bd\u51fa\u306b\u4f7f\u7528\u3059\u308bGStreamer\u306e\u521d\u671f\u5316\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u30d3\u30c7\u30aa\u304a\u3088\u3073\u30aa\u30fc\u30c7\u30a3\u30aa\u518d\u751f\u304c\u7121\u52b9\u5316\u3055\u308c\u307e\u3059\u3002
GstVideoPanel.setupVideo.infoLabel.text=\u524a\u9664\u3055\u308c\u305f\u30d3\u30c7\u30aa\u306e\u518d\u751f\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u5916\u90e8\u30d7\u30ec\u30fc\u30e4\u30fc\u3092\u4f7f\u7528\u3057\u3066\u4e0b\u3055\u3044\u3002
GstVideoPanel.exception.problemFile.msg=\u30d5\u30a1\u30a4\u30eb({0})\u304b\u3089\u30d5\u30ec\u30fc\u30e0\u3092\u62bd\u51fa\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
GstVideoPanel.exception.problemPlay.msg=\u30d3\u30c7\u30aa\u30d5\u30a1\u30a4\u30eb\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u9577\u3055\u3092\u78ba\u8a8d\u4e2d\u306b\u518d\u751f\u3092\u3057\u3088\u3046\u3068\u3057\u305f\u969b\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
GstVideoPanel.exception.problemPause.msg=\u30d3\u30c7\u30aa\u30d5\u30a1\u30a4\u30eb\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u9577\u3055\u3092\u78ba\u8a8d\u4e2d\u306b\u4e00\u6642\u505c\u6b62\u3092\u3057\u3088\u3046\u3068\u3057\u305f\u969b\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
GstVideoPanel.exception.problemPauseCaptFrame.msg=\u30d3\u30c7\u30aa\u30d5\u30a1\u30a4\u30eb\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u30d5\u30ec\u30fc\u30e0\u306e\u62bd\u51fa\u4e2d\u306b\u4e00\u6642\u505c\u6b62\u3092\u3057\u3088\u3046\u3068\u3057\u305f\u969b\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
GstVideoPanel.exception.problemPlayCaptFrame.msg=\u30d3\u30c7\u30aa\u30d5\u30a1\u30a4\u30eb\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u30d5\u30ec\u30fc\u30e0\u306e\u62bd\u51fa\u4e2d\u306b\u518d\u751f\u3057\u3088\u3046\u3068\u3057\u305f\u969b\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
GstVideoPanel.exception.problemStopCaptFrame.msg=\u30d3\u30c7\u30aa\u30d5\u30a1\u30a4\u30eb\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u30d5\u30ec\u30fc\u30e0\u306e\u62bd\u51fa\u4e2d\u306b\u505c\u6b62\u3057\u3088\u3046\u3068\u3057\u305f\u969b\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
GstVideoPanel.progress.buffering=\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0\u4e2d\u2026
GstVideoPanel.progressLabel.bufferingErr=\u30d5\u30a1\u30a4\u30eb\u306e\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0\u30a8\u30e9\u30fc
GstVideoPanel.progress.infoLabel.updateErr=\u30d3\u30c7\u30aa\u30d7\u30ed\u30b0\u30ec\u30b9\u306e\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\uff1a {0}
GstVideoPanel.ExtractMedia.progress.buffering={0}\u3092\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0\u4e2d
GstVideoPanel.cannotProcFile.err=\u30e1\u30c7\u30a3\u30a2\u30d7\u30ec\u30a4\u30e4\u30fc\u306f\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u51e6\u7406\u3067\u304d\u307e\u305b\u3093\u3002
GstVideoPanel.noOpenCase.errMsg=\u958b\u3044\u3066\u3044\u308b\u30b1\u30fc\u30b9\u306f\u3042\u308a\u307e\u305b\u3093\u3002
Html_text_display_error=HTML\u30c6\u30ad\u30b9\u30c8\u3092\u8868\u793a\u3067\u304d\u307e\u305b\u3093\u3002 \u6b63\u3057\u304f\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3055\u308c\u305fHTML\u3067\u306a\u3044\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002
HtmlPanel_showImagesToggleButton_hide=\u30a4\u30e1\u30fc\u30b8\u3092\u975e\u8868\u793a\u306b\u3059\u308b
HtmlPanel_showImagesToggleButton_show=\u30a4\u30e1\u30fc\u30b8\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9
HtmlViewer_file_error=\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306f\u898b\u3064\u304b\u3089\u306a\u3044\u304b\u3001\u89e3\u8aad\u3067\u304d\u307e\u305b\u3093\u3002
MediaFileViewer.initGst.gstException.msg=\u30aa\u30fc\u30c7\u30a3\u30aa/\u52d5\u753b\u8996\u8074\u6a5f\u80fd\u3068\u30d5\u30ec\u30fc\u30e0\u62bd\u51fa\u6a5f\u80fd\u3092\u4f7f\u7528\u3059\u308b\u305f\u3081\u306bGstreamer\u3092\u521d\u671f\u5316\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 \u30aa\u30fc\u30c7\u30a3\u30aa/\u52d5\u753b\u8996\u8074\u304c\u7121\u52b9\u5316\u3055\u308c\u307e\u3059\u3002
GstVideoPanel.setupVideo.infoLabel.text=\u524a\u9664\u3057\u305f\u52d5\u753b\u306e\u518d\u751f\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u5916\u90e8\u30d7\u30ec\u30fc\u30e4\u30fc\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002
GstVideoPanel.exception.problemFile.msg=\u3053\u306e\u30d5\u30a1\u30a4\u30eb({0})\u304b\u3089\u30d5\u30ec\u30fc\u30e0\u3092\u30ad\u30e3\u30d7\u30c1\u30e3\u30fc\u3067\u304d\u307e\u305b\u3093\u3002
GstVideoPanel.exception.problemPlay.msg=\u52d5\u753b\u30d5\u30a1\u30a4\u30eb\u306b\u554f\u984c\u304c\u3042\u308a\u307e\u3059\u3002\u7dcf\u518d\u751f\u6642\u9593\u306e\u53d6\u5f97\u4e2d\u306b\u518d\u751f\u3092\u8a66\u307f\u308b\u3068\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3059\u3002
GstVideoPanel.exception.problemPause.msg=\u52d5\u753b\u30d5\u30a1\u30a4\u30eb\u306b\u554f\u984c\u304c\u3042\u308a\u307e\u3059\u3002\u7dcf\u518d\u751f\u6642\u9593\u306e\u53d6\u5f97\u4e2d\u306b\u4e00\u6642\u505c\u6b62\u3092\u8a66\u307f\u308b\u3068\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3059\u3002
GstVideoPanel.exception.problemPauseCaptFrame.msg=\u52d5\u753b\u30d5\u30a1\u30a4\u30eb\u306b\u554f\u984c\u304c\u3042\u308a\u307e\u3059\u3002\u30d5\u30ec\u30fc\u30e0\u306e\u30ad\u30e3\u30d7\u30c1\u30e3\u30fc\u4e2d\u306b\u4e00\u6642\u505c\u6b62\u3092\u8a66\u307f\u308b\u3068\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3059\u3002
GstVideoPanel.exception.problemPlayCaptFrame.msg=\u52d5\u753b\u30d5\u30a1\u30a4\u30eb\u306b\u554f\u984c\u304c\u3042\u308a\u307e\u3059\u3002\u30d5\u30ec\u30fc\u30e0\u306e\u30ad\u30e3\u30d7\u30c1\u30e3\u30fc\u4e2d\u306b\u518d\u751f\u3092\u8a66\u307f\u308b\u3068\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3059\u3002
GstVideoPanel.exception.problemStopCaptFrame.msg=\u52d5\u753b\u30d5\u30a1\u30a4\u30eb\u306b\u554f\u984c\u304c\u3042\u308a\u307e\u3059\u3002\u30d5\u30ec\u30fc\u30e0\u306e\u30ad\u30e3\u30d7\u30c1\u30e3\u30fc\u4e2d\u306b\u505c\u6b62\u3092\u8a66\u307f\u308b\u3068\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3059\u3002
GstVideoPanel.progress.buffering=\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0\u4e2d\u3067\u3059...
GstVideoPanel.progressLabel.bufferingErr=\u30d5\u30a1\u30a4\u30eb\u306e\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f
GstVideoPanel.progress.infoLabel.updateErr=\u6b21\u306e\u52d5\u753b\u306e\u9032\u6357\u72b6\u6cc1\u3092\u66f4\u65b0\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: {0}
GstVideoPanel.ExtractMedia.progress.buffering={0} \u3092\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0\u4e2d\u3067\u3059
MediaFileViewer.AccessibleContext.accessibleDescription=
MediaFileViewer.title=\u30e1\u30c7\u30a3\u30a2
MediaFileViewer.toolTip=\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u30de\u30eb\u30c1\u30e1\u30c7\u30a3\u30a2\u30d5\u30a1\u30a4\u30eb\uff08\u30a4\u30e1\u30fc\u30b8\u3001\u30d3\u30c7\u30aa\u3001\u30aa\u30fc\u30c7\u30a3\u30aa\uff09\u3092\u8868\u793a\u3057\u307e\u3059\u3002
MediaViewImagePanel.imgFileTooLarge.msg=\u30a4\u30e1\u30fc\u30b8\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\u3067\u3057\u305f\uff08\u5927\u304d\u3059\u304e\u3067\u3059\uff09\uff1a {0}
MediaFileViewer.toolTip=\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u30de\u30eb\u30c1\u30e1\u30c7\u30a3\u30a2\u30d5\u30a1\u30a4\u30eb(\u30a4\u30e1\u30fc\u30b8\u3001\u52d5\u753b\u3001\u30aa\u30fc\u30c7\u30a3\u30aa)\u3092\u8868\u793a\u3057\u307e\u3059
MediaPlayerPanel.noSupport=\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u306a\u3044\u30d5\u30a1\u30a4\u30eb\u3067\u3059\u3002
MediaPlayerPanel.timeFormat=%02d:%02d:%02d
MediaPlayerPanel.unknownTime=\u4e0d\u660e
MediaViewImagePanel.createTagOption=\u4f5c\u6210
MediaViewImagePanel.deleteTagOption=\u524a\u9664
MediaViewImagePanel.errorLabel.OOMText=\u30e1\u30c7\u30a3\u30a2\u30d3\u30e5\u30fc\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u30e1\u30e2\u30ea\u30fc\u304c\u4e0d\u8db3\u3057\u3066\u3044\u307e\u3059\u3002
MediaViewImagePanel.errorLabel.text=\u30e1\u30c7\u30a3\u30a2\u30d3\u30e5\u30fc\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\u3067\u3057\u305f\u3002
MediaViewImagePanel.exportSaveText=\u4fdd\u5b58
MediaViewImagePanel.exportTagOption=\u30a8\u30af\u30b9\u30dd\u30fc\u30c8
MediaViewImagePanel.externalViewerButton.text=\u5916\u90e8\u30d3\u30e5\u30fc\u30ef\u30fc\u3067\u958b\u304f Ctrl+E
MediaViewImagePanel.fileChooserTitle=\u4fdd\u5b58\u5834\u6240\u3092\u9078\u629e
MediaViewImagePanel.hideTagOption=\u975e\u8868\u793a
MediaViewImagePanel.successfulExport=\u30bf\u30b0\u4ed8\u3051\u3055\u308c\u305f\u30a4\u30e1\u30fc\u30b8\u304c\u6b63\u5e38\u306b\u4fdd\u5b58\u3055\u308c\u307e\u3057\u305f\u3002
MediaViewImagePanel.unsuccessfulExport=\u30bf\u30b0\u4ed8\u3051\u3055\u308c\u305f\u30a4\u30e1\u30fc\u30b8\u3092\u30c7\u30a3\u30b9\u30af\u306b\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u3067\u304d\u307e\u305b\u3093\u3002
MediaViewVideoPanel.pauseButton.text=\u25ba
MediaViewVideoPanel.progressLabel.text=00\:00
MediaViewVideoPanel.infoLabel.text=\u60c5\u5831
MediaViewVideoPanel.progressLabel.text=00:00
MediaViewVideoPanel.infoLabel.text=\u4fdd\u5b58
MediaViewImagePanel.imgFileTooLarge.msg=\u6b21\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\u3067\u3057\u305f(\u5927\u304d\u3059\u304e\u3066): {0}
MessageContentViewer.AtrachmentsPanel.title=\u6dfb\u4ed8\u30d5\u30a1\u30a4\u30eb
MessageContentViewer.title=\u30e1\u30c3\u30bb\u30fc\u30b8
MessageContentViewer.toolTip=\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u8868\u793a\u3057\u307e\u3059\u3002
Metadata.nodeText.none=\u306a\u3057
Metadata.nodeText.truncated=(\u4e00\u62ec\u524a\u9664\u3055\u308c\u305f\u7d50\u679c)
Metadata.nodeText.unknown=\u4e0d\u660e
Metadata.tableRowTitle.acquisitionDetails=\u53d6\u5f97\u306e\u8a73\u7d30
Metadata.tableRowTitle.deviceId=\u30c7\u30d0\u30a4\u30b9ID
Metadata.tableRowTitle.downloadSource=\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u5143
Metadata.tableRowTitle.imageType=\u30bf\u30a4\u30d7
Metadata.tableRowTitle.mimeType=MIME\u30bf\u30a4\u30d7
Metadata.tableRowTitle.name=\u540d\u524d
Metadata.tableRowTitle.sectorSize=\u30bb\u30af\u30bf\u30fc\u30b5\u30a4\u30ba
Metadata.tableRowTitle.sha1=SHA1
Metadata.tableRowTitle.sha256=SHA256
Metadata.tableRowTitle.size=\u30b5\u30a4\u30ba
Metadata.tableRowTitle.fileNameAlloc=\u30d5\u30a1\u30a4\u30eb\u540d\u30a2\u30ed\u30b1\u30fc\u30b7\u30e7\u30f3
Metadata.tableRowTitle.metadataAlloc=\u30e1\u30bf\u30c7\u30fc\u30bf\u30a2\u30ed\u30b1\u30fc\u30b7\u30e7\u30f3
Metadata.tableRowTitle.fileNameAlloc=\u30d5\u30a1\u30a4\u30eb\u540d\u306e\u5272\u308a\u5f53\u3066
Metadata.tableRowTitle.metadataAlloc=\u30e1\u30bf\u30c7\u30fc\u30bf\u306e\u5272\u308a\u5f53\u3066
Metadata.tableRowTitle.modified=\u4fee\u6b63\u6e08\u307f
Metadata.tableRowTitle.accessed=\u30a2\u30af\u30bb\u30b9\u6e08\u307f
Metadata.tableRowTitle.created=\u4f5c\u6210\u6e08\u307f
@@ -40,9 +85,82 @@ Metadata.tableRowTitle.md5=MD5
Metadata.tableRowTitle.hashLookupResults=\u30cf\u30c3\u30b7\u30e5\u30eb\u30c3\u30af\u30a2\u30c3\u30d7\u7d50\u679c
Metadata.tableRowTitle.internalid=\u5185\u90e8ID
Metadata.tableRowTitle.localPath=\u30ed\u30fc\u30ab\u30eb\u30d1\u30b9
Metadata.title=\u30d5\u30a1\u30a4\u30eb\u30e1\u30bf\u30c7\u30fc\u30bf
Metadata.toolTip=\u30d5\u30a1\u30a4\u30eb\u306e\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u8868\u793a\u3057\u307e\u3059\u3002
Metadata.tableRowTitle.timezone=\u30bf\u30a4\u30e0\u30be\u30fc\u30f3
Metadata.tableRowTitle.type=\u30bf\u30a4\u30d7
Metadata.nodeText.exceptionNotice.text=\u30d5\u30a1\u30a4\u30eb\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\uff1a
Metadata.nodeText.text=Sleuth Kit istat\u30c4\u30fc\u30eb\u304b\u3089\uff1a
Metadata.nodeText.nonFilePassedIn=\u5165\u529b\u3055\u308c\u305f\u3082\u306e\u306f\u30d5\u30a1\u30a4\u30eb\u3067\u306f\u3042\u308a\u307e\u305b\u3093
Metadata.title=\u30d5\u30a1\u30a4\u30eb\u306e\u30e1\u30bf\u30c7\u30fc\u30bf
Metadata.toolTip=\u30d5\u30a1\u30a4\u30eb\u306e\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u8868\u793a\u3057\u307e\u3059\u3002
Metadata.nodeText.nonFilePassedIn=\u30d5\u30a1\u30a4\u30eb\u4ee5\u5916\u306e\u3082\u306e\u304c\u901a\u904e\u3057\u307e\u3057\u305f
Metadata.nodeText.text=\u9001\u4fe1\u5143\u306eSleuth Kit\u306eistat\u30c4\u30fc\u30eb:
Metadata.nodeText.exceptionNotice.text=\u30d5\u30a1\u30a4\u30eb\u306e\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f:
MessageContentViewer.rtfbodyScrollPane.TabConstraints.tabTitle=RTF
MessageContentViewer.headersScrollPane.TabConstraints.tabTitle=\u30d8\u30c3\u30c0\u30fc
MessageContentViewer.textbodyScrollPane.TabConstraints.tabTitle=\u30c6\u30ad\u30b9\u30c8
MessageContentViewer.htmlPane.TabConstraints.tabTitle=HTML
MessageContentViewer.fromText.text=\u9001\u4fe1\u5143\u30a2\u30c9\u30ec\u30b9\u3092\u3053\u3053\u306b\u8868\u793a
MessageContentViewer.fromLabel.text=\u5dee\u51fa\u4eba:
MessageContentViewer.datetimeText.text=\u65e5\u4ed8\u3092\u3053\u3053\u306b\u8868\u793a
MessageContentViewer.toText.text=\u5b9b\u5148\u306eTO\u30ea\u30b9\u30c8\u3092\u3053\u3053\u306b\u8868\u793a
MessageContentViewer.toLabel.text=\u5b9b\u5148:
MessageContentViewer.ccText.text=\u5b9b\u5148\u306eCC\u30ea\u30b9\u30c8\u3092\u3053\u3053\u306b\u8868\u793a
MessageContentViewer.subjectLabel.text=\u4ef6\u540d:
MessageContentViewer.subjectText.text=\u4ef6\u540d\u3092\u3053\u3053\u306b\u8868\u793a
MessageContentViewer.directionText.text=\u9001\u53d7\u4fe1\u306e\u7a2e\u5225
MessageContentViewer.ccLabel.text=CC:
MessageContentViewer.attachmentsPanel.TabConstraints.tabTitle=\u6dfb\u4ed8\u30d5\u30a1\u30a4\u30eb
MessageContentViewer.viewInNewWindowButton.text=\u65b0\u3057\u3044\u30a6\u30a3\u30f3\u30c9\u30a6\u3067\u8868\u793a
JPEGViewerDummy.jLabel1.text=JPEG\u30d5\u30a1\u30a4\u30eb\u304c\u8868\u793a\u3055\u308c\u3066\u3044\u307e\u3059:
JPEGViewerDummy.jTextField1.text=jTextField1
PListNode.KeyCol=\u30ad\u30fc
PListNode.TypeCol=\u30bf\u30a4\u30d7
PListNode.ValueCol=\u5024
PListViewer.DataType.message=\u30d0\u30a4\u30ca\u30ea\u30fc\u30c7\u30fc\u30bf\u5024\u304c\u8868\u793a\u3055\u308c\u3066\u3044\u307e\u305b\u3093
PListViewer.ExportFailed.message=Plist\u30d5\u30a1\u30a4\u30eb\u306e\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002
PListViewer.ExportSuccess.message=Plist\u30d5\u30a1\u30a4\u30eb\u304c\u6b63\u5e38\u306b\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u3055\u308c\u307e\u3057\u305f
PListViewer.processPlist.errorMessage=plist\u30d5\u30a1\u30a4\u30eb\u306e\u89e3\u6790/\u8868\u793a\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
PListViewer.processPlist.interruptedMessage=plist\u30d5\u30a1\u30a4\u30eb\u306e\u89e3\u6790/\u8868\u793a\u4e2d\u306b\u4e2d\u65ad\u3055\u308c\u307e\u3057\u305f\u3002
SQLiteTableView.DisplayAs.text=\u5225\u540d\u3067\u8868\u793a
SQLiteTableView.DisplayAsMenuItem.Date=\u65e5\u4ed8
SQLiteTableView.DisplayAsMenuItem.RawData=\u30ed\u30fc\u30c7\u30fc\u30bf
SQLiteViewer.comboBox.noTableEntry=\u30c6\u30fc\u30d6\u30eb\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093
SQLiteViewer.csvExport.confirm.msg=\u65e2\u5b58\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u4e0a\u66f8\u304d\u3057\u307e\u3059\u304b?
SQLiteViewer.csvExport.fileName.empty=\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u3059\u308b\u30d5\u30a1\u30a4\u30eb\u540d\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
SQLiteViewer.csvExport.title=CSV\u30d5\u30a1\u30a4\u30eb\u306b\u30a8\u30af\u30b9\u30dd\u30fc\u30c8
SQLiteViewer.errorMessage.failedToExtractFile=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u304b\u3089\u30d5\u30a1\u30a4\u30eb\u3092\u62bd\u51fa\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
SQLiteViewer.errorMessage.failedToinitJDBCDriver=SQLite\u306eJDBC\u30c9\u30e9\u30a4\u30d0\u30fc\u3092\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\u3067\u3057\u305f\u3002
SQLiteViewer.errorMessage.failedToQueryDatabase=\u30d5\u30a1\u30a4\u30eb\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30c6\u30fc\u30d6\u30eb\u3092\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\u3067\u3057\u305f\u3002
SQLiteViewer.errorMessage.interrupted=\u30d5\u30a1\u30a4\u30eb\u306e\u51e6\u7406\u304c\u4e2d\u65ad\u3055\u308c\u307e\u3057\u305f\u3002
SQLiteViewer.errorMessage.noCurrentCase=\u30b1\u30fc\u30b9\u304c\u9589\u3058\u3089\u308c\u307e\u3057\u305f\u3002
# {0} - \u4f8b\u5916\u30e1\u30c3\u30bb\u30fc\u30b8
SQLiteViewer.errorMessage.unexpectedError=\u4e88\u671f\u305b\u306c\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f:\n{0)\u3002
SQLiteViewer.exportTableToCsv.FileName=\u30d5\u30a1\u30a4\u30eb\u540d:
SQLiteViewer.exportTableToCsv.TableName=\u30c6\u30fc\u30d6\u30eb\u540d:
SQLiteViewer.exportTableToCsv.write.errText=\u30c6\u30fc\u30d6\u30eb\u30b3\u30f3\u30c6\u30f3\u30c4\u3092CSV\u30d5\u30a1\u30a4\u30eb\u306b\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
SQLiteViewer.nextPageButton.text=
SQLiteViewer.prevPageButton.text=
SQLiteViewer.numPagesLabel.text=N
SQLiteViewer.jLabel3.text=/
SQLiteViewer.currPageLabel.text=x
SQLiteViewer.jLabel2.text=\u30da\u30fc\u30b8
SQLiteViewer.numEntriesField.text=num Entries
SQLiteViewer.jLabel1.text=\u30c6\u30fc\u30d6\u30eb
PListViewer.exportButton.text=\u30a8\u30af\u30b9\u30dd\u30fc\u30c8
SQLiteViewer.exportCsvButton.text=CSV\u306b\u30a8\u30af\u30b9\u30dd\u30fc\u30c8
MediaViewImagePanel.rotateLeftButton.text=
MediaViewImagePanel.zoomInButton.text=
MediaViewImagePanel.rotateRightButton.text=
MediaViewImagePanel.zoomOutButton.text=
MediaViewImagePanel.zoomResetButton.text=\u30ea\u30bb\u30c3\u30c8
MediaViewImagePanel.zoomTextField.text=
MediaViewImagePanel.rotationTextField.text=
MediaViewImagePanel.rotateLeftButton.toolTipText=
HtmlPanel.showImagesToggleButton.text=\u30a4\u30e1\u30fc\u30b8\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9
MediaPlayerPanel.audioSlider.toolTipText=
MediaPlayerPanel.VolumeIcon.text=\ \ \ \ \ \u30dc\u30ea\u30e5\u30fc\u30e0
MediaPlayerPanel.progressLabel.text=00:00:00/00:00:00
MediaPlayerPanel.playButton.text=\u25ba
MediaPlayerPanel.infoLabel.text=\u30a8\u30e9\u30fc\u306a\u3057
MediaViewImagePanel.tagsMenu.text_1=\u30bf\u30b0\u30e1\u30cb\u30e5\u30fc
# {0} - tableName
SQLiteViewer.readTable.errorText=\u6b21\u306e\u30c6\u30fc\u30d6\u30eb\u306e\u884c\u3092\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: {0}
# {0} - tableName
SQLiteViewer.selectTable.errorText=\u6b21\u306e\u30c6\u30fc\u30d6\u30eb\u306e\u884c\u30ab\u30a6\u30f3\u30c8\u3092\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: {0}
@@ -0,0 +1,108 @@
<?xml version="1.0" encoding="UTF-8" ?>
<Form version="1.5" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
<Properties>
<Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
<Color blue="ff" green="ff" red="ff" type="rgb"/>
</Property>
</Properties>
<AuxValues>
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="true"/>
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/>
<AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
</AuxValues>
<Layout>
<DimensionLayout dim="0">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="0" attributes="0">
<Group type="103" groupAlignment="0" attributes="0">
<Component id="jSourceLabel" min="-2" max="-2" attributes="0"/>
<Group type="102" alignment="0" attributes="0">
<EmptySpace min="-2" pref="6" max="-2" attributes="0"/>
<Component id="jSourceNameLabel" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="jSourceTextLabel" pref="192" max="32767" attributes="0"/>
</Group>
</Group>
<EmptySpace min="-2" pref="36" max="-2" attributes="0"/>
</Group>
<Group type="102" alignment="0" attributes="0">
<Component id="jSourceGoToResultButton" min="-2" max="-2" attributes="0"/>
<EmptySpace max="32767" attributes="0"/>
</Group>
</Group>
</Group>
</Group>
</DimensionLayout>
<DimensionLayout dim="1">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="0" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<Component id="jSourceLabel" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Group type="103" groupAlignment="3" attributes="0">
<Component id="jSourceNameLabel" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="jSourceTextLabel" alignment="3" min="-2" max="-2" attributes="0"/>
</Group>
<EmptySpace type="separate" max="-2" attributes="0"/>
<Component id="jSourceGoToResultButton" min="-2" max="-2" attributes="0"/>
<EmptySpace min="0" pref="203" max="32767" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
</Layout>
<SubComponents>
<Component class="javax.swing.JButton" name="jSourceGoToResultButton">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/contentviewers/Bundle.properties" key="ContextViewer.jSourceGoToResultButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jSourceGoToResultButtonActionPerformed"/>
</Events>
<AuxValues>
<AuxValue name="JavaCodeGenerator_VariableLocal" type="java.lang.Boolean" value="true"/>
<AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="0"/>
</AuxValues>
</Component>
<Component class="javax.swing.JLabel" name="jSourceLabel">
<Properties>
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
<Font name="Dialog" size="14" style="1"/>
</Property>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/contentviewers/Bundle.properties" key="ContextViewer.jSourceLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<AuxValues>
<AuxValue name="JavaCodeGenerator_VariableLocal" type="java.lang.Boolean" value="true"/>
<AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="0"/>
</AuxValues>
</Component>
<Component class="javax.swing.JLabel" name="jSourceNameLabel">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/contentviewers/Bundle.properties" key="ContextViewer.jSourceNameLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
</Component>
<Component class="javax.swing.JLabel" name="jSourceTextLabel">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/contentviewers/Bundle.properties" key="ContextViewer.jSourceTextLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
</Component>
</SubComponents>
</Form>
@@ -0,0 +1,442 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2019 Basis Technology Corp.
* Contact: carrier <at> sleuthkit <dot> org
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.sleuthkit.autopsy.contentviewers;
import java.awt.Component;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import org.apache.commons.lang.StringUtils;
import org.openide.nodes.Node;
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.corecomponentinterfaces.DataContentViewer;
import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.autopsy.directorytree.DirectoryTreeTopComponent;
import org.sleuthkit.datamodel.AbstractFile;
import org.sleuthkit.datamodel.BlackboardArtifact;
import static org.sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE.TSK_ASSOCIATED_OBJECT;
import org.sleuthkit.datamodel.BlackboardAttribute;
import org.sleuthkit.datamodel.SleuthkitCase;
import org.sleuthkit.datamodel.TskCoreException;
/**
* Displays additional context for the selected file, such as its source, and
* usage, if known.
*
*/
@ServiceProvider(service = DataContentViewer.class, position = 7)
public final class ContextViewer extends javax.swing.JPanel implements DataContentViewer {
private static final long serialVersionUID = 1L;
private static final Logger logger = Logger.getLogger(ContextViewer.class.getName());
private static final int ARTIFACT_STR_MAX_LEN = 1024;
private static final int ATTRIBUTE_STR_MAX_LEN = 200;
// defines a list of artifacts that provide context for a file
private static final List<BlackboardArtifact.ARTIFACT_TYPE> SOURCE_CONTEXT_ARTIFACTS = new ArrayList<>();
static {
SOURCE_CONTEXT_ARTIFACTS.add(TSK_ASSOCIATED_OBJECT);
}
private BlackboardArtifact sourceContextArtifact;
/**
* Creates new form ContextViewer
*/
public ContextViewer() {
initComponents();
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
javax.swing.JButton jSourceGoToResultButton = new javax.swing.JButton();
javax.swing.JLabel jSourceLabel = new javax.swing.JLabel();
jSourceNameLabel = new javax.swing.JLabel();
jSourceTextLabel = new javax.swing.JLabel();
setBackground(new java.awt.Color(255, 255, 255));
org.openide.awt.Mnemonics.setLocalizedText(jSourceGoToResultButton, org.openide.util.NbBundle.getMessage(ContextViewer.class, "ContextViewer.jSourceGoToResultButton.text")); // NOI18N
jSourceGoToResultButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jSourceGoToResultButtonActionPerformed(evt);
}
});
jSourceLabel.setFont(new java.awt.Font("Dialog", 1, 14)); // NOI18N
org.openide.awt.Mnemonics.setLocalizedText(jSourceLabel, org.openide.util.NbBundle.getMessage(ContextViewer.class, "ContextViewer.jSourceLabel.text")); // NOI18N
org.openide.awt.Mnemonics.setLocalizedText(jSourceNameLabel, org.openide.util.NbBundle.getMessage(ContextViewer.class, "ContextViewer.jSourceNameLabel.text")); // NOI18N
org.openide.awt.Mnemonics.setLocalizedText(jSourceTextLabel, org.openide.util.NbBundle.getMessage(ContextViewer.class, "ContextViewer.jSourceTextLabel.text")); // NOI18N
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jSourceLabel)
.addGroup(layout.createSequentialGroup()
.addGap(6, 6, 6)
.addComponent(jSourceNameLabel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jSourceTextLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 192, Short.MAX_VALUE)))
.addGap(36, 36, 36))
.addGroup(layout.createSequentialGroup()
.addComponent(jSourceGoToResultButton)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jSourceLabel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jSourceNameLabel)
.addComponent(jSourceTextLabel))
.addGap(18, 18, 18)
.addComponent(jSourceGoToResultButton)
.addGap(0, 203, Short.MAX_VALUE))
);
}// </editor-fold>//GEN-END:initComponents
private void jSourceGoToResultButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jSourceGoToResultButtonActionPerformed
final DirectoryTreeTopComponent dtc = DirectoryTreeTopComponent.findInstance();
// Navigate to the source context artifact.
if (sourceContextArtifact != null) {
dtc.viewArtifact(sourceContextArtifact);
}
}//GEN-LAST:event_jSourceGoToResultButtonActionPerformed
@Override
public void setNode(Node selectedNode) {
if ((selectedNode == null) || (!isSupported(selectedNode))) {
resetComponent();
return;
}
AbstractFile file = selectedNode.getLookup().lookup(AbstractFile.class);
try {
populateSourceContextData(file);
} catch (NoCurrentCaseException | TskCoreException ex) {
logger.log(Level.SEVERE, String.format("Exception displaying context for file %s", file.getName()), ex); //NON-NLS
}
}
@NbBundle.Messages({
"ContextViewer.title=Context",
"ContextViewer.toolTip=Displays context for selected file."
})
@Override
public String getTitle() {
return Bundle.ContextViewer_title();
}
@Override
public String getToolTip() {
return Bundle.ContextViewer_toolTip();
}
@Override
public DataContentViewer createInstance() {
return new ContextViewer();
}
@Override
public Component getComponent() {
return this;
}
@Override
public void resetComponent() {
setSourceName("");
setSourceText("");
}
@Override
public boolean isSupported(Node node) {
// check if the node has an abstract file and the file has any context defining artifacts.
if (node.getLookup().lookup(AbstractFile.class) != null) {
AbstractFile abstractFile = node.getLookup().lookup(AbstractFile.class);
for (BlackboardArtifact.ARTIFACT_TYPE artifactType : SOURCE_CONTEXT_ARTIFACTS) {
List<BlackboardArtifact> artifactsList;
try {
artifactsList = abstractFile.getArtifacts(artifactType);
if (!artifactsList.isEmpty()) {
return true;
}
} catch (TskCoreException ex) {
logger.log(Level.SEVERE, String.format("Exception while looking up context artifacts for file %s", abstractFile), ex); //NON-NLS
}
}
}
return false;
}
@Override
public int isPreferred(Node node) {
// this is a low preference viewer.
return 1;
}
/**
* Looks for context providing artifacts for the given file and populates
* the source context.
*
* @param sourceFile File for which to show the context.
*
* @throws NoCurrentCaseException
* @throws TskCoreException
*/
private void populateSourceContextData(AbstractFile sourceFile) throws NoCurrentCaseException, TskCoreException {
SleuthkitCase tskCase = Case.getCurrentCaseThrows().getSleuthkitCase();
// Check for all context artifacts
boolean foundASource = false;
for (BlackboardArtifact.ARTIFACT_TYPE artifactType : SOURCE_CONTEXT_ARTIFACTS) {
List<BlackboardArtifact> artifactsList = tskCase.getBlackboardArtifacts(artifactType, sourceFile.getId());
foundASource = !artifactsList.isEmpty();
for (BlackboardArtifact contextArtifact : artifactsList) {
addSourceEntry(contextArtifact);
}
}
if (foundASource == false) {
setSourceName("Unknown");
showSourceText(false);
}
}
/**
* Adds a source context entry for the selected file based on the given context
* providing artifact.
*
* @param artifact Artifact that may provide context.
*
* @throws NoCurrentCaseException
* @throws TskCoreException
*/
private void addSourceEntry(BlackboardArtifact artifact) throws TskCoreException {
if (BlackboardArtifact.ARTIFACT_TYPE.TSK_ASSOCIATED_OBJECT.getTypeID() == artifact.getArtifactTypeID()) {
BlackboardAttribute associatedArtifactAttribute = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_ASSOCIATED_ARTIFACT));
if (associatedArtifactAttribute != null) {
long artifactId = associatedArtifactAttribute.getValueLong();
BlackboardArtifact associatedArtifact = artifact.getSleuthkitCase().getBlackboardArtifact(artifactId);
//save the artifact for "Go to Result" button
sourceContextArtifact = associatedArtifact;
setSourceFields(associatedArtifact);
}
}
}
/**
* Sets the source label and text fields based on the given associated
* artifact.
*
* @param associatedArtifact - associated artifact
*
* @throws TskCoreException
*/
@NbBundle.Messages({
"ContextViewer.attachmentSource=Attached to: ",
"ContextViewer.downloadSource=Downloaded from: "
})
private void setSourceFields(BlackboardArtifact associatedArtifact) throws TskCoreException {
if (BlackboardArtifact.ARTIFACT_TYPE.TSK_MESSAGE.getTypeID() == associatedArtifact.getArtifactTypeID()
|| BlackboardArtifact.ARTIFACT_TYPE.TSK_EMAIL_MSG.getTypeID() == associatedArtifact.getArtifactTypeID()) {
setSourceName(Bundle.ContextViewer_attachmentSource());
setSourceText(msgArtifactToAbbreviatedString(associatedArtifact));
} else if (BlackboardArtifact.ARTIFACT_TYPE.TSK_WEB_DOWNLOAD.getTypeID() == associatedArtifact.getArtifactTypeID()
|| BlackboardArtifact.ARTIFACT_TYPE.TSK_WEB_CACHE.getTypeID() == associatedArtifact.getArtifactTypeID()) {
setSourceName(Bundle.ContextViewer_downloadSource());
setSourceText(webDownloadArtifactToString(associatedArtifact));
}
}
/**
* Sets the source label string.
*
* @param nameLabel String value for source label.
*/
private void setSourceName(String nameLabel) {
jSourceNameLabel.setText(nameLabel);
}
/**
* Sets the source text string.
*
* @param nameLabel String value for source text.
*/
private void setSourceText(String text) {
jSourceTextLabel.setText(text);
showSourceText(true);
}
private void showSourceText(boolean isVisible) {
jSourceTextLabel.setVisible(isVisible);
}
/**
* Returns a display string with download source URL from the given
* artifact.
*
* @param artifact artifact to get download source URL from.
*
* @return Display string with download URL and date/time.
*
* @throws TskCoreException
*/
@NbBundle.Messages({
"ContextViewer.downloadURL=URL",
"ContextViewer.downloadedOn=On"
})
private String webDownloadArtifactToString(BlackboardArtifact artifact) throws TskCoreException {
StringBuilder sb = new StringBuilder(ARTIFACT_STR_MAX_LEN);
Map<BlackboardAttribute.ATTRIBUTE_TYPE, BlackboardAttribute> attributesMap = getAttributesMap(artifact);
if (BlackboardArtifact.ARTIFACT_TYPE.TSK_WEB_DOWNLOAD.getTypeID() == artifact.getArtifactTypeID()
|| BlackboardArtifact.ARTIFACT_TYPE.TSK_WEB_CACHE.getTypeID() == artifact.getArtifactTypeID()) {
appendAttributeString(sb, BlackboardAttribute.ATTRIBUTE_TYPE.TSK_URL, attributesMap, Bundle.ContextViewer_downloadURL());
appendAttributeString(sb, BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DATETIME_CREATED, attributesMap, Bundle.ContextViewer_downloadedOn());
}
return sb.toString();
}
/**
* Returns a abbreviated display string for a message artifact.
*
* @param artifact artifact to get download source URL from.
*
* @return Display string for message artifact.
*
* @throws TskCoreException
*/
@NbBundle.Messages({
"ContextViewer.message=Message",
"ContextViewer.email=Email",
"ContextViewer.messageFrom=From",
"ContextViewer.messageTo=To",
"ContextViewer.messageOn=On",
})
private String msgArtifactToAbbreviatedString(BlackboardArtifact artifact) throws TskCoreException {
StringBuilder sb = new StringBuilder(ARTIFACT_STR_MAX_LEN);
Map<BlackboardAttribute.ATTRIBUTE_TYPE, BlackboardAttribute> attributesMap = getAttributesMap(artifact);
if (BlackboardArtifact.ARTIFACT_TYPE.TSK_MESSAGE.getTypeID() == artifact.getArtifactTypeID()) {
sb.append(Bundle.ContextViewer_message()).append(' ');
appendAttributeString(sb, BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PHONE_NUMBER_FROM, attributesMap, Bundle.ContextViewer_messageFrom());
appendAttributeString(sb, BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PHONE_NUMBER_TO, attributesMap, Bundle.ContextViewer_messageTo());
appendAttributeString(sb, BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DATETIME, attributesMap, Bundle.ContextViewer_messageOn());
} else if (BlackboardArtifact.ARTIFACT_TYPE.TSK_EMAIL_MSG.getTypeID() == artifact.getArtifactTypeID()) {
sb.append(Bundle.ContextViewer_email()).append(' ');
appendAttributeString(sb, BlackboardAttribute.ATTRIBUTE_TYPE.TSK_EMAIL_FROM, attributesMap, Bundle.ContextViewer_messageFrom());
appendAttributeString(sb, BlackboardAttribute.ATTRIBUTE_TYPE.TSK_EMAIL_TO, attributesMap, Bundle.ContextViewer_messageTo());
appendAttributeString(sb, BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DATETIME_SENT, attributesMap, Bundle.ContextViewer_messageOn());
}
return sb.toString();
}
/**
* Looks up specified attribute in the given map and, if found, appends its
* value to the given string builder.
*
* @param sb String builder to append to.
* @param attribType Attribute type to look for.
* @param attributesMap Attributes map.
* @param prependStr Optional string that is prepended before the attribute
* value.
*/
private void appendAttributeString(StringBuilder sb, BlackboardAttribute.ATTRIBUTE_TYPE attribType,
Map<BlackboardAttribute.ATTRIBUTE_TYPE, BlackboardAttribute> attributesMap, String prependStr) {
BlackboardAttribute attribute = attributesMap.get(attribType);
if (attribute != null) {
String attrVal = attribute.getDisplayString();
if (!StringUtils.isEmpty(attrVal)) {
if (!StringUtils.isEmpty(prependStr)) {
sb.append(prependStr).append(' ');
}
sb.append(StringUtils.abbreviate(attrVal, ATTRIBUTE_STR_MAX_LEN)).append(' ');
}
}
}
/**
* Gets all attributes for the given artifact, and returns a map of
* attributes keyed by attribute type.
*
* @param artifact Artifact for which to get the attributes.
*
* @return Map of attribute type and value.
*
* @throws TskCoreException
*/
private Map<BlackboardAttribute.ATTRIBUTE_TYPE, BlackboardAttribute> getAttributesMap(BlackboardArtifact artifact) throws TskCoreException {
Map<BlackboardAttribute.ATTRIBUTE_TYPE, BlackboardAttribute> attributeMap = new HashMap<>();
List<BlackboardAttribute> attributeList = artifact.getAttributes();
for (BlackboardAttribute attribute : attributeList) {
BlackboardAttribute.ATTRIBUTE_TYPE type = BlackboardAttribute.ATTRIBUTE_TYPE.fromID(attribute.getAttributeType().getTypeID());
attributeMap.put(type, attribute);
}
return attributeMap;
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JLabel jSourceNameLabel;
private javax.swing.JLabel jSourceTextLabel;
// End of variables declaration//GEN-END:variables
}
@@ -20,9 +20,12 @@ package org.sleuthkit.autopsy.contentviewers;
import java.awt.Component;
import java.awt.Cursor;
import java.io.UnsupportedEncodingException;
import java.util.Arrays;
import java.util.List;
import java.util.logging.Level;
import org.apache.tika.parser.txt.CharsetDetector;
import org.apache.tika.parser.txt.CharsetMatch;
import org.openide.util.NbBundle;
import org.openide.windows.WindowManager;
import org.sleuthkit.autopsy.coreutils.Logger;
@@ -59,17 +62,27 @@ final class HtmlViewer extends javax.swing.JPanel implements FileTypeViewer {
* @return The text content of the file.
*/
@NbBundle.Messages({
"HtmlViewer_file_error=This file is missing or unreadable.",})
"HtmlViewer_file_error=This file is missing or unreadable.",
"HtmlViewer_encoding_error=This file has unsupported encoding"})
private String getHtmlText(AbstractFile abstractFile) {
try {
int fileSize = (int) abstractFile.getSize();
byte[] buffer = new byte[fileSize];
abstractFile.read(buffer, 0, fileSize);
return new String(buffer);
CharsetMatch match = new CharsetDetector().setText(buffer).detect();
if (match != null) {
return new String(buffer, match.getName());
} else {
return new String(buffer);
}
} catch (TskCoreException ex) {
logger.log(Level.SEVERE, String.format("Unable to read from file '%s' (id=%d).",
abstractFile.getName(), abstractFile.getId()), ex);
return String.format("<p>%s</p>", Bundle.HtmlViewer_file_error());
} catch (UnsupportedEncodingException ex) {
logger.log(Level.SEVERE, String.format("Unsupported encoding for file '%s' (id=%d).",
abstractFile.getName(), abstractFile.getId()), ex);
return String.format("<p>%s</p>", Bundle.HtmlViewer_encoding_error());
}
}
@@ -637,7 +637,7 @@ public class MediaPlayerPanel extends JPanel implements MediaFileViewer.MediaVie
* thumb at the given width and height. It also paints the track blue as
* the thumb progresses.
*
* @param b JSlider component
* @param slider JSlider component
* @param config Configuration object. Contains info about thumb
* dimensions and colors.
*/
@@ -18,15 +18,17 @@
*/
package org.sleuthkit.autopsy.contentviewers;
import org.sleuthkit.autopsy.datamodel.AttachmentNode;
import com.google.gson.Gson;
import java.awt.Color;
import java.awt.Component;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.logging.Level;
import java.util.stream.Collectors;
import javax.swing.text.JTextComponent;
import org.apache.commons.lang3.StringUtils;
import org.jsoup.Jsoup;
@@ -35,15 +37,12 @@ import org.openide.explorer.ExplorerManager;
import org.openide.nodes.AbstractNode;
import org.openide.nodes.Children;
import org.openide.nodes.Node;
import org.openide.nodes.Sheet;
import org.openide.util.NbBundle;
import org.openide.util.lookup.ServiceProvider;
import org.sleuthkit.autopsy.corecomponentinterfaces.DataContentViewer;
import org.sleuthkit.autopsy.corecomponents.DataResultPanel;
import org.sleuthkit.autopsy.corecomponents.TableFilterNode;
import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.autopsy.datamodel.AbstractAbstractFileNode;
import org.sleuthkit.autopsy.datamodel.FileNode;
import org.sleuthkit.autopsy.directorytree.DataResultFilterNode;
import org.sleuthkit.autopsy.directorytree.NewWindowViewAction;
import org.sleuthkit.datamodel.AbstractFile;
@@ -67,7 +66,12 @@ import static org.sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PHO
import static org.sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PHONE_NUMBER_TO;
import static org.sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE.TSK_SUBJECT;
import static org.sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE.TSK_TEXT;
import org.sleuthkit.datamodel.Content;
import org.sleuthkit.datamodel.TskCoreException;
import org.sleuthkit.datamodel.blackboardutils.FileAttachment;
import org.sleuthkit.datamodel.blackboardutils.MessageAttachments;
import org.sleuthkit.datamodel.blackboardutils.Attachment;
import org.sleuthkit.datamodel.blackboardutils.URLAttachment;
/**
* Shows SMS/MMS/EMail messages
@@ -541,11 +545,34 @@ public class MessageContentViewer extends javax.swing.JPanel implements DataCont
}
private void configureAttachments() throws TskCoreException {
//TODO: Replace this with code to get the actual attachements!
final Set<AbstractFile> attachments = artifact.getChildren().stream()
.filter(AbstractFile.class::isInstance)
.map(AbstractFile.class::cast)
.collect(Collectors.toSet());
final Set<Attachment> attachments;
// Attachments are specified in an attribute TSK_ATTACHMENTS as JSON attribute
BlackboardAttribute attachmentsAttr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_ATTACHMENTS));
if(attachmentsAttr != null) {
attachments = new HashSet<>();
String jsonVal = attachmentsAttr.getValueString();
MessageAttachments msgAttachments = new Gson().fromJson(jsonVal, MessageAttachments.class);
Collection<FileAttachment> fileAttachments = msgAttachments.getFileAttachments();
for (FileAttachment fileAttachment: fileAttachments) {
attachments.add(fileAttachment);
}
Collection<URLAttachment> urlAttachments = msgAttachments.getUrlAttachments();
for (URLAttachment urlAttachment: urlAttachments) {
attachments.add(urlAttachment);
}
} else { // For backward compatibility - email attachements are derived files and children of the email message artifact
attachments = new HashSet<>();
for (Content child: artifact.getChildren()) {
if (child instanceof AbstractFile) {
attachments.add(new FileAttachment((AbstractFile)child));
}
}
}
final int numberOfAttachments = attachments.size();
msgbodyTabbedPane.setEnabledAt(ATTM_TAB_INDEX, numberOfAttachments > 0);
@@ -633,16 +660,20 @@ public class MessageContentViewer extends javax.swing.JPanel implements DataCont
return doc.html();
}
private static class AttachmentsChildren extends Children.Keys<AbstractFile> {
/**
* Creates child nodes for message attachments.
*/
private static class AttachmentsChildren extends Children.Keys<Attachment> {
private final Set<AbstractFile> attachments;
private final Set<Attachment> attachments;
AttachmentsChildren(Set<AbstractFile> attachments) {
AttachmentsChildren(Set<Attachment> attachments) {
this.attachments = attachments;
}
@Override
protected Node[] createNodes(AbstractFile t) {
protected Node[] createNodes(Attachment t) {
return new Node[]{new AttachmentNode(t)};
}
@@ -652,40 +683,4 @@ public class MessageContentViewer extends javax.swing.JPanel implements DataCont
setKeys(attachments);
}
}
/**
* Extension of FileNode customized for viewing attachments in the
* MessageContentViewer. It overrides createSheet() to customize what
* properties are shown in the table, and could also override getActions(),
* getPreferedAction(), etc.
*/
private static class AttachmentNode extends FileNode {
AttachmentNode(AbstractFile file) {
super(file, false);
}
@Override
protected Sheet createSheet() {
Sheet sheet = super.createSheet();
Set<String> keepProps = new HashSet<>(Arrays.asList(
NbBundle.getMessage(AbstractAbstractFileNode.class, "AbstractAbstractFileNode.nameColLbl"),
NbBundle.getMessage(AbstractAbstractFileNode.class, "AbstractAbstractFileNode.createSheet.score.name"),
NbBundle.getMessage(AbstractAbstractFileNode.class, "AbstractAbstractFileNode.createSheet.comment.name"),
NbBundle.getMessage(AbstractAbstractFileNode.class, "AbstractAbstractFileNode.createSheet.count.name"),
NbBundle.getMessage(AbstractAbstractFileNode.class, "AbstractAbstractFileNode.sizeColLbl"),
NbBundle.getMessage(AbstractAbstractFileNode.class, "AbstractAbstractFileNode.mimeType"),
NbBundle.getMessage(AbstractAbstractFileNode.class, "AbstractAbstractFileNode.knownColLbl")));
//Remove all other props except for the ones above
Sheet.Set sheetSet = sheet.get(Sheet.PROPERTIES);
for (Property<?> p : sheetSet.getProperties()) {
if (!keepProps.contains(p.getName())) {
sheetSet.remove(p.getName());
}
}
return sheet;
}
}
}
@@ -191,12 +191,14 @@ public class Metadata extends javax.swing.JPanel implements DataContentViewer {
}
try {
List<BlackboardArtifact> sourceArtifacts = file.getArtifacts(ARTIFACT_TYPE.TSK_DOWNLOAD_SOURCE);
if (!sourceArtifacts.isEmpty()) {
BlackboardArtifact artifact = sourceArtifacts.get(0);
BlackboardAttribute urlAttr = artifact.getAttribute(new BlackboardAttribute.Type(ATTRIBUTE_TYPE.TSK_URL));
if (urlAttr != null) {
addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.downloadSource"), urlAttr.getValueString());
List<BlackboardArtifact> associatedObjectArtifacts = file.getArtifacts(ARTIFACT_TYPE.TSK_ASSOCIATED_OBJECT);
if (!associatedObjectArtifacts.isEmpty()) {
BlackboardArtifact artifact = associatedObjectArtifacts.get(0);
BlackboardAttribute associatedArtifactAttribute = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_ASSOCIATED_ARTIFACT));
if (associatedArtifactAttribute != null) {
long artifactId = associatedArtifactAttribute.getValueLong();
BlackboardArtifact associatedArtifact = artifact.getSleuthkitCase().getBlackboardArtifact(artifactId);
addDownloadSourceRow(sb, associatedArtifact);
}
}
} catch (TskCoreException ex) {
@@ -292,6 +294,26 @@ public class Metadata extends javax.swing.JPanel implements DataContentViewer {
this.setCursor(null);
}
/**
* Adds a row for download source from the given associated artifact,
* if the associated artifacts specifies a source.
*
* @param sb string builder.
* @param associatedArtifact
*
* @throws TskCoreException if there is an error
*/
private void addDownloadSourceRow(StringBuilder sb, BlackboardArtifact associatedArtifact ) throws TskCoreException {
if (associatedArtifact != null &&
((associatedArtifact.getArtifactTypeID() == ARTIFACT_TYPE.TSK_WEB_DOWNLOAD.getTypeID()) ||
(associatedArtifact.getArtifactTypeID() == ARTIFACT_TYPE.TSK_WEB_CACHE.getTypeID())) ) {
BlackboardAttribute urlAttr = associatedArtifact.getAttribute(new BlackboardAttribute.Type(ATTRIBUTE_TYPE.TSK_URL));
if (urlAttr != null) {
addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.downloadSource"), urlAttr.getValueString());
}
}
}
/**
* Add the acquisition details to the results (if applicable)
*
@@ -1,15 +1,23 @@
StringsTextViewer.goToPageTextField.msgDlg=\uff11\u304b\u3089{0}\u306e\u9593\u306e\u6709\u52b9\u306a\u30da\u30fc\u30b8\u6570\u3092\u5165\u529b\u3057\u3066\u4e0b\u3055\u3044
StringsTextViewer.goToPageTextField.err=\u7121\u52b9\u306a\u30da\u30fc\u30b8\u6570
StringsTextViewer.setDataView.errorText=\uff08\u30aa\u30d5\u30bb\u30c3\u30c8{0}-{1}\u306f\u8aad\u307f\u53d6\u308c\u307e\u305b\u3093\u3067\u3057\u305f\uff09
StringsTextViewer.title=\u30b9\u30c8\u30ea\u30f3\u30b0
StringsTextViewer.toolTip=\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u62bd\u51fa\u3055\u308c\u305fASCII\u304a\u3088\u3073\u30e6\u30cb\u30b3\u30fc\u30c9\u306e\u30b9\u30c8\u30ea\u30f3\u30b0\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002
StringsTextViewer.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
StringsTextViewer.goToPageTextField.err=\u7121\u52b9\u306a\u30da\u30fc\u30b8\u756a\u53f7\u3067\u3059
StringsTextViewer.setDataView.errorText=(\u30aa\u30d5\u30bb\u30c3\u30c8 {0}-{1} \u3092\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\u3067\u3057\u305f)
StringsTextViewer.setDataView.errorNoText=(\u30aa\u30d5\u30bb\u30c3\u30c8 {0}-{1} \u306b\u306f\u30c6\u30ad\u30b9\u30c8\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u305b\u3093)
StringsTextViewer.title=\u6587\u5b57\u5217
StringsTextViewer.toolTip=\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u62bd\u51fa\u3057\u305fASCII\u6587\u5b57\u5217\u3068Unicode\u6587\u5b57\u5217\u3092\u8868\u793a
StringsContentPanel.selectAllMenuItem.text=\u3059\u3079\u3066\u9078\u629e
StringsContentPanel.currentPageLabel.text_1=1
StringsContentPanel.copyMenuItem.text=\u30b3\u30d4\u30fc
StringsContentPanel.ofLabel.text_1=of
StringsContentPanel.ofLabel.text_1=/
StringsContentPanel.totalPageLabel.text_1=100
StringsContentPanel.languageLabel.text=\u30b9\u30af\u30ea\u30d7\u30c8\uff1a
StringsContentPanel.languageCombo.toolTipText=\u30d0\u30a4\u30ca\u30ea\u30b9\u30c8\u30ea\u30f3\u30b0\u306e\u51e6\u7406\uff08\u62bd\u51fa\u304a\u3088\u3073\u30c7\u30b3\u30fc\u30c9\uff09\u306b\u4f7f\u7528\u3059\u308b\u8a00\u8a9e
StringsContentPanel.goToPageLabel.text=\u6b21\u306e\u30da\u30fc\u30b8\u3078\u79fb\u52d5\uff1a
StringsContentPanel.languageLabel.toolTipText=
StringsContentPanel.languageLabel.text=\u30b9\u30af\u30ea\u30d7\u30c8:
StringsContentPanel.languageCombo.toolTipText=\u30d0\u30a4\u30ca\u30ea\u30fc\u30c7\u30fc\u30bf\u306e\u6587\u5b57\u5217\u306e\u89e3\u91c8(\u62bd\u51fa\u304a\u3088\u3073\u30c7\u30b3\u30fc\u30c9)\u4e2d\u306b\u8a66\u3059\u8a00\u8a9e
StringsContentPanel.goToPageTextField.text=
StringsContentPanel.goToPageLabel.text=\u30da\u30fc\u30b8\u306b\u79fb\u52d5:
StringsContentPanel.prevPageButton.text=
StringsContentPanel.pageLabel2.text=\u30da\u30fc\u30b8
StringsContentPanel.pageLabel.text_1=\u30da\u30fc\u30b8\uff1a
StringsContentPanel.nextPageButton.text=
StringsContentPanel.pageLabel.text_1=\u30da\u30fc\u30b8:
TextContentViewer.title=\u30c6\u30ad\u30b9\u30c8
TextContentViewer.tooltip=\u9078\u629e\u3057\u305f\u9805\u76ee\u306b\u95a2\u9023\u4ed8\u3051\u3089\u308c\u3066\u3044\u308b\u30c6\u30ad\u30b9\u30c8\u3092\u8868\u793a
TextContentViewerPanel.defaultName=\u30c6\u30ad\u30b9\u30c8
@@ -11,7 +11,7 @@ OpenIDE-Module-Short-Description=Autopsy Core Module
org_sleuthkit_autopsy_core_update_center=http://sleuthkit.org/autopsy/updates.xml
Services/AutoupdateType/org_sleuthkit_autopsy_core_update_center.settings=Autopsy Update Center
Installer.errorInitJavafx.msg=Error initializing JavaFX.
Installer.errorInitJavafx.details=\ Some features will not be available. Check that you have the right JRE installed (Oracle JRE > 1.7.10).
Installer.errorInitJavafx.details=\ Some features will not be available. Check that you have JavaFX installed (OpenJFX 8).
ServicesMonitor.failedService.notify.title=Service Is Down
ServicesMonitor.failedService.notify.msg=Connection to {0} is down
ServicesMonitor.restoredService.notify.title=Service Is Up
@@ -3,19 +3,13 @@ Installer.closing.confirmationDialog.title=Ingest is Running
# {0} - exception message
Installer.closing.messageBox.caseCloseExceptionMessage=Error closing case: {0}
OpenIDE-Module-Display-Category=Infrastructure
OpenIDE-Module-Long-Description=\
This is the core Autopsy module.\n\n\
The module contains the core components needed for the bare application to run; the RCP platform, windowing GUI, sleuthkit bindings, datamodel / storage, explorer, result viewers, content viewers, ingest framework, reporting, and core tools, such as the file search.\n\n\
The framework included in the module contains APIs for developing modules for ingest, viewers and reporting. \
The modules can be deployed as Plugins using the Autopsy plugin installer.\n\
This module should not be uninstalled - without it, Autopsy will not run.\n\n\
For more information, see http://www.sleuthkit.org/autopsy/
OpenIDE-Module-Long-Description=This is the core Autopsy module.\n\nThe module contains the core components needed for the bare application to run; the RCP platform, windowing GUI, sleuthkit bindings, datamodel / storage, explorer, result viewers, content viewers, ingest framework, reporting, and core tools, such as the file search.\n\nThe framework included in the module contains APIs for developing modules for ingest, viewers and reporting. The modules can be deployed as Plugins using the Autopsy plugin installer.\nThis module should not be uninstalled - without it, Autopsy will not run.\n\nFor more information, see http://www.sleuthkit.org/autopsy/
OpenIDE-Module-Name=Autopsy-Core
OpenIDE-Module-Short-Description=Autopsy Core Module
org_sleuthkit_autopsy_core_update_center=http://sleuthkit.org/autopsy/updates.xml
Services/AutoupdateType/org_sleuthkit_autopsy_core_update_center.settings=Autopsy Update Center
Installer.errorInitJavafx.msg=Error initializing JavaFX.
Installer.errorInitJavafx.details=\ Some features will not be available. Check that you have the right JRE installed (Oracle JRE > 1.7.10).
Installer.errorInitJavafx.details=\ Some features will not be available. Check that you have JavaFX installed (OpenJFX 8).
ServicesMonitor.failedService.notify.title=Service Is Down
ServicesMonitor.failedService.notify.msg=Connection to {0} is down
ServicesMonitor.restoredService.notify.title=Service Is Up
@@ -1,31 +1,33 @@
OpenIDE-Module-Display-Category=\u30A4\u30F3\u30D5\u30E9\u30B9\u30C8\u30E9\u30AF\u30C1\u30E3\u30FC
Installer.closing.confirmationDialog.message=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u306e\u5b9f\u884c\u4e2d\u3067\u3059\u3002\u7d42\u4e86\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
Installer.closing.confirmationDialog.title=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u306e\u5b9f\u884c\u4e2d\u3067\u3059
# {0} - \u4f8b\u5916\u30e1\u30c3\u30bb\u30fc\u30b8
Installer.closing.messageBox.caseCloseExceptionMessage=\u6b21\u306e\u30b1\u30fc\u30b9\u3092\u9589\u3058\u3066\u3044\u308b\u9593\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: {0}
OpenIDE-Module-Display-Category=\u30a4\u30f3\u30d5\u30e9\u30b9\u30c8\u30e9\u30af\u30c1\u30e3\u30fc
OpenIDE-Module-Long-Description=\
\u3053\u308C\u304CAutopsy\u306E\u30B3\u30A2\u30E2\u30B8\u30E5\u30FC\u30EB\u3067\u3059\u3002\n\n\
\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u306E\u307F\u3067\u5B9F\u884C\u3059\u308B\u306E\u306B\u5FC5\u8981\u306A\u4E3B\u8981\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u304C\u542B\u307E\u308C\u3066\u3044\u307E\u3059\uFF1ARCP\u30D7\u30E9\u30C3\u30C8\u30D5\u30A9\u30FC\u30E0\u3001\u30A6\u30A3\u30F3\u30C9\u30A6\u30A4\u30F3\u30B0GUI\u3001Sleuth Kit\u30D0\u30A4\u30F3\u30C7\u30A3\u30F3\u30B0\u3001\u30C7\u30FC\u30BF\u30E2\u30C7\u30EB\uFF0F\u30B9\u30C8\u30EC\u30FC\u30B8\u3001\u30A8\u30AF\u30B9\u30D7\u30ED\u30FC\u30E9\u3001\u7D50\u679C\u30D3\u30E5\u30FC\u30A2\u3001\u30B3\u30F3\u30C6\u30F3\u30C4\u30D3\u30E5\u30FC\u30A2\u3001\u30A4\u30F3\u30B8\u30A7\u30B9\u30C8\u7528\u30D5\u30EC\u30FC\u30E0\u30EF\u30FC\u30AF\u3001\u30EC\u30DD\u30FC\u30C8\u751F\u6210\u3001\u30D5\u30A1\u30A4\u30EB\u691C\u7D22\u7B49\u306E\u4E3B\u8981\u30C4\u30FC\u30EB\u3002\n\n\
\u30E2\u30B8\u30E5\u30FC\u30EB\u5185\u306E\u30D5\u30EC\u30FC\u30E0\u30EF\u30FC\u30AF\u306B\u306F\u30A4\u30F3\u30B8\u30A7\u30B9\u30C8\u3001\u30D3\u30E5\u30FC\u30A2\u3001\u30EC\u30DD\u30FC\u30C8\u751F\u6210\u306E\u30E2\u30B8\u30E5\u30FC\u30EB\u958B\u767A\u7528\u306EAPI\u304C\u542B\u307E\u308C\u307E\u3059\u3002\
\u30E2\u30B8\u30E5\u30FC\u30EB\u306FAutopsy\u30D7\u30E9\u30B0\u30A4\u30F3\u30A4\u30F3\u30B9\u30C8\u30FC\u30E9\u30FC\u3092\u4F7F\u7528\u3057\u3001\u30D7\u30E9\u30B0\u30A4\u30F3\u3068\u3057\u3066\u5B9F\u88C5\u3067\u304D\u307E\u3059\u3002\n\
\u3053\u306E\u30E2\u30B8\u30E5\u30FC\u30EB\u306F\u30A2\u30F3\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3055\u308C\u3066\u3044\u306A\u3051\u308C\u3070\u3001Autopsy\u306F\u4F7F\u7528\u3067\u304D\u307E\u305B\u3093\u3002\n\n\
\u8A73\u7D30\u306F\u3053\u3061\u3089\u3067\u3054\u78BA\u8A8D\u304F\u3060\u3055\u3044\u3002http\://www.sleuthkit.org/autopsy/
OpenIDE-Module-Name=Autopsy-\u30B3\u30A2
OpenIDE-Module-Short-Description=Autopsy\u30B3\u30A2\u30E2\u30B8\u30E5\u30FC\u30EB
org_sleuthkit_autopsy_core_update_center=http\://sleuthkit.org/autopsy/updates_ja.xml
Services/AutoupdateType/org_sleuthkit_autopsy_core_update_center.settings=Autopsy\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u30BB\u30F3\u30BF\u30FC
Installer.errorInitJavafx.msg=JavaFX\u521D\u671F\u5316\u30A8\u30E9\u30FC
Installer.errorInitJavafx.details=\u4E00\u90E8\u306E\u6A5F\u80FD\u304C\u4F7F\u7528\u3067\u304D\u307E\u305B\u3093\u3002\u6B63\u3057\u3044JRE\u304C\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3055\u308C\u3066\u3044\u308B\u304B\u3092\u78BA\u8A8D\u3057\u3066\u4E0B\u3055\u3044\u3002\uFF08Oracle JRE > 1.7.10\uFF09
ServicesMonitor.failedService.notify.title=\u30B5\u30FC\u30D3\u30B9\u304C\u505C\u6B62\u3057\u3066\u3044\u307E\u3059
ServicesMonitor.failedService.notify.msg={0}\u3078\u306E\u63A5\u7D9A\u304C\u30C0\u30A6\u30F3\u3057\u3066\u3044\u307E\u3059
ServicesMonitor.restoredService.notify.title=\u30B5\u30FC\u30D3\u30B9\u304C\u7A3C\u50CD\u4E2D\u3067\u3059
ServicesMonitor.restoredService.notify.msg={0}\u3078\u306E\u63A5\u7D9A\u304C\u5229\u7528\u3067\u304D\u307E\u3059
ServicesMonitor.statusChange.notify.title=\u30B5\u30FC\u30D3\u30B9\u30B9\u30C6\u30FC\u30BF\u30B9\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8
ServicesMonitor.statusChange.notify.msg={0}\u306E\u30B9\u30C6\u30FC\u30BF\u30B9\u306F{1}
ServicesMonitor.nullServiceName.excepton.txt=\u30EA\u30AF\u30A8\u30B9\u30C8\u3055\u308C\u305F\u30B5\u30FC\u30D3\u30B9\u306F\u30CC\u30EB\u3067\u3059
ServicesMonitor.unknownServiceName.excepton.txt=\u30EA\u30AF\u30A8\u30B9\u30C8\u3055\u308C\u305F\u30B5\u30FC\u30D3\u30B9{0}\u306F\u4E0D\u660E\u3067\u3059
TextConverter.convert.exception.txt=\u30C6\u30AD\u30B9\u30C8{0}\u3092hex\u30C6\u30AD\u30B9\u30C8\u306B\u5909\u63DB\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F
TextConverter.convertFromHex.exception.txt=hex\u30C6\u30AD\u30B9\u30C8\u3092\u30C6\u30AD\u30B9\u30C8\u306B\u5909\u63DB\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F
ServicesMonitor.KeywordSearchNull=\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u30B5\u30FC\u30D3\u30B9\u3092\u898B\u3064\u3051\u308C\u307E\u305B\u3093\u3067\u3057\u305F
ServicesMonitor.InvalidPortNumber=\u7121\u52B9\u306A\u30DD\u30FC\u30C8\u756A\u53F7
ServicesMonitor.remoteCaseDatabase.displayName.text=\u8907\u6570\u306E\u30E6\u30FC\u30B6\u30FC\u306E\u30B1\u30FC\u30B9\u306E\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u30B5\u30FC\u30D3\u30B9
ServicesMonitor.remoteKeywordSearch.displayName.text=\u8907\u6570\u306E\u30E6\u30FC\u30B6\u30FC\u306E\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u30B5\u30FC\u30D3\u30B9
ServicesMonitor.messaging.displayName.text=\u30E1\u30C3\u30BB\u30FC\u30B8\u30B5\u30FC\u30D3\u30B9
ServicesMonitor.databaseConnectionInfo.error.msg=\u30B1\u30FC\u30B9\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u306E\u63A5\u7D9A\u60C5\u5831\u3092\u5165\u624B\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F
ServicesMonitor.messagingService.connErr.text=\u30E1\u30C3\u30BB\u30FC\u30B8\u30B5\u30FC\u30D3\u30B9\u306E\u63A5\u7D9A\u60C5\u5831\u3092\u5165\u624B\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F
\u3053\u308c\u306fAutopsy\u306e\u30b3\u30a2\u30e2\u30b8\u30e5\u30fc\u30eb\u3067\u3059\u3002\n\n\
\u30e2\u30b8\u30e5\u30fc\u30eb\u306b\u306f\u3001RCP\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3001\u30a6\u30a3\u30f3\u30c9\u30a6\u4f5c\u6210GUI\u3001sleuthkit\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0\u3001\u30c7\u30fc\u30bf\u30e2\u30c7\u30eb / \u30b9\u30c8\u30ec\u30fc\u30b8\u3001\u30a8\u30af\u30b9\u30d7\u30ed\u30fc\u30e9\u30fc\u3001\u7d50\u679c\u30d3\u30e5\u30fc\u30ef\u30fc\u3001\u30b3\u30f3\u30c6\u30f3\u30c4\u30d3\u30e5\u30fc\u30ef\u30fc\u3001\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3001\u30ec\u30dd\u30fc\u30c6\u30a3\u30f3\u30b0\u3001\u30d5\u30a1\u30a4\u30eb\u691c\u7d22\u306a\u3069\u306e\u30b3\u30a2\u30c4\u30fc\u30eb\u3068\u3044\u3063\u305f\u3001\u30d9\u30a2\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u5b9f\u884c\u306b\u5fc5\u8981\u306a\u30b3\u30a2\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002\n\n\
\u30e2\u30b8\u30e5\u30fc\u30eb\u306b\u542b\u307e\u308c\u308b\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306b\u306f\u3001\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u3001\u30d3\u30e5\u30fc\u30ef\u30fc\u3001\u30ec\u30dd\u30fc\u30c6\u30a3\u30f3\u30b0\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u4f5c\u6210\u7528API\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002 \
\u30e2\u30b8\u30e5\u30fc\u30eb\u306fAutopsy\u30d7\u30e9\u30b0\u30a4\u30f3\u30a4\u30f3\u30b9\u30c8\u30fc\u30e9\u30fc\u3092\u7528\u3044\u308b\u30d7\u30e9\u30b0\u30a4\u30f3\u3068\u3057\u3066\u5c55\u958b\u3067\u304d\u307e\u3059\u3002\n\
\u3053\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u306f\u30a2\u30f3\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044 - \u3053\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u306a\u3044\u3068Autopsy\u304c\u5b9f\u884c\u3055\u308c\u307e\u305b\u3093\u3002\n\n\
\u8a73\u7d30\u306f\u3001http://www.sleuthkit.org/autopsy/ \u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044
OpenIDE-Module-Name=Autopsy-Core
OpenIDE-Module-Short-Description=Autopsy\u30b3\u30a2\u30e2\u30b8\u30e5\u30fc\u30eb
org_sleuthkit_autopsy_core_update_center=http://sleuthkit.org/autopsy/updates.xml
Services/AutoupdateType/org_sleuthkit_autopsy_core_update_center.settings=Autopsy\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u30bb\u30f3\u30bf\u30fc
Installer.errorInitJavafx.msg=JavaFX\u306e\u521d\u671f\u5316\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
Installer.errorInitJavafx.details=\ \u4e00\u90e8\u306e\u6a5f\u80fd\u304c\u5229\u7528\u3067\u304d\u306a\u304f\u306a\u308a\u307e\u3059\u3002 \u9069\u5207\u306aJRE\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u308b\u304b\u78ba\u8a8d\u304f\u3060\u3055\u3044(Oracle JRE 1.7.10\u4ee5\u964d)\u3002
ServicesMonitor.failedService.notify.title=\u30b5\u30fc\u30d3\u30b9\u304c\u30c0\u30a6\u30f3\u3057\u3066\u3044\u307e\u3059
ServicesMonitor.failedService.notify.msg={0} \u3078\u306e\u63a5\u7d9a\u304c\u30c0\u30a6\u30f3\u3057\u3066\u3044\u307e\u3059
ServicesMonitor.restoredService.notify.title=\u30b5\u30fc\u30d3\u30b9\u304c\u5b9f\u884c\u4e2d\u3067\u3059
ServicesMonitor.restoredService.notify.msg={0} \u3078\u306e\u63a5\u7d9a\u304c\u5b9f\u884c\u4e2d\u3067\u3059
ServicesMonitor.statusChange.notify.title=\u30b5\u30fc\u30d3\u30b9\u30b9\u30c6\u30fc\u30bf\u30b9\u66f4\u65b0
ServicesMonitor.statusChange.notify.msg={0} \u306e\u30b9\u30c6\u30fc\u30bf\u30b9\u306f {1} \u3067\u3059
ServicesMonitor.nullServiceName.excepton.txt=\u30ea\u30af\u30a8\u30b9\u30c8\u3055\u308c\u305f\u30b5\u30fc\u30d3\u30b9\u540d\u306fnull\u3067\u3059
ServicesMonitor.unknownServiceName.excepton.txt=\u30ea\u30af\u30a8\u30b9\u30c8\u3055\u308c\u305f\u30b5\u30fc\u30d3\u30b9\u540d {0} \u306f\u4e0d\u660e\u3067\u3059
ServicesMonitor.KeywordSearchNull=\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u30b5\u30fc\u30d3\u30b9\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093
ServicesMonitor.InvalidPortNumber=\u7121\u52b9\u306a\u30dd\u30fc\u30c8\u756a\u53f7\u3067\u3059\u3002
ServicesMonitor.remoteCaseDatabase.displayName.text=\u30de\u30eb\u30c1\u30e6\u30fc\u30b6\u30fc\u30b1\u30fc\u30b9\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30b5\u30fc\u30d3\u30b9
ServicesMonitor.remoteKeywordSearch.displayName.text=\u30de\u30eb\u30c1\u30e6\u30fc\u30b6\u30fc\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u30b5\u30fc\u30d3\u30b9
ServicesMonitor.messaging.displayName.text=\u30e1\u30c3\u30bb\u30fc\u30b8\u30f3\u30b0\u30b5\u30fc\u30d3\u30b9
ServicesMonitor.databaseConnectionInfo.error.msg=\u30b1\u30fc\u30b9\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u60c5\u5831\u306b\u30a2\u30af\u30bb\u30b9\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f
ServicesMonitor.messagingService.connErr.text=\u30e1\u30c3\u30bb\u30fc\u30b8\u30f3\u30b0\u30b5\u30fc\u30d3\u30b9\u63a5\u7d9a\u60c5\u5831\u306b\u30a2\u30af\u30bb\u30b9\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f
@@ -78,6 +78,10 @@ public final class UserPreferences {
public static final String EXTERNAL_HEX_EDITOR_PATH = "ExternalHexEditorPath";
public static final String SOLR_MAX_JVM_SIZE = "SolrMaxJVMSize";
public static final String RESULTS_TABLE_PAGE_SIZE = "ResultsTablePageSize";
private static final String GEO_TILE_OPTION = "GeolocationTileOption";
private static final String GEO_OSM_TILE_ZIP_PATH = "GeolocationOsmZipPath";
private static final String GEO_OSM_SERVER_ADDRESS = "GeolocationOsmServerAddress";
private static final String GEO_MBTILES_FILE_PATH = "GeolcoationMBTilesFilePath";
// Prevent instantiation.
private UserPreferences() {
@@ -534,4 +538,77 @@ public final class UserPreferences {
public static String getExternalHexEditorPath() {
return preferences.get(EXTERNAL_HEX_EDITOR_PATH, Paths.get("C:", "Program Files", "HxD", "HxD.exe").toString());
}
/**
* Set the geolocation tile server option.
*
* @param option
*/
public static void setGeolocationTileOption(int option) {
preferences.putInt(GEO_TILE_OPTION, option);
}
/**
* Retrieves the Geolocation tile option. If not found, the value will
* default to 0.
* @return
*/
public static int getGeolocationtTileOption() {
return preferences.getInt(GEO_TILE_OPTION, 0);
}
/**
* Sets the path to the OSM tile zip file.
*
* @param absolutePath
*/
public static void setGeolocationOsmZipPath(String absolutePath) {
preferences.put(GEO_OSM_TILE_ZIP_PATH, absolutePath);
}
/**
* Retrieves the path for the OSM tile zip file or returns empty string if
* none was found.
*
* @return Path to zip file
*/
public static String getGeolocationOsmZipPath() {
return preferences.get(GEO_OSM_TILE_ZIP_PATH, "");
}
/**
* Sets the address of geolocation window user defined OSM server data source.
*
* @param address
*/
public static void setGeolocationOsmServerAddress(String address) {
preferences.put(GEO_OSM_SERVER_ADDRESS, address);
}
/**
* Retrieves the address to the OSM server or null if one was not found.
*
* @return Address of OSM server
*/
public static String getGeolocationOsmServerAddress() {
return preferences.get(GEO_OSM_SERVER_ADDRESS, "");
}
/**
* Sets the path for Geolocation MBTiles data source file.
*
* @param absolutePath
*/
public static void setGeolocationMBTilesFilePath(String absolutePath) {
preferences.put(GEO_MBTILES_FILE_PATH, absolutePath);
}
/**
* Retrieves the path for the Geolocation MBTiles data source file.
*
* @return Absolute path to MBTiles file or empty string if none was found.
*/
public static String getGeolocationMBTilesFilePath() {
return preferences.get(GEO_MBTILES_FILE_PATH, "");
}
}
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<mode version="2.4">
<name unique="discovery"/>
<kind type="editor"/>
<state type="separated"/>
<bounds x="76" y="68" width="1400" height="900"/>
<frame state="0"/>
<empty-behavior permanent="false"/>
</mode>
+11
View File
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<mode version="2.4">
<name unique="geolocation"/>
<kind type="editor"/>
<state type="separated"/>
<bounds x="76" y="68" width="500" height="500"/>
<frame state="0"/>
<empty-behavior permanent="false"/>
</mode>
@@ -448,6 +448,8 @@
<file name="floatingLeftBottom.wsmode" url="floatingLeftBottomWsmode.xml"/>
<file name="timeline.wsmode" url="timelineWsmode.xml"/>
<file name="cvt.wsmode" url="cvtWsmode.xml"/>
<file name="discovery.wsmode" url="discoveryWsmode.xml"/>
<file name="geolocation.wsmode" url="geolocationWsmode.xml"/>
</folder>
</folder>
@@ -1,3 +1,3 @@
OpenIDE-Module-Name=\u4E3B\u8981\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u30A4\u30F3\u30BF\u30FC\u30D5\u30A7\u30A4\u30B9
CoreComponentControl.CTL_DirectoryTreeTopComponent=\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u30C4\u30EA\u30FC
CoreComponentControl.CTL_FavoritesTopComponent=\u304A\u6C17\u306B\u5165\u308A
OpenIDE-Module-Name=\u4e3b\u8981\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30a4\u30b9
CoreComponentControl.CTL_DirectoryTreeTopComponent=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30c4\u30ea\u30fc
CoreComponentControl.CTL_FavoritesTopComponent=\u304a\u6c17\u306b\u5165\u308a
@@ -63,9 +63,9 @@ DataContentViewerHex.totalPageLabel.text_1=100
DataContentViewerHex.pageLabel2.text=Page
# Product Information panel
LBL_Description=<div style=\"font-size: 12pt; font-family: Verdana, 'Verdana CE', Arial, 'Arial CE', 'Lucida Grande CE', lucida, 'Helvetica CE', sans-serif;\">\n <b>Product Version:</b> {0} ({9}) <br><b>Sleuth Kit Version:</b> {7} <br><b>Netbeans RCP Build:</b> {8} <br> <b>Java:</b> {1}; {2}<br> <b>System:</b> {3}; {4}; {5}<br><b>Userdir:</b> {6}</div>
LBL_Description=<div style="font-size: 12pt; font-family: Verdana, 'Verdana CE', Arial, 'Arial CE', 'Lucida Grande CE', lucida, 'Helvetica CE', sans-serif;">\n <b>Product Version:</b> {0} ({9}) <br><b>Sleuth Kit Version:</b> {7} <br><b>Netbeans RCP Build:</b> {8} <br> <b>Java:</b> {1}; {2}<br> <b>System:</b> {3}; {4}; {5}<br><b>Userdir:</b> {6}</div>
Format_OperatingSystem_Value={0} version {1} running on {2}
LBL_Copyright=<div style\="font-size: 12pt; font-family: Verdana, 'Verdana CE', Arial, 'Arial CE', 'Lucida Grande CE', lucida, 'Helvetica CE', sans-serif; ">Autopsy&trade; is a digital forensics platform based on The Sleuth Kit&trade; and other tools. <br><ul><li>General Information: <a style\="color: \#1E2A60;" href\="http://www.sleuthkit.org">http://www.sleuthkit.org</a>.</li><li>Training: <a style\="color: \#1E2A60;" href\="http://www.basistech.com/autopsy-training">http://www.basistech.com/autopsy-training</a></li><li>Commercial Support: <a style\="color: \#1E2A60;" href\="http://www.basistech.com/digital-forensics/autopsy/support/">http://www.basistech.com/digital-forensics/autopsy/support/</a></li></ul>Copyright &copy; 2003-2018. </div>
LBL_Copyright=<div style="font-size: 12pt; font-family: Verdana, 'Verdana CE', Arial, 'Arial CE', 'Lucida Grande CE', lucida, 'Helvetica CE', sans-serif; ">Autopsy&trade; is a digital forensics platform based on The Sleuth Kit&trade; and other tools. <br><ul><li>General Information: <a style="color: #1E2A60;" href="http://www.sleuthkit.org">http://www.sleuthkit.org</a>.</li><li>Training: <a style="color: #1E2A60;" href="http://www.basistech.com/autopsy-training">http://www.basistech.com/autopsy-training</a></li><li>Commercial Support: <a style="color: #1E2A60;" href="http://www.basistech.com/digital-forensics/autopsy/support/">http://www.basistech.com/digital-forensics/autopsy/support/</a></li></ul>Copyright &copy; 2003-2018. </div>
SortChooser.dialogTitle=Choose Sort Criteria
ThumbnailViewChildren.progress.cancelling=(Cancelling)
# {0} - file name
@@ -95,7 +95,7 @@ DataResultViewerThumbnail.pageNextButton.text=
DataResultViewerThumbnail.imagesLabel.text=Images:
DataResultViewerThumbnail.imagesRangeLabel.text=-
DataResultViewerThumbnail.pageNumLabel.text=-
DataResultViewerThumbnail.filePathLabel.text=\ \ \
DataResultViewerThumbnail.filePathLabel.text=\
DataResultViewerThumbnail.goToPageLabel.text=Go to Page:
DataResultViewerThumbnail.goToPageField.text=
AdvancedConfigurationDialog.cancelButton.text=Cancel
@@ -1,117 +1,274 @@
CTL_DataContentAction=\u30c7\u30fc\u30bf\u30b3\u30f3\u30c6\u30f3\u30c4
OptionsCategory_Keywords_General=Autopsy\u30aa\u30d7\u30b7\u30e7\u30f3
CTL_CustomAboutAction=Autopsy\u306b\u3064\u3044\u3066
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.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.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.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
CTL_DataContentAction=DataContent
CTL_DataContentTopComponent=\u30c7\u30fc\u30bf\u30b3\u30f3\u30c6\u30f3\u30c4
HINT_DataContentTopComponent=\u3053\u308c\u306f\u30c7\u30fc\u30bf\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u30a6\u30a3\u30f3\u30c9\u30a6\u3067\u3059
HINT_NodeTableTopComponent=\u3053\u308c\u306f\u30c7\u30fc\u30bf\u7d50\u679c\u306e\u30a6\u30a3\u30f3\u30c9\u30a6\u3067\u3059
OpenIDE-Module-Name=\u4e3b\u8981\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8
DataContentViewerHex.pageLabel.text_1=\u30da\u30fc\u30b8\uff1a
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
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
DataContentViewerHex.copyingFile=HxD\u3067\u958b\u304f\u30d5\u30a1\u30a4\u30eb\u3092\u30b3\u30d4\u30fc\u4e2d\u3067\u3059...
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
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
DataResultViewerTable.commentRenderer.crComment.toolTip=\u30b3\u30e1\u30f3\u30c8\u304c\u30bb\u30f3\u30c8\u30e9\u30eb\u30fb\u30ec\u30dd\u30b8\u30c8\u30ea\u30fc\u306b\u5b58\u5728\u3057\u307e\u3059
DataResultViewerTable.commentRenderer.noComment.toolTip=\u30b3\u30e1\u30f3\u30c8\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093
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.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.pageNumbers.curOfTotal={0} / {1}
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.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
Format_OperatingSystem_Value={0} \u30d0\u30fc\u30b8\u30e7\u30f3 {1} \u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3 {2}
# \u88fd\u54c1\u60c5\u5831\u30d1\u30cd\u30eb
LBL_Description=<div style=\"font-size: 12pt; font-family: Verdana, 'Verdana CE', Arial, 'Arial CE', 'Lucida Grande CE', lucida, 'Helvetica CE', sans-serif;\">\n <b>\u88fd\u54c1\u30d0\u30fc\u30b8\u30e7\u30f3:</b> {0} ({9}) <br><b>Sleuth Kit\u30d0\u30fc\u30b8\u30e7\u30f3:</b> {7} <br><b>Netbeans RCP\u30d3\u30eb\u30c9:</b> {8} <br> <b>Java:</b> {1}; {2}<br> <b>\u30b7\u30b9\u30c6\u30e0:</b> {3}; {4}; {5}<br><b>Userdir:</b> {6}</div>
Format_OperatingSystem_Value={2} \u4e0a\u3067 {0} \u30d0\u30fc\u30b8\u30e7\u30f3 {1} \u304c\u5b9f\u884c\u4e2d\u3067\u3059
LBL_Copyright=<div style\="font-size: 12pt; font-family: Verdana, 'Verdana CE', Arial, 'Arial CE', 'Lucida Grande CE', lucida, 'Helvetica CE', sans-serif; ">Autopsy&trade; \u306fSleuth Kit&trade\u3068\u305d\u306e\u4ed6\u30c4\u30fc\u30eb\u3092\u30d9\u30fc\u30b9\u3068\u3057\u305f\u30c7\u30b8\u30bf\u30eb\u30d5\u30a9\u30ec\u30f3\u30b8\u30c3\u30af\u30fb\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067\u3059\u3002<br><ul><li>\u5168\u822c\u60c5\u5831: <a style\="color: \#1E2A60;" href\="http://www.sleuthkit.org">http://www.sleuthkit.org</a>.</li><li>\u30c8\u30ec\u30fc\u30cb\u30f3\u30b0: <a style\="color: \#1E2A60;" href\="http://www.basistech.com/autopsy-training">http://www.basistech.com/autopsy-training</a></li><li>\u30b3\u30de\u30fc\u30b7\u30e3\u30eb\u30b5\u30dd\u30fc\u30c8: <a style\="color: \#1E2A60;" href\="http://www.basistech.com/digital-forensics/autopsy/support/">http://www.basistech.com/digital-forensics/autopsy/support/</a></li></ul>\u8457\u4f5c\u6a29 &copy; 2003-2018.</div>
SortChooser.dialogTitle=\u30bd\u30fc\u30c8\u6761\u4ef6\u3092\u9078\u629e
ThumbnailViewChildren.progress.cancelling=(\u53d6\u308a\u6d88\u3057\u4e2d)
# {0} - \u30d5\u30a1\u30a4\u30eb\u540d
ThumbnailViewNode.progressHandle.text={0} \u306e\u30b5\u30e0\u30cd\u30a4\u30eb\u3092\u4f5c\u6210\u4e2d\u3067\u3059
URL_ON_IMG=http://www.sleuthkit.org/
FILE_FOR_LOCAL_HELP=file:///
INDEX_FOR_LOCAL_HELP=/docs/index.html
LBL_Close=\u9589\u3058\u308b
DataContentViewerHex.copyMenuItem.text=\u30b3\u30d4\u30fc
DataContentViewerHex.selectAllMenuItem.text=\u5168\u3066\u9078\u629e
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.copyMenuItem.text=\u30b3\u30d4\u30fc
DataContentViewerArtifact.selectAllMenuItem.text=\u5168\u3066\u9078\u629e
DataContentViewerArtifact.pageLabel.text=\u7d50\u679c\uff1a
DataContentViewerArtifact.selectAllMenuItem.text=\u3059\u3079\u3066\u3092\u9078\u629e
DataContentViewerArtifact.pageLabel.text=\u7d50\u679c:
AdvancedConfigurationDialog.applyButton.text=OK
DataContentViewerHex.goToPageLabel.text=\u6b21\u306e\u30da\u30fc\u30b8\u3078\u79fb\u52d5\uff1a
DataResultViewerThumbnail.pageLabel.text=\u30da\u30fc\u30b8\uff1a
DataResultViewerThumbnail.pagesLabel.text=\u30da\u30fc\u30b8\uff1a
DataResultViewerThumbnail.imagesLabel.text=\u30a4\u30e1\u30fc\u30b8\uff1a
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.goToPageLabel.text=\u6b21\u306e\u30da\u30fc\u30b8\u306b\u79fb\u52d5\uff1a
AdvancedConfigurationDialog.cancelButton.text=\u30ad\u30e3\u30f3\u30bb\u30eb
DataContentViewerArtifact.waitText=\u30c7\u30fc\u30bf\u3092\u53d6\u8fbc\u307f\u304a\u3088\u3073\u6e96\u5099\u4e2d\u3002\u3057\u3070\u3089\u304f\u304a\u5f85\u3061\u4e0b\u3055\u3044...
DataContentViewerArtifact.errorText=\u7d50\u679c\u3092\u53d6\u8fbc\u307f\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f
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\u306b\u95a2\u9023\u3059\u308b\u7d50\u679c\u3092\u8868\u793a\u3057\u307e\u3059
DataContentViewerHex.goToPageTextField.msgDlg=\uff11\u304b\u3089 {0}\u306e\u9593\u306e\u6709\u52b9\u306a\u30da\u30fc\u30b8\u6570\u3092\u5165\u529b\u3057\u3066\u4e0b\u3055\u3044
DataContentViewerHex.goToPageTextField.err=\u7121\u52b9\u306a\u30da\u30fc\u30b8\u6570
DataContentViewerHex.setDataView.errorText=\uff08\u30aa\u30d5\u30bb\u30c3\u30c8{0}-{1}\u306f\u8aad\u307f\u53d6\u308c\u307e\u305b\u3093\u3067\u3057\u305f\uff09
DataContentViewerHex.title=HEX
DataContentViewerHex.toolTip=\u30d0\u30a4\u30ca\u30ea\u30b3\u30f3\u30c6\u30f3\u30c4\u3092HEX\u30d5\u30a1\u30a4\u30eb\u3068\u3057\u3066\u8868\u793a\u3057\u3001ASCII\u3068\u3057\u3066\u8868\u793a\u3067\u304d\u308b\u30d0\u30a4\u30c8\u306f\u53f3\u5074\u306b\u8868\u793a\u3057\u307e\u3059\u3002
DataResultPanel.pleasewaitNodeDisplayName=\u3057\u3070\u3089\u304f\u304a\u5f85\u3061\u304f\u3060\u3055\u3044\u2026
DataResultViewerTable.firstColLbl=\u540d\u524d
DataResultViewerTable.illegalArgExc.noChildFromParent=\u6307\u5b9a\u3055\u308c\u305f\u30da\u30a2\u30ec\u30f3\u30c8\u304b\u3089\u30c1\u30e3\u30a4\u30eb\u30c9\u30ce\u30fc\u30c9\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
DataResultViewerTable.illegalArgExc.childWithoutPropertySet=\u30c1\u30e3\u30a4\u30eb\u30c9\u30ce\u30fc\u30c9\u306f\u901a\u5e38\u306ePropertySet\u3092\u6301\u3063\u3066\u3044\u307e\u305b\u3093\u3002
DataResultViewerTable.title=\u30c6\u30fc\u30d6\u30eb
DataResultViewerTable.pleasewaitNodeDisplayName=\u3057\u3070\u3089\u304f\u304a\u5f85\u3061\u304f\u3060\u3055\u3044\u2026
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=\uff11\u304b\u3089{0}\u306e\u9593\u306e\u6709\u52b9\u306a\u30da\u30fc\u30b8\u6570\u3092\u5165\u529b\u3057\u3066\u4e0b\u3055\u3044
DataResultViewerThumbnail.goToPageTextField.err=\u7121\u52b9\u306a\u30da\u30fc\u30b8\u6570
DataResultViewerThumbnail.genThumbs=\u30b5\u30e0\u30cd\u30a4\u30eb\u3092\u4f5c\u6210\u4e2d\u2026
DataResultViewerThumbnail.pageNumbers.curOfTotal={0}\uff0f{1}\u76ee
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}
GeneralOptionsPanelController.moduleErr=\u30e2\u30b8\u30e5\u30fc\u30eb\u30a8\u30e9\u30fc
GeneralOptionsPanelController.moduleErr.msg=GeneralOptionsPanelController\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3092\u78ba\u8a8d\u4e2d\u306b\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u30a8\u30e9\u30fc\u3092\u8d77\u3053\u3057\u307e\u3057\u305f\u3002\u3069\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u304b\u30ed\u30b0\u3092\u78ba\u8a8d\u3057\u3066\u4e0b\u3055\u3044\u3002\u4e00\u90e8\u306e\u30c7\u30fc\u30bf\u304c\u4e0d\u5b8c\u5168\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002
LBL_Description=<div style\="font-size\: 12pt; font-family\: Verdana, 'Verdana CE', Arial, 'Arial CE', 'Lucida Grande CE', lucida, 'Helvetica CE', sans-serif;">\n <b>\u88fd\u54c1\u30d0\u30fc\u30b8\u30e7\u30f3\uff1a</b> {0} ({9}) <br><b>Sleuth Kit\u30d0\u30fc\u30b8\u30e7\u30f3\uff1a</b> {7} <br><b>Netbeans RCP\u30d3\u30eb\u30c9\:</b> {8} <br> <b>Java\:</b> {1}; {2}<br> <b>\u30b7\u30b9\u30c6\u30e0\uff1a</b> {3}; {4}; {5}<br><b>\u30e6\u30fc\u30b6\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u540d</b> {6}</div>
LBL_Copyright=<div style\="font-size\: 12pt; font-family\: Verdana, 'Verdana CE', Arial, 'Arial CE', 'Lucida Grande CE', lucida, 'Helvetica CE', sans-serif; ">Autopsy&trade;\u306fSleuth Kit&trade;\u3084\u305d\u306e\u4ed6\u30c4\u30fc\u30eb\u3092\u57fa\u306b\u3057\u305f\u30c7\u30b8\u30bf\u30eb\u30fb\u30d5\u30a9\u30ec\u30f3\u30b8\u30c3\u30af\u30fb\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067\u3059\u3002<br> <br>Copyright &copy; 2003-2013. \u8a73\u7d30\u306f\u4e0b\u8a18\u3092\u3054\u89a7\u4e0b\u3055\u3044\u3002 <a style\="color\: \#1E2A60;" href\="http\://www.sleuthkit.org">http\://www.sleuthkit.org</a>. </div>
ProductInformationPanel.verbLoggingEnabled.text=Verbose\u30ed\u30b0\u304c\u6709\u52b9\u3067\u3059
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
DataContentViewerHex.ofLabel.text_1=of
DataContentViewerArtifact.ofLabel.text=of
DataContentViewerString.setDataView.errorNoText=\uff08\u30aa\u30d5\u30bb\u30c3\u30c8{0}-{1}\u306b\u306f\u30c6\u30ad\u30b9\u30c8\u304c\u3042\u308a\u307e\u305b\u3093\uff09
DataResultViewerThumbnail.comboBox.smallThumbnails=\u30b5\u30e0\u30cd\u30a4\u30eb\uff08\u5c0f\uff09
DataResultViewerThumbnail.comboBox.mediumThumbnails=\u30b5\u30e0\u30cd\u30a4\u30eb\uff08\u4e2d\uff09
DataResultViewerThumbnail.comboBox.largeThumbnails=\u30b5\u30e0\u30cd\u30a4\u30eb\uff08\u5927\uff09
DataResultViewerThumbnail.switchPage.done.errMsg=\u30b5\u30e0\u30cd\u30a4\u30eb\u4f5c\u6210\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\uff1a {0}
AboutWindowPanel.actVerboseLogging.text=Verbose\u30ed\u30b0\u3092\u30a2\u30af\u30c6\u30a3\u30d9\u30fc\u30c8
OptionsCategory_Name_Multi_User_Settings=\u8907\u6570\u306e\u30e6\u30fc\u30b6\u30fc
OptionsCategory_Keywords_Multi_User_Options=\u8907\u6570\u306e\u30e6\u30fc\u30b6\u30fc\u30aa\u30d7\u30b7\u30e7\u30f3
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=\u8907\u6570\u306e\u30e6\u30fc\u30b6\u30fc\u30b1\u30fc\u30b9\u3092\u6709\u52b9\u5316
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=\u5168\u3066\u306e\u30d0\u30ea\u30e5\u30fc\u3092\u5165\u529b
MultiUserSettingsPanel.nonWindowsOs.msg=Windows\u3067\u3057\u304b\u8907\u6570\u306e\u30e6\u30fc\u30b6\u30fc\u7248\u306f\u4f7f\u7528\u3067\u304d\u307e\u305b\u3093
MultiUserSettingsPanel.validationErrMsg.invalidDatabasePort=\u7121\u52b9\u306a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30dd\u30fc\u30c8\u756a\u53f7
MultiUserSettingsPanel.validationErrMsg.invalidMessageServicePort=\u7121\u52b9\u306a\u30e1\u30c3\u30bb\u30fc\u30b8\u30b5\u30fc\u30d3\u30b9\u30dd\u30fc\u30c8\u756a\u53f7
MultiUserSettingsPanel.validationErrMsg.invalidIndexingServerPort=\u7121\u52b9\u306aSolr\u30b5\u30fc\u30d0\u30fc\u30dd\u30fc\u30c8\u756a\u53f7
MultiUserSettingsPanel.validationErrMsg.invalidMessgeServiceURI=\u7121\u52b9\u306a\u30e1\u30c3\u30bb\u30fc\u30b8\u30b5\u30fc\u30d3\u30b9\u30db\u30b9\u30c8\u3084\u30dd\u30fc\u30c8\u756a\u53f7
MultiUserSettingsPanel.validationErrMsg.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.msgDlg=\u7121\u52b9\u306a\u30aa\u30d5\u30bb\u30c3\u30c8\uff1a{0}
DataContentViewerHex.setDataView.invalidOffset.negativeOffsetValue=\u8a08\u7b97\u3055\u308c\u305f\u30aa\u30d5\u30bb\u30c3\u30c8\u306b\u30b8\u30e3\u30f3\u30d7\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
DataContentViewerHex.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=
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.tbDbUsername.toolTipText=\u30e6\u30fc\u30b6\u30fc\u540d
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.bnTestSolr.text=\u30c6\u30b9\u30c8
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.tbMsgUsername.toolTipText=\u30e6\u30fc\u30b6\u30fc\u540d\uff08\u30aa\u30d7\u30b7\u30e7\u30ca\u30eb\uff09
MultiUserSettingsPanel.tbMsgPassword.toolTipText=\u30d1\u30b9\u30ef\u30fc\u30c9\uff08\u30aa\u30d7\u30b7\u30e7\u30ca\u30eb\uff09
MultiUserSettingsPanel.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.KeywordSearchNull=\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u30b5\u30fc\u30d3\u30b9\u3092\u898b\u3064\u3051\u308c\u3089\u308c\u307e\u305b\u3093
MultiUserSettingsPanel.InvalidPortNumber=\u7121\u52b9\u306a\u30dd\u30fc\u30c8\u756a\u53f7
CTL_OfflineHelpAction=\u30aa\u30d5\u30e9\u30a4\u30f3Autopsy\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3
CTL_OnlineHelpAction=\u30aa\u30f3\u30e9\u30a4\u30f3Autopsy\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3
DataResultViewerThumbnail.thumbnailSizeComboBox.large=\u30b5\u30e0\u30cd\u30a4\u30eb\uff08\u5927\uff09
DataResultViewerThumbnail.thumbnailSizeComboBox.medium=\u30b5\u30e0\u30cd\u30a4\u30eb\uff08\u4e2d\uff09
DataResultViewerThumbnail.thumbnailSizeComboBox.small=\u30b5\u30e0\u30cd\u30a4\u30eb\uff08\u5c0f\uff09
MediaViewImagePanel.errorLabel.OOMText=\u30d5\u30a1\u30a4\u30eb\u3092\u30e1\u30c7\u30a3\u30a2\u30d3\u30e5\u30fc\u306b\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\u3067\u3057\u305f\uff1a\u30e1\u30e2\u30ea\u4e0d\u8db3\u3002
MediaViewImagePanel.errorLabel.text=\u30d5\u30a1\u30a4\u30eb\u3092\u30e1\u30c7\u30a3\u30a2\u30d3\u30e5\u30fc\u306b\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\u3067\u3057\u305f\u3002
MediaViewImagePanel.externalViewerButton.text=\u5916\u90e8\u30d3\u30e5\u30fc\u30a2\u30fc\u3067\u958b\u304f
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
SortChooser.addCriteriaButton.text=\u30bd\u30fc\u30c8\u6761\u4ef6\u3092\u8ffd\u52a0
DataResultViewerThumbnail.sortButton.text=\u30bd\u30fc\u30c8
CriterionChooser.ascendingRadio.text=\u25b2 \u6607\u9806\n
CriterionChooser.removeButton.text=\u524a\u9664
CriterionChooser.descendingRadio.text=\u25bc \u964d\u9806
AutopsyOptionsPanel.agencyLogoPathFieldValidationLabel.text=
AutopsyOptionsPanel.logNumAlert.text=
AutopsyOptionsPanel.totalMemoryLabel.text=\u5408\u8a08\u30b7\u30b9\u30c6\u30e0\u30e1\u30e2\u30ea\u30fc:
AutopsyOptionsPanel.maxMemoryLabel.text=\u6700\u5927JVM\u30e1\u30e2\u30ea\u30fc:
AutopsyOptionsPanel.maxLogFileCount.text=\u6700\u5927\u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u6570:
AutopsyOptionsPanel.maxMemoryUnitsLabel.text=GB
AutopsyOptionsPanel.restartNecessaryWarning.text=\u30e1\u30e2\u30ea\u30fc\u5909\u66f4\u3092\u6709\u52b9\u306b\u3059\u308b\u306b\u306f\u518d\u8d77\u52d5\u304c\u5fc5\u8981\u3067\u3059\u3002
AutopsyOptionsPanel.browseLogosButton.text=\u53c2\u7167
AutopsyOptionsPanel.defaultLogoRB.text=\u30c7\u30d5\u30a9\u30eb\u30c8\u3092\u4f7f\u7528
AutopsyOptionsPanel.specifyLogoRB.text=\u30ed\u30b4\u3092\u6307\u5b9a
AutopsyOptionsPanel.agencyLogoPreview.text=<html><div style='text-align: center;'>\u30ed\u30b4\u304c\u3042\u308a\u307e\u305b\u3093<br>selected</div></html>
AutopsyOptionsPanel.logoPanel.border.title=\u30ed\u30b4
AutopsyOptionsPanel.runtimePanel.border.title=\u30e9\u30f3\u30bf\u30a4\u30e0
DataResultPanel.matchLabel.text=\u7d50\u679c
DataResultPanel.numberOfChildNodesLabel.text=0
DataResultPanel.descriptionLabel.text=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30d1\u30b9
DataResultPanel.descriptionLabel.text=directoryPath
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\u9593\u3092\u8868\u793a\u3059\u308b\u5834\u5408\uff1a
ViewPreferencesPanel.viewsHideKnownCheckbox.text=\u30d3\u30e5\u30fc\u30a8\u30ea\u30a2
ViewPreferencesPanel.dataSourcesHideKnownCheckbox.text=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u30a8\u30ea\u30a2\uff08\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u968e\u5c64\uff09
ViewPreferencesPanel.hideKnownFilesLabel.text=\u65e2\u77e5\u30d5\u30a1\u30a4\u30eb\uff08NIST NSRL\u5185\u306e\uff09\u3092\u6b21\u306b\u96a0\u3059\uff1a
ViewPreferencesPanel.keepCurrentViewerRadioButton.toolTipText=\u4f8b\u3048\u3070\u3001JPEG\u304c\u9078\u629e\u3055\u308c\u305f\u5834\u5408\u306b\u305d\u306e\u307e\u307eHEX\u30d3\u30e5\u30fc\u3092\u4f7f\u7528\u3002
ViewPreferencesPanel.keepCurrentViewerRadioButton.text=\u305d\u306e\u307e\u307e\u540c\u3058\u30d5\u30a1\u30a4\u30eb\u30d3\u30e5\u30fc\u30a2\u3092\u4f7f\u7528
ViewPreferencesPanel.useBestViewerRadioButton.toolTipText=\u4f8b\u3048\u3070\u3001JPEG\u304c\u9078\u629e\u3055\u308c\u305f\u5834\u5408\u306b\u306fHEX\u304b\u3089\u30e1\u30c7\u30a3\u30a2\u306b\u5909\u66f4\u3059\u308b\u3002
ViewPreferencesPanel.useBestViewerRadioButton.text=\u6700\u3082\u5c02\u9580\u7684\u306a\u30d5\u30a1\u30a4\u30eb\u30d3\u30e5\u30fc\u30a2\u306b\u5909\u66f4
ViewPreferencesPanel.selectFileLabel.text=\u30d5\u30a1\u30a4\u30eb\u3092\u9078\u629e\u3059\u308b\u5834\u5408\uff1a
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.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.maxResultsLabel.toolTipText=<html>\n\u3053\u306e\u5024\u30920 \u306b\u8a2d\u5b9a\u3059\u308b\u3068\u3001\u3059\u3079\u3066\u306e\u7d50\u679c\u304c\u7d50\u679c\u30c6\u30fc\u30d6\u30eb\u306b\u8868\u793a\u3055\u308c\u307e\u3059\u3002\n<br>\u3053\u306e\u5024\u30920 \u306b\u8a2d\u5b9a\u3059\u308b\u3068\u3001\u7d50\u679c\u6570\u304c\u591a\u3044\u5834\u5408UI\u306e\u5fdc\u7b54\u6027\u304c\u60aa\u304f\u306a\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059 \u3002\n</html>
DataResultViewerTable.exportCSVButton.text=\u30c6\u30fc\u30d6\u30eb\u3092CSV\u3068\u3057\u3066\u4fdd\u5b58
ViewPreferencesPanel.scoColumnsCheckbox.text=S(\u30b9\u30b3\u30a2)\u3001C(\u30b3\u30e1\u30f3\u30c8)\u3001O(\u767a\u751f)
ViewPreferencesPanel.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:
@@ -56,6 +56,11 @@ import org.sleuthkit.datamodel.Content;
import org.sleuthkit.datamodel.TskCoreException;
import org.sleuthkit.datamodel.TskException;
import org.netbeans.swing.etable.ETable;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.JsonArray;
import java.util.Map;
/**
* Instances of this class display the BlackboardArtifacts associated with the
@@ -552,6 +557,14 @@ public class DataContentViewerArtifact extends javax.swing.JPanel implements Dat
value = dateFormatter.format(new java.util.Date(epoch * 1000));
}
break;
case JSON:
// Get the attribute's JSON value and convert to indented multiline display string
String jsonVal = attr.getValueString();
JsonParser parser = new JsonParser();
JsonObject json = parser.parse(jsonVal).getAsJsonObject();
value = toJsonDisplayString(json, "");
break;
}
/*
* Attribute sources column.
@@ -588,6 +601,63 @@ public class DataContentViewerArtifact extends javax.swing.JPanel implements Dat
String getArtifactDisplayName() {
return artifactDisplayName;
}
private static final String INDENT_RIGHT = " ";
private static final String NEW_LINE = "\n";
/**
* Recursively converts a JSON element into an indented multi-line
* display string.
*
* @param element JSON element to convert
* @param indentStr Starting indentation for the element.
*
* @return A multi-line display string.
*/
private String toJsonDisplayString(JsonElement element, String startIndent) {
StringBuilder sb = new StringBuilder("");
JsonObject obj = element.getAsJsonObject();
for (Map.Entry<String, JsonElement> entry : obj.entrySet()) {
appendJsonElementToString(entry.getKey(), entry.getValue(), startIndent, sb );
}
String returnString = sb.toString();
if (startIndent.length() == 0 && returnString.startsWith(NEW_LINE)) {
returnString = returnString.substring(NEW_LINE.length());
}
return returnString;
}
/**
* Converts the given JSON element into string and appends to the given string builder.
*
* @param entry JSON entry to parse
* @param startIndent Starting indentation for the element.
* @param sb String builder to append to.
*/
private void appendJsonElementToString(String jsonKey, JsonElement jsonElement, String startIndent, StringBuilder sb) {
if (jsonElement.isJsonArray()) {
JsonArray jsonArray = jsonElement.getAsJsonArray();
if (jsonArray.size() > 0) {
int count = 1;
sb.append(NEW_LINE).append(String.format("%s%s", startIndent, jsonKey));
for (JsonElement arrayMember : jsonArray) {
sb.append(NEW_LINE).append(String.format("%s%d", startIndent.concat(INDENT_RIGHT), count));
sb.append(toJsonDisplayString(arrayMember, startIndent.concat(INDENT_RIGHT).concat(INDENT_RIGHT)));
count++;
}
}
} else if (jsonElement.isJsonObject()) {
sb.append(NEW_LINE).append(String.format("%s%s %s", startIndent, jsonKey, toJsonDisplayString(jsonElement.getAsJsonObject(), startIndent + INDENT_RIGHT)));
} else if (jsonElement.isJsonPrimitive()) {
sb.append(NEW_LINE).append(String.format("%s%s = %s", startIndent, jsonKey, jsonElement.getAsString()));
} else if (jsonElement.isJsonNull()) {
sb.append(NEW_LINE).append(String.format("%s%s = null", startIndent, jsonKey));
}
}
}
/**
@@ -23,32 +23,42 @@ import org.openide.nodes.Node;
import org.sleuthkit.datamodel.BlackboardArtifact;
/**
* Utility classes for content viewers. In theory, this would live in the
* contentviewer package, but the initial method was needed only be viewers in
* corecomponents and therefore can stay out of public API.
* Utility methods for content viewers.
*/
public class DataContentViewerUtility {
/**
* Returns the first non-Blackboard Artifact from a Node. Needed for (at
* least) Hex and Strings that want to view all types of content (not just
* AbstractFile), but don't want to display an artifact unless that's the
* only thing there. Scenario is hash hit or interesting item hit.
* Gets a Content object from the Lookup of a display Node object,
* preferring to return any Content object other than a BlackboardArtifact
* object.
*
* @param node Node passed into content viewer
* This method was written with the needs of the hex and strings content
* viewers in mind - the algorithm is exactly what those viewers require.
*
* @return highest priority content or null if there is no content
* @param node A display Node object.
*
* @return If there are multiple Content objects associated with the Node,
* the first Content object that is not a BlackboardArtifact object
* is returned. If no Content objects other than artifacts are found,
* the first BlackboardArtifact object found is returned. If no
* Content objects are found, null is returned.
*/
public static Content getDefaultContent(Node node) {
Content bbContentSeen = null;
for (Content content : (node).getLookup().lookupAll(Content.class)) {
if (content instanceof BlackboardArtifact) {
bbContentSeen = content;
Content artifact = null;
for (Content content : node.getLookup().lookupAll(Content.class)) {
if (content instanceof BlackboardArtifact && artifact == null) {
artifact = content;
} else {
return content;
}
}
return bbContentSeen;
return artifact;
}
/*
* Private constructor to prevent instantiation of utility class.
*/
private DataContentViewerUtility() {
}
}
@@ -30,9 +30,7 @@ PlatformUtil.getProcVmUsed.sigarNotInit.msg=Cannot get virt mem used, sigar not
PlatformUtil.getProcVmUsed.gen.msg=Cannot get virt mem used, {0}
PlatformUtil.getJvmMemInfo.usageText=JVM heap usage: {0}, JVM non-heap usage: {1}
PlatformUtil.getPhysicalMemInfo.usageText=Physical memory usage (max, total, free): {0}, {1}, {2}
PlatformUtil.getAllMemUsageInfo.usageText={0}\n\
{1}\n\
Process Virtual Memory: {2}
PlatformUtil.getAllMemUsageInfo.usageText={0}\n{1}\nProcess Virtual Memory: {2}
# {0} - file name
ReadImageTask.mesageText=Reading image: {0}
StringExtract.illegalStateException.cannotInit.msg=Unicode table not properly initialized, cannot instantiate StringExtract
@@ -1,27 +1,35 @@
OpenIDE-Module-Name=\u4E3B\u8981\u30E6\u30FC\u30C6\u30A3\u30EA\u30C6\u30A3
JLNK.noPrefPath.text=\u512A\u5148\u7684\u306B\u4F7F\u7528\u3059\u308B\u30D1\u30B9\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093
PlatformUtil.nameUnknown=\u4E0D\u660E
PlatformUtil.verUnknown=\u4E0D\u660E
PlatformUtil.archUnknown=\u4E0D\u660E
PlatformUtil.jrePath.jreDir.msg=\u57CB\u3081\u8FBC\u307E\u308C\u305FJRE\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u304C\u767A\u898B\u3055\u308C\u307E\u3057\u305F\uFF1A{0}
PlatformUtil.jrePath.usingJavaPath.msg=JAVA\u30D0\u30A4\u30CA\u30EA\u30D1\u30B9\u3092\u4F7F\u7528\uFF1A{0}
PlatformUtil.getPID.sigarNotInit.msg=PID\u3092\u5165\u624B\u3067\u304D\u307E\u305B\u3093\u3001Sigar\u304C\u521D\u671F\u5316\u3055\u308C\u3066\u3044\u307E\u305B\u3093
PlatformUtil.getPID.gen.msg=PID\u3092\u5165\u624B\u3067\u304D\u307E\u305B\u3093\u3001{0}
PlatformUtil.getJavaPID.sigarNotInit.msg=JAVA\u30D7\u30ED\u30BB\u30B9\u306EPID\u304C\u5165\u624B\u3067\u304D\u307E\u305B\u3093\u3001Sigar\u304C\u521D\u671F\u5316\u3055\u308C\u3066\u3044\u307E\u305B\u3093
PlatformUtil.getJavaPID.gen.msg=\u30AF\u30A8\u30EA\u30FC\u306EPID\u304C\u5165\u624B\u3067\u304D\u307E\u305B\u3093\uFF1A{0}, {1}
PlatformUtil.getJavaPIDs.sigarNotInit=JAVA\u30D7\u30ED\u30BB\u30B9\u306EPID\u304C\u5165\u624B\u3067\u304D\u307E\u305B\u3093\u3001Sigar\u304C\u521D\u671F\u5316\u3055\u308C\u3066\u3044\u307E\u305B\u3093
PlatformUtil.getJavaPIDs.gen.msg=\u30AF\u30A8\u30EA\u30FC\u306EPID\u304C\u5165\u624B\u3067\u304D\u307E\u305B\u3093\uFF1A{0}, {1}
PlatformUtil.killProcess.sigarNotInit.msg=PID\u3092\u4F7F\u7528\u3057\u3066\u30D7\u30ED\u30BB\u30B9\u3092\u5F37\u5236\u7D42\u4E86\u3067\u304D\u307E\u305B\u3093\u3001Sigar\u304C\u521D\u671F\u5316\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002
PlatformUtil.killProcess.gen.msg=\u30D7\u30ED\u30BB\u30B9\u3092\u5F37\u5236\u7D42\u4E86\u3067\u304D\u307E\u305B\u3093\uFF1A {0}, {1}
PlatformUtil.getProcVmUsed.sigarNotInit.msg=\u4F7F\u7528\u4E2D\u306E\u4EEE\u60F3\u30E1\u30E2\u30EA\u91CF\u3092\u78BA\u8A8D\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3001Sigar\u304C\u521D\u671F\u5316\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002
PlatformUtil.getProcVmUsed.gen.msg=\u4F7F\u7528\u4E2D\u306E\u4EEE\u60F3\u30E1\u30E2\u30EA\u91CF\u3092\u78BA\u8A8D\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3001{0}
PlatformUtil.getJvmMemInfo.usageText=JVM\u30D2\u30FC\u30D7\u4F7F\u7528\u72B6\u6CC1\uFF1A{0}\u3001JVM\u975E\u30D2\u30FC\u30D7\u4F7F\u7528\u72B6\u6CC1\uFF1A{1}
PlatformUtil.getPhysicalMemInfo.usageText=\u7269\u7406\u30E1\u30E2\u30EA\u4F7F\u7528\u72B6\u6CC1\uFF08\u6700\u5927\u3001\u5408\u8A08\u3001\u5229\u7528\u53EF\u80FD\uFF09\uFF1A {0}, {1}, {2}
# {0} - \u30d5\u30a1\u30a4\u30eb\u540d
GetOrGenerateThumbnailTask.generatingPreviewFor={0} \u306e\u30d7\u30ec\u30d3\u30e5\u30fc\u3092\u751f\u6210\u4e2d\u3067\u3059
# {0} - \u30d5\u30a1\u30a4\u30eb\u540d
GetOrGenerateThumbnailTask.loadingThumbnailFor={0} \u306e\u30b5\u30e0\u30cd\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u307f\u4e2d\u3067\u3059
ImageUtils.ffmpegLoadedError.msg=OpenCV FFMpeg\u30e9\u30a4\u30d6\u30e9\u30ea\u30fc\u304c\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u8a73\u7d30\u306f\u30ed\u30b0\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044
ImageUtils.ffmpegLoadedError.title=OpenCV FFMpeg
OpenIDE-Module-Name=CoreUtils
JLNK.noPrefPath.text=\u63a8\u5968\u30d1\u30b9\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f
PlatformUtil.nameUnknown=\u4e0d\u660e
PlatformUtil.verUnknown=\u4e0d\u660e
PlatformUtil.archUnknown=\u4e0d\u660e
PlatformUtil.jrePath.jreDir.msg=\u57cb\u3081\u8fbc\u307fjre\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u304c\u691c\u51fa\u3055\u308c\u305f\u5834\u6240: {0}
PlatformUtil.jrePath.usingJavaPath.msg=\u6b21\u306ejava\u30d0\u30a4\u30ca\u30ea\u30fc\u30d1\u30b9\u3092\u4f7f\u7528\u4e2d\u3067\u3059: {0}
PlatformUtil.getPID.sigarNotInit.msg=PID\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3002Sigar\u304c\u521d\u671f\u5316\u3055\u308c\u3066\u3044\u307e\u305b\u3093
PlatformUtil.getPID.gen.msg=PID,{0} \u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093
PlatformUtil.getJavaPID.sigarNotInit.msg=java\u30d7\u30ed\u30bb\u30b9\u306ePID\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3002Sigar\u304c\u521d\u671f\u5316\u3055\u308c\u3066\u3044\u307e\u305b\u3093
PlatformUtil.getJavaPID.gen.msg=\u6b21\u306e\u30af\u30a8\u30ea\u306ePID\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093: {0}\u3001{1}
PlatformUtil.getJavaPIDs.sigarNotInit=java\u30d7\u30ed\u30bb\u30b9\u306ePID\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3002Sigar\u304c\u521d\u671f\u5316\u3055\u308c\u3066\u3044\u307e\u305b\u3093
PlatformUtil.getJavaPIDs.gen.msg=\u6b21\u306e\u30af\u30a8\u30ea\u306ePID\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093: {0}\u3001{1}
PlatformUtil.killProcess.sigarNotInit.msg=PID\u306e\u30d7\u30ed\u30bb\u30b9\u3092\u5f37\u5236\u7d42\u4e86\u3067\u304d\u307e\u305b\u3093\u3002Sigar\u304c\u521d\u671f\u5316\u3055\u308c\u3066\u3044\u307e\u305b\u3093
PlatformUtil.killProcess.gen.msg=\u6b21\u306e\u30d7\u30ed\u30bb\u30b9\u3092\u5f37\u5236\u7d42\u4e86\u3067\u304d\u307e\u305b\u3093: {0}\u3001{1}
PlatformUtil.getProcVmUsed.sigarNotInit.msg=\u4f7f\u7528\u3057\u3066\u3044\u308b\u4eee\u60f3\u30e1\u30e2\u30ea\u30fc\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3002Sigar\u304c\u521d\u671f\u5316\u3055\u308c\u3066\u3044\u307e\u305b\u3093
PlatformUtil.getProcVmUsed.gen.msg=\u4f7f\u7528\u3057\u3066\u3044\u308b\u4eee\u60f3\u30e1\u30e2\u30ea\u30fc\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3001{0}
PlatformUtil.getJvmMemInfo.usageText=JVM \u30d2\u30fc\u30d7\u4f7f\u7528\u7387: {0}\u3001\u4f7f\u7528\u3055\u308c\u3066\u3044\u306a\u3044JVM\u30d2\u30fc\u30d7\u9818\u57df: {1}
PlatformUtil.getPhysicalMemInfo.usageText=\u7269\u7406\u30e1\u30e2\u30ea\u30fc\u4f7f\u7528\u7387\uff08\u6700\u5927\u3001\u5408\u8a08\u3001\u7a7a\u304d\uff09: {0}\u3001{1}\u3001{2}
PlatformUtil.getAllMemUsageInfo.usageText={0}\n\
{1}\n\
\u30D7\u30ED\u30BB\u30B9\u4EEE\u60F3\u30E1\u30E2\u30EA\uFF1A{2}
StringExtract.illegalStateException.cannotInit.msg=\u30E6\u30CB\u30B3\u30FC\u30C9\u30C6\u30FC\u30D6\u30EB\u304C\u6B63\u3057\u304F\u521D\u671F\u5316\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3001StringExtract\u3092\u30A4\u30F3\u30B9\u30BF\u30F3\u30B9\u5316\u3067\u304D\u307E\u305B\u3093
ImageUtils.GetOrGenerateThumbnailTask.loadingThumbnailFor={0}\u306E\u30B5\u30E0\u30CD\u30FC\u30EB\u3092\u8AAD\u307F\u8FBC\u307F\u4E2D
ImageUtils.GetOrGenerateThumbnailTask.generatingPreviewFor={0}\u306E\u30D7\u30EC\u30D3\u30E5\u30FC\u3092\u4F5C\u6210\u4E2D
ImageUtils.ReadImageTask.mesage.text={0}\u3092\u8AAD\u307F\u53D6\u308A\u4E2D
VideoUtils.genVideoThumb.progress.text=\u4E00\u6642\u30D5\u30A1\u30A4\u30EB{0}\u3092\u62BD\u51FA\u4E2D
\u6b21\u306e\u4eee\u60f3\u30e1\u30e2\u30ea\u30fc\u3092\u51e6\u7406: {2}
# {0} - \u30d5\u30a1\u30a4\u30eb\u540d
ReadImageTask.mesageText=\u6b21\u306e\u30a4\u30e1\u30fc\u30b8\u3092\u8aad\u307f\u8fbc\u307f\u4e2d\u3067\u3059: {0}
StringExtract.illegalStateException.cannotInit.msg=Unicode\u30c6\u30fc\u30d6\u30eb\u304c\u6b63\u3057\u304f\u521d\u671f\u5316\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002StringExtract\u3092\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5316\u3067\u304d\u307e\u305b\u3093
TextConverter.convert.exception.txt=\u30c6\u30ad\u30b9\u30c8 {0} \u309216\u9032\u6570\u30c6\u30ad\u30b9\u30c8\u306b\u5909\u63db\u3067\u304d\u307e\u305b\u3093
TextConverter.convertFromHex.exception.txt=16\u9032\u6570\u30c6\u30ad\u30b9\u30c8\u3092\u30c6\u30ad\u30b9\u30c8\u306b\u5909\u63db\u3067\u304d\u307e\u305b\u3093
# {0} - \u30d5\u30a1\u30a4\u30eb\u540d
VideoUtils.genVideoThumb.progress.text=\u4e00\u6642\u30d5\u30a1\u30a4\u30eb {0} \u3092\u62bd\u51fa\u4e2d\u3067\u3059
@@ -1,7 +1,7 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2012 Basis Technology Corp.
* Copyright 2012-2019 Basis Technology Corp.
* Contact: carrier <at> sleuthkit <dot> org
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -20,6 +20,7 @@ package org.sleuthkit.autopsy.coreutils;
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.openide.util.NbBundle;
@@ -35,43 +36,43 @@ import org.sleuthkit.autopsy.coreutils.LnkEnums.NetworkProviderType;
*/
public class JLNK {
private int header;
private byte[] linkClassIdentifier;
private List<LinkFlags> linkFlags;
private List<FileAttributesFlags> fileAttributesFlags;
private long crtime;
private long atime;
private long mtime;
private int fileSize;
private int iconIndex;
private int showCommand;
private short hotKey;
private final int header;
private final byte[] linkClassIdentifier;
private final List<LinkFlags> linkFlags;
private final List<FileAttributesFlags> fileAttributesFlags;
private final long crtime;
private final long atime;
private final long mtime;
private final int fileSize;
private final int iconIndex;
private final int showCommand;
private final short hotKey;
private List<String> linkTargetIdList;
private final List<String> linkTargetIdList;
private boolean hasUnicodeLocalBaseAndCommonSuffixOffset;
private String localBasePath;
private String commonPathSuffix;
private String localBasePathUnicode;
private String commonPathSuffixUnicode;
private final boolean hasUnicodeLocalBaseAndCommonSuffixOffset;
private final String localBasePath;
private final String commonPathSuffix;
private final String localBasePathUnicode;
private final String commonPathSuffixUnicode;
private String name;
private String relativePath;
private String workingDir;
private String arguments;
private String iconLocation;
private final String name;
private final String relativePath;
private final String workingDir;
private final String arguments;
private final String iconLocation;
private int driveSerialNumber;
private DriveType driveType;
private String volumeLabel;
private final int driveSerialNumber;
private final DriveType driveType;
private final String volumeLabel;
private List<CommonNetworkRelativeLinkFlags> commonNetworkRelativeListFlags;
private NetworkProviderType networkProviderType;
private boolean unicodeNetAndDeviceName;
private String netName;
private String netNameUnicode;
private String deviceName;
private String deviceNameUnicode;
private final List<CommonNetworkRelativeLinkFlags> commonNetworkRelativeListFlags;
private final NetworkProviderType networkProviderType;
private final boolean unicodeNetAndDeviceName;
private final String netName;
private final String netNameUnicode;
private final String deviceName;
private final String deviceNameUnicode;
public JLNK(int header, byte[] linkClassIdentifier, int linkFlags,
int fileAttributesFlags, long crtime, long atime,
@@ -87,14 +88,14 @@ public class JLNK {
String netName, String netNameUnicode, String deviceName,
String deviceNameUnicode) {
this.header = header;
this.linkClassIdentifier = linkClassIdentifier;
this.linkFlags = new ArrayList<LinkFlags>();
this.linkClassIdentifier = linkClassIdentifier.clone();
this.linkFlags = new ArrayList<>();
for (LnkEnums.LinkFlags enumVal : LnkEnums.LinkFlags.values()) {
if ((linkFlags & enumVal.getFlag()) == enumVal.getFlag()) {
this.linkFlags.add(enumVal);
}
}
this.fileAttributesFlags = new ArrayList<FileAttributesFlags>();
this.fileAttributesFlags = new ArrayList<>();
for (LnkEnums.FileAttributesFlags enumVal : LnkEnums.FileAttributesFlags.values()) {
if ((fileAttributesFlags & enumVal.getFlag()) == enumVal.getFlag()) {
this.fileAttributesFlags.add(enumVal);
@@ -121,7 +122,7 @@ public class JLNK {
this.driveSerialNumber = driveSerialNumber;
this.driveType = driveType;
this.volumeLabel = volumeLabel;
this.commonNetworkRelativeListFlags = new ArrayList<CommonNetworkRelativeLinkFlags>();
this.commonNetworkRelativeListFlags = new ArrayList<>();
for (LnkEnums.CommonNetworkRelativeLinkFlags enumVal : LnkEnums.CommonNetworkRelativeLinkFlags.values()) {
if ((commonNetworkRelativeListFlags & enumVal.getFlag()) == enumVal.getFlag()) {
this.commonNetworkRelativeListFlags.add(enumVal);
@@ -140,7 +141,7 @@ public class JLNK {
}
public List<CommonNetworkRelativeLinkFlags> getCommonNetworkRelativeListFlags() {
return commonNetworkRelativeListFlags;
return Collections.unmodifiableList(commonNetworkRelativeListFlags);
}
public String getCommonPathSuffix() {
@@ -176,7 +177,7 @@ public class JLNK {
}
public List<FileAttributesFlags> getFileAttributesFlags() {
return fileAttributesFlags;
return Collections.unmodifiableList(fileAttributesFlags);
}
public int getFileSize() {
@@ -196,7 +197,7 @@ public class JLNK {
}
public List<String> getLinkTargetIdList() {
return linkTargetIdList;
return Collections.unmodifiableList(linkTargetIdList);
}
public int getIconIndex() {
@@ -208,11 +209,11 @@ public class JLNK {
}
public byte[] getLinkClassIdentifier() {
return linkClassIdentifier;
return linkClassIdentifier.clone();
}
public List<LinkFlags> getLinkFlags() {
return linkFlags;
return Collections.unmodifiableList(linkFlags);
}
public String getLocalBasePath() {
@@ -1,7 +1,7 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2012 Basis Technology Corp.
* Copyright 2012-2019 Basis Technology Corp.
* Contact: carrier <at> sleuthkit <dot> org
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -31,6 +31,10 @@ class LnkEnums {
private static final byte[] IEFRAME = new byte[]{(byte) 0x80, 0x53, 0x1c, (byte) 0x87, (byte) 0xa0,
0x42, 0x69, 0x10, (byte) 0xa2, (byte) 0xea, 0x08, 0x00, 0x2b, 0x30, 0x30, (byte) 0x9d};
private LnkEnums() {
//private constructor for utility class
}
public enum CommonCLSIDS {
CDrivesFolder(CDRIVES),
@@ -38,20 +42,24 @@ class LnkEnums {
IEFrameDLL(IEFRAME),
Unknown(new byte[16]);
private byte[] flag;
private final byte[] flag;
private CommonCLSIDS(byte[] flag) {
this.flag = flag;
this.flag = flag.clone();
}
static CommonCLSIDS valueOf(byte[] type) {
for (CommonCLSIDS value : CommonCLSIDS.values()) {
if (java.util.Arrays.equals(value.flag, type)) {
if (java.util.Arrays.equals(value.getFlag(), type)) {
return value;
}
}
return Unknown;
}
byte[] getFlag() {
return flag.clone();
}
}
public enum LinkFlags {
@@ -84,7 +92,7 @@ class LnkEnums {
PreferEnvironmentPath(0x02000000),
KeepLocalIDListForUNCTarget(0x04000000);
private int flag;
private final int flag;
private LinkFlags(int flag) {
this.flag = flag;
@@ -105,7 +113,7 @@ class LnkEnums {
DRIVE_CDROM(0x00000005),
DRIVE_RAMDISK(0x00000006);
private int flag;
private final int flag;
private DriveType(int flag) {
this.flag = flag;
@@ -117,7 +125,7 @@ class LnkEnums {
static DriveType valueOf(int type) {
for (DriveType value : DriveType.values()) {
if (value.flag == type) {
if (value.getFlag() == type) {
return value;
}
}
@@ -143,7 +151,7 @@ class LnkEnums {
NOT_CONTENT_INDEXED(0x00002000),
ENCRYPTED(0x00004000);
private int flag;
private final int flag;
private FileAttributesFlags(int flag) {
this.flag = flag;
@@ -159,7 +167,7 @@ class LnkEnums {
VolumeIDAndLocalBasePath(0x00000001),
CommonNetworkRelativeLinkAndPathSuffix(0x00000002);
private int flag;
private final int flag;
private LinkInfoFlags(int flag) {
this.flag = flag;
@@ -175,7 +183,7 @@ class LnkEnums {
ValidDevice(0x00000001),
ValidNetType(0x00000002);
private int flag;
private final int flag;
private CommonNetworkRelativeLinkFlags(int flag) {
this.flag = flag;
@@ -231,7 +239,7 @@ class LnkEnums {
WNNC_NET_GOOGLE(0x00430000),
WNNC_NET_UNKNOWN(0x00000000);
private int flag;
private final int flag;
private NetworkProviderType(int flag) {
this.flag = flag;
@@ -239,7 +247,7 @@ class LnkEnums {
static NetworkProviderType valueOf(int type) {
for (NetworkProviderType value : NetworkProviderType.values()) {
if (value.flag == type) {
if (value.getFlag() == type) {
return value;
}
}
@@ -250,4 +258,5 @@ class LnkEnums {
return flag;
}
}
}
@@ -0,0 +1,109 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2019 Basis Technology Corp.
* Contact: carrier <at> sleuthkit <dot> org
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.sleuthkit.autopsy.coreutils;
import com.google.i18n.phonenumbers.NumberParseException;
import com.google.i18n.phonenumbers.PhoneNumberUtil;
import com.google.i18n.phonenumbers.Phonenumber;
import java.util.logging.Level;
/**
*
* Class to format and get information from a phone number
*/
public final class PhoneNumUtil {
private static final Logger logger = Logger.getLogger(PhoneNumUtil.class.getName());
private PhoneNumUtil() {
}
/**
* Get the country code from a phone number
*
* @param phoneNumber
* @return country code if can determine otherwise it will return ""
*/
public static String getCountryCode(String phoneNumber) {
String regionCode = null;
try {
PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance();
Phonenumber.PhoneNumber phoneNum = phoneNumberUtil.parse(phoneNumber, "");
regionCode = phoneNumberUtil.getRegionCodeForNumber(phoneNum);
if (regionCode == null) {
return "";
} else {
return regionCode;
}
} catch (NumberParseException ex) {
logger.log(Level.WARNING, "Error getting country code, for phone number: {0}", phoneNumber);
return "";
}
}
/**
* Convert a phone number to the E164 format
*
* @param phoneNumber
*
* @return formated phone number if successful or original phone number if
* unsuccessful
*/
public static String convertToE164(String phoneNumber) {
PhoneNumberUtil phone_util = PhoneNumberUtil.getInstance();
try {
Phonenumber.PhoneNumber phoneProto = phone_util.parse(phoneNumber, getCountryCode(phoneNumber));
if (phone_util.isValidNumber(phoneProto)) {
return phone_util.format(phoneProto, PhoneNumberUtil.PhoneNumberFormat.E164);
} else {
logger.log(Level.WARNING, "Invalid phone number: {0}", phoneNumber);
return phoneNumber;
}
} catch (NumberParseException e) {
logger.log(Level.WARNING, "Error parsing phone number: {0}", phoneNumber);
return phoneNumber;
}
}
/**
* Convert a phone number to the International format
*
* @param phoneNumber
*
* @return formated phone number if successful or original phone number if
* unsuccessful
*/
public static String convertToInternational(String phoneNumber) {
PhoneNumberUtil phone_util = PhoneNumberUtil.getInstance();
try {
Phonenumber.PhoneNumber phoneProto = phone_util.parse(phoneNumber, getCountryCode(phoneNumber));
if (phone_util.isValidNumber(phoneProto)) {
return phone_util.format(phoneProto, PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL);
} else {
logger.log(Level.WARNING, "Invalid phone number: {0}", phoneNumber);
return phoneNumber;
}
} catch (NumberParseException e) {
logger.log(Level.WARNING, "Error parsing phone number: {0}", phoneNumber);
return phoneNumber;
}
}
}
@@ -44,7 +44,7 @@ final public class ThreadUtils {
} catch (InterruptedException ignored) {
/*
* Ignore interrupts. The policy implemented by this method is
* an unconditional wait.:
* an unconditional wait.
*/
}
}
@@ -122,6 +122,7 @@ public class ArtifactStringContent implements StringContent {
case LONG:
case DOUBLE:
case BYTE:
case JSON:
default:
value = attr.getDisplayString();
break;
@@ -0,0 +1,207 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2017-2019 Basis Technology Corp.
* Contact: carrier <at> sleuthkit <dot> org
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.sleuthkit.autopsy.datamodel;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.logging.Level;
import javax.swing.Action;
import org.apache.commons.lang3.StringUtils;
import org.openide.nodes.Children;
import org.openide.nodes.Sheet;
import org.openide.util.Lookup;
import org.openide.util.NbBundle;
import org.openide.util.Utilities;
import org.openide.util.lookup.Lookups;
import org.sleuthkit.autopsy.actions.AddContentTagAction;
import org.sleuthkit.autopsy.actions.DeleteFileContentTagAction;
import org.sleuthkit.autopsy.casemodule.Case;
import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException;
import org.sleuthkit.autopsy.contentviewers.MessageContentViewer;
import org.sleuthkit.autopsy.coreutils.ContextMenuExtensionPoint;
import org.sleuthkit.autopsy.coreutils.Logger;
import static org.sleuthkit.autopsy.datamodel.FileNode.getIconForFileType;
import org.sleuthkit.autopsy.directorytree.ExportCSVAction;
import org.sleuthkit.autopsy.directorytree.ExternalViewerAction;
import org.sleuthkit.autopsy.directorytree.ExternalViewerShortcutAction;
import org.sleuthkit.autopsy.directorytree.ExtractAction;
import org.sleuthkit.autopsy.directorytree.NewWindowViewAction;
import org.sleuthkit.autopsy.directorytree.ViewContextAction;
import org.sleuthkit.autopsy.timeline.actions.ViewFileInTimelineAction;
import org.sleuthkit.datamodel.AbstractFile;
import org.sleuthkit.datamodel.TskException;
import org.sleuthkit.datamodel.blackboardutils.Attachment;
import org.sleuthkit.datamodel.blackboardutils.FileAttachment;
import org.sleuthkit.datamodel.blackboardutils.URLAttachment;
/**
* Node for a message attachment.
*
*/
public final class AttachmentNode extends DisplayableItemNode {
private static final Logger LOGGER = Logger.getLogger(MessageContentViewer.class.getName());
private final Attachment attachment;
private final AbstractFile attachmentFile;
public AttachmentNode(Attachment attachment) {
super(Children.LEAF, createLookup(attachment));
super.setName(attachment.getLocation());
super.setDisplayName(attachment.getLocation()); // SET NODE DISPLAY NAME, I.E., TEXT IN FIRST TABLE CELL
this.attachment = attachment;
Long attachmentObjId = attachment.getObjId();
AbstractFile attchmentAbstractFile = null;
if (attachmentObjId != null && attachmentObjId > 0) {
try {
attchmentAbstractFile = Case.getCurrentCaseThrows().getSleuthkitCase().getAbstractFileById(attachmentObjId);
} catch (TskException | NoCurrentCaseException ex) {
LOGGER.log(Level.WARNING, "Error loading attachment file with object id " + attachmentObjId, ex); //NON-NLS
}
}
attachmentFile = attchmentAbstractFile;
// set the icon for node
setIcon();
}
@Override
@NbBundle.Messages({
"AttachmentNode.getActions.viewFileInDir.text=View File in Directory",
"AttachmentNode.getActions.viewInNewWin.text=View in New Window",
"AttachmentNode.getActions.openInExtViewer.text=Open in External Viewer Ctrl+E",
"AttachmentNode.getActions.searchFilesSameMD5.text=Search for files with the same MD5 hash"})
public Action[] getActions(boolean context) {
List<Action> actionsList = new ArrayList<>();
actionsList.addAll(Arrays.asList(super.getActions(true)));
// If there is an attachment file
if (this.attachmentFile != null) {
actionsList.add(new ViewContextAction(Bundle.AttachmentNode_getActions_viewFileInDir_text(), this.attachmentFile));
actionsList.add(null); // Creates an item separator
actionsList.add(new NewWindowViewAction(Bundle.AttachmentNode_getActions_viewInNewWin_text(), this));
final Collection<AbstractFile> selectedFilesList
= new HashSet<>(Utilities.actionsGlobalContext().lookupAll(AbstractFile.class));
if (selectedFilesList.size() == 1) {
actionsList.add(new ExternalViewerAction(
Bundle.AttachmentNode_getActions_openInExtViewer_text(), this));
} else {
actionsList.add(ExternalViewerShortcutAction.getInstance());
}
actionsList.add(ViewFileInTimelineAction.createViewFileAction(this.attachmentFile));
actionsList.add(null); // Creates an item separator
actionsList.add(ExtractAction.getInstance());
actionsList.add(ExportCSVAction.getInstance());
actionsList.add(null); // Creates an item separator
actionsList.add(AddContentTagAction.getInstance());
if (1 == selectedFilesList.size()) {
actionsList.add(DeleteFileContentTagAction.getInstance());
}
actionsList.addAll(ContextMenuExtensionPoint.getActions());
}
return actionsList.toArray(new Action[0]);
}
@Override
protected Sheet createSheet() {
// Create a new property sheet.
Sheet sheet = new Sheet();
Sheet.Set sheetSet = Sheet.createPropertiesSet();
sheet.put(sheetSet);
sheetSet.put(new NodeProperty<>("Location", "Location", "", this.attachment.getLocation()));
if (attachmentFile != null) {
long size = attachmentFile.getSize();
String mimeType = attachmentFile.getMIMEType();
// @TODO Vik-5762: get SCO Columns
sheetSet.put(new NodeProperty<>("Size", "Size", "", size));
if (StringUtils.isNotEmpty(mimeType)) {
sheetSet.put(new NodeProperty<>("Mime type", "Mime type", "", mimeType));
}
sheetSet.put(new NodeProperty<>("Known", "Known", "", attachmentFile.getKnown().getName()));
}
return sheet;
}
@Override
public <T> T accept(DisplayableItemNodeVisitor<T> visitor) {
return visitor.visit(this);
}
@Override
public boolean isLeafTypeNode() {
return true;
}
@Override
public String getItemType() {
return getClass().getName();
}
private static Lookup createLookup(Attachment attachment) {
Long attachmentObjId = attachment.getObjId();
if (attachmentObjId != null && attachmentObjId > 0) {
AbstractFile attachmentFile = null;
try {
attachmentFile = Case.getCurrentCaseThrows().getSleuthkitCase().getAbstractFileById(attachmentObjId);
if (attachmentFile != null) {
return Lookups.fixed(attachment, attachmentFile);
} else {
return Lookups.fixed(attachment);
}
} catch (TskException | NoCurrentCaseException ex) {
return Lookups.fixed(attachment);
}
}
return Lookups.fixed(attachment);
}
/**
* Set the icon based on attachment type
*/
private void setIcon() {
if (attachmentFile != null) {
this.setIconBaseWithExtension(getIconForFileType(attachmentFile));
} else if (attachment instanceof FileAttachment) {
this.setIconBaseWithExtension("org/sleuthkit/autopsy/images/document-question-16.png");
} else if (attachment instanceof URLAttachment) {
this.setIconBaseWithExtension("org/sleuthkit/autopsy/images/url-16.png");
} else {
this.setIconBaseWithExtension("org/sleuthkit/autopsy/images/file-icon-deleted.png");
}
}
}
@@ -43,6 +43,10 @@ ArtifactStringContent.attrsTableHeader.type=Type
ArtifactStringContent.attrsTableHeader.value=Value
ArtifactStringContent.failedToGetAttributes.message=Failed to get some or all attributes from case database
ArtifactStringContent.failedToGetSourcePath.message=Failed to get source file path from case database
AttachmentNode.getActions.openInExtViewer.text=Open in External Viewer Ctrl+E
AttachmentNode.getActions.searchFilesSameMD5.text=Search for files with the same MD5 hash
AttachmentNode.getActions.viewFileInDir.text=View File in Directory
AttachmentNode.getActions.viewInNewWin.text=View in New Window
# {0} - node name
BaseChildFactory.NoSuchEventBusException.message=No event bus for node: {0}
BlackboardArtifactNode.createSheet.artifactDetails.displayName=Result Details
@@ -297,6 +301,15 @@ OpenReportAction.actionPerformed.NoAssociatedEditorMessage=There is no associate
OpenReportAction.actionPerformed.NoOpenInEditorSupportMessage=This platform (operating system) does not support opening a file in an editor this way.
OpenReportAction.actionPerformed.MissingReportFileMessage=The report file no longer exists.
OpenReportAction.actionPerformed.ReportFileOpenPermissionDeniedMessage=Permission to open the report file was denied.
PoolNode.createSheet.name.desc=no description
PoolNode.createSheet.name.displayName=Name
PoolNode.createSheet.name.name=Name
PoolNode.createSheet.offset.desc=no description
PoolNode.createSheet.offset.displayName=Starting offset
PoolNode.createSheet.offset.name=Starting offset
PoolNode.createSheet.type.desc=no description
PoolNode.createSheet.type.displayName=Type
PoolNode.createSheet.type.name=Type
RecentFiles.aut0DayFilter.displayName.text=Final Day
RecentFiles.aut1dayFilter.displayName.text=Final Day - 1
RecentFiles.aut2dayFilter.displayName.text=Final Day - 2
@@ -1,26 +1,179 @@
OpenIDE-Module-Name=\u30c7\u30fc\u30bf\u30e2\u30c7\u30eb
AbstractAbstractFileNode.nameColLbl=\u540d\u524d
AbstractAbstractFileNode.locationColLbl=\u30ed\u30b1\u30fc\u30b7\u30e7\u30f3
AbstractAbstractFileNode.modifiedTimeColLbl=\u4fee\u6b63\u65e5\u6642
AbstractAbstractFileNode.changeTimeColLbl=\u5909\u66f4\u65e5\u6642
AbstractAbstractFileNode.accessTimeColLbl=\u30a2\u30af\u30bb\u30b9\u65e5\u6642
AbstractAbstractFileNode.createdTimeColLbl=\u4f5c\u6210\u65e5\u6642
AbstractAbstractFileNode.sizeColLbl=\u30b5\u30a4\u30ba
AbstractAbstractFileNode.modeColLbl=\u30e2\u30fc\u30c9
AbstractAbstractFileNode.useridColLbl=\u30e6\u30fc\u30b6ID
AbstractAbstractFileNode.accessTimeColLbl=\u30a2\u30af\u30bb\u30b9\u6642\u523b
AbstractAbstractFileNode.attrAddrColLbl=\u5c5e\u6027\u30a2\u30c9\u30ec\u30b9
AbstractAbstractFileNode.changeTimeColLbl=\u6642\u523b\u5909\u66f4
AbstractAbstractFileNode.createdTimeColLbl=\u4f5c\u6210\u3057\u305f\u6642\u523b
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
AbstractAbstractFileNode.createSheet.count.name=O
AbstractAbstractFileNode.createSheet.interestingResult.description=\u30d5\u30a1\u30a4\u30eb\u306b\u95a2\u9023\u4ed8\u3051\u3089\u308c\u3066\u3044\u308b\u8208\u5473\u6df1\u3044\u7d50\u679c\u304c\u3042\u308a\u307e\u3059\u3002
AbstractAbstractFileNode.createSheet.noScore.description=\u30b9\u30b3\u30a2\u306a\u3057
AbstractAbstractFileNode.createSheet.notableFile.description=\u9855\u8457\u3068\u8a8d\u8b58\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u3067\u3059\u3002
AbstractAbstractFileNode.createSheet.notableTaggedFile.description=\u9855\u8457\u30bf\u30b0\u3067\u30bf\u30b0\u4ed8\u3051\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u3067\u3059\u3002
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.extensionColLbl=\u62e1\u5f35\u5b50
AbstractAbstractFileNode.flagsDirColLbl=\u30d5\u30e9\u30b0(\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc)
AbstractAbstractFileNode.flagsMetaColLbl=\u30d5\u30e9\u30b0(\u30e1\u30bf)
AbstractAbstractFileNode.groupidColLbl=\u30b0\u30eb\u30fc\u30d7ID
AbstractAbstractFileNode.knownColLbl=\u65e2\u77e5
AbstractAbstractFileNode.locationColLbl=\u5834\u6240
AbstractAbstractFileNode.md5HashColLbl=MD5\u30cf\u30c3\u30b7\u30e5
AbstractContentChildren.CreateTSKNodeVisitor.exception.noNodeMsg=\u6307\u5b9a\u3055\u308c\u305fSleuthkitItem\u306e\u30ce\u30fc\u30c9\u304c\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u307e\u305b\u3093
AbstractContentChildren.createAutopsyNodeVisitor.exception.noNodeMsg=\u6307\u5b9a\u3055\u308c\u305f\u8868\u793a\u53ef\u80fd\u306a\u30a2\u30a4\u30c6\u30e0(DisplayableItem)\u306e\u30ce\u30fc\u30c9\u304c\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u307e\u305b\u3093
AbstractAbstractFileNode.metaAddrColLbl=\u30e1\u30bf\u30a2\u30c9\u30ec\u30b9
AbstractAbstractFileNode.mimeType=MIME\u30bf\u30a4\u30d7
AbstractAbstractFileNode.modeColLbl=\u30e2\u30fc\u30c9
AbstractAbstractFileNode.modifiedTimeColLbl=MFT\u5909\u66f4\u6642\u523b
AbstractAbstractFileNode.nameColLbl=\u540d\u524d
AbstractAbstractFileNode.objectId=\u30aa\u30d6\u30b8\u30a7\u30af\u30c8ID
AbstractAbstractFileNode.originalName=\u30aa\u30ea\u30b8\u30ca\u30eb\u540d
AbstractAbstractFileNode.sizeColLbl=\u30b5\u30a4\u30ba
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
AbstractContentNode.nodescription=\u8aac\u660e\u306a\u3057
AbstractContentNode.valueLoading=\u5024\u306e\u8aad\u307f\u8fbc\u307f\u4e2d
AbstractFsContentNode.noDesc.text=\u8aac\u660e\u306a\u3057
ArtifactStringContent.attrsTableHeader.sources=\u30bd\u30fc\u30b9
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}
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
BlackboardArtifactNode.createSheet.artifactMD5.name=MD5\u30cf\u30c3\u30b7\u30e5
BlackboardArtifactNode.createSheet.artifactType.displayName=\u7d50\u679c\u30bf\u30a4\u30d7
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.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.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.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
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
ContentTagNode.createSheet.artifactMD5.displayName=MD5\u30cf\u30c3\u30b7\u30e5
ContentTagNode.createSheet.artifactMD5.name=MD5\u30cf\u30c3\u30b7\u30e5
ContentTagNode.createSheet.userName.text=\u30e6\u30fc\u30b6\u30fc\u540d
DeletedContent.allDelFilter.text=\u3059\u3079\u3066
DeletedContent.createSheet.filterType.desc=\u8aac\u660e\u306a\u3057
DeletedContent.createSheet.filterType.displayName=\u30bf\u30a4\u30d7
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
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
FileTypeExtensionFilters.tskDatabaseFilter.text=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9
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
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
FileTypesByMimeTypeNode.createSheet.mediaSubtype.name=\u30b5\u30d6\u30bf\u30a4\u30d7
FileTypesByMimeTypeNode.createSheet.mediaType.desc=\u8aac\u660e\u306a\u3057
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
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.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)
ImageNode.createSheet.size.desc=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u306e\u30b5\u30a4\u30ba(\u30d0\u30a4\u30c8)\u3067\u3059\u3002
ImageNode.createSheet.size.displayName=\u30b5\u30a4\u30ba(\u30d0\u30a4\u30c8)
ImageNode.createSheet.size.name=\u30b5\u30a4\u30ba(\u30d0\u30a4\u30c8)
ImageNode.createSheet.timezone.desc=\u30a4\u30e1\u30fc\u30b8\u306e\u30bf\u30a4\u30e0\u30be\u30fc\u30f3
ImageNode.createSheet.timezone.displayName=\u30bf\u30a4\u30e0\u30be\u30fc\u30f3
ImageNode.createSheet.timezone.name=\u30bf\u30a4\u30e0\u30be\u30fc\u30f3
ImageNode.createSheet.type.desc=\u30a4\u30e1\u30fc\u30b8\u306e\u30bf\u30a4\u30d7\u3067\u3059\u3002
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
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\u6642\u523b
KeywordHits.createNodeForKey.accessTime.displayName=\u30a2\u30af\u30bb\u30b9\u6642\u523b
KeywordHits.createNodeForKey.accessTime.name=AccessTime
KeywordHits.createNodeForKey.chgTime.desc=\u6642\u523b\u5909\u66f4
KeywordHits.createNodeForKey.chgTime.displayName=\u5909\u66f4\u6642\u523b
KeywordHits.createNodeForKey.chgTime.name=ChangeTime
KeywordHits.createNodeForKey.modTime.desc=MFT\u5909\u66f4\u6642\u523b
KeywordHits.createNodeForKey.modTime.displayName=MFT\u5909\u66f4\u6642\u523b
KeywordHits.createNodeForKey.modTime.name=ModifiedTime
KeywordHits.createSheet.filesWithHits.desc=\u8aac\u660e\u306a\u3057
KeywordHits.createSheet.filesWithHits.displayName=\u30d2\u30c3\u30c8\u306e\u3042\u308b\u30d5\u30a1\u30a4\u30eb
KeywordHits.createSheet.filesWithHits.name=\u30d2\u30c3\u30c8\u306e\u3042\u308b\u30d5\u30a1\u30a4\u30eb
KeywordHits.createSheet.listName.desc=\u8aac\u660e\u306a\u3057
KeywordHits.createSheet.listName.displayName=\u30ea\u30b9\u30c8\u540d
KeywordHits.createSheet.listName.name=\u30ea\u30b9\u30c8\u540d
KeywordHits.createSheet.name.desc=\u8aac\u660e\u306a\u3057
KeywordHits.createSheet.name.displayName=\u540d\u524d
KeywordHits.createSheet.name.name=\u540d\u524d
KeywordHits.createSheet.numChildren.desc=\u8aac\u660e\u306a\u3057
KeywordHits.createSheet.numChildren.displayName=\u5b50\u306e\u6570
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
AbstractFsContentNode.noDesc.text=\u8aac\u660e\u304c\u3042\u308a\u307e\u305b\u3093
ArtifactStringContent.getStr.srcFilePath.text=\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9
ArtifactStringContent.getStr.err=\u30b3\u30f3\u30c6\u30f3\u30c4\u53d6\u5f97\u30a8\u30e9\u30fc
ArtifactTypeNode.createSheet.artType.desc=\u8aac\u660e\u304c\u3042\u308a\u307e\u305b\u3093
ArtifactTypeNode.createSheet.childCnt.name=\u30c1\u30e3\u30a4\u30eb\u30c9\u6570
ArtifactTypeNode.createSheet.childCnt.desc=\u8aac\u660e\u304c\u3042\u308a\u307e\u305b\u3093
BlackboardArtifactNode.noDesc.text=\u8aac\u660e\u304c\u3042\u308a\u307e\u305b\u3093
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
@@ -32,7 +185,7 @@ BlackboardArtifactNode.createSheet.filePath.displayName=\u30d5\u30a1\u30a4\u30eb
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=\u4f7f\u7528\u3067\u304d\u307e\u305b\u3093
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
@@ -41,154 +194,145 @@ 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=\u4f7f\u7528\u3067\u304d\u307e\u305b\u3093
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.nam=MFT\u5909\u66f4\u6642\u523b
ContentTagNode.createSheet.fileModifiedTime.displayName=MFT\u5909\u66f4\u6642\u523b
ContentTagNode.createSheet.fileChangedTime.name=\u5909\u66f4\u3055\u308c\u305f\u523b\u523b
ContentTagNode.createSheet.fileChangedTime.displayName=\u5909\u66f4\u3055\u308c\u305f\u523b\u523b
ContentTagNode.createSheet.fileAccessedTime.name=\u30a2\u30af\u30bb\u30b9\u3055\u308c\u305f\u6642\u523b
ContentTagNode.createSheet.fileAccessedTime.displayName=\u30a2\u30af\u30bb\u30b9\u3055\u308c\u305f\u6642\u523b
ContentTagNode.createSheet.fileCreatedTime.name=\u4f5c\u6210\u3057\u305f\u6642\u523b
ContentTagNode.createSheet.fileCreatedTime.displayName=\u4f5c\u6210\u3057\u305f\u6642\u523b
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\u5185\u306e\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u3092\u8868\u793a
DataModelActionsFactory.fileInDir.text=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u8868\u793a
DataModelActionsFactory.viewNewWin.text=\u65b0\u898f\u30a6\u30a3\u30f3\u30c9\u30a6\u306b\u8868\u793a
DataModelActionsFactory.openExtViewer.text=\u5916\u90e8\u30d3\u30e5\u30fc\u30a2\u306b\u8868\u793a
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\u304c\u3042\u308a\u307e\u305b\u3093
DeletedContent.fsDelFilter.text=\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0
DeletedContent.allDelFilter.text=\u3059\u3079\u3066
DeletedContent.deletedContentsNode.name=\u524a\u9664\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb
DeletedContent.createSheet.name.desc=\u8aac\u660e\u304c\u3042\u308a\u307e\u305b\u3093
DeletedContent.createSheet.filterType.name=\u30d5\u30a3\u30eb\u30bf\u30fc\u30bf\u30a4\u30d7
DeletedContent.createSheet.filterType.displayName=\u30d5\u30a3\u30eb\u30bf\u30fc\u30bf\u30a4\u30d7
DeletedContent.createSheet.filterType.desc=\u8aac\u660e\u304c\u3042\u308a\u307e\u305b\u3093
DeletedContent.createKeys.maxObjects.msg=\u8868\u793a\u53ef\u80fd\u306a\u6570\u3088\u308a\u3082\u591a\u304f\u306e\u524a\u9664\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u304c\u5b58\u5728\u3057\u307e\u3059\u3002\u6700\u521d\u306e{0}\u306e\u524a\u9664\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002
DeletedContent.createNodeForKey.typeNotSupported.msg=\u3053\u306e\u30bf\u30a4\u30d7\u306e\u8868\u793a\u53ef\u80fd\u306a\u30a2\u30a4\u30c6\u30e0\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\uff1a{0}
DirectoryNode.parFolder.text=[\u30da\u30a2\u30ec\u30f3\u30c8\u30d5\u30a9\u30eb\u30c0]
DirectoryNode.curFolder.text=[\u73fe\u5728\u306e\u30d5\u30a9\u30eb\u30c0]
DirectoryNode.getActions.viewFileInDir.text=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u8868\u793a
DirectoryNode.viewInNewWin.text=\u65b0\u898f\u30a6\u30a3\u30f3\u30c9\u30a6\u306b\u8868\u793a
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
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\u304c\u3042\u308a\u307e\u305b\u3093
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\u304c\u3042\u308a\u307e\u305b\u3093
FileNode.getActions.viewFileInDir.text=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u8868\u793a
FileNode.getActions.viewInNewWin.text=\u65b0\u898f\u30a6\u30a3\u30f3\u30c9\u30a6\u306b\u8868\u793a
FileNode.getActions.openInExtViewer.text=\u5916\u90e8\u30d3\u30e5\u30fc\u30a2\u3067\u958b\u304f
FileNode.getActions.searchFilesSameMD5.text=\u540c\u3058MD5\u30cf\u30c3\u30b7\u30e5\u3092\u6301\u3064\u30d5\u30a1\u30a4\u30eb\u3092\u691c\u7d22
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.desc=\u8aac\u660e\u304c\u3042\u308a\u307e\u305b\u3093
FileSize.createSheet.filterType.name=\u30d5\u30a3\u30eb\u30bf\u30fc\u30bf\u30a4\u30d7
FileSize.createSheet.filterType.displayName=\u30d5\u30a3\u30eb\u30bf\u30fc\u30bf\u30a4\u30d7
FileSize.createSheet.filterType.desc=\u8aac\u660e\u304c\u3042\u308a\u307e\u305b\u3093
FileSize.exception.notSupported.msg=\u3053\u306e\u30bf\u30a4\u30d7\u306e\u8868\u793a\u53ef\u80fd\u306a\u30a2\u30a4\u30c6\u30e0\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\uff1a{0}
FileTypeChildren.exception.notSupported.msg=\u3053\u306e\u30bf\u30a4\u30d7\u306e\u8868\u793a\u53ef\u80fd\u306a\u30a2\u30a4\u30c6\u30e0\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\uff1a{0}
FileTypeExtensionFilters.tskImgFilter.text=\u30a4\u30e1\u30fc\u30b8
FileTypeExtensionFilters.tskVideoFilter.text=\u30d3\u30c7\u30aa
FileTypeExtensionFilters.tskAudioFilter.text=\u30aa\u30fc\u30c7\u30a3\u30aa
FileTypeExtensionFilters.tskArchiveFilter.text=\u30a2\u30fc\u30ab\u30a4\u30d6
FileTypeExtensionFilters.tskDocumentFilter.text=\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8
FileTypeExtensionFilters.tskExecFilter.text=\u5b9f\u884c\u30d5\u30a1\u30a4\u30eb
FileTypeExtensionFilters.autDocHtmlFilter.text=HTML
FileTypeExtensionFilters.autDocOfficeFilter.text=\u30aa\u30d5\u30a3\u30b9
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
FileTypesByExtNode.createSheet.filterType.desc=\u8aac\u660e\u304c\u3042\u308a\u307e\u305b\u3093
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\u304c\u3042\u308a\u307e\u305b\u3093
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\u304c\u3042\u308a\u307e\u305b\u3093
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\u304c\u3042\u308a\u307e\u305b\u3093
ImageNode.getActions.viewInNewWin.text=\u65b0\u898f\u30a6\u30a3\u30f3\u30c9\u30a6\u306b\u8868\u793a
ImageNode.getActions.openFileSearchByAttr.text=\u5c5e\u6027\u306b\u3088\u308b\u30d5\u30a1\u30a4\u30eb\u691c\u7d22\u3092\u958b\u304f
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\u304c\u3042\u308a\u307e\u305b\u3093
Installer.exception.tskVerStringNull.msg=Sleuth Kit JNI\u30c6\u30b9\u30c8\u30b3\u30fc\u30eb\u3067\u306f\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u305b\u3093\u3067\u3057\u305f\u304c\u3001\u30d0\u30fc\u30b8\u30e7\u30f3\u30b9\u30c8\u30ea\u30f3\u30b0\u306f\u30cc\u30eb\u3067\u3057\u305f\uff01
Installer.tskLibErr.msg=Sleuth Kit JNI\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u30c6\u30b9\u30c8\u30b3\u30fc\u30eb\u304c\u5931\u6557\u3057\u307e\u3057\u305f\uff01\n\n\u8a73\u7d30\uff1a {0}
Installer.tskLibErr.err=\u81f4\u547d\u7684\u30a8\u30e9\u30fc\uff01
InterestingHits.interestingItems.text=\u7591\u308f\u3057\u3044\u30a2\u30a4\u30c6\u30e0
InterestingHits.displayName.text=\u7591\u308f\u3057\u3044\u30a2\u30a4\u30c6\u30e0
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\u304c\u3042\u308a\u307e\u305b\u3093
InterestingHits.createSheet.name.desc=\u8aac\u660e\u306a\u3057
KeyValueNode.createSheet.name.name=\u540d\u524d
KeyValueNode.createSheet.name.displayName=\u540d\u524d
KeyValueNode.createSheet.name.desc=\u8a72\u5f53\u306a\u3057
KeyValueNode.createSheet.map.desc=\u8a72\u5f53\u306a\u3057
KeywordHits.kwHits.text=\u30ad\u30fc\u30ef\u30fc\u30c9\u30d2\u30c3\u30c8
KeywordHits.createSheet.name.name=\u540d\u524d
KeywordHits.createSheet.name.displayName=\u540d\u524d
KeywordHits.createSheet.name.desc=\u8aac\u660e\u304c\u3042\u308a\u307e\u305b\u3093
KeywordHits.createSheet.listName.name=\u30ea\u30b9\u30c8\u540d
KeywordHits.createSheet.listName.displayName=\u30ea\u30b9\u30c8\u540d
KeywordHits.createSheet.listName.desc=\u8aac\u660e\u304c\u3042\u308a\u307e\u305b\u3093
KeywordHits.createSheet.numChildren.desc=\u8aac\u660e\u304c\u3042\u308a\u307e\u305b\u3093
KeywordHits.createSheet.filesWithHits.name=\u30d2\u30c3\u30c8\u3057\u305f\u30d5\u30a1\u30a4\u30eb
KeywordHits.createSheet.filesWithHits.displayName=\u30d2\u30c3\u30c8\u3057\u305f\u30d5\u30a1\u30a4\u30eb
KeywordHits.createSheet.filesWithHits.desc=\u8aac\u660e\u304c\u3042\u308a\u307e\u305b\u3093
KeywordHits.createNodeForKey.modTime.displayName=\u4fee\u6b63\u65e5\u6642
KeywordHits.createNodeForKey.modTime.desc=\u4fee\u6b63\u65e5\u6642
KeywordHits.createNodeForKey.accessTime.displayName=\u30a2\u30af\u30bb\u30b9\u65e5\u6642
KeywordHits.createNodeForKey.accessTime.desc=\u30a2\u30af\u30bb\u30b9\u65e5\u6642
KeywordHits.createNodeForKey.chgTime.displayName=\u5909\u66f4\u65e5\u6642
KeywordHits.createNodeForKey.chgTime.desc=\u5909\u66f4\u65e5\u6642
KeywordHits.createNodeForKey.chgTime.name=\u5909\u66f4\u65e5\u6642
KeywordHits.createNodeForKey.accessTime.name=\u30a2\u30af\u30bb\u30b9\u65e5\u6642
KeywordHits.createNodeForKey.modTime.name=\u4fee\u6b63\u65e5\u6642
KnownFileFilterNode.selectionContext.dataSources=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9
KnownFileFilterNode.selectionContext.views=\u30d3\u30e5\u30fc
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\u304c\u3042\u308a\u307e\u305b\u3093
LayoutFileNode.createSheet.noDescr.text=\u8aac\u660e\u304c\u3042\u308a\u307e\u305b\u3093
LayoutFileNode.getActions.viewInNewWin.text=\u65b0\u898f\u30a6\u30a3\u30f3\u30c9\u30a6\u3067\u8868\u793a
LayoutFileNode.getActions.openInExtViewer.text=\u5916\u90e8\u30d3\u30e5\u30fc\u30a2\u3067\u958b\u304f
LayoutFileNode.createSheet.name.desc=\u8aac\u660e\u306a\u3057
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
LocalFileNode.createSheet.name.desc=\u8aac\u660e\u304c\u3042\u308a\u307e\u305b\u3093
LocalFileNode.createSheet.noDescr.text=\u8aac\u660e\u304c\u3042\u308a\u307e\u305b\u3093
LocalFileNode.getActions.viewInNewWin.text=\u65b0\u898f\u30a6\u30a3\u30f3\u30c9\u30a6\u306b\u8868\u793a
LocalFileNode.getActions.openInExtViewer.text=\u5916\u90e8\u30d3\u30e5\u30fc\u30a2\u3067\u958b\u304f
LocalFileNode.getActions.searchFilesSameMd5.text=\u540c\u3058MD5\u30cf\u30c3\u30b7\u30e5\u3092\u6301\u3064\u30d5\u30a1\u30a4\u30eb\u3092\u691c\u7d22
LocalFileNode.createSheet.name.desc=\u8aac\u660e\u306a\u3057
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
OpenReportAction.actionDisplayName=\u30ec\u30dd\u30fc\u30c8\u3092\u958b\u304f
OpenReportAction.actionPerformed.MessageBoxTitle=\u30ec\u30dd\u30fc\u30c8\u30aa\u30fc\u30d7\u30f3\u5931\u6557
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
RecentFiles.aut0DayFilter.displayName.text=\u6700\u7d42\u65e5
RecentFiles.aut1dayFilter.displayName.text=\u6700\u7d42\u65e5 - 1
RecentFiles.aut2dayFilter.displayName.text=\u6700\u7d42\u65e5 - \uff12
RecentFiles.aut3dayFilter.displayName.text=\u6700\u7d42\u65e5 - \uff13
RecentFiles.aut4dayFilter.displayName.text=\u6700\u7d42\u65e5 - \uff14
RecentFiles.aut5dayFilter.displayName.text=\u6700\u7d42\u65e5 - \uff15
RecentFiles.aut6dayFilter.displayName.text=\u6700\u7d42\u65e5 - \uff16
RecentFilesFilterChildren.exception.defaultVisit.msg=\u3053\u306e\u30bf\u30a4\u30d7\u306e\u8868\u793a\u3067\u304d\u308b\u30a2\u30a4\u30c6\u30e0\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\uff1a{0}
Installer.exception.taskVerStringBang.msg=Sleuth Kit JNI\u30c6\u30b9\u30c8\u30b3\u30fc\u30eb\u3067\u306f\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u305b\u3093\u3067\u3057\u305f\u304c\u3001\u30d0\u30fc\u30b8\u30e7\u30f3\u30b9\u30c8\u30ea\u30f3\u30b0\u306f""\u3067\u3057\u305f\uff01
RecentFiles.aut2dayFilter.displayName.text=\u6700\u7d42\u65e5 - 2
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
RecentFilesFilterNode.createSheet.filterType.desc=\u8aac\u660e\u304c\u3042\u308a\u307e\u305b\u3093
RecentFilesFilterNode.createSheet.filterType.desc=\u8aac\u660e\u306a\u3057
RecentFilesNode.createSheet.name.name=\u540d\u524d
RecentFilesNode.createSheet.name.displayName=\u540d\u524d
RecentFilesNode.createSheet.name.desc=\u8aac\u660e\u304c\u3042\u308a\u307e\u305b\u3093
RecentFilesNode.name.text=\u6700\u8fd1\u4f7f\u7528\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb
ResultsNode.name.text=\u7d50\u679c
ResultsNode.createSheet.name.name=\u540d\u524d
RecentFilesNode.createSheet.name.desc=\u8aac\u660e\u306a\u3057
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.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.reportNameProperty.desc=\u30ec\u30dd\u30fc\u30c8\u540d
ReportsListNode.displayName=\u30ec\u30dd\u30fc\u30c8
ResultsNode.createSheet.name.desc=\u8aac\u660e\u306a\u3057
ResultsNode.createSheet.name.displayName=\u540d\u524d
ResultsNode.createSheet.name.desc=\u8aac\u660e\u304c\u3042\u308a\u307e\u305b\u3093
TagNameNode.namePlusTags.text={0}\u30bf\u30b0
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
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
@@ -196,81 +340,62 @@ TagNameNode.createSheet.name.name=\u540d\u524d
TagNameNode.createSheet.name.displayName=\u540d\u524d
TagsNode.displayName.text=\u30bf\u30b0
TagsNode.createSheet.name.name=\u540d\u524d
AbstractAbstractFileNode.flagsDirColLbl=\u30d5\u30e9\u30b0\uff08\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\uff09
AbstractAbstractFileNode.flagsMetaColLbl=\u30d5\u30e9\u30b0\uff08\u30e1\u30bf\u30c7\u30fc\u30bf\uff09
AbstractAbstractFileNode.metaAddrColLbl=\u30e1\u30bf\u30c7\u30fc\u30bf\u30a2\u30c9\u30ec\u30b9
AbstractAbstractFileNode.attrAddrColLbl=\u5c5e\u6027\u30a2\u30c9\u30ec\u30b9
AbstractAbstractFileNode.typeDirColLbl=\u30bf\u30a4\u30d7\uff08\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\uff09
AbstractAbstractFileNode.typeMetaColLbl=\u30bf\u30a4\u30d7\uff08\u30e1\u30bf\u30c7\u30fc\u30bf\uff09
ArtifactTypeNode.createSheet.childCnt.displayName=\u30c1\u30e3\u30a4\u30eb\u30c9\u6570
TagsNode.createSheet.name.displayName=\u540d\u524d
ViewsNode.name.text=\u30d3\u30e5\u30fc
ViewsNode.createSheet.name.name=\u540d\u524d
ViewsNode.createSheet.name.displayName=\u540d\u524d
ViewsNode.createSheet.name.desc=\u8aac\u660e\u304c\u3042\u308a\u307e\u305b\u3093
VirtualDirectoryNode.getActions.viewInNewWin.text=\u65b0\u898f\u30a6\u30a3\u30f3\u30c9\u30a6\u306b\u8868\u793a
ViewsNode.createSheet.name.desc=\u8aac\u660e\u306a\u3057
ImageNode.createSheet.deviceId.desc=\u30a4\u30e1\u30fc\u30b8\u306e\u30c7\u30d0\u30a4\u30b9ID
VirtualDirectoryNode.createSheet.deviceId.displayName=\u30c7\u30d0\u30a4\u30b9ID
VirtualDirectoryNode.createSheet.deviceId.name=\u30c7\u30d0\u30a4\u30b9ID
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\u304c\u3042\u308a\u307e\u305b\u3093
VirtualDirectoryNode.createSheet.noDesc=\u8aac\u660e\u304c\u3042\u308a\u307e\u305b\u3093
VolumeNode.getActions.viewInNewWin.text=\u65b0\u898f\u30a6\u30a3\u30f3\u30c9\u30a6\u306b\u8868\u793a
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\u304c\u3042\u308a\u307e\u305b\u3093
VolumeNode.createSheet.name.desc=\u8aac\u660e\u306a\u3057
VolumeNode.createSheet.id.name=ID
VolumeNode.createSheet.id.displayName=ID
VolumeNode.createSheet.id.desc=\u8aac\u660e\u304c\u3042\u308a\u307e\u305b\u3093
VolumeNode.createSheet.startSector.name=\u6700\u521d\u306e\u30bb\u30af\u30bf\u30fc
VolumeNode.createSheet.startSector.displayName=\u6700\u521d\u306e\u30bb\u30af\u30bf\u30fc
VolumeNode.createSheet.startSector.desc=\u8aac\u660e\u304c\u3042\u308a\u307e\u305b\u3093
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\u304c\u3042\u308a\u307e\u305b\u3093
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\u304c\u3042\u308a\u307e\u305b\u3093
VolumeNode.createSheet.description.desc=\u8aac\u660e\u306a\u3057
VolumeNode.createSheet.flags.name=\u30d5\u30e9\u30b0
VolumeNode.createSheet.flags.displayName=\u30d5\u30e9\u30b0
VolumeNode.createSheet.flags.desc=\u8aac\u660e\u304c\u3042\u308a\u307e\u305b\u3093
ArtifactTypeNode.createSheet.artType.name=\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u30bf\u30a4\u30d7
ArtifactTypeNode.createSheet.artType.displayName=\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u30bf\u30a4\u30d7
KeywordHits.createSheet.numChildren.name=\u30c1\u30e3\u30a4\u30eb\u30c9\u6570
KeywordHits.createSheet.numChildren.displayName=\u30c1\u30e3\u30a4\u30eb\u30c9\u6570
KeywordHits.simpleLiteralSearch.text=\u30b7\u30f3\u30b0\u30eb\u30ea\u30c6\u30e9\u30eb\u691c\u7d22
KeywordHits.singleRegexSearch.text=\u30b7\u30f3\u30b0\u30eb\u6b63\u898f\u8868\u73fe\u691c\u7d22
AbstractAbstractFileNode.objectId=\u30aa\u30d6\u30b8\u30a7\u30af\u30c8ID
VolumeNode.createSheet.flags.desc=\u8aac\u660e\u306a\u3057
ArtifactStringContent.getStr.artifactId.text=\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8ID
OpenReportAction.actionDisplayName=\u30ec\u30dd\u30fc\u30c8\u3092\u958b\u304f
OpenReportAction.actionPerformed.MessageBoxTitle=\u5931\u6557\u30ec\u30dd\u30fc\u30c8\u3092\u958b\u304f
OpenReportAction.actionPerformed.MissingReportFileMessage=\u30ec\u30dd\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u306f\u306a\u304f\u306a\u308a\u307e\u3057\u305f\u3002
OpenReportAction.actionPerformed.NoAssociatedEditorMessage=\u3053\u306e\u30bf\u30a4\u30d7\u306e\u30ec\u30dd\u30fc\u30c8\u306b\u95a2\u9023\u3059\u308b\u30a8\u30c7\u30a3\u30bf\u30fc\u304c\u3042\u308a\u307e\u305b\u3093\u3002\u307e\u305f\u306f\u3001\u95a2\u9023\u3059\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u958b\u59cb\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002
OpenReportAction.actionPerformed.NoOpenInEditorSupportMessage=\u3053\u306e\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\uff08\u30aa\u30da\u30ec\u30fc\u30c6\u30a3\u30f3\u30b0\u30b7\u30b9\u30c6\u30e0\uff09\u306f\u3053\u306e\u65b9\u6cd5\u3067\u3001\u30d5\u30a1\u30a4\u30eb\u3092\u30a8\u30c7\u30a3\u30bf\u30fc\u306b\u3066\u958b\u304f\u306e\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u305b\u3093\u3002
OpenReportAction.actionPerformed.ReportFileOpenPermissionDeniedMessage=\u30ec\u30dd\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304f\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u304c\u62d2\u5426\u3055\u308c\u307e\u3057\u305f\u3002
ReportNode.createdTimeProperty.desc=\u30bf\u30a4\u30e0\u30ec\u30dd\u30fc\u30c8\u304c\u4f5c\u6210\u3055\u308c\u307e\u3057\u305f\u3002
ReportNode.createdTimeProperty.displayName=\u4f5c\u6210\u65e5\u6642
ReportNode.createdTimeProperty.name=\u4f5c\u6210\u65e5\u6642
ReportNode.pathProperty.desc=\u30ec\u30dd\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u306e\u30ed\u30fc\u30ab\u30eb\u30d1\u30b9
ReportNode.pathProperty.displayName=\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9\u3092\u30ec\u30dd\u30fc\u30c8
ReportNode.pathProperty.name=\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9\u3092\u30ec\u30dd\u30fc\u30c8
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
AbstractAbstractFileNode.mimeType=MIME\u30bf\u30a4\u30d7
ContentTagNode.createSheet.fileModifiedTime.name=\u4fee\u6b63\u65e5\u6642
ContentTagNode.createSheet.fileModifiedTime.displayName=\u4fee\u6b63\u65e5\u6642
ContentTagNode.createSheet.fileChangedTime.name=\u5909\u66f4\u65e5\u6642
ContentTagNode.createSheet.fileChangedTime.displayName=\u5909\u66f4\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
LocalFileNode.viewFileInDir.text=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u8868\u793a
ReportNode.reportNameProperty.name=\u30ec\u30dd\u30fc\u30c8\u540d
ReportNode.reportNameProperty.displayName=\u30ec\u30dd\u30fc\u30c8\u540d
ReportNode.reportNameProperty.desc=\u30ec\u30dd\u30fc\u30c8\u306e\u540d\u524d
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\u3059\u308b
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
@@ -35,6 +35,8 @@ interface ContentNodeVisitor<T> {
T visit(LocalDirectoryNode ldn);
T visit(VolumeNode vn);
T visit(PoolNode pn);
T visit(DirectoryNode dn);
@@ -85,6 +87,11 @@ interface ContentNodeVisitor<T> {
public T visit(VolumeNode vn) {
return defaultVisit(vn);
}
@Override
public T visit(PoolNode pn) {
return defaultVisit(pn);
}
@Override
public T visit(LayoutFileNode lcn) {
@@ -28,6 +28,7 @@ import org.sleuthkit.datamodel.Image;
import org.sleuthkit.datamodel.LayoutFile;
import org.sleuthkit.datamodel.LocalDirectory;
import org.sleuthkit.datamodel.LocalFile;
import org.sleuthkit.datamodel.Pool;
import org.sleuthkit.datamodel.SlackFile;
import org.sleuthkit.datamodel.SleuthkitItemVisitor;
import org.sleuthkit.datamodel.SleuthkitVisitableItem;
@@ -58,6 +59,11 @@ public class CreateSleuthkitNodeVisitor extends SleuthkitItemVisitor.Default<Abs
public AbstractContentNode<? extends Content> visit(Volume volume) {
return new VolumeNode(volume);
}
@Override
public AbstractContentNode<? extends Content> visit(Pool pool) {
return new PoolNode(pool);
}
@Override
public AbstractContentNode<? extends Content> visit(LayoutFile lf) {
@@ -59,6 +59,8 @@ public interface DisplayableItemNodeVisitor<T> {
T visit(ImageNode in);
T visit(VolumeNode vn);
T visit(PoolNode pn);
T visit(SlackFileNode sfn);
@@ -186,6 +188,11 @@ public interface DisplayableItemNodeVisitor<T> {
T visit(InterestingHits.InterestingItemTypeNode aThis);
/*
* Attachments
*/
T visit(AttachmentNode node);
/**
* Visitor with an implementable default behavior for all types. Override
* specific visit types to not use the default behavior.
@@ -257,6 +264,11 @@ public interface DisplayableItemNodeVisitor<T> {
public T visit(ImageNode in) {
return defaultVisit(in);
}
@Override
public T visit(PoolNode pn) {
return defaultVisit(pn);
}
@Override
public T visit(VolumeNode vn) {
@@ -522,5 +534,11 @@ public interface DisplayableItemNodeVisitor<T> {
public T visit(Accounts.DefaultAccountTypeNode node) {
return defaultVisit(node);
}
@Override
public T visit(AttachmentNode node) {
return defaultVisit(node);
}
}
}
@@ -42,6 +42,8 @@ import org.sleuthkit.autopsy.ingest.ModuleDataEvent;
import org.sleuthkit.datamodel.Blackboard;
import org.sleuthkit.datamodel.BlackboardArtifact;
import static org.sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE.TSK_ACCOUNT;
import static org.sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE.TSK_ASSOCIATED_OBJECT;
import static org.sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE.TSK_TL_EVENT;
import static org.sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE.TSK_DATA_SOURCE_USAGE;
import static org.sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE.TSK_EMAIL_MSG;
import static org.sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE.TSK_GEN_INFO;
@@ -228,7 +230,7 @@ public class ExtractedContent implements AutopsyVisitableItem {
TypeFactory() {
super();
// these are shown in other parts of the UI tree
// these are shown in other parts of the UI
doNotShow.add(new BlackboardArtifact.Type(TSK_GEN_INFO));
doNotShow.add(new BlackboardArtifact.Type(TSK_EMAIL_MSG));
doNotShow.add(new BlackboardArtifact.Type(TSK_HASHSET_HIT));
@@ -238,6 +240,10 @@ public class ExtractedContent implements AutopsyVisitableItem {
doNotShow.add(new BlackboardArtifact.Type(TSK_ACCOUNT));
doNotShow.add(new BlackboardArtifact.Type(TSK_DATA_SOURCE_USAGE));
doNotShow.add(new BlackboardArtifact.Type(TSK_DOWNLOAD_SOURCE));
doNotShow.add(new BlackboardArtifact.Type(TSK_TL_EVENT));
//This is not meant to be shown in the UI at all. It is more of a meta artifact.
doNotShow.add(new BlackboardArtifact.Type(TSK_ASSOCIATED_OBJECT));
}
private final PropertyChangeListener pcl = (PropertyChangeEvent evt) -> {
@@ -1,7 +1,7 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2011-2019 Basis Technology Corp.
* Copyright 2012-2019 Basis Technology Corp.
* Contact: carrier <at> sleuthkit <dot> org
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -34,6 +34,7 @@ import org.openide.nodes.Sheet;
import org.openide.util.NbBundle;
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.centralrepository.datamodel.CorrelationAttributeInstance;
@@ -105,7 +106,7 @@ public class ImageNode extends AbstractContentNode<Image> {
*/
@Override
@Messages({"ImageNode.action.runIngestMods.text=Run Ingest Modules",
"ImageNode.getActions.openFileSearchByAttr.text=Open File Search by Attributes",})
"ImageNode.getActions.openFileSearchByAttr.text=Open File Search by Attributes"})
public Action[] getActions(boolean context) {
List<Action> actionsList = new ArrayList<>();
@@ -113,13 +114,12 @@ public class ImageNode extends AbstractContentNode<Image> {
actionsList.add(a);
}
actionsList.addAll(ExplorerNodeActionVisitor.getActions(content));
actionsList.add(new FileSearchAction(
Bundle.ImageNode_getActions_openFileSearchByAttr_text()));
actionsList.add(new FileSearchAction(Bundle.ImageNode_getActions_openFileSearchByAttr_text()));
actionsList.add(new ViewSummaryInformationAction(content.getId()));
actionsList.add(new RunIngestModulesAction(Collections.<Content>singletonList(content)));
actionsList.add(new NewWindowViewAction(
NbBundle.getMessage(this.getClass(), "ImageNode.getActions.viewInNewWin.text"), this));
return actionsList.toArray(new Action[actionsList.size()]);
actionsList.add(new NewWindowViewAction(NbBundle.getMessage(this.getClass(), "ImageNode.getActions.viewInNewWin.text"), this));
actionsList.add(new DeleteDataSourceAction(content.getId()));
return actionsList.toArray(new Action[0]);
}
@Override
@@ -0,0 +1,204 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2019 Basis Technology Corp.
* Contact: carrier <at> sleuthkit <dot> org
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.sleuthkit.autopsy.datamodel;
import java.util.ArrayList;
import java.util.List;
import javax.swing.Action;
import org.apache.commons.lang3.tuple.Pair;
import org.openide.nodes.Sheet;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttributeInstance;
import org.sleuthkit.autopsy.corecomponents.DataResultViewerTable;
import static org.sleuthkit.autopsy.datamodel.AbstractContentNode.NO_DESCR;
import org.sleuthkit.datamodel.Pool;
import org.sleuthkit.datamodel.Tag;
/**
* This class is used to represent the "Node" for the pool.
*/
public class PoolNode extends AbstractContentNode<Pool> {
/**
* Helper so that the display name and the name used in building the path
* are determined the same way.
*
* @param pool Pool to get the name of
*
* @return short name for the pool
*/
static String nameForPool(Pool pool) {
return pool.getType().getName();
}
/**
*
* @param pool underlying Content instance
*/
public PoolNode(Pool pool) {
super(pool);
// set name, display name, and icon
String poolName = nameForPool(pool);
this.setDisplayName(poolName);
this.setIconBaseWithExtension("org/sleuthkit/autopsy/images/pool-icon.png"); //NON-NLS
}
/**
* Right click action for volume node
*
* @param popup
*
* @return
*/
@Override
public Action[] getActions(boolean popup) {
List<Action> actionsList = new ArrayList<>();
for (Action a : super.getActions(true)) {
actionsList.add(a);
}
return actionsList.toArray(new Action[actionsList.size()]);
}
@NbBundle.Messages({
"PoolNode.createSheet.name.name=Name",
"PoolNode.createSheet.name.displayName=Name",
"PoolNode.createSheet.name.desc=no description",
"PoolNode.createSheet.type.name=Type",
"PoolNode.createSheet.type.displayName=Type",
"PoolNode.createSheet.type.desc=no description",
})
@Override
protected Sheet createSheet() {
Sheet sheet = super.createSheet();
Sheet.Set sheetSet = sheet.get(Sheet.PROPERTIES);
if (sheetSet == null) {
sheetSet = Sheet.createPropertiesSet();
sheet.put(sheetSet);
}
Pool pool = this.getContent();
sheetSet.put(new NodeProperty<>(Bundle.PoolNode_createSheet_name_name(),
Bundle.PoolNode_createSheet_name_displayName(),
Bundle.PoolNode_createSheet_name_desc(),
this.getDisplayName()));
sheetSet.put(new NodeProperty<>(Bundle.PoolNode_createSheet_type_name(),
Bundle.PoolNode_createSheet_type_displayName(),
Bundle.PoolNode_createSheet_type_desc(),
pool.getType().getName()));
return sheet;
}
@Override
public <T> T accept(ContentNodeVisitor<T> visitor) {
return visitor.visit(this);
}
@Override
public boolean isLeafTypeNode() {
return false;
}
@Override
public <T> T accept(DisplayableItemNodeVisitor<T> visitor) {
return visitor.visit(this);
}
@Override
public String getItemType() {
return getClass().getName();
}
/**
* Reads and returns a list of all tags associated with this content node.
*
* Null implementation of an abstract method.
*
* @return list of tags associated with the node.
*/
@Override
protected List<Tag> getAllTagsFromDatabase() {
return new ArrayList<>();
}
/**
* Returns correlation attribute instance for the underlying content of the
* node.
*
* Null implementation of an abstract method.
*
* @return correlation attribute instance for the underlying content of the
* node.
*/
@Override
protected CorrelationAttributeInstance getCorrelationAttributeInstance() {
return null;
}
/**
* Returns Score property for the node.
*
* Null implementation of an abstract method.
*
* @param tags list of tags.
*
* @return Score property for the underlying content of the node.
*/
@Override
protected Pair<DataResultViewerTable.Score, String> getScorePropertyAndDescription(List<Tag> tags) {
return Pair.of(DataResultViewerTable.Score.NO_SCORE, NO_DESCR);
}
/**
* Returns comment property for the node.
*
* Null implementation of an abstract method.
*
* @param tags list of tags
* @param attribute correlation attribute instance
*
* @return Comment property for the underlying content of the node.
*/
@Override
protected DataResultViewerTable.HasCommentStatus getCommentProperty(List<Tag> tags, CorrelationAttributeInstance attribute) {
return DataResultViewerTable.HasCommentStatus.NO_COMMENT;
}
/**
* Returns occurrences/count property for the node.
*
* Null implementation of an abstract method.
*
* @param attributeType the type of the attribute to count
* @param attributeValue the value of the attribute to coun
* @param defaultDescription a description to use when none is determined by
* the getCountPropertyAndDescription method
*
* @return count property for the underlying content of the node.
*/
@Override
protected Pair<Long, String> getCountPropertyAndDescription(CorrelationAttributeInstance.Type attributeType, String attributeValue, String defaultDescription) {
return Pair.of(-1L, NO_DESCR);
}
}
@@ -0,0 +1,28 @@
Accounts.BINNode.accountsProperty.displayName=\u30a2\u30ab\u30a6\u30f3\u30c8
Accounts.BINNode.bankCityProperty.displayName=\u9280\u884c\u6240\u5728\u5730\u5e02\u753a\u6751\u533a
Accounts.BINNode.bankCountryProperty.displayName=\u9280\u884c\u6240\u5728\u56fd
Accounts.BINNode.bankPhoneProperty.displayName=\u9280\u884c\u96fb\u8a71\u756a\u53f7#
Accounts.BINNode.bankProperty.displayName=\u9280\u884c
Accounts.BINNode.bankURLProperty.displayName=\u9280\u884cURL
Accounts.BINNode.binProperty.displayName=\u9280\u884c\u8b58\u5225\u756a\u53f7
Accounts.BINNode.brandProperty.displayName=\u30d6\u30e9\u30f3\u30c9
Accounts.BINNode.cardTypeProperty.displayName=\u652f\u6255\u3044\u30ab\u30fc\u30c9\u306e\u7a2e\u985e
Accounts.BINNode.noDescription=\u8aac\u660e\u306a\u3057
Accounts.BINNode.schemeProperty.displayName=\u30af\u30ec\u30b8\u30c3\u30c8\u30ab\u30fc\u30c9\u30b9\u30ad\u30fc\u30e0
# {0} - \u5b50\u306e\u6570
Accounts.ByBINNode.displayName=BIN\u5225 ({0})
Accounts.ByBINNode.name=BIN\u5225
# {0} - \u5b50\u306e\u6570
Accounts.ByFileNode.displayName=\u30d5\u30a1\u30a4\u30eb\u5225 ({0})
Accounts.FileWithCCNNode.accountsProperty.displayName=\u30a2\u30ab\u30a6\u30f3\u30c8
Accounts.FileWithCCNNode.nameProperty.displayName=\u30d5\u30a1\u30a4\u30eb
Accounts.FileWithCCNNode.noDescription=\u8aac\u660e\u306a\u3057
Accounts.FileWithCCNNode.statusProperty.displayName=\u30b9\u30c6\u30fc\u30bf\u30b9
# {0} - \u30ed\u30fc\u30d5\u30a1\u30a4\u30eb\u540d
# {1} - Solr\u30c1\u30e3\u30f3\u30afID
Accounts.FileWithCCNNode.unallocatedSpaceFile.displayName={0}_\u30c1\u30e3\u30f3\u30af_{1}
Accounts.RootNode.displayName=\u30a2\u30ab\u30a6\u30f3\u30c8
AccountsRootNode.name=\u30a2\u30ab\u30a6\u30f3\u30c8
ApproveAccountsAction.name=\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u627f\u8a8d
RejectAccountsAction.name=\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u62d2\u5426
ToggleShowRejected.name=\u62d2\u5426\u3055\u308c\u305f\u7d50\u679c\u3092\u8868\u793a
@@ -0,0 +1,7 @@
FileTypeCategory.Audio.displayName=\u30aa\u30fc\u30c7\u30a3\u30aa
FileTypeCategory.Documents.displayName=\u6587\u66f8
FileTypeCategory.Executables.displayName=\u5b9f\u884c\u30d5\u30a1\u30a4\u30eb
FileTypeCategory.Image.displayName=\u30a4\u30e1\u30fc\u30b8
FileTypeCategory.Media.displayName=\u30e1\u30c7\u30a3\u30a2
FileTypeCategory.Video.displayName=\u52d5\u753b
FileTypeCategory.Visual.displayName=\u30d3\u30b8\u30e5\u30a2\u30eb
@@ -0,0 +1,21 @@
# \u3053\u306e\u30e9\u30a4\u30bb\u30f3\u30b9\u30d8\u30c3\u30c0\u30fc\u3092\u5909\u66f4\u3059\u308b\u306b\u306f\u3001[\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30d7\u30ed\u30d1\u30c6\u30a3] \u3067 [\u30e9\u30a4\u30bb\u30f3\u30b9\u30d8\u30c3\u30c0\u30fc] \u3092\u9078\u629e\u3057\u307e\u3059\u3002
# \u3053\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u3092\u5909\u66f4\u3059\u308b\u306b\u306f\u3001[\u30c4\u30fc\u30eb | \u30c6\u30f3\u30d7\u30ec\u30fc\u30c8] \u3092\u9078\u629e\u3057\u3001
# \u30a8\u30c7\u30a3\u30bf\u30fc\u3067\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u958b\u304d\u307e\u3059\u3002
AddRawImageTask.for.device=\u30c7\u30d0\u30a4\u30b9\u7528
AddRawImageTask.image.critical.error.adding=\u8ffd\u52a0\u4e2d\u306e\u91cd\u5927\u306a\u30a8\u30e9\u30fc
AddRawImageTask.image.critical.error.adding=\u8ffd\u52a0\u4e2d\u306e\u91cd\u5927\u3067\u306f\u306a\u3044\u30a8\u30e9\u30fc
AddRawImageTask.image.notExisting=\u304c\u5b58\u5728\u3057\u307e\u305b\u3093\u3002
AddRawImageTask.noOpenCase.errMsg=\u958b\u3044\u3066\u3044\u308b\u30b1\u30fc\u30b9\u306f\u3042\u308a\u307e\u305b\u3093\u3002
AddRawImageTask.progress.add.text=\u6b21\u306e\u30ed\u30fc\u30a4\u30e1\u30fc\u30b8\u3092\u8ffd\u52a0\u4e2d\u3067\u3059:
RawDSInputPanel.error.text=\u30de\u30eb\u30c1\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u306e\u30d1\u30b9\u306f "C:" \u30c9\u30e9\u30a4\u30d6\u306b\u3042\u308a\u307e\u3059
RawDSInputPanel.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
RawDSInputPanel.pathLabel.text=\u672a\u4f7f\u7528\u9818\u57df\u306e\u30a4\u30e1\u30fc\u30b8\u30d5\u30a1\u30a4\u30eb\u3092\u53c2\u7167:
RawDSInputPanel.errorLabel.text=\u30a8\u30e9\u30fc\u30e9\u30d9\u30eb
RawDSInputPanel.browseButton.text=\u53c2\u7167
RawDSInputPanel.pathTextField.text=
RawDSInputPanel.jBreakFileUpLabel.text=\u6b21\u307e\u3067\u30a4\u30e1\u30fc\u30b8\u3092\u7d30\u5206\u5316:
RawDSInputPanel.jNoBreakupRadioButton.text=\u7d30\u5206\u5316\u3057\u306a\u3044
RawDSInputPanel.j2GBBreakupRadioButton.text=2GB\u30c1\u30e3\u30f3\u30af
RawDSInputPanel.timeZoneLabel.text=\u5165\u529b\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044:
RawDSProcessor.dataSourceType=\u672a\u4f7f\u7528\u9818\u57df\u306e\u30a4\u30e1\u30fc\u30b8\u30d5\u30a1\u30a4\u30eb
@@ -0,0 +1,130 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2019 Basis Technology Corp.
* Contact: carrier <at> sleuthkit <dot> org
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.sleuthkit.autopsy.datasourceprocessors.xry;
import java.io.IOException;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.datamodel.Content;
import org.sleuthkit.datamodel.TskCoreException;
/**
* Template parse method for reports that make artifacts from a single XRY
* Entity.
*/
abstract class AbstractSingleEntityParser implements XRYFileParser {
private static final Logger logger = Logger.getLogger(AbstractSingleEntityParser.class.getName());
protected static final String PARSER_NAME = "XRY DSP";
@Override
public void parse(XRYFileReader reader, Content parent) throws IOException, TskCoreException {
Path reportPath = reader.getReportPath();
logger.log(Level.INFO, String.format("[XRY DSP] Processing report at [ %s ]", reportPath.toString()));
while (reader.hasNextEntity()) {
String xryEntity = reader.nextEntity();
String[] xryLines = xryEntity.split("\n");
List<XRYKeyValuePair> keyValuePairs = new ArrayList<>();
//First line of the entity is the title, the entity will always be non-empty.
logger.log(Level.INFO, String.format("[XRY DSP] Processing [ %s ]", xryLines[0]));
String namespace = "";
//Process each line, searching for a key value pair or a namespace.
for (int i = 1; i < xryLines.length; i++) {
String xryLine = xryLines[i];
String candidateNamespace = xryLine.trim();
//Check if the line is a namespace, which gives context to the keys
//that follow.
if (isNamespace(candidateNamespace)) {
namespace = candidateNamespace;
continue;
}
//Check if this line resembles a Key Value pair.
if(!XRYKeyValuePair.isPair(xryLine)) {
logger.log(Level.WARNING, String.format("[XRY DSP] Expected a key value "
+ "pair on this line (in brackets) [ %s ], but one was not detected.",
xryLine));
continue;
}
XRYKeyValuePair pair = XRYKeyValuePair.from(xryLine, namespace);
//Verify the implementation recognizes the key.
if (!canProcess(pair)) {
logger.log(Level.WARNING, String.format("[XRY DSP] The following key, "
+ "value pair (in brackets) [ %s ] was not recognized. Discarding...",
pair));
continue;
}
//Empty values are meaningless for blackboard attributes.
if (pair.getValue().isEmpty()) {
logger.log(Level.WARNING, String.format("[XRY DSP] The following key value pair"
+ "(in brackets) [ %s ] was recognized, but the value was empty. Discarding...",
pair));
continue;
}
keyValuePairs.add(pair);
}
if(!keyValuePairs.isEmpty()) {
makeArtifact(keyValuePairs, parent);
}
}
}
/**
* Determines if the XRY key value pair can be processed by the
* implementation.
*/
abstract boolean canProcess(XRYKeyValuePair pair);
/**
* Determines if the namespace candidate is a known namespace. A namespace
* candidate is a string literal that makes up an entire line.
*
* Ex:
*
* To
* Tel : +1245325
*
* "To" would be the candidate namespace that was extracted.
*
* @param nameSpace Namespace to test. Namespaces are trimmed of whitespace
* only.
* @return Indication if this namespace can be processed.
*/
abstract boolean isNamespace(String nameSpace);
/**
* Makes an artifact from the parsed key value pairs.
*/
abstract void makeArtifact(List<XRYKeyValuePair> keyValuePairs, Content parent) throws TskCoreException;
}
@@ -0,0 +1,4 @@
XRYDataSourceProcessorConfigPanel.fileBrowserButton.text=Browse
XRYDataSourceProcessorConfigPanel.filePathTextField.text=
XRYDataSourceProcessorConfigPanel.xrySelectFolderLabel.text=Select a folder containing exported XRY text files
XRYDataSourceProcessorConfigPanel.errorLabel.text=
@@ -0,0 +1,16 @@
XRYDataSourceProcessor.childNotReadable=Top level path [ %s ] is not readable
XRYDataSourceProcessor.dataSourceType=XRY Text Export
XRYDataSourceProcessor.fileAdded=Added %s to the case database
XRYDataSourceProcessor.ioError=I/O error occured trying to test the selected folder
XRYDataSourceProcessor.noCurrentCase=No case is open.
XRYDataSourceProcessor.noPathSelected=Please select a folder containing exported XRY text files
XRYDataSourceProcessor.notAFolder=The selected path is not a folder
XRYDataSourceProcessor.notReadable=Selected path is not readable
XRYDataSourceProcessor.notXRYFolder=Selected folder did not contain any XRY text files
XRYDataSourceProcessor.preppingFiles=Preparing to add files to the case database
XRYDataSourceProcessor.processingFiles=Processing all XRY files...
XRYDataSourceProcessor.unexpectedError=Internal error occurred while processing XRY report
XRYDataSourceProcessorConfigPanel.fileBrowserButton.text=Browse
XRYDataSourceProcessorConfigPanel.filePathTextField.text=
XRYDataSourceProcessorConfigPanel.xrySelectFolderLabel.text=Select a folder containing exported XRY text files
XRYDataSourceProcessorConfigPanel.errorLabel.text=
@@ -0,0 +1,333 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2019 Basis Technology Corp.
* Contact: carrier <at> sleuthkit <dot> org
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.sleuthkit.autopsy.datasourceprocessors.xry;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.OffsetDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.time.temporal.TemporalAccessor;
import java.time.temporal.TemporalQueries;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.logging.Level;
import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.datamodel.BlackboardArtifact;
import org.sleuthkit.datamodel.BlackboardAttribute;
import org.sleuthkit.datamodel.Content;
import org.sleuthkit.datamodel.TskCoreException;
/**
* Parses XRY Calls files and creates artifacts.
*/
final class XRYCallsFileParser extends AbstractSingleEntityParser {
private static final Logger logger = Logger.getLogger(XRYCallsFileParser.class.getName());
//Pattern is in reverse due to a Java 8 bug, see calculateSecondsSinceEpoch()
//function for more details.
private static final DateTimeFormatter DATE_TIME_PARSER
= DateTimeFormatter.ofPattern("[(XXX) ][O ][(O) ]a h:m:s M/d/y");
private static final String DEVICE_LOCALE = "(device)";
private static final String NETWORK_LOCALE = "(network)";
/**
* All of the known XRY keys for call reports and their corresponding
* blackboard attribute types, if any.
*/
private enum XryKey {
NAME_MATCHED("name (matched)", BlackboardAttribute.ATTRIBUTE_TYPE.TSK_NAME),
TIME("time", BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DATETIME),
DIRECTION("direction", BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DIRECTION),
CALL_TYPE("call type", null),
NUMBER("number", null),
TEL("tel", null),
TO("to", BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PHONE_NUMBER_TO),
FROM("from", BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PHONE_NUMBER_FROM),
DELETED("deleted", BlackboardAttribute.ATTRIBUTE_TYPE.TSK_ISDELETED),
DURATION("duration", null),
STORAGE("storage", null),
INDEX("index", null),
TYPE("type", null),
NAME("name", BlackboardAttribute.ATTRIBUTE_TYPE.TSK_NAME);
private final String name;
private final BlackboardAttribute.ATTRIBUTE_TYPE type;
XryKey(String name, BlackboardAttribute.ATTRIBUTE_TYPE type) {
this.name = name;
this.type = type;
}
public BlackboardAttribute.ATTRIBUTE_TYPE getType() {
return type;
}
/**
* Indicates if the display name of the XRY key is a recognized type.
*/
public static boolean contains(String key) {
try {
XryKey.fromDisplayName(key);
return true;
} catch (IllegalArgumentException ex) {
return false;
}
}
/**
* Matches the display name of the xry key to the appropriate enum type.
*
* It is assumed that XRY key string is recognized. Otherwise, an
* IllegalArgumentException is thrown. Test all membership with
* contains() before hand.
*/
public static XryKey fromDisplayName(String key) {
String normalizedKey = key.trim().toLowerCase();
for (XryKey keyChoice : XryKey.values()) {
if (normalizedKey.equals(keyChoice.name)) {
return keyChoice;
}
}
throw new IllegalArgumentException(String.format("Key [%s] was not found."
+ " All keys should be tested with contains.", key));
}
}
/**
* All known XRY namespaces for call reports.
*/
private enum XryNamespace {
TO("to"),
FROM("from"),
NONE(null);
private final String name;
XryNamespace(String name) {
this.name = name;
}
/**
* Indicates if the display name of the XRY namespace is a recognized
* type.
*/
public static boolean contains(String xryNamespace) {
try {
XryNamespace.fromDisplayName(xryNamespace);
return true;
} catch (IllegalArgumentException ex) {
return false;
}
}
/**
* Matches the display name of the xry namespace to the appropriate enum
* type.
*
* It is assumed that XRY namespace string is recognized. Otherwise, an
* IllegalArgumentException is thrown. Test all membership with
* contains() before hand.
*/
public static XryNamespace fromDisplayName(String xryNamespace) {
String normalizedNamespace = xryNamespace.trim().toLowerCase();
for (XryNamespace keyChoice : XryNamespace.values()) {
if (normalizedNamespace.equals(keyChoice.name)) {
return keyChoice;
}
}
throw new IllegalArgumentException(String.format("Key [%s] was not found."
+ " All keys should be tested with contains.", xryNamespace));
}
}
@Override
boolean canProcess(XRYKeyValuePair pair) {
return XryKey.contains(pair.getKey());
}
@Override
boolean isNamespace(String nameSpace) {
return XryNamespace.contains(nameSpace);
}
@Override
void makeArtifact(List<XRYKeyValuePair> keyValuePairs, Content parent) throws TskCoreException {
List<BlackboardAttribute> attributes = new ArrayList<>();
for(XRYKeyValuePair pair : keyValuePairs) {
Optional<BlackboardAttribute> attribute = getBlackboardAttribute(pair);
if(attribute.isPresent()) {
attributes.add(attribute.get());
}
}
if(!attributes.isEmpty()) {
BlackboardArtifact artifact = parent.newArtifact(BlackboardArtifact.ARTIFACT_TYPE.TSK_CALLLOG);
artifact.addAttributes(attributes);
}
}
/**
* Creates the appropriate blackboard attribute given a single XRY Key Value
* pair, if any. Most XRY keys are mapped to an attribute type in the enum above.
*/
private Optional<BlackboardAttribute> getBlackboardAttribute(XRYKeyValuePair pair) {
XryKey xryKey = XryKey.fromDisplayName(pair.getKey());
XryNamespace xryNamespace = XryNamespace.NONE;
if (XryNamespace.contains(pair.getNamespace())) {
xryNamespace = XryNamespace.fromDisplayName(pair.getNamespace());
}
switch (xryKey) {
case TEL:
case NUMBER:
//Apply the namespace
switch (xryNamespace) {
case FROM:
return Optional.of(new BlackboardAttribute(
BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PHONE_NUMBER_FROM,
PARSER_NAME, pair.getValue()));
case TO:
return Optional.of(new BlackboardAttribute(
BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PHONE_NUMBER_TO,
PARSER_NAME, pair.getValue()));
default:
return Optional.of(new BlackboardAttribute(
BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PHONE_NUMBER,
PARSER_NAME, pair.getValue()));
}
case TIME:
try {
//Tranform value to seconds since epoch
long dateTimeSinceEpoch = calculateSecondsSinceEpoch(pair.getValue());
return Optional.of(new BlackboardAttribute(xryKey.getType(),
PARSER_NAME, dateTimeSinceEpoch));
} catch (DateTimeParseException ex) {
logger.log(Level.WARNING, String.format("[XRY DSP] Assumption"
+ " about the date time formatting of call logs is "
+ "not right. Here is the value [ %s ]", pair.getValue()), ex);
return Optional.empty();
}
default:
//Otherwise, the XryKey enum contains the correct BlackboardAttribute
//type.
if (xryKey.getType() != null) {
return Optional.of(new BlackboardAttribute(xryKey.getType(),
PARSER_NAME, pair.getValue()));
}
logger.log(Level.INFO, String.format("[XRY DSP] Key value pair "
+ "(in brackets) [ %s ] was recognized but "
+ "more data or time is needed to finish implementation. Discarding... ",
pair));
return Optional.empty();
}
}
/**
* Removes the locale from the date time value.
*
* Locale in this case being (Device) or (Network).
*
* @param dateTime XRY datetime value to be sanitized.
* @return A purer date time value.
*/
private String removeDateTimeLocale(String dateTime) {
String result = dateTime;
int deviceIndex = result.toLowerCase().indexOf(DEVICE_LOCALE);
if (deviceIndex != -1) {
result = result.substring(0, deviceIndex);
}
int networkIndex = result.toLowerCase().indexOf(NETWORK_LOCALE);
if (networkIndex != -1) {
result = result.substring(0, networkIndex);
}
return result;
}
/**
* Parses the date time value and calculates seconds since epoch.
*
* @param dateTime
* @return
*/
private long calculateSecondsSinceEpoch(String dateTime) {
String dateTimeWithoutLocale = removeDateTimeLocale(dateTime).trim();
/**
* The format of time in XRY Messages reports is of the form:
*
* 1/3/1990 1:23:54 AM UTC+4
*
* In our current version of Java (openjdk-1.8.0.222), there is a bug
* with having the timezone offset (UTC+4 or GMT-7) at the end of the
* date time input. This is fixed in later versions of the JDK (9 and
* beyond). https://bugs.openjdk.java.net/browse/JDK-8154050 Rather than
* update the JDK to accommodate this, the components of the date time
* string are reversed:
*
* UTC+4 AM 1:23:54 1/3/1990
*
* The java time package will correctly parse this date time format.
*/
String reversedDateTime = reverseOrderOfDateTimeComponents(dateTimeWithoutLocale);
/**
* Furthermore, the DateTimeFormatter's timezone offset letter ('O')
* does not recognize UTC but recognizes GMT. According to
* https://en.wikipedia.org/wiki/Coordinated_Universal_Time, GMT only
* differs from UTC by at most 1 second and so substitution will only
* introduce a trivial amount of error.
*/
String reversedDateTimeWithGMT = reversedDateTime.replace("UTC", "GMT");
TemporalAccessor result = DATE_TIME_PARSER.parseBest(reversedDateTimeWithGMT,
ZonedDateTime::from,
LocalDateTime::from,
OffsetDateTime::from);
//Query for the ZoneID
if (result.query(TemporalQueries.zoneId()) == null) {
//If none, assumed GMT+0.
return ZonedDateTime.of(LocalDateTime.from(result),
ZoneId.of("GMT")).toEpochSecond();
} else {
return Instant.from(result).getEpochSecond();
}
}
/**
* Reverses the order of the date time components.
*
* Example: 1/3/1990 1:23:54 AM UTC+4 becomes UTC+4 AM 1:23:54 1/3/1990
*
* @param dateTime
* @return
*/
private String reverseOrderOfDateTimeComponents(String dateTime) {
StringBuilder reversedDateTime = new StringBuilder(dateTime.length());
String[] dateTimeComponents = dateTime.split(" ");
for (String component : dateTimeComponents) {
reversedDateTime.insert(0, " ").insert(0, component);
}
return reversedDateTime.toString().trim();
}
}

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