Merged develop into new ingest framework feature branch

This commit is contained in:
Richard Cordovano 2014-03-19 10:51:58 -04:00
commit ff0b814225
370 changed files with 9342 additions and 4858 deletions

View File

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

View File

@ -6,5 +6,5 @@ license.file=../LICENSE-2.0.txt
nbm.homepage=http://www.sleuthkit.org/ nbm.homepage=http://www.sleuthkit.org/
nbm.module.author=Brian Carrier nbm.module.author=Brian Carrier
nbm.needs.restart=true nbm.needs.restart=true
spec.version.base=7.0 spec.version.base=7.1

View File

@ -194,6 +194,7 @@
<package>org.sleuthkit.autopsy.actions</package> <package>org.sleuthkit.autopsy.actions</package>
<package>org.sleuthkit.autopsy.casemodule</package> <package>org.sleuthkit.autopsy.casemodule</package>
<package>org.sleuthkit.autopsy.casemodule.services</package> <package>org.sleuthkit.autopsy.casemodule.services</package>
<package>org.sleuthkit.autopsy.contentviewers</package>
<package>org.sleuthkit.autopsy.core</package> <package>org.sleuthkit.autopsy.core</package>
<package>org.sleuthkit.autopsy.corecomponentinterfaces</package> <package>org.sleuthkit.autopsy.corecomponentinterfaces</package>
<package>org.sleuthkit.autopsy.corecomponents</package> <package>org.sleuthkit.autopsy.corecomponents</package>
@ -206,14 +207,14 @@
<package>org.sleuthkit.autopsy.report</package> <package>org.sleuthkit.autopsy.report</package>
<package>org.sleuthkit.datamodel</package> <package>org.sleuthkit.datamodel</package>
</public-packages> </public-packages>
<class-path-extension>
<runtime-relative-path>ext/sqlite-jdbc-3.8.0-SNAPSHOT.jar</runtime-relative-path>
<binary-origin>release/modules/ext/sqlite-jdbc-3.8.0-SNAPSHOT.jar</binary-origin>
</class-path-extension>
<class-path-extension> <class-path-extension>
<runtime-relative-path>ext/Tsk_DataModel.jar</runtime-relative-path> <runtime-relative-path>ext/Tsk_DataModel.jar</runtime-relative-path>
<binary-origin>release/modules/ext/Tsk_DataModel.jar</binary-origin> <binary-origin>release/modules/ext/Tsk_DataModel.jar</binary-origin>
</class-path-extension> </class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/sqlite-jdbc-3.8.0-SNAPSHOT.jar</runtime-relative-path>
<binary-origin>release/modules/ext/sqlite-jdbc-3.8.0-SNAPSHOT.jar</binary-origin>
</class-path-extension>
</data> </data>
</configuration> </configuration>
</project> </project>

View File

@ -21,6 +21,8 @@ package org.sleuthkit.autopsy.actions;
import java.util.Collection; import java.util.Collection;
import java.util.logging.Level; import java.util.logging.Level;
import javax.swing.JOptionPane; import javax.swing.JOptionPane;
import org.openide.util.NbBundle;
import org.openide.util.Utilities; import org.openide.util.Utilities;
import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.casemodule.Case;
import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.Logger;
@ -50,7 +52,11 @@ public class AddBlackboardArtifactTagAction extends AddTagAction {
@Override @Override
protected String getActionDisplayName() { protected String getActionDisplayName() {
return Utilities.actionsGlobalContext().lookupAll(BlackboardArtifact.class).size() > 1 ? "Tag Results" : "Tag Result"; String singularTagResult = NbBundle.getMessage(this.getClass(),
"AddBlackboardArtifactTagAction.singularTagResult");
String pluralTagResult = NbBundle.getMessage(this.getClass(),
"AddBlackboardArtifactTagAction.pluralTagResult");
return Utilities.actionsGlobalContext().lookupAll(BlackboardArtifact.class).size() > 1 ? pluralTagResult : singularTagResult;
} }
@Override @Override
@ -62,7 +68,13 @@ public class AddBlackboardArtifactTagAction extends AddTagAction {
} }
catch (TskCoreException ex) { catch (TskCoreException ex) {
Logger.getLogger(AddBlackboardArtifactTagAction.class.getName()).log(Level.SEVERE, "Error tagging result", ex); Logger.getLogger(AddBlackboardArtifactTagAction.class.getName()).log(Level.SEVERE, "Error tagging result", ex);
JOptionPane.showMessageDialog(null, "Unable to tag " + artifact.getDisplayName() + ".", "Tagging Error", JOptionPane.ERROR_MESSAGE); JOptionPane.showMessageDialog(null,
NbBundle.getMessage(this.getClass(),
"AddBlackboardArtifactTagAction.unableToTag.msg",
artifact.getDisplayName()),
NbBundle.getMessage(this.getClass(),
"AddBlackboardArtifactTagAction.taggingErr"),
JOptionPane.ERROR_MESSAGE);
} }
} }
} }

View File

@ -21,6 +21,8 @@ package org.sleuthkit.autopsy.actions;
import java.util.Collection; import java.util.Collection;
import java.util.logging.Level; import java.util.logging.Level;
import javax.swing.JOptionPane; import javax.swing.JOptionPane;
import org.openide.util.NbBundle;
import org.openide.util.Utilities; import org.openide.util.Utilities;
import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.casemodule.Case;
import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.Logger;
@ -51,7 +53,9 @@ public class AddContentTagAction extends AddTagAction {
@Override @Override
protected String getActionDisplayName() { protected String getActionDisplayName() {
return Utilities.actionsGlobalContext().lookupAll(AbstractFile.class).size() > 1 ? "Tag Files" : "Tag File"; String singularTagFile = NbBundle.getMessage(this.getClass(), "AddContentTagAction.singularTagFile");
String pluralTagFile = NbBundle.getMessage(this.getClass(), "AddContentTagAction.pluralTagFile");
return Utilities.actionsGlobalContext().lookupAll(AbstractFile.class).size() > 1 ? pluralTagFile : singularTagFile;
} }
@Override @Override
@ -66,7 +70,13 @@ public class AddContentTagAction extends AddTagAction {
file = (AbstractFile)parentFile; file = (AbstractFile)parentFile;
} }
else { else {
JOptionPane.showMessageDialog(null, "Unable to tag " + parentFile.getName() + ", not a regular file.", "Cannot Apply Tag", JOptionPane.WARNING_MESSAGE); JOptionPane.showMessageDialog(null,
NbBundle.getMessage(this.getClass(),
"AddContentTagAction.unableToTag.msg",
parentFile.getName()),
NbBundle.getMessage(this.getClass(),
"AddContentTagAction.cannotApplyTagErr"),
JOptionPane.WARNING_MESSAGE);
continue; continue;
} }
} }
@ -78,12 +88,24 @@ public class AddContentTagAction extends AddTagAction {
file = (AbstractFile)parentFile; file = (AbstractFile)parentFile;
} }
else { else {
JOptionPane.showMessageDialog(null, "Unable to tag " + parentFile.getName() + ", not a regular file.", "Cannot Apply Tag", JOptionPane.WARNING_MESSAGE); JOptionPane.showMessageDialog(null,
NbBundle.getMessage(this.getClass(),
"AddContentTagAction.unableToTag.msg",
parentFile.getName()),
NbBundle.getMessage(this.getClass(),
"AddContentTagAction.cannotApplyTagErr"),
JOptionPane.WARNING_MESSAGE);
continue; continue;
} }
} }
else { else {
JOptionPane.showMessageDialog(null, "Unable to tag " + parentFile.getName() + ", not a regular file.", "Cannot Apply Tag", JOptionPane.WARNING_MESSAGE); JOptionPane.showMessageDialog(null,
NbBundle.getMessage(this.getClass(),
"AddContentTagAction.unableToTag.msg",
parentFile.getName()),
NbBundle.getMessage(this.getClass(),
"AddContentTagAction.cannotApplyTagErr"),
JOptionPane.WARNING_MESSAGE);
continue; continue;
} }
} }
@ -92,7 +114,12 @@ public class AddContentTagAction extends AddTagAction {
} }
catch (TskCoreException ex) { catch (TskCoreException ex) {
Logger.getLogger(AddContentTagAction.class.getName()).log(Level.SEVERE, "Error tagging result", ex); Logger.getLogger(AddContentTagAction.class.getName()).log(Level.SEVERE, "Error tagging result", ex);
JOptionPane.showMessageDialog(null, "Unable to tag " + file.getName() + ".", "Tagging Error", JOptionPane.ERROR_MESSAGE); JOptionPane.showMessageDialog(null,
NbBundle.getMessage(this.getClass(),
"AddContentTagAction.unableToTag.msg2",
file.getName()),
NbBundle.getMessage(this.getClass(), "AddContentTagAction.taggingErr"),
JOptionPane.ERROR_MESSAGE);
} }
} }
} }

View File

@ -24,6 +24,8 @@ import java.util.List;
import java.util.logging.Level; import java.util.logging.Level;
import javax.swing.JMenu; import javax.swing.JMenu;
import javax.swing.JMenuItem; import javax.swing.JMenuItem;
import org.openide.util.NbBundle;
import org.openide.util.actions.Presenter; import org.openide.util.actions.Presenter;
import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.casemodule.Case;
import org.sleuthkit.autopsy.casemodule.services.TagsManager; import org.sleuthkit.autopsy.casemodule.services.TagsManager;
@ -85,7 +87,7 @@ abstract class AddTagAction extends TagAction implements Presenter.Popup {
} }
// Create a "Quick Tag" sub-menu. // Create a "Quick Tag" sub-menu.
JMenu quickTagMenu = new JMenu("Quick Tag"); JMenu quickTagMenu = new JMenu(NbBundle.getMessage(this.getClass(), "AddTagAction.quickTag"));
add(quickTagMenu); add(quickTagMenu);
// Each tag name in the current set of tags gets its own menu item in // Each tag name in the current set of tags gets its own menu item in
@ -105,7 +107,7 @@ abstract class AddTagAction extends TagAction implements Presenter.Popup {
} }
} }
else { else {
JMenuItem empty = new JMenuItem("No tags"); JMenuItem empty = new JMenuItem(NbBundle.getMessage(this.getClass(), "AddTagAction.noTags"));
empty.setEnabled(false); empty.setEnabled(false);
quickTagMenu.add(empty); quickTagMenu.add(empty);
} }
@ -115,7 +117,7 @@ abstract class AddTagAction extends TagAction implements Presenter.Popup {
// The "Quick Tag" menu also gets an "Choose Tag..." menu item. // The "Quick Tag" menu also gets an "Choose Tag..." menu item.
// Selecting this item initiates a dialog that can be used to create // 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. // or select a tag name and adds a tag with the resulting name.
JMenuItem newTagMenuItem = new JMenuItem("New Tag..."); JMenuItem newTagMenuItem = new JMenuItem(NbBundle.getMessage(this.getClass(), "AddTagAction.newTag"));
newTagMenuItem.addActionListener(new ActionListener() { newTagMenuItem.addActionListener(new ActionListener() {
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
@ -131,7 +133,8 @@ abstract class AddTagAction extends TagAction implements Presenter.Popup {
// Create a "Choose Tag and Comment..." menu item. Selecting this item initiates // 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 // 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. // optional comment and adds a tag with the resulting name.
JMenuItem tagAndCommentItem = new JMenuItem("Tag and Comment..."); JMenuItem tagAndCommentItem = new JMenuItem(
NbBundle.getMessage(this.getClass(), "AddTagAction.tagAndComment"));
tagAndCommentItem.addActionListener(new ActionListener() { tagAndCommentItem.addActionListener(new ActionListener() {
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {

View File

@ -14,3 +14,37 @@ GetTagNameAndCommentDialog.commentLabel.text=Comment:
GetTagNameAndCommentDialog.cancelButton.text=Cancel GetTagNameAndCommentDialog.cancelButton.text=Cancel
GetTagNameAndCommentDialog.tagCombo.toolTipText=Select tag to use GetTagNameAndCommentDialog.tagCombo.toolTipText=Select tag to use
GetTagNameAndCommentDialog.tagLabel.text=Tag: GetTagNameAndCommentDialog.tagLabel.text=Tag:
AddBlackboardArtifactTagAction.singularTagResult=Tag Result
AddBlackboardArtifactTagAction.pluralTagResult=Tag Results
AddBlackboardArtifactTagAction.unableToTag.msg=Unable to tag {0}.
AddBlackboardArtifactTagAction.taggingErr=Tagging Error
AddContentTagAction.singularTagFile=Tag File
AddContentTagAction.pluralTagFile=Tag Files
AddContentTagAction.unableToTag.msg=Unable to tag {0}, not a regular file.
AddContentTagAction.cannotApplyTagErr=Cannot Apply Tag
AddContentTagAction.unableToTag.msg2=Unable to tag {0}.
AddContentTagAction.taggingErr=Tagging Error
AddTagAction.quickTag=Quick Tag
AddTagAction.noTags=No tags
AddTagAction.newTag=New Tag...
AddTagAction.tagAndComment=Tag and Comment...
DeleteBlackboardArtifactTagAction.deleteTags=Delete Tag(s)
DeleteBlackboardArtifactTagAction.unableToDelTag.msg=Unable to delete tag {0}.
DeleteBlackboardArtifactTagAction.tagDelErr=Tag Deletion Error
DeleteContentTagAction.deleteTags=Delete Tag(s)
DeleteContentTagAction.unableToDelTag.msg=Unable to delete tag {0}.
DeleteContentTagAction.tagDelErr=Tag Deletion Error
GetTagNameAndCommentDialog.noTags=No Tags
GetTagNameAndCommentDialog.createTag=Create Tag
GetTagNameAndCommentDialog.cancelName=cancel
GetTagNameDialog.createTag=Create Tag
GetTagNameDialog.cancelName=Cancel
GetTagNameDialog.mustSupplyTtagName.msg=Must supply a tag name to continue.
GetTagNameDialog.tagNameErr=Tag Name
GetTagNameDialog.illegalChars.msg=The tag name contains illegal characters.\
Cannot contain any of the following symbols\: \\ \: * ? " < > |
GetTagNameDialog.illegalCharsErr=Illegal Characters
GetTagNameDialog.unableToAddTagNameToCase.msg=Unable to add the {0} tag name to the case.
GetTagNameDialog.taggingErr=Tagging Error
GetTagNameDialog.tagNameAlreadyDef.msg=A {0} tag name has already been defined.
GetTagNameDialog.dupTagErr=Duplicate Tag Error

View File

@ -0,0 +1,46 @@
GetTagNameDialog.cancelButton.text=\u30AD\u30E3\u30F3\u30BB\u30EB
GetTagNameDialog.okButton.text=OK
GetTagNameDialog.preexistingLabel.text=\u65E2\u5B58\u30BF\u30B0\uFF1A
GetTagNameDialog.newTagPanel.border.title=\u65B0\u898F\u30BF\u30B0
GetTagNameDialog.tagNameLabel.text=\u30BF\u30B0\u540D\uFF1A
GetTagNameAndCommentDialog.newTagButton.text=\u65B0\u898F\u30BF\u30B0
GetTagNameAndCommentDialog.okButton.text=OK
GetTagNameAndCommentDialog.commentText.toolTipText=\u30BF\u30B0\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.tagCombo.toolTipText=\u4F7F\u7528\u3059\u308B\u30BF\u30B0\u3092\u9078\u629E
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
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
DeleteBlackboardArtifactTagAction.deleteTags=\u30BF\u30B0\u3092\u524A\u9664
DeleteBlackboardArtifactTagAction.unableToDelTag.msg=\u30BF\u30B0{0}\u306E\u524A\u9664\u304C\u3067\u304D\u307E\u305B\u3093\u3002
DeleteBlackboardArtifactTagAction.tagDelErr=\u30BF\u30B0\u524A\u9664\u30A8\u30E9\u30FC
DeleteContentTagAction.deleteTags=\u30BF\u30B0\u3092\u524A\u9664
DeleteContentTagAction.unableToDelTag.msg=\u30BF\u30B0{0}\u306E\u524A\u9664\u304C\u3067\u304D\u307E\u305B\u3093\u3002
DeleteContentTagAction.tagDelErr=\u30BF\u30B0\u524A\u9664\u30A8\u30E9\u30FC
GetTagNameAndCommentDialog.noTags=\u30BF\u30B0\u7121\u3057
GetTagNameAndCommentDialog.createTag=\u30BF\u30B0\u3092\u4F5C\u6210
GetTagNameAndCommentDialog.cancelName=\u30AD\u30E3\u30F3\u30BB\u30EB
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\u3001\u5148\u306B\u9032\u3081\u307E\u305B\u3093\u3002
GetTagNameDialog.tagNameErr=\u30BF\u30B0\u540D
GetTagNameDialog.illegalChars.msg=\u4E0D\u6B63\u306A\u6587\u5B57\u304C\u30BF\u30B0\u540D\u306B\u542B\u307E\u308C\u3066\u3044\u307E\u3059\u3002\
\u6B21\u306E\u6587\u5B57\u306F\u4F7F\u3048\u307E\u305B\u3093\uFF1A \\ \: * ? " < > |
GetTagNameDialog.illegalCharsErr=\u4E0D\u6B63\u306A\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.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=\u91CD\u8907\u30BF\u30B0\u306E\u30A8\u30E9\u30FC
AddContentTagAction.cannotApplyTagErr=\u30BF\u30B0\u3092\u9069\u7528\u3067\u304D\u307E\u305B\u3093

View File

@ -23,6 +23,8 @@ import java.util.Collection;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import javax.swing.JOptionPane; import javax.swing.JOptionPane;
import org.openide.util.NbBundle;
import org.openide.util.Utilities; import org.openide.util.Utilities;
import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.casemodule.Case;
import org.sleuthkit.datamodel.BlackboardArtifactTag; import org.sleuthkit.datamodel.BlackboardArtifactTag;
@ -32,7 +34,8 @@ import org.sleuthkit.datamodel.TskCoreException;
* Instances of this Action allow users to delete tags applied to blackboard artifacts. * Instances of this Action allow users to delete tags applied to blackboard artifacts.
*/ */
public class DeleteBlackboardArtifactTagAction extends TagAction { public class DeleteBlackboardArtifactTagAction extends TagAction {
private static final String MENU_TEXT = "Delete Tag(s)"; private static final String MENU_TEXT = NbBundle.getMessage(DeleteBlackboardArtifactTagAction.class,
"DeleteBlackboardArtifactTagAction.deleteTags");
// This class is a singleton to support multi-selection of nodes, since // This class is a singleton to support multi-selection of nodes, since
// org.openide.nodes.NodeOp.findActions(Node[] nodes) will only pick up an Action if every // org.openide.nodes.NodeOp.findActions(Node[] nodes) will only pick up an Action if every
@ -59,7 +62,13 @@ public class DeleteBlackboardArtifactTagAction extends TagAction {
} }
catch (TskCoreException ex) { catch (TskCoreException ex) {
Logger.getLogger(AddContentTagAction.class.getName()).log(Level.SEVERE, "Error deleting tag", ex); Logger.getLogger(AddContentTagAction.class.getName()).log(Level.SEVERE, "Error deleting tag", ex);
JOptionPane.showMessageDialog(null, "Unable to delete tag " + tag.getName() + ".", "Tag Deletion Error", JOptionPane.ERROR_MESSAGE); JOptionPane.showMessageDialog(null,
NbBundle.getMessage(this.getClass(),
"DeleteBlackboardArtifactTagAction.unableToDelTag.msg",
tag.getName()),
NbBundle.getMessage(this.getClass(),
"DeleteBlackboardArtifactTagAction.tagDelErr"),
JOptionPane.ERROR_MESSAGE);
} }
} }
} }

View File

@ -23,6 +23,8 @@ import java.util.Collection;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import javax.swing.JOptionPane; import javax.swing.JOptionPane;
import org.openide.util.NbBundle;
import org.openide.util.Utilities; import org.openide.util.Utilities;
import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.casemodule.Case;
import org.sleuthkit.datamodel.ContentTag; import org.sleuthkit.datamodel.ContentTag;
@ -32,7 +34,8 @@ import org.sleuthkit.datamodel.TskCoreException;
* Instances of this Action allow users to delete tags applied to content. * Instances of this Action allow users to delete tags applied to content.
*/ */
public class DeleteContentTagAction extends TagAction { public class DeleteContentTagAction extends TagAction {
private static final String MENU_TEXT = "Delete Tag(s)"; private static final String MENU_TEXT = NbBundle.getMessage(DeleteContentTagAction.class,
"DeleteContentTagAction.deleteTags");
// This class is a singleton to support multi-selection of nodes, since // This class is a singleton to support multi-selection of nodes, since
// org.openide.nodes.NodeOp.findActions(Node[] nodes) will only pick up an Action if every // org.openide.nodes.NodeOp.findActions(Node[] nodes) will only pick up an Action if every
@ -59,7 +62,12 @@ public class DeleteContentTagAction extends TagAction {
} }
catch (TskCoreException ex) { catch (TskCoreException ex) {
Logger.getLogger(AddContentTagAction.class.getName()).log(Level.SEVERE, "Error deleting tag", ex); Logger.getLogger(AddContentTagAction.class.getName()).log(Level.SEVERE, "Error deleting tag", ex);
JOptionPane.showMessageDialog(null, "Unable to delete tag " + tag.getName() + ".", "Tag Deletion Error", JOptionPane.ERROR_MESSAGE); JOptionPane.showMessageDialog(null,
NbBundle.getMessage(this.getClass(),
"DeleteContentTagAction.unableToDelTag.msg",
tag.getName()),
NbBundle.getMessage(this.getClass(), "DeleteContentTagAction.tagDelErr"),
JOptionPane.ERROR_MESSAGE);
} }
} }
} }

View File

@ -109,6 +109,7 @@
</Properties> </Properties>
<AuxValues> <AuxValues>
<AuxValue name="JavaCodeGenerator_CreateCodeCustom" type="java.lang.String" value="new javax.swing.JComboBox&lt;String&gt;()"/> <AuxValue name="JavaCodeGenerator_CreateCodeCustom" type="java.lang.String" value="new javax.swing.JComboBox&lt;String&gt;()"/>
<AuxValue name="JavaCodeGenerator_TypeParameters" type="java.lang.String" value="&lt;String&gt;"/>
</AuxValues> </AuxValues>
</Component> </Component>
<Component class="javax.swing.JLabel" name="tagLabel"> <Component class="javax.swing.JLabel" name="tagLabel">

View File

@ -30,6 +30,8 @@ import javax.swing.JComponent;
import javax.swing.JDialog; import javax.swing.JDialog;
import javax.swing.JFrame; import javax.swing.JFrame;
import javax.swing.KeyStroke; import javax.swing.KeyStroke;
import org.openide.util.NbBundle;
import org.openide.windows.WindowManager; import org.openide.windows.WindowManager;
import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.casemodule.Case;
import org.sleuthkit.autopsy.casemodule.services.TagsManager; import org.sleuthkit.autopsy.casemodule.services.TagsManager;
@ -38,7 +40,8 @@ import org.sleuthkit.datamodel.TagName;
import org.sleuthkit.datamodel.TskCoreException; import org.sleuthkit.datamodel.TskCoreException;
public class GetTagNameAndCommentDialog extends JDialog { public class GetTagNameAndCommentDialog extends JDialog {
private static final String NO_TAG_NAMES_MESSAGE = "No Tags"; private static final String NO_TAG_NAMES_MESSAGE = NbBundle.getMessage(GetTagNameAndCommentDialog.class,
"GetTagNameAndCommentDialog.noTags");
private final HashMap<String, TagName> tagNames = new HashMap<>(); private final HashMap<String, TagName> tagNames = new HashMap<>();
private TagNameAndComment tagNameAndComment = null; private TagNameAndComment tagNameAndComment = null;
@ -66,11 +69,13 @@ public class GetTagNameAndCommentDialog extends JDialog {
} }
private GetTagNameAndCommentDialog() { private GetTagNameAndCommentDialog() {
super((JFrame)WindowManager.getDefault().getMainWindow(), "Create Tag", true); super((JFrame)WindowManager.getDefault().getMainWindow(),
NbBundle.getMessage(GetTagNameAndCommentDialog.class, "GetTagNameAndCommentDialog.createTag"),
true);
initComponents(); initComponents();
// Set up the dialog to close when Esc is pressed. // Set up the dialog to close when Esc is pressed.
String cancelName = "cancel"; String cancelName = NbBundle.getMessage(this.getClass(), "GetTagNameAndCommentDialog.cancelName");
InputMap inputMap = getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); InputMap inputMap = getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), cancelName); inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), cancelName);
ActionMap actionMap = getRootPane().getActionMap(); ActionMap actionMap = getRootPane().getActionMap();
@ -240,7 +245,7 @@ public class GetTagNameAndCommentDialog extends JDialog {
private javax.swing.JTextField commentText; private javax.swing.JTextField commentText;
private javax.swing.JButton newTagButton; private javax.swing.JButton newTagButton;
private javax.swing.JButton okButton; private javax.swing.JButton okButton;
private javax.swing.JComboBox tagCombo; private javax.swing.JComboBox<String> tagCombo;
private javax.swing.JLabel tagLabel; private javax.swing.JLabel tagLabel;
// End of variables declaration//GEN-END:variables // End of variables declaration//GEN-END:variables
} }

View File

@ -34,6 +34,7 @@ import javax.swing.JOptionPane;
import javax.swing.KeyStroke; import javax.swing.KeyStroke;
import javax.swing.table.AbstractTableModel; import javax.swing.table.AbstractTableModel;
import org.openide.util.ImageUtilities; import org.openide.util.ImageUtilities;
import org.openide.util.NbBundle;
import org.openide.windows.WindowManager; import org.openide.windows.WindowManager;
import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.casemodule.Case;
import org.sleuthkit.autopsy.casemodule.services.TagsManager; import org.sleuthkit.autopsy.casemodule.services.TagsManager;
@ -52,12 +53,14 @@ public class GetTagNameDialog extends JDialog {
} }
private GetTagNameDialog() { private GetTagNameDialog() {
super((JFrame)WindowManager.getDefault().getMainWindow(), "Create Tag", true); super((JFrame)WindowManager.getDefault().getMainWindow(),
NbBundle.getMessage(GetTagNameDialog.class, "GetTagNameDialog.createTag"),
true);
setIconImage(ImageUtilities.loadImage(TAG_ICON_PATH)); setIconImage(ImageUtilities.loadImage(TAG_ICON_PATH));
initComponents(); initComponents();
// Set up the dialog to close when Esc is pressed. // Set up the dialog to close when Esc is pressed.
String cancelName = "cancel"; String cancelName = NbBundle.getMessage(this.getClass(), "GetTagNameDialog.cancelName");
InputMap inputMap = getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); InputMap inputMap = getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), cancelName); inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), cancelName);
ActionMap actionMap = getRootPane().getActionMap(); ActionMap actionMap = getRootPane().getActionMap();
@ -276,10 +279,17 @@ public class GetTagNameDialog extends JDialog {
private void okButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_okButtonActionPerformed private void okButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_okButtonActionPerformed
String tagDisplayName = tagNameField.getText(); String tagDisplayName = tagNameField.getText();
if (tagDisplayName.isEmpty()) { if (tagDisplayName.isEmpty()) {
JOptionPane.showMessageDialog(null, "Must supply a tag name to continue.", "Tag Name", JOptionPane.ERROR_MESSAGE); JOptionPane.showMessageDialog(null,
NbBundle.getMessage(this.getClass(),
"GetTagNameDialog.mustSupplyTtagName.msg"),
NbBundle.getMessage(this.getClass(), "GetTagNameDialog.tagNameErr"),
JOptionPane.ERROR_MESSAGE);
} }
else if (containsIllegalCharacters(tagDisplayName)) { else if (containsIllegalCharacters(tagDisplayName)) {
JOptionPane.showMessageDialog(null, "The tag name contains illegal characters.\nCannot contain any of the following symbols: \\ : * ? \" < > |", "Illegal Characters", JOptionPane.ERROR_MESSAGE); JOptionPane.showMessageDialog(null,
NbBundle.getMessage(this.getClass(), "GetTagNameDialog.illegalChars.msg"),
NbBundle.getMessage(this.getClass(), "GetTagNameDialog.illegalCharsErr"),
JOptionPane.ERROR_MESSAGE);
} }
else { else {
tagName = tagNames.get(tagDisplayName); tagName = tagNames.get(tagDisplayName);
@ -290,12 +300,22 @@ public class GetTagNameDialog extends JDialog {
} }
catch (TskCoreException ex) { catch (TskCoreException ex) {
Logger.getLogger(AddTagAction.class.getName()).log(Level.SEVERE, "Error adding " + tagDisplayName + " tag name", ex); Logger.getLogger(AddTagAction.class.getName()).log(Level.SEVERE, "Error adding " + tagDisplayName + " tag name", ex);
JOptionPane.showMessageDialog(null, "Unable to add the " + tagDisplayName + " tag name to the case.", "Tagging Error", JOptionPane.ERROR_MESSAGE); JOptionPane.showMessageDialog(null,
NbBundle.getMessage(this.getClass(),
"GetTagNameDialog.unableToAddTagNameToCase.msg",
tagDisplayName),
NbBundle.getMessage(this.getClass(), "GetTagNameDialog.taggingErr"),
JOptionPane.ERROR_MESSAGE);
tagName = null; tagName = null;
} }
catch (TagsManager.TagNameAlreadyExistsException ex) { catch (TagsManager.TagNameAlreadyExistsException ex) {
Logger.getLogger(AddTagAction.class.getName()).log(Level.SEVERE, "Error adding " + tagDisplayName + " tag name", ex); Logger.getLogger(AddTagAction.class.getName()).log(Level.SEVERE, "Error adding " + tagDisplayName + " tag name", ex);
JOptionPane.showMessageDialog(null, "A " + tagDisplayName + " tag name has already been defined.", "Duplicate Tag Error", JOptionPane.ERROR_MESSAGE); JOptionPane.showMessageDialog(null,
NbBundle.getMessage(this.getClass(),
"GetTagNameDialog.tagNameAlreadyDef.msg",
tagDisplayName),
NbBundle.getMessage(this.getClass(), "GetTagNameDialog.dupTagErr"),
JOptionPane.ERROR_MESSAGE);
tagName = null; tagName = null;
} }
} }

View File

@ -1,7 +1,7 @@
/* /*
* Autopsy Forensic Browser * Autopsy Forensic Browser
* *
* Copyright 2011 Basis Technology Corp. * Copyright 2011-2014 Basis Technology Corp.
* Contact: carrier <at> sleuthkit <dot> org * Contact: carrier <at> sleuthkit <dot> org
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
@ -19,7 +19,6 @@
package org.sleuthkit.autopsy.casemodule; package org.sleuthkit.autopsy.casemodule;
import org.sleuthkit.autopsy.ingest.IngestJobLauncher;
import java.awt.Component; import java.awt.Component;
import java.awt.Dialog; import java.awt.Dialog;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
@ -110,15 +109,18 @@ public final class AddImageAction extends CallableSystemAction implements Presen
Logger.noteAction(AddImageAction.class); Logger.noteAction(AddImageAction.class);
if (IngestManager.getDefault().isIngestRunning()) { if (IngestManager.getDefault().isIngestRunning()) {
final String msg = "<html>Ingest is ongoing on another data source. Adding a new source now might slow down the current ingest.<br />Do you want to proceed and add a new data source now?</html>"; final String msg = NbBundle.getMessage(this.getClass(), "AddImageAction.ingestConfig.ongoingIngest.msg");
if (JOptionPane.showConfirmDialog(null, msg, "Ingest in progress", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE) == JOptionPane.NO_OPTION) { if (JOptionPane.showConfirmDialog(null, msg,
NbBundle.getMessage(this.getClass(),
"AddImageAction.ingestConfig.ongoingIngest.title"),
JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE) == JOptionPane.NO_OPTION) {
return; return;
} }
} }
iterator = new AddImageWizardIterator(this); iterator = new AddImageWizardIterator(this);
wizardDescriptor = new WizardDescriptor(iterator); wizardDescriptor = new WizardDescriptor(iterator);
wizardDescriptor.setTitle("Add Data Source"); wizardDescriptor.setTitle(NbBundle.getMessage(this.getClass(), "AddImageAction.wizard.title"));
wizardDescriptor.putProperty(NAME, e); wizardDescriptor.putProperty(NAME, e);
if (dialog != null) { if (dialog != null) {

View File

@ -24,6 +24,8 @@ import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.logging.Level; import java.util.logging.Level;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorCallback; import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorCallback;
import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorProgressMonitor; import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorProgressMonitor;
import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.Logger;
@ -37,7 +39,7 @@ import org.sleuthkit.datamodel.TskDataException;
import org.sleuthkit.datamodel.TskException; import org.sleuthkit.datamodel.TskException;
/* /*
* A background task (swingworker) that adds the given image to * A background task that adds the given image to
* database using the Sleuthkit JNI interface. * database using the Sleuthkit JNI interface.
* *
* It updates the given ProgressMonitor as it works through adding the image, * It updates the given ProgressMonitor as it works through adding the image,
@ -74,7 +76,7 @@ import org.sleuthkit.datamodel.TskException;
boolean noFatOrphans; boolean noFatOrphans;
/* /*
* A Swingworker that updates the progressMonitor with the name of the * A thread that updates the progressMonitor with the name of the
* directory currently being processed by the AddImageTask * directory currently being processed by the AddImageTask
*/ */
private class CurrentDirectoryFetcher implements Runnable { private class CurrentDirectoryFetcher implements Runnable {
@ -97,7 +99,9 @@ import org.sleuthkit.datamodel.TskException;
String currDir = process.currentDirectory(); String currDir = process.currentDirectory();
if (currDir != null) { if (currDir != null) {
if (!currDir.isEmpty() ) { if (!currDir.isEmpty() ) {
progressMonitor.setProgressText("Adding: " + currDir); progressMonitor.setProgressText(
NbBundle.getMessage(this.getClass(), "AddImageTask.run.progress.adding",
currDir));
} }
} }
// this sleep here prevents the UI from locking up // this sleep here prevents the UI from locking up
@ -298,7 +302,7 @@ import org.sleuthkit.datamodel.TskException;
logger.log(Level.INFO, "interrupt() add image process"); logger.log(Level.INFO, "interrupt() add image process");
addImageProcess.stop(); //it might take time to truly stop processing and writing to db addImageProcess.stop(); //it might take time to truly stop processing and writing to db
} catch (TskCoreException ex) { } catch (TskCoreException ex) {
throw new Exception("Error stopping add-image process.", ex); throw new Exception(NbBundle.getMessage(this.getClass(), "AddImageTask.interrupt.exception.msg"), ex);
} }
} }

View File

@ -29,6 +29,7 @@ import javax.swing.event.ChangeListener;
import org.openide.WizardDescriptor; import org.openide.WizardDescriptor;
import org.openide.util.HelpCtx; import org.openide.util.HelpCtx;
import org.openide.util.Lookup; import org.openide.util.Lookup;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorProgressMonitor; import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorProgressMonitor;
/** /**
@ -136,7 +137,8 @@ class AddImageWizardAddingProgressPanel implements WizardDescriptor.FinishablePa
public boolean isValid() { public boolean isValid() {
// set the focus to the next button of the wizard dialog if it's enabled // set the focus to the next button of the wizard dialog if it's enabled
if (imgAdded) { if (imgAdded) {
Lookup.getDefault().lookup(AddImageAction.class).requestFocusButton("Next >"); Lookup.getDefault().lookup(AddImageAction.class).requestFocusButton(
NbBundle.getMessage(this.getClass(), "AddImageWizardAddingProgressPanel.isValid.focusNext"));
} }
return imgAdded; return imgAdded;
@ -147,7 +149,8 @@ class AddImageWizardAddingProgressPanel implements WizardDescriptor.FinishablePa
*/ */
void setStateStarted() { void setStateStarted() {
component.getProgressBar().setIndeterminate(true); component.getProgressBar().setIndeterminate(true);
component.setProgressBarTextAndColor("*This process may take some time for large data sources.", 0, Color.black); component.setProgressBarTextAndColor(
NbBundle.getMessage(this.getClass(), "AddImageWizardAddingProgressPanel.stateStarted.progressBarText"), 0, Color.black);
} }
/** /**

View File

@ -23,6 +23,7 @@ import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import javax.swing.JProgressBar; import javax.swing.JProgressBar;
import org.openide.WizardDescriptor; import org.openide.WizardDescriptor;
import org.openide.util.NbBundle;
/** /**
* visual component to display progress bar and status updates while adding an * visual component to display progress bar and status updates while adding an
@ -30,7 +31,8 @@ import org.openide.WizardDescriptor;
*/ */
class AddImageWizardAddingProgressVisual extends javax.swing.JPanel { class AddImageWizardAddingProgressVisual extends javax.swing.JPanel {
private static final String ADDING_DATA_SOURCE_COMPLETE = "Adding Data Source - Complete"; private static final String ADDING_DATA_SOURCE_COMPLETE = NbBundle
.getMessage(AddImageWizardAddingProgressVisual.class, "AddImageWizardAddingProgressVisual.addingDsComplete.text");
private String errorLog = ""; private String errorLog = "";
private boolean hasCriticalErrors = false; private boolean hasCriticalErrors = false;
@ -42,7 +44,7 @@ import org.openide.WizardDescriptor;
*/ */
@Override @Override
public String getName() { public String getName() {
return "Add Data Source"; return NbBundle.getMessage(this.getClass(), "AddImageWizardAddingProgressVisual.getName.text");
} }
/** /**
@ -115,10 +117,12 @@ import org.openide.WizardDescriptor;
//progressBar.setValue(100); //always invoked when process completed //progressBar.setValue(100); //always invoked when process completed
if (hasCriticalErrors) { if (hasCriticalErrors) {
statusLabel.setForeground(Color.RED); statusLabel.setForeground(Color.RED);
statusLabel.setText("*Failed to add data source (critical errors encountered). Click below to view the log."); statusLabel.setText(
NbBundle.getMessage(this.getClass(), "AddImageWizardAddingProgressVisual.showErrors.critText"));
} else { } else {
statusLabel.setForeground(Color.BLACK); statusLabel.setForeground(Color.BLACK);
statusLabel.setText("*Data Source added (non-critical errors encountered). Click below to view the log."); statusLabel.setText(
NbBundle.getMessage(this.getClass(), "AddImageWizardAddingProgressVisual.showErrors.nonCritText"));
} }
errorLog += errors + "\n"; errorLog += errors + "\n";

View File

@ -25,6 +25,8 @@ import java.util.HashSet;
import java.util.Iterator; import java.util.Iterator;
import java.util.Set; import java.util.Set;
import java.util.logging.Level; import java.util.logging.Level;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.Logger;
import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener; import javax.swing.event.ChangeListener;
@ -106,7 +108,8 @@ class AddImageWizardChooseDataSourcePanel implements WizardDescriptor.Panel<Wiza
void moveFocusToNext() { void moveFocusToNext() {
// set the focus to the next button of the wizard dialog if it's enabled // set the focus to the next button of the wizard dialog if it's enabled
if (isNextEnable) { if (isNextEnable) {
Lookup.getDefault().lookup(AddImageAction.class).requestFocusButton("Next >"); Lookup.getDefault().lookup(AddImageAction.class).requestFocusButton(
NbBundle.getMessage(this.getClass(), "AddImageWizardChooseDataSourcePanel.moveFocusNext"));
} }
} }

View File

@ -18,7 +18,6 @@
*/ */
package org.sleuthkit.autopsy.casemodule; package org.sleuthkit.autopsy.casemodule;
import java.awt.BorderLayout; import java.awt.BorderLayout;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
@ -37,25 +36,22 @@ import javax.swing.JSeparator;
import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentEvent;
import javax.swing.ListCellRenderer; import javax.swing.ListCellRenderer;
import org.openide.util.Lookup; import org.openide.util.Lookup;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessor; import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessor;
/** /**
* visual component for the first panel of add image wizard. * visual component for the first panel of add image wizard. Allows the user to
* Allows the user to choose the data source type and then select the data source * choose the data source type and then select the data source
* *
*/ */
final class AddImageWizardChooseDataSourceVisual extends JPanel { final class AddImageWizardChooseDataSourceVisual extends JPanel {
static final Logger logger = Logger.getLogger(AddImageWizardChooseDataSourceVisual.class.getName()); static final Logger logger = Logger.getLogger(AddImageWizardChooseDataSourceVisual.class.getName());
private AddImageWizardChooseDataSourcePanel wizPanel; private AddImageWizardChooseDataSourcePanel wizPanel;
private JPanel currentPanel; private JPanel currentPanel;
private Map<String, DataSourceProcessor> datasourceProcessorsMap = new HashMap<String, DataSourceProcessor>(); private Map<String, DataSourceProcessor> datasourceProcessorsMap = new HashMap<>();
List<String> coreDSPTypes = new ArrayList<>();
List<String> coreDSPTypes = new ArrayList<String>();
/** /**
* Creates new form AddImageVisualPanel1 * Creates new form AddImageVisualPanel1
@ -86,21 +82,20 @@ final class AddImageWizardChooseDataSourceVisual extends JPanel {
coreDSPTypes.add(LocalDiskDSProcessor.getType()); coreDSPTypes.add(LocalDiskDSProcessor.getType());
coreDSPTypes.add(LocalFilesDSProcessor.getType()); coreDSPTypes.add(LocalFilesDSProcessor.getType());
for(String dspType:coreDSPTypes){ for (String dspType : coreDSPTypes) {
typeComboBox.addItem(dspType); typeComboBox.addItem(dspType);
} }
// now add any addtional DSPs that haven't already been added // now add any addtional DSPs that haven't already been added
for(String dspType:dspTypes){ for (String dspType : dspTypes) {
if (!coreDSPTypes.contains(dspType)) { if (!coreDSPTypes.contains(dspType)) {
typeComboBox.addItem(dspType); typeComboBox.addItem(dspType);
} }
} }
// set a custom renderer that draws a separator at the end of the core DSPs in the combobox typeComboBox.setRenderer(new ComboboxSeparatorRenderer(typeComboBox.getRenderer()) {
typeComboBox.setRenderer(new ComboboxSeparatorRenderer(typeComboBox.getRenderer()){
@Override @Override
protected boolean addSeparatorAfter(JList list, Object value, int index){ protected boolean addSeparatorAfter(JList list, Object value, int index) {
return (index == coreDSPTypes.size() - 1); return (index == coreDSPTypes.size() - 1);
} }
}); });
@ -118,13 +113,12 @@ final class AddImageWizardChooseDataSourceVisual extends JPanel {
private void discoverDataSourceProcessors() { private void discoverDataSourceProcessors() {
for (DataSourceProcessor dsProcessor: Lookup.getDefault().lookupAll(DataSourceProcessor.class)) { for (DataSourceProcessor dsProcessor : Lookup.getDefault().lookupAll(DataSourceProcessor.class)) {
if (!datasourceProcessorsMap.containsKey(dsProcessor.getDataSourceType()) ) { if (!datasourceProcessorsMap.containsKey(dsProcessor.getDataSourceType())) {
datasourceProcessorsMap.put(dsProcessor.getDataSourceType(), dsProcessor); datasourceProcessorsMap.put(dsProcessor.getDataSourceType(), dsProcessor);
} } else {
else { logger.log(Level.SEVERE, "discoverDataSourceProcessors(): A DataSourceProcessor already exists for type = {0}", dsProcessor.getDataSourceType());
logger.log(Level.SEVERE, "discoverDataSourceProcessors(): A DataSourceProcessor already exists for type = " + dsProcessor.getDataSourceType() );
} }
} }
} }
@ -143,7 +137,7 @@ final class AddImageWizardChooseDataSourceVisual extends JPanel {
private void updateCurrentPanel(JPanel panel) { private void updateCurrentPanel(JPanel panel) {
currentPanel = panel; currentPanel = panel;
typePanel.removeAll(); typePanel.removeAll();
typePanel.add((JPanel) currentPanel, BorderLayout.CENTER); typePanel.add(currentPanel, BorderLayout.CENTER);
typePanel.validate(); typePanel.validate();
typePanel.repaint(); typePanel.repaint();
currentPanel.addPropertyChangeListener(new PropertyChangeListener() { currentPanel.addPropertyChangeListener(new PropertyChangeListener() {
@ -163,7 +157,9 @@ final class AddImageWizardChooseDataSourceVisual extends JPanel {
/** /**
* Returns the currently selected DS Processor * Returns the currently selected DS Processor
* @return DataSourceProcessor the DataSourceProcessor corresponding to the data source type selected in the combobox *
* @return DataSourceProcessor the DataSourceProcessor corresponding to the
* data source type selected in the combobox
*/ */
protected DataSourceProcessor getCurrentDSProcessor() { protected DataSourceProcessor getCurrentDSProcessor() {
// get the type of the currently selected panel and then look up // get the type of the currently selected panel and then look up
@ -183,10 +179,9 @@ final class AddImageWizardChooseDataSourceVisual extends JPanel {
*/ */
@Override @Override
public String getName() { public String getName() {
return "Enter Data Source Information"; return NbBundle.getMessage(this.getClass(), "AddImageWizardChooseDataSourceVisual.getName.text");
} }
/** /**
* This method is called from within the constructor to initialize the form. * This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always * WARNING: Do NOT modify this code. The content of this method is always
@ -309,26 +304,28 @@ final class AddImageWizardChooseDataSourceVisual extends JPanel {
this.wizPanel.enableNextButton(getCurrentDSProcessor().isPanelValid()); this.wizPanel.enableNextButton(getCurrentDSProcessor().isPanelValid());
} }
public abstract class ComboboxSeparatorRenderer implements ListCellRenderer {
public abstract class ComboboxSeparatorRenderer implements ListCellRenderer{
private ListCellRenderer delegate; private ListCellRenderer delegate;
private JPanel separatorPanel = new JPanel(new BorderLayout()); private JPanel separatorPanel = new JPanel(new BorderLayout());
private JSeparator separator = new JSeparator(); private JSeparator separator = new JSeparator();
public ComboboxSeparatorRenderer(ListCellRenderer delegate){ public ComboboxSeparatorRenderer(ListCellRenderer delegate) {
this.delegate = delegate; this.delegate = delegate;
} }
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus){ @Override
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
Component comp = delegate.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); Component comp = delegate.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
if(index!=-1 && addSeparatorAfter(list, value, index)){ if (index != -1 && addSeparatorAfter(list, value, index)) {
separatorPanel.removeAll(); separatorPanel.removeAll();
separatorPanel.add(comp, BorderLayout.CENTER); separatorPanel.add(comp, BorderLayout.CENTER);
separatorPanel.add(separator, BorderLayout.SOUTH); separatorPanel.add(separator, BorderLayout.SOUTH);
return separatorPanel; return separatorPanel;
}else } else {
return comp; return comp;
} }
}
protected abstract boolean addSeparatorAfter(JList list, Object value, int index); protected abstract boolean addSeparatorAfter(JList list, Object value, int index);
} }

View File

@ -20,6 +20,7 @@ package org.sleuthkit.autopsy.casemodule;
import org.sleuthkit.autopsy.ingest.IngestJobLauncher; import org.sleuthkit.autopsy.ingest.IngestJobLauncher;
import org.openide.util.NbBundle;
import java.awt.Color; import java.awt.Color;
import java.awt.Component; import java.awt.Component;
import java.awt.Window; import java.awt.Window;
@ -32,7 +33,6 @@ import javax.swing.SwingUtilities;
import javax.swing.event.ChangeListener; import javax.swing.event.ChangeListener;
import org.openide.WizardDescriptor; import org.openide.WizardDescriptor;
import org.openide.util.HelpCtx; import org.openide.util.HelpCtx;
import org.openide.util.Lookup;
import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.datamodel.Content; import org.sleuthkit.datamodel.Content;
import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorCallback; import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorCallback;
@ -275,9 +275,11 @@ class AddImageWizardIngestConfigPanel implements WizardDescriptor.Panel<WizardDe
//check the result and display to user //check the result and display to user
if (result == DataSourceProcessorCallback.DataSourceProcessorResult.NO_ERRORS) if (result == DataSourceProcessorCallback.DataSourceProcessorResult.NO_ERRORS)
progressPanel.getComponent().setProgressBarTextAndColor("*Data Source added.", 100, Color.black); progressPanel.getComponent().setProgressBarTextAndColor(
NbBundle.getMessage(this.getClass(), "AddImageWizardIngestConfigPanel.dsProcDone.noErrs.text"), 100, Color.black);
else else
progressPanel.getComponent().setProgressBarTextAndColor("*Errors encountered in adding Data Source.", 100, Color.red); progressPanel.getComponent().setProgressBarTextAndColor(
NbBundle.getMessage(this.getClass(), "AddImageWizardIngestConfigPanel.dsProcDone.errs.text"), 100, Color.red);
//if errors, display them on the progress panel //if errors, display them on the progress panel

View File

@ -18,6 +18,8 @@
*/ */
package org.sleuthkit.autopsy.casemodule; package org.sleuthkit.autopsy.casemodule;
import org.openide.util.NbBundle;
import java.awt.BorderLayout; import java.awt.BorderLayout;
import javax.swing.JPanel; import javax.swing.JPanel;
@ -55,7 +57,7 @@ import javax.swing.JPanel;
*/ */
@Override @Override
public String getName() { public String getName() {
return "Configure Ingest Modules"; return NbBundle.getMessage(this.getClass(), "AddImageWizardIngestConfigVisual.getName.text");
} }
/** /**

View File

@ -26,6 +26,7 @@ import java.util.NoSuchElementException;
import javax.swing.JComponent; import javax.swing.JComponent;
import javax.swing.event.ChangeListener; import javax.swing.event.ChangeListener;
import org.openide.WizardDescriptor; import org.openide.WizardDescriptor;
import org.openide.util.NbBundle;
/** /**
* The iterator class for the "Add Image" wizard panel. This class is used to * The iterator class for the "Add Image" wizard panel. This class is used to
@ -112,7 +113,8 @@ class AddImageWizardIterator implements WizardDescriptor.Iterator<WizardDescript
*/ */
@Override @Override
public String name() { public String name() {
return "Step " + Integer.toString(index + 1) + " of " + getPanels().size(); return NbBundle.getMessage(this.getClass(), "AddImageWizardIterator.stepXofN", Integer.toString(index + 1),
getPanels().size());
} }
/** /**

View File

@ -23,6 +23,8 @@ import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.logging.Level; import java.util.logging.Level;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorCallback; import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorCallback;
import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorProgressMonitor; import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorProgressMonitor;
import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.Logger;
@ -180,7 +182,9 @@ import org.sleuthkit.datamodel.TskCoreException;
@Override @Override
public void fileAdded(final AbstractFile newFile) { public void fileAdded(final AbstractFile newFile) {
if (count++ % 10 == 0) { if (count++ % 10 == 0) {
progressMonitor.setProgressText("Adding: " + newFile.getParentPath() + "/" + newFile.getName()); progressMonitor.setProgressText(
NbBundle.getMessage(this.getClass(), "AddLocalFilesTask.localFileAdd.progress.text",
newFile.getParentPath(), newFile.getName()));
} }
} }
} }

View File

@ -1,61 +1,12 @@
CTL_AddImage=Add Data Source... CTL_AddImage=Add Data Source...
CTL_AddImageButton=Add Data Source CTL_AddImageButton=Add Data Source
CTL_CaseAction=Case
CTL_CaseCloseAct=Close Case CTL_CaseCloseAct=Close Case
CTL_CaseNewAction=New Case... CTL_CaseNewAction=New Case...
#CTL_CaseOpenActionOld=Open Case(old)...
CTL_CasePropertiesAction=Case Properties... CTL_CasePropertiesAction=Case Properties...
CTL_CaseTopComponent=Case Window
#CTL_NewCaseAct=New Case(Old)...
CTL_OpenAction=Open Case... CTL_OpenAction=Open Case...
CTL_RecentCases=Recent Cases CTL_OpenRecentAction=Open Recent Case
CTL_CaseDeleteAction=Delete Case CTL_CaseDeleteAction=Delete Case
CTL_SaveCaseAction=Save Case
CTL_testAction=test
CTL_testTopComponent=test Window
HINT_CaseTopComponent=This is a Case window
HINT_testTopComponent=This is a test window
Menu/File/org-sleuthkit-autopsy-casemodule-CaseCloseAct.shadow=
Menu/File/org-sleuthkit-autopsy-casemodule-OpenAction.shadow=Open Case
OpenIDE-Module-Name=Case OpenIDE-Module-Name=Case
CaseVisualPanel1.jLabel1.text=Name
CaseVisualPanel1.jLabel2.text=Image Path:
CaseVisualPanel1.jLabel3.text=Database Path:
CaseTopComponent.jLabel1.text=Name
CaseVisualPanel1.NameField.text=
CaseVisualPanel1.ImgPath.text=
CaseVisualPanel1.DbPath.text=
CaseTopComponent.jLabel2.text=Image Path
CaseTopComponent.jLabel3.text=DB Path
CaseVisualPanel1.ImgPathBrowserButton.text=Browse
CaseVisualPanel1.DbPathBrowserButton.text=Browse
NewCaseVisualPanel1.jLabel1.text=Name
NewCaseVisualPanel1.jTextField1.text=
NewCaseVisualPanel1.jLabel2.text=Image Type:
NewCaseVisualPanel1.jRadioButton1.text=Raw Single .img .dd
NewCaseVisualPanel1.jRadioButton2.text=Raw Split .001 .002 etc
NewCaseVisualPanel1.jRadioButton3.text=Encase .e01
NewCaseVisualPanel1.nameLabel.text_1=Name
NewCaseVisualPanel1.NameField.text_1=
NewCaseVisualPanel1.TypeLabel.text_1=Image Type:
NewCaseVisualPanel1.rawSingleRadio.text_1=Raw Single .img .dd
NewCaseVisualPanel1.rawSplitRadio.text_1=Raw Split .001 .002 etc
NewCaseVisualPanel1.encaseRadio.text_1=EnCase .e01
NewCaseVisualPanel2.jLabel1.text=Image Path:
NewCaseVisualPanel2.jLabel2.text=DataBase Path:
NewCaseVisualPanel2.descriptionText.text=variable text
NewCaseVisualPanel2.ImgBrowserButton.text=Browse
NewCaseVisualPanel2.DcBrowserButton.text=Browse
NewCaseVisualPanel2.ImagePathField.text=
NewCaseVisualPanel2.DbPathField.text=
CaseVisualPanel1.jLabel4.text=Image Type:
CaseVisualPanel1.rawSingle.text=Raw Single .img .dd
CaseVisualPanel1.rawSplit.text=Raw Split .001 .002 etc
CaseVisualPanel1.encase.text=EnCase .e01 .e02 etc
CaseVisualPanel1.multipleSelectLabel.text=Single Image: Multiple Select Disabled
CaseVisualPanel1.jLabel5.text=If a database has not already been loaded / created for the chosen image use this button: (could take a few minutes)
CaseVisualPanel1.ProgressLabel.text=
CaseVisualPanel1.createDbButton.text=Create Database
NewCaseVisualPanel1.jLabel1.text_1=Enter New Case Information: NewCaseVisualPanel1.jLabel1.text_1=Enter New Case Information:
NewCaseVisualPanel1.caseNameLabel.text_1=Case Name: NewCaseVisualPanel1.caseNameLabel.text_1=Case Name:
NewCaseVisualPanel1.caseDirLabel.text=Base Directory: NewCaseVisualPanel1.caseDirLabel.text=Base Directory:
@ -77,8 +28,6 @@ CasePropertiesForm.OKButton.text=OK
CasePropertiesForm.deleteCaseButton.text=Delete Case CasePropertiesForm.deleteCaseButton.text=Delete Case
CueBannerPanel.autopsyLogo.text= CueBannerPanel.autopsyLogo.text=
CueBannerPanel.createNewLabel.text=Create New Case CueBannerPanel.createNewLabel.text=Create New Case
CueBannerPanel.autopsyLabel.text=Autopsy
CueBannerPanel.welcomeLabel.text=Welcome to
CueBannerPanel.openLabel.text=Open Existing Case CueBannerPanel.openLabel.text=Open Existing Case
CueBannerPanel.closeButton.text=Close CueBannerPanel.closeButton.text=Close
CueBannerPanel.openRecentLabel.text=Open Recent Case CueBannerPanel.openRecentLabel.text=Open Recent Case
@ -87,13 +36,6 @@ CueBannerPanel.openCaseButton.text=
CueBannerPanel.openRecentButton.text= CueBannerPanel.openRecentButton.text=
OpenRecentCasePanel.cancelButton.text=Cancel OpenRecentCasePanel.cancelButton.text=Cancel
OpenRecentCasePanel.jLabel1.text=Recent Cases OpenRecentCasePanel.jLabel1.text=Recent Cases
NewJPanel.jLabel1.text=
NewJPanel.jLabel2.text=NSRL Index
NewJPanel.jLabel5.text=The NSRL index is used to idenify "known" files.
NewJPanel.jFormattedTextField1.text=jFormattedTextField1
NewJPanel.jButton1.text=Rename
NewJPanel.jLabel4.text=Database:
AddImageVisualPanel2.indexImageCheckBox.text=Index image for keyword search
CasePropertiesForm.caseNumberLabel.text=Case Number: CasePropertiesForm.caseNumberLabel.text=Case Number:
CasePropertiesForm.examinerLabel.text=Examiner: CasePropertiesForm.examinerLabel.text=Examiner:
CasePropertiesForm.caseNumberTextField.text= CasePropertiesForm.caseNumberTextField.text=
@ -108,7 +50,6 @@ AddImageErrorsDialog.copyButton.toolTipText=Copy errors to clipboard
AddImageErrorsDialog.copyButton.text=Copy AddImageErrorsDialog.copyButton.text=Copy
AddImageErrorsDialog.closeButton.toolTipText=Close this window AddImageErrorsDialog.closeButton.toolTipText=Close this window
AddImageErrorsDialog.closeButton.text=Close AddImageErrorsDialog.closeButton.text=Close
AddImageVisualPanel4.jLabel2.text=You can add another image or click Finish to return to the case and view results.
OpenRecentCasePanel.openButton.text=Open OpenRecentCasePanel.openButton.text=Open
ImageFilePanel.pathLabel.text=Browse for an image file: ImageFilePanel.pathLabel.text=Browse for an image file:
ImageFilePanel.browseButton.text=Browse ImageFilePanel.browseButton.text=Browse
@ -118,8 +59,6 @@ MissingImageDialog.selectButton.text=Select Image
MissingImageDialog.titleLabel.text=Search for missing image MissingImageDialog.titleLabel.text=Search for missing image
MissingImageDialog.cancelButton.text=Cancel MissingImageDialog.cancelButton.text=Cancel
LocalDiskPanel.errorLabel.text=Error Label LocalDiskPanel.errorLabel.text=Error Label
AddImageDonePanel.statusLabel.text=File system has been added to the local database. Files are being analyzed.
AddImageDonePanel.crDbLabel.text=Adding Data Source - Complete
LocalFilesPanel.infoLabel.text=Add local files and folders: LocalFilesPanel.infoLabel.text=Add local files and folders:
LocalFilesPanel.selectButton.text=Add LocalFilesPanel.selectButton.text=Add
LocalFilesPanel.localFileChooser.dialogTitle=Select Local Files or Folders LocalFilesPanel.localFileChooser.dialogTitle=Select Local Files or Folders
@ -152,3 +91,142 @@ LocalDiskPanel.descLabel.text=(faster results, although some data will not be se
MissingImageDialog.browseButton.text=Browse MissingImageDialog.browseButton.text=Browse
MissingImageDialog.pathNameTextField.text= MissingImageDialog.pathNameTextField.text=
AddImageWizardAddingProgressVisual.progressTextArea.border.title=Status AddImageWizardAddingProgressVisual.progressTextArea.border.title=Status
AddImageAction.wizard.title=Add Data Source
AddImageAction.ingestConfig.ongoingIngest.msg=<html>Ingest is ongoing on another data source. Adding a new source now might slow down the current ingest.<br />Do you want to proceed and add a new data source now?</html>
AddImageAction.ingestConfig.ongoingIngest.title=Ingest in progress
AddImageTask.run.progress.adding=Adding\: {0}
AddImageTask.interrupt.exception.msg=Error stopping add-image process.
AddImageWizardAddingProgressPanel.isValid.focusNext=Next >
AddImageWizardAddingProgressPanel.stateStarted.progressBarText=*This process may take some time for large data sources.
AddImageWizardAddingProgressVisual.addingDsComplete.text=Adding Data Source - Complete
AddImageWizardAddingProgressVisual.getName.text=Add Data Source
AddImageWizardAddingProgressVisual.showErrors.critText=*Failed to add data source (critical errors encountered). Click below to view the log.
AddImageWizardAddingProgressVisual.showErrors.nonCritText=*Data Source added (non-critical errors encountered). Click below to view the log.
AddImageWizardChooseDataSourcePanel.moveFocusNext=Next >
AddImageWizardChooseDataSourceVisual.getName.text=Enter Data Source Information
AddImageWizardIngestConfigPanel.dsProcDone.noErrs.text=*Data Source added.
AddImageWizardIngestConfigPanel.dsProcDone.errs.text=*Errors encountered in adding Data Source.
AddImageWizardIngestConfigVisual.getName.text=Configure Ingest Modules
AddImageWizardIterator.stepXofN=Step {0} of {1}
AddLocalFilesTask.localFileAdd.progress.text=Adding\: {0}/{1}
Case.getCurCase.exception.noneOpen=Can't get the current case; there is no case open\!
Case.moduleErr=Module Error
Case.changeCase.errListenToCaseUpdates.msg=A module caused an error listening to Case updates. See log to determine which module. Some data could be incomplete.
Case.create.exception.msg=Error creating a case\: {0} in dir {1}
Case.open.exception.blankCase.msg=Case name is blank.
Case.open.msgDlg.updated.msg=Updated case database schema.\
A backup copy of the database with the following path has been made\:\
{0}
Case.open.msgDlg.updated.title=Case Database Schema Update
Case.open.exception.checkFile.msg=Check that you selected the correct case file (usually with {0} extension)
Case.open.exception.gen.msg=Error opening the case
Case.checkImgExist.confDlg.doesntExist.msg={0} has detected that one of the images associated with \
this case are missing. Would you like to search for them now?\
Previously, the image was located at\:\
{1}\
Please note that you will still be able to browse directories and generate reports\
if you choose No, but you will not be able to view file content or run the ingest process.
Case.checkImgExist.confDlg.doesntExist.title=Missing Image
Case.addImg.exception.msg=Error adding image to the case
Case.closeCase.exception.msg=Error while trying to close the current case.
Case.deleteCase.exception.msg=Error deleting the case dir\: {0}
Case.deleteCase.exception.msg2=Error deleting the case dir\: {0}
Case.updateCaseName.exception.msg=Error while trying to update the case name.
Case.updateExaminer.exception.msg=Error while trying to update the examiner.
Case.updateCaseNum.exception.msg=Error while trying to update the case number.
Case.exception.errGetRootObj=Error getting root objects.
Case.createCaseDir.exception.existNotDir=Cannot create case dir, already exists and is not a directory\: {0}
Case.createCaseDir.exception.existCantRW=Cannot create case dir, already exists and cannot read/write\: {0}
Case.createCaseDir.exception.cantCreate=Cannot create case dir\: {0}
Case.createCaseDir.exception.cantCreateCaseDir=Could not create case directory\: {0}
Case.createCaseDir.exception.cantCreateModDir=Could not create modules output directory\: {0}
Case.createCaseDir.exception.gen=Could not create case directory\: {0}
CaseDeleteAction.closeConfMsg.text=Are you sure want to close and delete this case? \
Case Name\: {0}\
Case Directory\: {1}
CaseDeleteAction.closeConfMsg.title=Warning\: Closing the Current Case
CaseDeleteAction.msgDlg.fileInUse.msg=The delete action can't be fully completed because the folder or file in it is open by another program.\
\
Close the folder and file and try again or you can delete the case manually.
CaseDeleteAction.msgDlg.fileInUse.title=Error\: Folder In Use
CaseDeleteAction.msgDlg.caseDelete.msg=Case {0} has been deleted.
CaseOpenAction.autFilter.title={0} Case File ( {1})
CaseOpenAction.msgDlg.fileNotExist.msg=Error\: File doesn't exist.
CaseOpenAction.msgDlg.fileNotExist.title=Error
CaseOpenAction.msgDlg.cantOpenCase.msg=Error\: could not open the case in folder {0}\: {1}
CaseOpenAction.msgDlg.cantOpenCase.title=Error
CasePropertiesAction.window.title=Case Properties
CasePropertiesForm.updateCaseName.msgDlg.empty.msg=The caseName cannot be empty.
CasePropertiesForm.updateCaseName.msgDlg.empty.title=Error
CasePropertiesForm.updateCaseName.msgDlg.invalidSymbols.msg=The Case Name cannot contain any of this following symbol\: \\ / \: * ? " < > |
CasePropertiesForm.updateCaseName.msgDlg.invalidSymbols.title=Error
CasePropertiesForm.updateCaseName.confMsg.msg=Are you sure want to update the case name from "{0}" to "{1}"?
CasePropertiesForm.updateCaseName.confMsg.title=Create directory
CueBannerPanel.title.text=Open Recent Case
GeneralFilter.rawImageDesc.text=Raw Images (*.img, *.dd, *.001, *.aa, *.raw, *.bin)
GeneralFilter.encaseImageDesc.text=Encase Images (*.e01)
ImageDSProcessor.dsType.text=Image File
ImageDSProcessor.allDesc.text=All Supported Types
ImageFilePanel.moduleErr=Module Error
ImageFilePanel.moduleErr.msg=A module caused an error listening to ImageFilePanel updates. See log to determine which module. Some data could be incomplete.
LocalDiskDSProcessor.dsType.text=Local Disk
LocalDiskPanel.localDiskModel.loading.msg=Loading local disks...
LocalDiskPanel.moduleErr=Module Error
LocalDiskPanel.moduleErr.msg=A module caused an error listening to LocalDiskPanel updates. See log to determine which module. Some data could be incomplete.
LocalDiskPanel.errLabel.disksNotDetected.text=Disks were not detected. On some systems it requires admin privileges (or "Run as administrator").
LocalDiskPanel.errLabel.disksNotDetected.toolTipText=Disks were not detected. On some systems it requires admin privileges (or "Run as administrator").
LocalDiskPanel.errLabel.drivesNotDetected.text=Local drives were not detected. Auto-detection not supported on this OS or admin privileges required
LocalDiskPanel.errLabel.drivesNotDetected.toolTipText=Local drives were not detected. Auto-detection not supported on this OS or admin privileges required
LocalDiskPanel.errLabel.someDisksNotDetected.text=Some disks were not detected. On some systems it requires admin privileges (or "Run as administrator").
LocalDiskPanel.errLabel.someDisksNotDetected.toolTipText=Some disks were not detected. On some systems it requires admin privileges (or "Run as administrator").
LocalFilesDSProcessor.dsType=Logical Files
LocalFilesDSProcessor.toString.text=Logical Files
LocalFilesPanel.contentType.text=LOCAL
LocalFilesPanel.moduleErr=Module Error
LocalFilesPanel.moduleErr.msg=A module caused an error listening to LocalFilesPanel updates. See log to determine which module. Some data could be incomplete.
MissingImageDialog.allDesc.text=All Supported Types
MissingImageDialog.display.title=Search for Missing Image
MissingImageDialog.confDlg.noFileSel.msg=No image file has been selected, are you sure you\
would like to exit without finding the image.
MissingImageDialog.confDlg.noFileSel.title=Missing Image
NewCaseVisualPanel1.getName.text=Case Info
NewCaseVisualPanel1.caseDirBrowse.selectButton.text=Select
NewCaseVisualPanel2.getName.text=Additional Information
NewCaseWizardAction.closeCurCase.confMsg.msg=Do you want to save and close this case and proceed with the new case creation?
NewCaseWizardAction.closeCurCase.confMsg.title=Warning\: Closing the Current Case
NewCaseWizardAction.newCase.windowTitle.text=New Case Information
NewCaseWizardAction.getName.text=New Case Wizard
NewCaseWizardPanel1.validate.errMsg.invalidSymbols=The Case Name cannot contain any of the following symbols\: \\ / \: * ? " < > |
NewCaseWizardPanel1.validate.errMsg.dirExists=Case directory ''{0}'' already exists.
NewCaseWizardPanel1.validate.confMsg.createDir.msg=The base directory ''{0}'' doesn''t exist. \
\
Do you want to create that directory?
NewCaseWizardPanel1.validate.confMsg.createDir.title=Create directory
NewCaseWizardPanel1.validate.errMsg.cantCreateParDir.msg=Error\: Couldn't create case parent directory {0}
NewCaseWizardPanel1.validate.errMsg.prevCreateBaseDir.msg=Prevented from creating base directory {0}
NewCaseWizardPanel1.validate.errMsg.cantCreateDir=Error\: Couldn't create directory.
NewCaseWizardPanel1.validate.errMsg.invalidBaseDir.msg=ERROR\: The Base Directory that you entered is not valid.\
Please enter a valid Base Directory.
NewCaseWizardPanel1.createDir.errMsg.cantCreateDir.msg=ERROR\: Could not create the case directory. \
Please enter a valid Case Name and Directory.
NewCaseWizardPanel2.validate.errCreateCase.msg=Error creating case
OpenRecentCasePanel.openCase.msgDlg.caseDoesntExist.msg=Error\: Case {0} doesn't exist.
OpenRecentCasePanel.openCase.msgDlg.err=Error
OpenRecentCasePanel.colName.caseName=Case Name
OpenRecentCasePanel.colName.path=Path
RecentCases.exception.caseIdxOutOfRange.msg=Recent case index {0} is out of range.
RecentCases.getName.text=Clear Recent Cases
RecentItems.openRecentCase.msgDlg.text=Error\: Case {0} doesn't exist.
RecentItems.openRecentCase.msgDlg.err=Error
StartupWindow.title.text=Welcome
UpdateRecentCases.menuItem.clearRecentCases.text=Clear Recent Cases
UpdateRecentCases.menuItem.empty=-Empty-
XMLCaseManagement.create.exception.msg=Error setting up Case XML file,
XMLCaseManagement.writeFile.exception.noCase.msg=No set case to write management file for.
XMLCaseManagement.writeFile.exception.errWriteToFile.msg=Error writing to case file
XMLCaseManagement.open.exception.errReadXMLFile.msg=Error reading case XML file\: {0}
XMLCaseManagement.open.msgDlg.notAutCase.msg=Error\: This is not an Autopsy config file ("{0}").\
\
Detail\: \
Cannot open a non-Autopsy config file (at {1}).
XMLCaseManagement.open.msgDlg.notAutCase.title=Error

View File

@ -0,0 +1,226 @@
CTL_AddImage=\u30C7\u30FC\u30BF\u30BD\u30FC\u30B9\u8FFD\u52A0...
CTL_AddImageButton=\u30C7\u30FC\u30BF\u30BD\u30FC\u30B9\u8FFD\u52A0
CTL_CaseCloseAct=\u30B1\u30FC\u30B9\u3092\u9589\u3058\u308B
CTL_CaseNewAction=\u65B0\u898F\u30B1\u30FC\u30B9\u2026
CTL_CasePropertiesAction=\u30B1\u30FC\u30B9\u30D7\u30ED\u30D1\u30C6\u30A3\u2026
CTL_OpenAction=\u30B1\u30FC\u30B9\u3092\u958B\u304F\u2026
CTL_OpenRecentAction=\u6700\u8FD1\u958B\u3044\u305F\u30B1\u30FC\u30B9\u3092\u958B\u304F
CTL_CaseDeleteAction=\u30B1\u30FC\u30B9\u524A\u9664
OpenIDE-Module-Name=\u30B1\u30FC\u30B9
NewCaseVisualPanel1.jLabel1.text_1=\u65B0\u898F\u30B1\u30FC\u30B9\u60C5\u5831\u3092\u5165\u529B\uFF1A
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.caseNameTextField.text_1=
NewCaseVisualPanel1.jLabel2.text_1=\u30B1\u30FC\u30B9\u30C7\u30FC\u30BF\u306F\u4E0B\u8A18\u306E\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306B\u4FDD\u5B58\u3055\u308C\u307E\u3059\uFF1A
NewCaseVisualPanel1.caseParentDirTextField.text=
NewCaseVisualPanel1.caseDirTextField.text_1=
CasePropertiesForm.caseDirLabel.text=\u30B1\u30FC\u30B9\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\uFF1A
CasePropertiesForm.crDateLabel.text=\u4F5C\u6210\u65E5\uFF1A
CasePropertiesForm.caseNameLabel.text=\u30B1\u30FC\u30B9\u540D\uFF1A
CasePropertiesForm.crDateTextField.text=
CasePropertiesForm.caseNameTextField.text=
CasePropertiesForm.updateCaseNameButton.text=\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8
CasePropertiesForm.casePropLabel.text=\u30B1\u30FC\u30B9\u60C5\u5831
CasePropertiesForm.genInfoLabel.text=\u4E00\u822C\u60C5\u5831
CasePropertiesForm.imgInfoLabel.text=\u30A4\u30E1\u30FC\u30B8\u60C5\u5831
CasePropertiesForm.OKButton.text=OK
CasePropertiesForm.deleteCaseButton.text=\u30B1\u30FC\u30B9\u524A\u9664
CueBannerPanel.autopsyLogo.text=
CueBannerPanel.createNewLabel.text=\u65B0\u898F\u30B1\u30FC\u30B9\u4F5C\u6210
CueBannerPanel.openLabel.text=\u65E2\u5B58\u30B1\u30FC\u30B9\u3092\u958B\u304F
CueBannerPanel.closeButton.text=\u9589\u3058\u308B
CueBannerPanel.openRecentLabel.text=\u6700\u8FD1\u958B\u3044\u305F\u30B1\u30FC\u30B9\u3092\u958B\u304F
CueBannerPanel.newCaseButton.text=
CueBannerPanel.openCaseButton.text=
CueBannerPanel.openRecentButton.text=
OpenRecentCasePanel.cancelButton.text=\u30AD\u30E3\u30F3\u30BB\u30EB
OpenRecentCasePanel.jLabel1.text=\u6700\u8FD1\u958B\u3044\u305F\u30D5\u30A1\u30A4\u30EB
CasePropertiesForm.caseNumberLabel.text=\u30B1\u30FC\u30B9\u756A\u53F7\uFF1A
CasePropertiesForm.examinerLabel.text=\u8ABF\u67FB\u62C5\u5F53\u8005\uFF1A
CasePropertiesForm.caseNumberTextField.text=
CasePropertiesForm.examinerTextField.text=
NewCaseVisualPanel2.caseNumberTextField.text=
NewCaseVisualPanel2.examinerLabel.text=\u8ABF\u67FB\u62C5\u5F53\u8005\uFF1A
NewCaseVisualPanel2.caseNumberLabel.text=\u30B1\u30FC\u30B9\u756A\u53F7\uFF1A
NewCaseVisualPanel2.examinerTextField.text=
NewCaseVisualPanel2.optionalLabel.text=\u30AA\u30D7\u30B7\u30E7\u30CA\u30EB\uFF1A\u30B1\u30FC\u30B9\u756A\u53F7\u53CA\u3073\u8ABF\u67FB\u62C5\u5F53\u8005\u3092\u8A2D\u5B9A
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.text=\u30B3\u30D4\u30FC
AddImageErrorsDialog.closeButton.toolTipText=\u3053\u306E\u30A6\u30A3\u30F3\u30C9\u30A6\u3092\u9589\u3058\u307E\u3059
AddImageErrorsDialog.closeButton.text=\u9589\u3058\u308B
OpenRecentCasePanel.openButton.text=\u958B\u304F
ImageFilePanel.pathLabel.text=\u30A4\u30E1\u30FC\u30B8\u30D5\u30A1\u30A4\u30EB\u3092\u95B2\u89A7\uFF1A
ImageFilePanel.browseButton.text=\u95B2\u89A7
ImageFilePanel.pathTextField.text=
LocalDiskPanel.diskLabel.text=\u30ED\u30FC\u30AB\u30EB\u30C7\u30A3\u30B9\u30AF\u3092\u9078\u629E\uFF1A
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
LocalDiskPanel.errorLabel.text=\u30A8\u30E9\u30FC\u30E9\u30D9\u30EB
LocalFilesPanel.infoLabel.text=\u30ED\u30FC\u30AB\u30EB\u30D5\u30A1\u30A4\u30EB\u53CA\u3073\u30D5\u30A9\u30EB\u30C0\u30FC\u3092\u8FFD\u52A0\uFF1A
LocalFilesPanel.selectButton.text=\u8FFD\u52A0
LocalFilesPanel.localFileChooser.dialogTitle=\u30ED\u30FC\u30AB\u30EB\u30D5\u30A1\u30A4\u30EB\u53C8\u306F\u30D5\u30A9\u30EB\u30C0\u30FC\u3092\u9078\u629E
LocalFilesPanel.selectButton.toolTipText=\u30ED\u30FC\u30AB\u30EB\u30D5\u30A1\u30A4\u30EB\u53CA\u3073\u30D5\u30A9\u30EB\u30C0\u30FC\u3092\u30ED\u30B8\u30AB\u30EB\u30D5\u30A1\u30A4\u30EB\u3068\u3057\u3066\u8FFD\u52A0\u3057\u307E\u3059
LocalFilesPanel.clearButton.text=\u30AF\u30EA\u30A2
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.selectedPaths.toolTipText=
LocalFilesPanel.localFileChooser.approveButtonText=\u9078\u629E
LocalFilesPanel.localFileChooser.approveButtonToolTipText=
LocalFilesPanel.selectButton.actionCommand=\u8FFD\u52A0
AddImageWizardIngestConfigVisual.subtitleLabel.text=\u3053\u306E\u30C7\u30FC\u30BF\u30BD\u30FC\u30B9\u306B\u5BFE\u3057\u3066\u5B9F\u884C\u3057\u305F\u3044\u30A4\u30F3\u30B8\u30A7\u30B9\u30C8\u30E2\u30B8\u30E5\u30FC\u30EB\u7FA4\u3092\u8A2D\u5B9A\u3057\u307E\u3059\u3002
AddImageWizardIngestConfigVisual.titleLabel.text=\u30A4\u30F3\u30B8\u30A7\u30B9\u30C8\u30E2\u30B8\u30E5\u30FC\u30EB\u3092\u8A2D\u5B9A
AddImageWizardAddingProgressVisual.statusLabel.text=\u30D5\u30A1\u30A4\u30EB\u30B7\u30B9\u30C6\u30E0\u304C\u30ED\u30FC\u30AB\u30EB\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u306B\u8FFD\u52A0\u3055\u308C\u307E\u3057\u305F\u3002\u30D5\u30A1\u30A4\u30EB\u3092\u89E3\u6790\u4E2D\u3067\u3059\u3002
AddImageWizardChooseDataSourceVisual.typeTabel.text=\u8FFD\u52A0\u3059\u308B\u30BD\u30FC\u30B9\u30BF\u30A4\u30D7\u3092\u9078\u629E\uFF1A
AddImageWizardChooseDataSourceVisual.jLabel2.text=jLabel2
AddImageWizardChooseDataSourceVisual.nextLabel.text=<html> \u300C\u6B21\u3078\u300D\u3092\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u3001\u30A4\u30F3\u30D7\u30C3\u30C8\u30C7\u30FC\u30BF\u3092\u89E3\u6790\u3001\u30DC\u30EA\u30E5\u30FC\u30E0\u53CA\u3073\u30D5\u30A1\u30A4\u30EB\u30B7\u30B9\u30C6\u30E0\u30C7\u30FC\u30BF\u3092\u62BD\u51FA\u3001\u30ED\u30FC\u30AB\u30EB\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u306B\u30C7\u30FC\u30BF\u3092\u6295\u5165\u3002</html>
AddImageWizardChooseDataSourceVisual.imgInfoLabel.text=\u30C7\u30FC\u30BF\u30BD\u30FC\u30B9\u60C5\u5831\u3092\u5165\u529B\uFF1A
AddImageWizardAddingProgressVisual.progressLabel.text=\uFF1C\u30D7\u30ED\u30B0\u30EC\u30B9\uFF1E
AddImageWizardAddingProgressVisual.viewLogButton.text=\u30ED\u30B0\u3092\u8868\u793A
AddImageWizardAddingProgressVisual.titleLabel.text=\u30C7\u30FC\u30BF\u30BD\u30FC\u30B9\u8FFD\u52A0\u4E2D
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.timeZoneLabel.text=\u30A4\u30F3\u30D7\u30C3\u30C8\u30BF\u30A4\u30E0\u30BE\u30FC\u30F3\u3092\u9078\u629E\u3057\u3066\u4E0B\u3055\u3044\uFF1A
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.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\u65B0\u898F\u30BD\u30FC\u30B9\u3092\u4ECA\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}
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
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\u91CD\u5927\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
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=\u73FE\u5728\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.moduleErr=\u30E2\u30B8\u30E5\u30FC\u30EB\u30A8\u30E9\u30FC
Case.changeCase.errListenToCaseUpdates.msg=\u30B1\u30FC\u30B9\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\u3067\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
Case.create.exception.msg=\u30B1\u30FC\u30B9\u4F5C\u6210\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\uFF1A\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA{1}\u306E{0}
Case.open.exception.blankCase.msg=\u30B1\u30FC\u30B9\u540D\u304C\u7A7A\u767D\u3067\u3059\u3002
Case.open.msgDlg.updated.msg=\u30B1\u30FC\u30B9\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u30B9\u30AD\u30FC\u30DE\u3092\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u3057\u307E\u3057\u305F\u3002\
\u4E0B\u8A18\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\
{0}
Case.open.msgDlg.updated.title=\u30B1\u30FC\u30B9\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u30B9\u30AD\u30FC\u30DE\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8
Case.open.exception.checkFile.msg=\u6B63\u3057\u3044\u30B1\u30FC\u30B9\u30D5\u30A1\u30A4\u30EB\u3092\u9078\u629E\u3057\u305F\u304B\u78BA\u8A8D\u3057\u3066\u4E0B\u3055\u3044\uFF08\u901A\u5E38\u62E1\u5F35\u5B50{0}\u3092\u6301\u3064\uFF09
Case.open.exception.gen.msg=\u30B1\u30FC\u30B9\u3092\u958B\u304F\u306E\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F
Case.checkImgExist.confDlg.doesntExist.msg=\u4EE5\u524D\u3001\u30A4\u30E1\u30FC\u30B8\u306F\u4E0B\u8A18\u306B\u3042\u308A\u307E\u3057\u305F\uFF1A\
{1}\
\u4ECA\u5F8C\u3082\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3092\u30D6\u30E9\u30A6\u30BA\u3057\u3001\u30EC\u30DD\u30FC\u30C8\u751F\u6210\u304C\u3067\u304D\u307E\u3059
Case.checkImgExist.confDlg.doesntExist.title=\u30A4\u30E1\u30FC\u30B8\u6B20\u843D
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.closeCase.exception.msg=\u73FE\u5728\u306E\u30B1\u30FC\u30B9\u3092\u9589\u3058\u308B\u6700\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002
Case.deleteCase.exception.msg=\u30B1\u30FC\u30B9\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3092\u524A\u9664\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\uFF1A{0}
Case.deleteCase.exception.msg2=\u30B1\u30FC\u30B9\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3092\u524A\u9664\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\uFF1A{0}
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\u30A2\u30C3\u30D7\u30C7\u30FC\u30BF\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002
Case.updateCaseNum.exception.msg=\u30B1\u30FC\u30B9\u756A\u53F7\u3092\u30A2\u30C3\u30D7\u30C7\u30FC\u30BF\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.cantCreate=\u30B1\u30FC\u30B9\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3092\u4F5C\u6210\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}
Case.createCaseDir.exception.gen=\u30B1\u30FC\u30B9\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\
\u30B1\u30FC\u30B9\u540D\uFF1A {0}\
\u30B1\u30FC\u30B9\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\: {1}
CaseDeleteAction.closeConfMsg.title=\u8B66\u544A\uFF1A\u73FE\u5728\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\
\
\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{0}\u306F\u524A\u9664\u3055\u308C\u307E\u3057\u305F\u3002
CaseOpenAction.autFilter.title={0} \u30B1\u30FC\u30B9\u30D5\u30A1\u30A4\u30EB ( {1})
CaseOpenAction.msgDlg.fileNotExist.msg=\u30A8\u30E9\u30FC\uFF1A\u30D5\u30A1\u30A4\u30EB\u304C\u5B58\u5728\u3057\u307E\u305B\u3093\u3002
CaseOpenAction.msgDlg.fileNotExist.title=\u30A8\u30E9\u30FC
CaseOpenAction.msgDlg.cantOpenCase.msg=\u30A8\u30E9\u30FC\uFF1A\u30D5\u30A9\u30EB\u30C0{0}\: {1}\u306E\u30B1\u30FC\u30B9\u3092\u958B\u3051\u307E\u305B\u3093\u3067\u3057\u305F
CaseOpenAction.msgDlg.cantOpenCase.title=\u30A8\u30E9\u30FC
CasePropertiesAction.window.title=\u30B1\u30FC\u30B9\u30D7\u30ED\u30D1\u30C6\u30A3
CasePropertiesForm.updateCaseName.msgDlg.empty.msg=\u30B1\u30FC\u30B9\u540D\u306F\u7A7A\u767D\u3067\u306F\u3044\u3051\u307E\u305B\u3093\u3002
CasePropertiesForm.updateCaseName.msgDlg.empty.title=\u30A8\u30E9\u30FC
CasePropertiesForm.updateCaseName.msgDlg.invalidSymbols.msg=\u30B1\u30FC\u30B9\u540D\u306B\u306F\u4E0B\u8A18\u306E\u8A18\u53F7\u3092\u542B\u3081\u307E\u305B\u3093\uFF1A\\ / \: * ? " < > |
CasePropertiesForm.updateCaseName.msgDlg.invalidSymbols.title=\u30A8\u30E9\u30FC
CasePropertiesForm.updateCaseName.confMsg.msg=\u30B1\u30FC\u30B9\u540D\u3092"{0}"\u304B\u3089"{1}"\u306B\u672C\u5F53\u306B\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u3057\u307E\u3059\u304B\uFF1F
CasePropertiesForm.updateCaseName.confMsg.title=\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u4F5C\u6210
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\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\u3067\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
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\u3067\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\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\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
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\u3067\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.allDesc.text=\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u308B\u5168\u3066\u306E\u30BF\u30A4\u30D7
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\
\u524D\u306B\u672C\u5F53\u306B\u7D42\u4E86\u3057\u307E\u3059\u304B\uFF1F
MissingImageDialog.confDlg.noFileSel.title=\u6B20\u843D\u30A4\u30E1\u30FC\u30B8
NewCaseVisualPanel1.getName.text=\u30B1\u30FC\u30B9\u60C5\u5831
NewCaseVisualPanel1.caseDirBrowse.selectButton.text=\u9078\u629E
NewCaseVisualPanel2.getName.text=\u4ED8\u52A0\u60C5\u5831
NewCaseWizardAction.closeCurCase.confMsg.msg=\u3053\u306E\u30B1\u30FC\u30B9\u3092\u4FDD\u5B58\u3057\u3001\u9589\u3058\u3066\u3001\u65B0\u898F\u30B1\u30FC\u30B9\u4F5C\u6210\u3092\u5B9F\u884C\u3057\u307E\u3059\u304B\uFF1F
NewCaseWizardAction.closeCurCase.confMsg.title=\u8B66\u544A\uFF1A\u73FE\u5728\u306E\u30B1\u30FC\u30B9\u3092\u9589\u3058\u307E\u3059
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\u4E0B\u8A18\u306E\u8A18\u53F7\u3092\u542B\u3081\u307E\u305B\u3093\uFF1A\\ / \: * ? " < > |
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\
\
\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\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\
\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\
\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\u4F5C\u6210\u30A8\u30E9\u30FC
OpenRecentCasePanel.openCase.msgDlg.caseDoesntExist.msg=\u30A8\u30E9\u30FC\uFF1A\u30B1\u30FC\u30B9{0}\u306F\u5B58\u5728\u3057\u307E\u305B\u3093\u3002
OpenRecentCasePanel.openCase.msgDlg.err=\u30A8\u30E9\u30FC
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\u5B58\u5728\u3057\u307E\u305B\u3093\u3002
RecentItems.openRecentCase.msgDlg.err=\u30A8\u30E9\u30FC
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-
XMLCaseManagement.create.exception.msg=\u30B1\u30FC\u30B9XML\u30D5\u30A1\u30A4\u30EB\u306E\u8A2D\u5B9A\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3001
XMLCaseManagement.writeFile.exception.noCase.msg=\u30DE\u30CD\u30B8\u30E1\u30F3\u30C8\u30D5\u30A1\u30A4\u30EB\u3092\u66F8\u304F\u5FC5\u8981\u304C\u3042\u308B\u30B1\u30FC\u30B9\u304C\u3042\u308A\u307E\u305B\u3093\u3002
XMLCaseManagement.writeFile.exception.errWriteToFile.msg=\u30B1\u30FC\u30B9\u30D5\u30A1\u30A4\u30EB\u3078\u306E\u66F8\u304D\u8FBC\u307F\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F
XMLCaseManagement.open.exception.errReadXMLFile.msg=\u30B1\u30FC\u30B9XML\u30D5\u30A1\u30A4\u30EB\u306E\u8AAD\u307F\u53D6\u308A\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u3042\u308A\u307E\u3057\u305F\uFF1A{0}
XMLCaseManagement.open.msgDlg.notAutCase.msg=\u30A8\u30E9\u30FC\uFF1AAutopsy\u8A2D\u5B9A\u30D5\u30A1\u30A4\u30EB("{0}")\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002\
\
\u8A73\u7D30\uFF1A\
Autopsy\u8A2D\u5B9A\u30D5\u30A1\u30A4\u30EB\u4EE5\u5916(at {1})\u306F\u958B\u3051\u307E\u305B\u3093\u3002
XMLCaseManagement.open.msgDlg.notAutCase.title=\u30A8\u30E9\u30FC
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

View File

@ -37,8 +37,9 @@ import java.util.TimeZone;
import java.util.logging.Level; import java.util.logging.Level;
import javax.swing.JOptionPane; import javax.swing.JOptionPane;
import javax.swing.SwingUtilities; import javax.swing.SwingUtilities;
import org.openide.util.Exceptions;
import org.openide.util.Lookup; import org.openide.util.Lookup;
import org.openide.util.NbBundle;
import org.openide.util.actions.CallableSystemAction; import org.openide.util.actions.CallableSystemAction;
import org.openide.util.actions.SystemAction; import org.openide.util.actions.SystemAction;
import org.openide.windows.WindowManager; import org.openide.windows.WindowManager;
@ -61,47 +62,7 @@ public class Case implements SleuthkitCase.ErrorObserver {
private static final String autopsyVer = Version.getVersion(); // current version of autopsy. Change it when the version is changed private static final String autopsyVer = Version.getVersion(); // current version of autopsy. Change it when the version is changed
private static String appName = null; private static String appName = null;
/**
* Property name that indicates the name of the current case has changed.
* When a case is opened, "old name" is empty string and "new name" is the name.
* When a case is closed, "old name" is the case name and "new name" is empty string.
* When a case is renamed, "old name" has the original name and "new name" has the new name.
*/
public static final String CASE_NAME = "caseName";
/**
* Property name that indicates the number of the current case has changed.
* Fired with the case number is changed. The value is an int: the number of
* the case. -1 is used for no case number set.
*/
public static final String CASE_NUMBER = "caseNumber";
/**
* Property name that indicates the examiner of the current case has
* changed. Fired with the case examiner is changed. The value is a String:
* the name of the examiner. The empty string ("") is used for no examiner
* set.
*/
public static final String CASE_EXAMINER = "caseExaminer";
/**
* Property name that indicates a new data source (image, disk or local
* file) has been added to the current case. The new value is the
* newly-added instance of the new data source, and the old value is always
* null.
*/
public static final String CASE_ADD_DATA_SOURCE = "addDataSource";
/**
* Property name that indicates a data source has been removed from the
* current case. The "old value" is the (int) content ID of the data source
* that was removed, the new value is the instance of the data source.
*/
public static final String CASE_DEL_DATA_SOURCE = "removeDataSource";
/**
* Property name that indicates the currently open case has changed.
* When a case is opened, the "new value" will be an instance of the opened
* Case object and the "old value" will be null.
* When a case is closed, the "new value" will be null and the "old value"
* will be the instance of the Case object being closed.
*/
public static final String CASE_CURRENT_CASE = "currentCase";
/** /**
* Name for the property that determines whether to show the dialog at * Name for the property that determines whether to show the dialog at
* startup * startup
@ -114,69 +75,53 @@ public class Case implements SleuthkitCase.ErrorObserver {
* Events that the case module will fire. Event listeners can get the event * Events that the case module will fire. Event listeners can get the event
* name by using String returned by toString() method on a specific event. * name by using String returned by toString() method on a specific event.
*/ */
/* @@@ BC: I added this as a place holder for what I want this to be, but public enum Events {
* this is not the time to change it. We'll start using this at a major release
* version.
*/
private enum CaseModuleEvent_DoNotUse {
/** /**
* Property name that indicates the name of the current case has changed. * Property name that indicates the name of the current case has
* Fired with the case is renamed, and when the current case is * changed. When a case is opened, "old name" is empty string and "new
* opened/closed/changed. The value is a String: the name of the case. The * name" is the name. When a case is closed, "old name" is the case name
* empty string ("") is used for no open case. * and "new name" is empty string. When a case is renamed, "old name"
* has the original name and "new name" has the new name.
*/ */
// @@@ BC: I propose that this is no longer called for case open/close. // @@@ BC: I propose that this is no longer called for case open/close.
CASE_NAME("caseName"), NAME,
/** /**
* Property name that indicates the number of the current case has changed. * Property name that indicates the number of the current case has
* Fired with the case number is changed. The value is an int: the number of * changed. Fired with the case number is changed. The value is an int:
* the case. -1 is used for no case number set. * the number of the case. -1 is used for no case number set.
*/ */
CASE_NUMBER("caseNumber"), NUMBER,
/** /**
* Property name that indicates the examiner of the current case has * Property name that indicates the examiner of the current case has
* changed. Fired with the case examiner is changed. The value is a String: * changed. Fired with the case examiner is changed. The value is a
* the name of the examiner. The empty string ("") is used for no examiner * String: the name of the examiner. The empty string ("") is used for
* set. * no examiner set.
*/ */
CASE_EXAMINER("caseExaminer"), EXAMINER,
/** /**
* Property name that indicates a new data source (image, disk or local * Property name that indicates a new data source (image, disk or local
* file) has been added to the current case. The new value is the * file) has been added to the current case. The new value is the
* newly-added instance of the new data source, and the old value is always * newly-added instance of the new data source, and the old value is
* null. * always null.
*/ */
CASE_ADD_DATA_SOURCE("addDataSource"), DATA_SOURCE_ADDED,
/** /**
* Property name that indicates a data source has been removed from the * Property name that indicates a data source has been removed from the
* current case. The "old value" is the (int) content ID of the data source * current case. The "old value" is the (int) content ID of the data
* that was removed, the new value is the instance of the data source. * source that was removed, the new value is the instance of the data
* source.
*/ */
CASE_DEL_DATA_SOURCE("removeDataSource"), DATA_SOURCE_DELETED,
/** /**
* Property name that indicates the currently open case has changed. The new * Property name that indicates the currently open case has changed.
* value is the instance of the opened Case, or null if there is no open * When a case is opened, the "new value" will be an instance of the
* case. The old value is the instance of the closed Case, or null if there * opened Case object and the "old value" will be null. When a case is
* was no open case. * closed, the "new value" will be null and the "old value" will be the
* instance of the Case object being closed.
*/ */
CASE_CURRENT_CASE("currentCase"); CURRENT_CASE;
private String name;
CaseModuleEvent_DoNotUse(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
}; };
private String name; private String name;
private String number; private String number;
private String examiner; private String examiner;
@ -215,7 +160,7 @@ public class Case implements SleuthkitCase.ErrorObserver {
if (currentCase != null) { if (currentCase != null) {
return currentCase; return currentCase;
} else { } else {
throw new IllegalStateException("Can't get the current case; there is no case open!"); throw new IllegalStateException(NbBundle.getMessage(Case.class, "Case.getCurCase.exception.noneOpen"));
} }
} }
@ -244,20 +189,26 @@ public class Case implements SleuthkitCase.ErrorObserver {
doCaseChange(null); //closes windows, etc doCaseChange(null); //closes windows, etc
try { try {
pcs.firePropertyChange(CASE_CURRENT_CASE, oldCase, null); pcs.firePropertyChange(Events.CURRENT_CASE.toString(), oldCase, null);
} }
catch (Exception e) { catch (Exception e) {
logger.log(Level.SEVERE, "Case listener threw exception", e); logger.log(Level.SEVERE, "Case listener threw exception", e);
MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to Case updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); MessageNotifyUtil.Notify.show(NbBundle.getMessage(Case.class, "Case.moduleErr"),
NbBundle.getMessage(Case.class,
"Case.changeCase.errListenToCaseUpdates.msg"),
MessageNotifyUtil.MessageType.ERROR);
} }
doCaseNameChange(""); doCaseNameChange("");
try { try {
pcs.firePropertyChange(CASE_NAME, oldCase.name, ""); pcs.firePropertyChange(Events.NAME.toString(), oldCase.name, "");
} }
catch (Exception e) { catch (Exception e) {
logger.log(Level.SEVERE, "Case listener threw exception", e); logger.log(Level.SEVERE, "Case listener threw exception", e);
MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to Case updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); MessageNotifyUtil.Notify.show(NbBundle.getMessage(Case.class, "Case.moduleErr"),
NbBundle.getMessage(Case.class,
"Case.changeCase.errListenToCaseUpdates.msg"),
MessageNotifyUtil.MessageType.ERROR);
} }
} }
@ -266,21 +217,27 @@ public class Case implements SleuthkitCase.ErrorObserver {
try { try {
pcs.firePropertyChange(CASE_CURRENT_CASE, null, currentCase); pcs.firePropertyChange(Events.CURRENT_CASE.toString(), null, currentCase);
} }
catch (Exception e) { catch (Exception e) {
logger.log(Level.SEVERE, "Case listener threw exception", e); logger.log(Level.SEVERE, "Case listener threw exception", e);
MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to Case updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); MessageNotifyUtil.Notify.show(NbBundle.getMessage(Case.class, "Case.moduleErr"),
NbBundle.getMessage(Case.class,
"Case.changeCase.errListenToCaseUpdates.msg"),
MessageNotifyUtil.MessageType.ERROR);
} }
doCaseChange(currentCase); doCaseChange(currentCase);
try { try {
pcs.firePropertyChange(CASE_NAME, "", currentCase.name); pcs.firePropertyChange(Events.NAME.toString(), "", currentCase.name);
} }
catch (Exception e) { catch (Exception e) {
logger.log(Level.SEVERE, "Case threw exception", e); logger.log(Level.SEVERE, "Case threw exception", e);
MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to Case updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); MessageNotifyUtil.Notify.show(NbBundle.getMessage(Case.class, "Case.moduleErr"),
NbBundle.getMessage(Case.class,
"Case.changeCase.errListenToCaseUpdates.msg"),
MessageNotifyUtil.MessageType.ERROR);
} }
doCaseNameChange(currentCase.name); doCaseNameChange(currentCase.name);
@ -323,7 +280,8 @@ public class Case implements SleuthkitCase.ErrorObserver {
db = SleuthkitCase.newCase(dbPath); db = SleuthkitCase.newCase(dbPath);
} catch (TskCoreException ex) { } catch (TskCoreException ex) {
logger.log(Level.SEVERE, "Error creating a case: " + caseName + " in dir " + caseDir, ex); logger.log(Level.SEVERE, "Error creating a case: " + caseName + " in dir " + caseDir, ex);
throw new CaseActionException("Error creating a case: " + caseName + " in dir " + caseDir, ex); throw new CaseActionException(
NbBundle.getMessage(Case.class, "Case.create.exception.msg", caseName, caseDir), ex);
} }
Case newCase = new Case(caseName, caseNumber, examiner, configFilePath, xmlcm, db); Case newCase = new Case(caseName, caseNumber, examiner, configFilePath, xmlcm, db);
@ -352,14 +310,18 @@ public class Case implements SleuthkitCase.ErrorObserver {
String examiner = xmlcm.getCaseExaminer(); String examiner = xmlcm.getCaseExaminer();
// if the caseName is "", case / config file can't be opened // if the caseName is "", case / config file can't be opened
if (caseName.equals("")) { if (caseName.equals("")) {
throw new CaseActionException("Case name is blank."); throw new CaseActionException(NbBundle.getMessage(Case.class, "Case.open.exception.blankCase.msg"));
} }
String caseDir = xmlcm.getCaseDirectory(); String caseDir = xmlcm.getCaseDirectory();
String dbPath = caseDir + File.separator + "autopsy.db"; String dbPath = caseDir + File.separator + "autopsy.db";
SleuthkitCase db = SleuthkitCase.openCase(dbPath); SleuthkitCase db = SleuthkitCase.openCase(dbPath);
if (null != db.getBackupDatabasePath()) { if (null != db.getBackupDatabasePath()) {
JOptionPane.showMessageDialog(null, "Updated case database schema.\nA backup copy of the database with the following path has been made:\n " + db.getBackupDatabasePath(), "Case Database Schema Update", JOptionPane.INFORMATION_MESSAGE); JOptionPane.showMessageDialog(null,
NbBundle.getMessage(Case.class, "Case.open.msgDlg.updated.msg",
db.getBackupDatabasePath()),
NbBundle.getMessage(Case.class, "Case.open.msgDlg.updated.title"),
JOptionPane.INFORMATION_MESSAGE);
} }
checkImagesExist(db); checkImagesExist(db);
@ -374,10 +336,10 @@ public class Case implements SleuthkitCase.ErrorObserver {
CaseCloseAction closeCase = SystemAction.get(CaseCloseAction.class); CaseCloseAction closeCase = SystemAction.get(CaseCloseAction.class);
closeCase.actionPerformed(null); closeCase.actionPerformed(null);
if (!configFilePath.endsWith(CASE_DOT_EXTENSION)) { if (!configFilePath.endsWith(CASE_DOT_EXTENSION)) {
throw new CaseActionException("Check that you selected the correct case file (usually with " throw new CaseActionException(
+ CASE_DOT_EXTENSION + " extension)", ex); NbBundle.getMessage(Case.class, "Case.open.exception.checkFile.msg", CASE_DOT_EXTENSION), ex);
} else { } else {
throw new CaseActionException("Error opening the case", ex); throw new CaseActionException(NbBundle.getMessage(Case.class, "Case.open.exception.gen.msg"), ex);
} }
} }
} }
@ -408,11 +370,13 @@ public class Case implements SleuthkitCase.ErrorObserver {
boolean fileExists = (pathExists(path) boolean fileExists = (pathExists(path)
|| driveExists(path)); || driveExists(path));
if (!fileExists) { if (!fileExists) {
int ret = JOptionPane.showConfirmDialog(null, appName + " has detected that one of the images associated with \n" int ret = JOptionPane.showConfirmDialog(null,
+ "this case are missing. Would you like to search for them now?\n" NbBundle.getMessage(Case.class,
+ "Previously, the image was located at:\n" + path "Case.checkImgExist.confDlg.doesntExist.msg",
+ "\nPlease note that you will still be able to browse directories and generate reports\n" appName, path),
+ "if you choose No, but you will not be able to view file content or run the ingest process.", "Missing Image", JOptionPane.YES_NO_OPTION); NbBundle.getMessage(Case.class,
"Case.checkImgExist.confDlg.doesntExist.title"),
JOptionPane.YES_NO_OPTION);
if (ret == JOptionPane.YES_OPTION) { if (ret == JOptionPane.YES_OPTION) {
MissingImageDialog.makeDialog(obj_id, db); MissingImageDialog.makeDialog(obj_id, db);
@ -441,16 +405,19 @@ public class Case implements SleuthkitCase.ErrorObserver {
Image newImage = db.getImageById(imgId); Image newImage = db.getImageById(imgId);
try { try {
pcs.firePropertyChange(CASE_ADD_DATA_SOURCE, null, newImage); // the new value is the instance of the image pcs.firePropertyChange(Events.DATA_SOURCE_ADDED.toString(), null, newImage); // the new value is the instance of the image
} }
catch (Exception e) { catch (Exception e) {
logger.log(Level.SEVERE, "Case listener threw exception", e); logger.log(Level.SEVERE, "Case listener threw exception", e);
MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to Case updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); MessageNotifyUtil.Notify.show(NbBundle.getMessage(this.getClass(), "Case.moduleErr"),
NbBundle.getMessage(this.getClass(),
"Case.changeCase.errListenToCaseUpdates.msg"),
MessageNotifyUtil.MessageType.ERROR);
} }
CoreComponentControl.openCoreWindows(); CoreComponentControl.openCoreWindows();
return newImage; return newImage;
} catch (Exception ex) { } catch (Exception ex) {
throw new CaseActionException("Error adding image to the case", ex); throw new CaseActionException(NbBundle.getMessage(this.getClass(), "Case.addImg.exception.msg"), ex);
} }
} }
@ -475,11 +442,14 @@ public class Case implements SleuthkitCase.ErrorObserver {
void notifyNewDataSource(Content newDataSource) { void notifyNewDataSource(Content newDataSource) {
try { try {
pcs.firePropertyChange(CASE_ADD_DATA_SOURCE, null, newDataSource); pcs.firePropertyChange(Events.DATA_SOURCE_ADDED.toString(), null, newDataSource);
} }
catch (Exception e) { catch (Exception e) {
logger.log(Level.SEVERE, "Case threw exception", e); logger.log(Level.SEVERE, "Case threw exception", e);
MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to Case updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); MessageNotifyUtil.Notify.show(NbBundle.getMessage(this.getClass(), "Case.moduleErr"),
NbBundle.getMessage(this.getClass(),
"Case.changeCase.errListenToCaseUpdates.msg"),
MessageNotifyUtil.MessageType.ERROR);
} }
CoreComponentControl.openCoreWindows(); CoreComponentControl.openCoreWindows();
} }
@ -512,7 +482,7 @@ public class Case implements SleuthkitCase.ErrorObserver {
this.xmlcm.close(); // close the xmlcm this.xmlcm.close(); // close the xmlcm
this.db.close(); this.db.close();
} catch (Exception e) { } catch (Exception e) {
throw new CaseActionException("Error while trying to close the current case.", e); throw new CaseActionException(NbBundle.getMessage(this.getClass(), "Case.closeCase.exception.msg"), e);
} }
} }
@ -534,11 +504,13 @@ public class Case implements SleuthkitCase.ErrorObserver {
RecentCases.getInstance().removeRecentCase(this.name, this.configFilePath); // remove it from the recent case RecentCases.getInstance().removeRecentCase(this.name, this.configFilePath); // remove it from the recent case
Case.changeCase(null); Case.changeCase(null);
if (result == false) { if (result == false) {
throw new CaseActionException("Error deleting the case dir: " + caseDir); throw new CaseActionException(
NbBundle.getMessage(this.getClass(), "Case.deleteCase.exception.msg", caseDir));
} }
} catch (Exception ex) { } catch (Exception ex) {
logger.log(Level.SEVERE, "Error deleting the current case dir: " + caseDir, ex); logger.log(Level.SEVERE, "Error deleting the current case dir: " + caseDir, ex);
throw new CaseActionException("Error deleting the case dir: " + caseDir, ex); throw new CaseActionException(
NbBundle.getMessage(this.getClass(), "Case.deleteCase.exception.msg2", caseDir), ex);
} }
} }
@ -556,16 +528,19 @@ public class Case implements SleuthkitCase.ErrorObserver {
name = newCaseName; // change the local value name = newCaseName; // change the local value
RecentCases.getInstance().updateRecentCase(oldCaseName, oldPath, newCaseName, newPath); // update the recent case RecentCases.getInstance().updateRecentCase(oldCaseName, oldPath, newCaseName, newPath); // update the recent case
try { try {
pcs.firePropertyChange(CASE_NAME, oldCaseName, newCaseName); pcs.firePropertyChange(Events.NAME.toString(), oldCaseName, newCaseName);
} }
catch (Exception e) { catch (Exception e) {
logger.log(Level.SEVERE, "Case listener threw exception", e); logger.log(Level.SEVERE, "Case listener threw exception", e);
MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to Case updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); MessageNotifyUtil.Notify.show(NbBundle.getMessage(this.getClass(), "Case.moduleErr"),
NbBundle.getMessage(this.getClass(),
"Case.changeCase.errListenToCaseUpdates.msg"),
MessageNotifyUtil.MessageType.ERROR);
} }
doCaseNameChange(newCaseName); doCaseNameChange(newCaseName);
} catch (Exception e) { } catch (Exception e) {
throw new CaseActionException("Error while trying to update the case name.", e); throw new CaseActionException(NbBundle.getMessage(this.getClass(), "Case.updateCaseName.exception.msg"), e);
} }
} }
@ -580,14 +555,17 @@ public class Case implements SleuthkitCase.ErrorObserver {
xmlcm.setCaseExaminer(newExaminer); // set the examiner xmlcm.setCaseExaminer(newExaminer); // set the examiner
examiner = newExaminer; examiner = newExaminer;
try { try {
pcs.firePropertyChange(CASE_EXAMINER, oldExaminer, newExaminer); pcs.firePropertyChange(Events.EXAMINER.toString(), oldExaminer, newExaminer);
} }
catch (Exception e) { catch (Exception e) {
logger.log(Level.SEVERE, "Case listener threw exception", e); logger.log(Level.SEVERE, "Case listener threw exception", e);
MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to Case updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); MessageNotifyUtil.Notify.show(NbBundle.getMessage(this.getClass(), "Case.moduleErr"),
NbBundle.getMessage(this.getClass(),
"Case.changeCase.errListenToCaseUpdates.msg"),
MessageNotifyUtil.MessageType.ERROR);
} }
} catch (Exception e) { } catch (Exception e) {
throw new CaseActionException("Error while trying to update the examiner.", e); throw new CaseActionException(NbBundle.getMessage(this.getClass(), "Case.updateExaminer.exception.msg"), e);
} }
} }
@ -603,14 +581,17 @@ public class Case implements SleuthkitCase.ErrorObserver {
number = newCaseNumber; number = newCaseNumber;
try { try {
pcs.firePropertyChange(CASE_NUMBER, oldCaseNumber, newCaseNumber); pcs.firePropertyChange(Events.NUMBER.toString(), oldCaseNumber, newCaseNumber);
} }
catch (Exception e) { catch (Exception e) {
logger.log(Level.SEVERE, "Case listener threw exception", e); logger.log(Level.SEVERE, "Case listener threw exception", e);
MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to Case updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); MessageNotifyUtil.Notify.show(NbBundle.getMessage(this.getClass(), "Case.moduleErr"),
NbBundle.getMessage(this.getClass(),
"Case.changeCase.errListenToCaseUpdates.msg"),
MessageNotifyUtil.MessageType.ERROR);
} }
} catch (Exception e) { } catch (Exception e) {
throw new CaseActionException("Error while trying to update the case number.", e); throw new CaseActionException(NbBundle.getMessage(this.getClass(), "Case.updateCaseNum.exception.msg"), e);
} }
} }
@ -820,7 +801,7 @@ public class Case implements SleuthkitCase.ErrorObserver {
try { try {
return db.getRootObjects(); return db.getRootObjects();
} catch (TskException ex) { } catch (TskException ex) {
throw new RuntimeException("Error getting root objects.", ex); throw new RuntimeException(NbBundle.getMessage(this.getClass(), "Case.exception.errGetRootObj"), ex);
} }
} }
@ -975,16 +956,19 @@ public class Case implements SleuthkitCase.ErrorObserver {
File caseDirF = new File(caseDir); File caseDirF = new File(caseDir);
if (caseDirF.exists()) { if (caseDirF.exists()) {
if (caseDirF.isFile()) { if (caseDirF.isFile()) {
throw new CaseActionException("Cannot create case dir, already exists and is not a directory: " + caseDir); throw new CaseActionException(
NbBundle.getMessage(Case.class, "Case.createCaseDir.exception.existNotDir", caseDir));
} else if (!caseDirF.canRead() || !caseDirF.canWrite()) { } else if (!caseDirF.canRead() || !caseDirF.canWrite()) {
throw new CaseActionException("Cannot create case dir, already exists and cannot read/write: " + caseDir); throw new CaseActionException(
NbBundle.getMessage(Case.class, "Case.createCaseDir.exception.existCantRW", caseDir));
} }
} }
try { try {
boolean result = (caseDirF).mkdirs(); // create root case Directory boolean result = (caseDirF).mkdirs(); // create root case Directory
if (result == false) { if (result == false) {
throw new CaseActionException("Cannot create case dir: " + caseDir); throw new CaseActionException(
NbBundle.getMessage(Case.class, "Case.createCaseDir.exception.cantCreate", caseDir));
} }
// create the folders inside the case directory // create the folders inside the case directory
@ -994,17 +978,21 @@ public class Case implements SleuthkitCase.ErrorObserver {
&& (new File(caseDir + File.separator + XMLCaseManagement.CACHE_FOLDER_RELPATH)).mkdir(); && (new File(caseDir + File.separator + XMLCaseManagement.CACHE_FOLDER_RELPATH)).mkdir();
if (result == false) { if (result == false) {
throw new CaseActionException("Could not create case directory: " + caseDir); throw new CaseActionException(
NbBundle.getMessage(Case.class, "Case.createCaseDir.exception.cantCreateCaseDir", caseDir));
} }
final String modulesOutDir = caseDir + File.separator + getModulesOutputDirRelPath(); final String modulesOutDir = caseDir + File.separator + getModulesOutputDirRelPath();
result = new File(modulesOutDir).mkdir(); result = new File(modulesOutDir).mkdir();
if (result == false) { if (result == false) {
throw new CaseActionException("Could not create modules output directory: " + modulesOutDir); throw new CaseActionException(
NbBundle.getMessage(Case.class, "Case.createCaseDir.exception.cantCreateModDir",
modulesOutDir));
} }
} catch (Exception e) { } catch (Exception e) {
throw new CaseActionException("Could not create case directory: " + caseDir, e); throw new CaseActionException(
NbBundle.getMessage(Case.class, "Case.createCaseDir.exception.gen", caseDir), e);
} }
} }

View File

@ -99,8 +99,11 @@ import org.openide.util.actions.CallableSystemAction;
} }
else{ else{
// show the confirmation first to close the current case and open the "New Case" wizard panel // show the confirmation first to close the current case and open the "New Case" wizard panel
String closeCurrentCase = "Are you sure want to close and delete this case? \n Case Name: " + caseName + "\n Case Directory: "+ caseFolder.getPath(); String closeCurrentCase = NbBundle.getMessage(this.getClass(), "CaseDeleteAction.closeConfMsg.text", caseName, caseFolder.getPath());
NotifyDescriptor d = new NotifyDescriptor.Confirmation(closeCurrentCase, "Warning: Closing the Current Case", NotifyDescriptor.YES_NO_OPTION, NotifyDescriptor.WARNING_MESSAGE); NotifyDescriptor d = new NotifyDescriptor.Confirmation(closeCurrentCase,
NbBundle.getMessage(this.getClass(),
"CaseDeleteAction.closeConfMsg.title"),
NotifyDescriptor.YES_NO_OPTION, NotifyDescriptor.WARNING_MESSAGE);
d.setValue(NotifyDescriptor.NO_OPTION); d.setValue(NotifyDescriptor.NO_OPTION);
Object res = DialogDisplayer.getDefault().notify(d); Object res = DialogDisplayer.getDefault().notify(d);
@ -116,11 +119,18 @@ import org.openide.util.actions.CallableSystemAction;
// show notification whether the case has been deleted or it failed to delete... // show notification whether the case has been deleted or it failed to delete...
if(!success){ if(!success){
JOptionPane.showMessageDialog(caller, "The delete action can't be fully completed because the folder or file in it is open by another program.\n \nClose the folder and file and try again or you can delete the case manually.", "Error: Folder In Use", JOptionPane.ERROR_MESSAGE); // throw an error JOptionPane.showMessageDialog(caller,
NbBundle.getMessage(this.getClass(),
"CaseDeleteAction.msgDlg.fileInUse.msg"),
NbBundle.getMessage(this.getClass(),
"CaseDeleteAction.msgDlg.fileInUse.title"),
JOptionPane.ERROR_MESSAGE); // throw an error
} }
else{ else{
CasePropertiesAction.closeCasePropertiesWindow(); // because the "Delete Case" button is in the "CaseProperties" window, we have to close that window when we delete the case. CasePropertiesAction.closeCasePropertiesWindow(); // because the "Delete Case" button is in the "CaseProperties" window, we have to close that window when we delete the case.
JOptionPane.showMessageDialog(caller, "Case " + caseName + " has been deleted."); JOptionPane.showMessageDialog(caller, NbBundle.getMessage(this.getClass(),
"CaseDeleteAction.msgDlg.caseDelete.msg",
caseName));
} }
} }
} }

View File

@ -22,15 +22,17 @@ import java.awt.Component;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import java.io.File; import java.io.File;
import java.util.Collections;
import java.util.logging.Level; import java.util.logging.Level;
import javax.swing.JFileChooser; import javax.swing.JFileChooser;
import javax.swing.JOptionPane; import javax.swing.JOptionPane;
import javax.swing.filechooser.FileFilter; import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileNameExtensionFilter; import javax.swing.filechooser.FileNameExtensionFilter;
import org.openide.util.NbBundle;
import org.openide.util.lookup.ServiceProvider; import org.openide.util.lookup.ServiceProvider;
import org.sleuthkit.autopsy.coreutils.ModuleSettings; import org.sleuthkit.autopsy.coreutils.ModuleSettings;
import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.autopsy.coreutils.Version;
/** /**
* The action to open a existing case. This class is always enabled. * The action to open a existing case. This class is always enabled.
@ -47,8 +49,9 @@ public final class CaseOpenAction implements ActionListener {
* The constructor * The constructor
*/ */
public CaseOpenAction() { public CaseOpenAction() {
autFilter = new FileNameExtensionFilter(org.sleuthkit.autopsy.coreutils.Version.getName() autFilter = new FileNameExtensionFilter(
+ " Case File ( " + Case.CASE_DOT_EXTENSION + ")", NbBundle.getMessage(CaseOpenAction.class, "CaseOpenAction.autFilter.title", Version.getName(),
Case.CASE_DOT_EXTENSION),
Case.CASE_EXTENSION); Case.CASE_EXTENSION);
fc.setDragEnabled(false); fc.setDragEnabled(false);
fc.setFileSelectionMode(JFileChooser.FILES_ONLY); fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
@ -80,7 +83,12 @@ public final class CaseOpenAction implements ActionListener {
ModuleSettings.setConfigSetting(ModuleSettings.MAIN_SETTINGS, PROP_BASECASE, dirPath.substring(0, dirPath.lastIndexOf(File.separator))); ModuleSettings.setConfigSetting(ModuleSettings.MAIN_SETTINGS, PROP_BASECASE, dirPath.substring(0, dirPath.lastIndexOf(File.separator)));
// check if the file exists // check if the file exists
if (!new File(path).exists()) { if (!new File(path).exists()) {
JOptionPane.showMessageDialog(null, "Error: File doesn't exist.", "Error", JOptionPane.ERROR_MESSAGE); JOptionPane.showMessageDialog(null,
NbBundle.getMessage(this.getClass(),
"CaseOpenAction.msgDlg.fileNotExist.msg"),
NbBundle.getMessage(this.getClass(),
"CaseOpenAction.msgDlg.fileNotExist.title"),
JOptionPane.ERROR_MESSAGE);
this.actionPerformed(e); // show the dialog box again this.actionPerformed(e); // show the dialog box again
} else { } else {
// try to close Startup window if there's one // try to close Startup window if there's one
@ -93,8 +101,13 @@ public final class CaseOpenAction implements ActionListener {
try { try {
Case.open(path); // open the case Case.open(path); // open the case
} catch (CaseActionException ex) { } catch (CaseActionException ex) {
JOptionPane.showMessageDialog(null, "Error: could not open the case in folder " + path JOptionPane.showMessageDialog(null,
+ ": " + ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE); NbBundle.getMessage(this.getClass(),
"CaseOpenAction.msgDlg.cantOpenCase.msg", path,
ex.getMessage()),
NbBundle.getMessage(this.getClass(),
"CaseOpenAction.msgDlg.cantOpenCase.title"),
JOptionPane.ERROR_MESSAGE);
logger.log(Level.WARNING, "Error opening case in folder " + path, ex); logger.log(Level.WARNING, "Error opening case in folder " + path, ex);
StartupWindowProvider.getInstance().open(); StartupWindowProvider.getInstance().open();

View File

@ -62,7 +62,7 @@ import org.sleuthkit.autopsy.coreutils.Logger;
try { try {
// create the popUp window for it // create the popUp window for it
String title = "Case Properties"; String title = NbBundle.getMessage(this.getClass(), "CasePropertiesAction.window.title");
final JFrame frame = new JFrame(title); final JFrame frame = new JFrame(title);
popUpWindow = new JDialog(frame, title, true); // to make the popUp Window to be modal popUpWindow = new JDialog(frame, title, true); // to make the popUp Window to be modal

View File

@ -27,9 +27,10 @@ package org.sleuthkit.autopsy.casemodule;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import java.io.File; import java.io.File;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.logging.Level; import java.util.logging.Level;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.Logger;
import javax.swing.JOptionPane; import javax.swing.JOptionPane;
import javax.swing.JPanel; import javax.swing.JPanel;
@ -365,7 +366,12 @@ class CasePropertiesForm extends javax.swing.JPanel{
// check if the case name is empty // check if the case name is empty
if(newCaseName.trim().equals("")){ if(newCaseName.trim().equals("")){
JOptionPane.showMessageDialog(caller, "The caseName cannot be empty.", "Error", JOptionPane.ERROR_MESSAGE); JOptionPane.showMessageDialog(caller,
NbBundle.getMessage(this.getClass(),
"CasePropertiesForm.updateCaseName.msgDlg.empty.msg"),
NbBundle.getMessage(this.getClass(),
"CasePropertiesForm.updateCaseName.msgDlg.empty.title"),
JOptionPane.ERROR_MESSAGE);
} }
else{ else{
// check if case Name contain one of this following symbol: // check if case Name contain one of this following symbol:
@ -373,13 +379,22 @@ class CasePropertiesForm extends javax.swing.JPanel{
if(newCaseName.contains("\\") || newCaseName.contains("/") || newCaseName.contains(":") || if(newCaseName.contains("\\") || newCaseName.contains("/") || newCaseName.contains(":") ||
newCaseName.contains("*") || newCaseName.contains("?") || newCaseName.contains("\"") || newCaseName.contains("*") || newCaseName.contains("?") || newCaseName.contains("\"") ||
newCaseName.contains("<") || newCaseName.contains(">") || newCaseName.contains("|")){ newCaseName.contains("<") || newCaseName.contains(">") || newCaseName.contains("|")){
String errorMsg = "The Case Name cannot contain any of this following symbol: \\ / : * ? \" < > |"; String errorMsg = NbBundle
JOptionPane.showMessageDialog(caller, errorMsg, "Error", JOptionPane.ERROR_MESSAGE); .getMessage(this.getClass(), "CasePropertiesForm.updateCaseName.msgDlg.invalidSymbols.msg");
JOptionPane.showMessageDialog(caller, errorMsg,
NbBundle.getMessage(this.getClass(),
"CasePropertiesForm.updateCaseName.msgDlg.invalidSymbols.title"),
JOptionPane.ERROR_MESSAGE);
} }
else{ else{
// ask for the confirmation first // ask for the confirmation first
String confMsg = "Are you sure want to update the case name from \"" + oldCaseName + "\" to \"" + newCaseName + "\"?"; String confMsg = NbBundle
NotifyDescriptor d = new NotifyDescriptor.Confirmation(confMsg, "Create directory", NotifyDescriptor.YES_NO_OPTION, NotifyDescriptor.WARNING_MESSAGE); .getMessage(this.getClass(), "CasePropertiesForm.updateCaseName.confMsg.msg", oldCaseName,
newCaseName);
NotifyDescriptor d = new NotifyDescriptor.Confirmation(confMsg,
NbBundle.getMessage(this.getClass(),
"CasePropertiesForm.updateCaseName.confMsg.title"),
NotifyDescriptor.YES_NO_OPTION, NotifyDescriptor.WARNING_MESSAGE);
d.setValue(NotifyDescriptor.NO_OPTION); d.setValue(NotifyDescriptor.NO_OPTION);
Object res = DialogDisplayer.getDefault().notify(d); Object res = DialogDisplayer.getDefault().notify(d);

View File

@ -29,13 +29,14 @@ import javax.swing.JDialog;
import javax.swing.JFrame; import javax.swing.JFrame;
import javax.swing.JPanel; import javax.swing.JPanel;
import org.openide.util.Lookup; import org.openide.util.Lookup;
import org.openide.util.NbBundle;
/** /**
* *
*/ */
public class CueBannerPanel extends javax.swing.JPanel { public class CueBannerPanel extends javax.swing.JPanel {
final private static String title = "Open Recent Case"; final private static String title = NbBundle.getMessage(CueBannerPanel.class, "CueBannerPanel.title.text");
final private static JFrame frame = new JFrame(title); final private static JFrame frame = new JFrame(title);
final static JDialog recentCasesWindow = new JDialog(frame, title, true); // to make the popUp Window to be modal final static JDialog recentCasesWindow = new JDialog(frame, title, true); // to make the popUp Window to be modal

View File

@ -19,6 +19,8 @@
package org.sleuthkit.autopsy.casemodule; package org.sleuthkit.autopsy.casemodule;
import org.openide.util.NbBundle;
import java.io.File; import java.io.File;
import java.util.List; import java.util.List;
import java.util.Arrays; import java.util.Arrays;
@ -32,10 +34,10 @@ public class GeneralFilter extends FileFilter{
// Extensions & Descriptions for commonly used filters // Extensions & Descriptions for commonly used filters
public static final List<String> RAW_IMAGE_EXTS = Arrays.asList(new String[]{".img", ".dd", ".001", ".aa", ".raw", ".bin"}); public static final List<String> RAW_IMAGE_EXTS = Arrays.asList(new String[]{".img", ".dd", ".001", ".aa", ".raw", ".bin"});
public static final String RAW_IMAGE_DESC = "Raw Images (*.img, *.dd, *.001, *.aa, *.raw, *.bin)"; public static final String RAW_IMAGE_DESC = NbBundle.getMessage(GeneralFilter.class, "GeneralFilter.rawImageDesc.text");
public static final List<String> ENCASE_IMAGE_EXTS = Arrays.asList(new String[]{".e01"}); public static final List<String> ENCASE_IMAGE_EXTS = Arrays.asList(new String[]{".e01"});
public static final String ENCASE_IMAGE_DESC = "Encase Images (*.e01)"; public static final String ENCASE_IMAGE_DESC = NbBundle.getMessage(GeneralFilter.class, "GeneralFilter.encaseImageDesc.text");

View File

@ -22,6 +22,8 @@ import javax.swing.JPanel;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import javax.swing.filechooser.FileFilter; import javax.swing.filechooser.FileFilter;
import org.openide.util.NbBundle;
import org.openide.util.lookup.ServiceProvider; import org.openide.util.lookup.ServiceProvider;
import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorProgressMonitor; import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorProgressMonitor;
@ -41,7 +43,7 @@ public class ImageDSProcessor implements DataSourceProcessor {
static final Logger logger = Logger.getLogger(ImageDSProcessor.class.getName()); static final Logger logger = Logger.getLogger(ImageDSProcessor.class.getName());
// Data source type handled by this processor // Data source type handled by this processor
private final static String dsType = "Image File"; private final static String dsType = NbBundle.getMessage(ImageDSProcessor.class, "ImageDSProcessor.dsType.text");
// The Config UI panel that plugins into the Choose Data Source Wizard // The Config UI panel that plugins into the Choose Data Source Wizard
private final ImageFilePanel imageFilePanel; private final ImageFilePanel imageFilePanel;
@ -70,7 +72,7 @@ public class ImageDSProcessor implements DataSourceProcessor {
allExt.addAll(GeneralFilter.RAW_IMAGE_EXTS); allExt.addAll(GeneralFilter.RAW_IMAGE_EXTS);
allExt.addAll(GeneralFilter.ENCASE_IMAGE_EXTS); allExt.addAll(GeneralFilter.ENCASE_IMAGE_EXTS);
} }
static final String allDesc = "All Supported Types"; static final String allDesc = NbBundle.getMessage(ImageDSProcessor.class, "ImageDSProcessor.allDesc.text");
static final GeneralFilter allFilter = new GeneralFilter(allExt, allDesc); static final GeneralFilter allFilter = new GeneralFilter(allExt, allDesc);
static final List<FileFilter> filtersList = new ArrayList<>(); static final List<FileFilter> filtersList = new ArrayList<>();

View File

@ -21,8 +21,6 @@ package org.sleuthkit.autopsy.casemodule;
import java.beans.PropertyChangeListener; import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport; import java.beans.PropertyChangeSupport;
import java.io.File; import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar; import java.util.Calendar;
import java.util.List; import java.util.List;
import java.util.SimpleTimeZone; import java.util.SimpleTimeZone;
@ -32,6 +30,8 @@ import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener; import javax.swing.event.DocumentListener;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.filechooser.FileFilter; import javax.swing.filechooser.FileFilter;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessor; import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessor;
import org.sleuthkit.autopsy.coreutils.ModuleSettings; import org.sleuthkit.autopsy.coreutils.ModuleSettings;
import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil;
@ -202,7 +202,9 @@ public class ImageFilePanel extends JPanel implements DocumentListener {
} }
catch (Exception e) { catch (Exception e) {
logger.log(Level.SEVERE, "ImageFilePanel listener threw exception", e); logger.log(Level.SEVERE, "ImageFilePanel listener threw exception", e);
MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to ImageFilePanel updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); MessageNotifyUtil.Notify.show(NbBundle.getMessage(this.getClass(), "ImageFilePanel.moduleErr"),
NbBundle.getMessage(this.getClass(), "ImageFilePanel.moduleErr.msg"),
MessageNotifyUtil.MessageType.ERROR);
} }
}//GEN-LAST:event_browseButtonActionPerformed }//GEN-LAST:event_browseButtonActionPerformed
@ -330,7 +332,9 @@ public class ImageFilePanel extends JPanel implements DocumentListener {
} }
catch (Exception ee) { catch (Exception ee) {
logger.log(Level.SEVERE, "ImageFilePanel listener threw exception", ee); logger.log(Level.SEVERE, "ImageFilePanel listener threw exception", ee);
MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to ImageFilePanel updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); MessageNotifyUtil.Notify.show(NbBundle.getMessage(this.getClass(), "ImageFilePanel.moduleErr"),
NbBundle.getMessage(this.getClass(), "ImageFilePanel.moduleErr.msg"),
MessageNotifyUtil.MessageType.ERROR);
} }
} }
@ -341,7 +345,9 @@ public class ImageFilePanel extends JPanel implements DocumentListener {
} }
catch (Exception ee) { catch (Exception ee) {
logger.log(Level.SEVERE, "ImageFilePanel listener threw exception", ee); logger.log(Level.SEVERE, "ImageFilePanel listener threw exception", ee);
MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to ImageFilePanel updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); MessageNotifyUtil.Notify.show(NbBundle.getMessage(this.getClass(), "ImageFilePanel.moduleErr"),
NbBundle.getMessage(this.getClass(), "ImageFilePanel.moduleErr.msg"),
MessageNotifyUtil.MessageType.ERROR);
} }
} }
@ -353,7 +359,9 @@ public class ImageFilePanel extends JPanel implements DocumentListener {
} }
catch (Exception ee) { catch (Exception ee) {
logger.log(Level.SEVERE, "ImageFilePanel listener threw exception", ee); logger.log(Level.SEVERE, "ImageFilePanel listener threw exception", ee);
MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to ImageFilePanel updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); MessageNotifyUtil.Notify.show(NbBundle.getMessage(this.getClass(), "ImageFilePanel.moduleErr"),
NbBundle.getMessage(this.getClass(), "ImageFilePanel.moduleErr.msg"),
MessageNotifyUtil.MessageType.ERROR);
} }
} }

View File

@ -20,6 +20,8 @@
package org.sleuthkit.autopsy.casemodule; package org.sleuthkit.autopsy.casemodule;
import javax.swing.JPanel; import javax.swing.JPanel;
import org.openide.util.NbBundle;
import org.openide.util.lookup.ServiceProvider; import org.openide.util.lookup.ServiceProvider;
import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorCallback; import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorCallback;
import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorProgressMonitor; import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorProgressMonitor;
@ -33,7 +35,7 @@ public class LocalDiskDSProcessor implements DataSourceProcessor {
static final Logger logger = Logger.getLogger(ImageDSProcessor.class.getName()); static final Logger logger = Logger.getLogger(ImageDSProcessor.class.getName());
// Data source type handled by this processor // Data source type handled by this processor
private static final String dsType = "Local Disk"; private static final String dsType = NbBundle.getMessage(LocalDiskDSProcessor.class, "LocalDiskDSProcessor.dsType.text");
// The Config UI panel that plugins into the Choose Data Source Wizard // The Config UI panel that plugins into the Choose Data Source Wizard
private final LocalDiskPanel localDiskPanel; private final LocalDiskPanel localDiskPanel;

View File

@ -80,6 +80,10 @@
<StringArray count="0"/> <StringArray count="0"/>
</Property> </Property>
</Properties> </Properties>
<AuxValues>
<AuxValue name="JavaCodeGenerator_CreateCodeCustom" type="java.lang.String" value="new javax.swing.JComboBox&lt;&gt;()"/>
<AuxValue name="JavaCodeGenerator_TypeParameters" type="java.lang.String" value="&lt;LocalDisk&gt;"/>
</AuxValues>
</Component> </Component>
<Component class="javax.swing.JLabel" name="errorLabel"> <Component class="javax.swing.JLabel" name="errorLabel">
<Properties> <Properties>

View File

@ -18,6 +18,7 @@
*/ */
package org.sleuthkit.autopsy.casemodule; package org.sleuthkit.autopsy.casemodule;
import org.sleuthkit.autopsy.coreutils.LocalDisk;
import java.awt.BorderLayout; import java.awt.BorderLayout;
import java.awt.Color; import java.awt.Color;
import java.awt.Component; import java.awt.Component;
@ -40,6 +41,8 @@ import javax.swing.ListCellRenderer;
import javax.swing.SwingWorker; import javax.swing.SwingWorker;
import javax.swing.border.EmptyBorder; import javax.swing.border.EmptyBorder;
import javax.swing.event.ListDataListener; import javax.swing.event.ListDataListener;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessor; import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessor;
import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.autopsy.coreutils.PlatformUtil; import org.sleuthkit.autopsy.coreutils.PlatformUtil;
@ -47,12 +50,12 @@ import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil;
/** /**
* ImageTypePanel for adding a local disk or partition such as PhysicalDrive0 or C:. * ImageTypePanel for adding a local disk or partition such as PhysicalDrive0 or C:.
*/ */
class LocalDiskPanel extends JPanel { final class LocalDiskPanel extends JPanel {
private static final Logger logger = Logger.getLogger(LocalDiskPanel.class.getName()); private static final Logger logger = Logger.getLogger(LocalDiskPanel.class.getName());
private static LocalDiskPanel instance; private static LocalDiskPanel instance;
private PropertyChangeSupport pcs = null; private PropertyChangeSupport pcs = null;
private List<LocalDisk> disks = new ArrayList<LocalDisk>(); private List<LocalDisk> disks;
private LocalDiskModel model; private LocalDiskModel model;
private boolean enableNext = false; private boolean enableNext = false;
@ -60,6 +63,7 @@ import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil;
* Creates new form LocalDiskPanel * Creates new form LocalDiskPanel
*/ */
public LocalDiskPanel() { public LocalDiskPanel() {
this.disks = new ArrayList<>();
initComponents(); initComponents();
customInit(); customInit();
@ -98,7 +102,7 @@ import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil;
private void initComponents() { private void initComponents() {
diskLabel = new javax.swing.JLabel(); diskLabel = new javax.swing.JLabel();
diskComboBox = new javax.swing.JComboBox(); diskComboBox = new javax.swing.JComboBox<>();
errorLabel = new javax.swing.JLabel(); errorLabel = new javax.swing.JLabel();
timeZoneLabel = new javax.swing.JLabel(); timeZoneLabel = new javax.swing.JLabel();
timeZoneComboBox = new javax.swing.JComboBox<String>(); timeZoneComboBox = new javax.swing.JComboBox<String>();
@ -162,7 +166,7 @@ import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil;
}// </editor-fold>//GEN-END:initComponents }// </editor-fold>//GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables // Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JLabel descLabel; private javax.swing.JLabel descLabel;
private javax.swing.JComboBox diskComboBox; private javax.swing.JComboBox<LocalDisk> diskComboBox;
private javax.swing.JLabel diskLabel; private javax.swing.JLabel diskLabel;
private javax.swing.JLabel errorLabel; private javax.swing.JLabel errorLabel;
private javax.swing.JCheckBox noFatOrphansCheckbox; private javax.swing.JCheckBox noFatOrphansCheckbox;
@ -293,14 +297,13 @@ import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil;
private Object selected; private Object selected;
private boolean ready = false; private boolean ready = false;
private volatile boolean loadingDisks = false; private volatile boolean loadingDisks = false;
List<LocalDisk> physical = new ArrayList<LocalDisk>(); List<LocalDisk> physical = new ArrayList<>();
List<LocalDisk> partitions = new ArrayList<LocalDisk>(); List<LocalDisk> partitions = new ArrayList<>();
//private String SELECT = "Select a local disk:"; //private String SELECT = "Select a local disk:";
private String LOADING = "Loading local disks..."; private String LOADING = NbBundle.getMessage(this.getClass(), "LocalDiskPanel.localDiskModel.loading.msg");
LocalDiskThread worker = null; LocalDiskThread worker = null;
private void loadDisks() { private void loadDisks() {
// if there is a worker already building the lists, then cancel it first. // if there is a worker already building the lists, then cancel it first.
@ -310,9 +313,9 @@ import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil;
// Clear the lists // Clear the lists
errorLabel.setText(""); errorLabel.setText("");
disks = new ArrayList<LocalDisk>(); disks = new ArrayList<>();
physical = new ArrayList<LocalDisk>(); physical = new ArrayList<>();
partitions = new ArrayList<LocalDisk>(); partitions = new ArrayList<>();
diskComboBox.setEnabled(false); diskComboBox.setEnabled(false);
ready = false; ready = false;
enableNext = false; enableNext = false;
@ -327,7 +330,7 @@ import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil;
@Override @Override
public void setSelectedItem(Object anItem) { public void setSelectedItem(Object anItem) {
if(ready) { if(ready) {
selected = anItem; selected = (LocalDisk) anItem;
enableNext = true; enableNext = true;
try { try {
@ -335,7 +338,9 @@ import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil;
} }
catch (Exception e) { catch (Exception e) {
logger.log(Level.SEVERE, "LocalDiskPanel listener threw exception", e); logger.log(Level.SEVERE, "LocalDiskPanel listener threw exception", e);
MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to LocalDiskPanel updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); MessageNotifyUtil.Notify.show(NbBundle.getMessage(this.getClass(), "LocalDiskPanel.moduleErr"),
NbBundle.getMessage(this.getClass(), "LocalDiskPanel.moduleErr.msg"),
MessageNotifyUtil.MessageType.ERROR);
} }
} }
} }
@ -379,13 +384,14 @@ import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil;
label.setForeground(list.getForeground()); label.setForeground(list.getForeground());
} }
if(value !=null && value.equals(LOADING)) { String localDiskString = value.toString();
if(localDiskString.equals(LOADING)) {
Font font = new Font(label.getFont().getName(), Font.ITALIC, label.getFont().getSize()); Font font = new Font(label.getFont().getName(), Font.ITALIC, label.getFont().getSize());
label.setText(LOADING); label.setText(LOADING);
label.setFont(font); label.setFont(font);
label.setBackground(Color.GRAY); label.setBackground(Color.GRAY);
} else { } else {
label.setText(value != null ? value.toString() : ""); label.setText(value.toString());
} }
label.setOpaque(true); label.setOpaque(true);
label.setBorder(new EmptyBorder(2, 2, 2, 2)); label.setBorder(new EmptyBorder(2, 2, 2, 2));
@ -409,16 +415,22 @@ import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil;
private void displayErrors() { private void displayErrors() {
if(physical.isEmpty() && partitions.isEmpty()) { if(physical.isEmpty() && partitions.isEmpty()) {
if(PlatformUtil.isWindowsOS()) { if(PlatformUtil.isWindowsOS()) {
errorLabel.setText("Disks were not detected. On some systems it requires admin privileges (or \"Run as administrator\")."); errorLabel.setText(
errorLabel.setToolTipText("Disks were not detected. On some systems it requires admin privileges (or \"Run as administrator\")."); NbBundle.getMessage(this.getClass(), "LocalDiskPanel.errLabel.disksNotDetected.text"));
errorLabel.setToolTipText(NbBundle.getMessage(this.getClass(),
"LocalDiskPanel.errLabel.disksNotDetected.toolTipText"));
} else { } else {
errorLabel.setText("Local drives were not detected. Auto-detection not supported on this OS or admin privileges required"); errorLabel.setText(
errorLabel.setToolTipText("Local drives were not detected. Auto-detection not supported on this OS or admin privileges required"); NbBundle.getMessage(this.getClass(), "LocalDiskPanel.errLabel.drivesNotDetected.text"));
errorLabel.setToolTipText(NbBundle.getMessage(this.getClass(),
"LocalDiskPanel.errLabel.drivesNotDetected.toolTipText"));
} }
diskComboBox.setEnabled(false); diskComboBox.setEnabled(false);
} else if(physical.isEmpty()) { } else if(physical.isEmpty()) {
errorLabel.setText("Some disks were not detected. On some systems it requires admin privileges (or \"Run as administrator\")."); errorLabel.setText(
errorLabel.setToolTipText("Some disks were not detected. On some systems it requires admin privileges (or \"Run as administrator\")."); NbBundle.getMessage(this.getClass(), "LocalDiskPanel.errLabel.someDisksNotDetected.text"));
errorLabel.setToolTipText(NbBundle.getMessage(this.getClass(),
"LocalDiskPanel.errLabel.someDisksNotDetected.toolTipText"));
} }
} }

View File

@ -20,6 +20,8 @@
package org.sleuthkit.autopsy.casemodule; package org.sleuthkit.autopsy.casemodule;
import javax.swing.JPanel; import javax.swing.JPanel;
import org.openide.util.NbBundle;
import org.openide.util.lookup.ServiceProvider; import org.openide.util.lookup.ServiceProvider;
import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorCallback; import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorCallback;
import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorProgressMonitor; import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorProgressMonitor;
@ -32,7 +34,7 @@ public class LocalFilesDSProcessor implements DataSourceProcessor {
static final Logger logger = Logger.getLogger(LocalFilesDSProcessor.class.getName()); static final Logger logger = Logger.getLogger(LocalFilesDSProcessor.class.getName());
// Data source type handled by this processor // Data source type handled by this processor
private static final String dsType = "Logical Files"; private static final String dsType = NbBundle.getMessage(LocalFilesDSProcessor.class, "LocalFilesDSProcessor.dsType");
// The Config UI panel that plugins into the Choose Data Source Wizard // The Config UI panel that plugins into the Choose Data Source Wizard
private final LocalFilesPanel localFilesPanel; private final LocalFilesPanel localFilesPanel;

View File

@ -25,6 +25,8 @@ import java.util.Set;
import java.util.TreeSet; import java.util.TreeSet;
import javax.swing.JFileChooser; import javax.swing.JFileChooser;
import javax.swing.JPanel; import javax.swing.JPanel;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessor; import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessor;
import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil;
import java.util.logging.Level; import java.util.logging.Level;
@ -84,7 +86,7 @@ import org.sleuthkit.autopsy.coreutils.Logger;
//@Override //@Override
public String getContentType() { public String getContentType() {
return "LOCAL"; return NbBundle.getMessage(this.getClass(), "LocalFilesPanel.contentType.text");
} }
//@Override //@Override
@ -127,7 +129,7 @@ import org.sleuthkit.autopsy.coreutils.Logger;
@Override @Override
public String toString() { public String toString() {
return "Logical Files"; return NbBundle.getMessage(this.getClass(), "LocalFilesDSProcessor.toString.text");
} }
/** /**
@ -242,7 +244,9 @@ import org.sleuthkit.autopsy.coreutils.Logger;
} }
catch (Exception e) { catch (Exception e) {
logger.log(Level.SEVERE, "LocalFilesPanel listener threw exception", e); logger.log(Level.SEVERE, "LocalFilesPanel listener threw exception", e);
MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to LocalFilesPanel updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); MessageNotifyUtil.Notify.show(NbBundle.getMessage(this.getClass(), "LocalFilesPanel.moduleErr"),
NbBundle.getMessage(this.getClass(), "LocalFilesPanel.moduleErr.msg"),
MessageNotifyUtil.MessageType.ERROR);
} }
}//GEN-LAST:event_selectButtonActionPerformed }//GEN-LAST:event_selectButtonActionPerformed

View File

@ -1,7 +1,7 @@
/* /*
* Autopsy Forensic Browser * Autopsy Forensic Browser
* *
* Copyright 2012 Basis Technology Corp. * Copyright 2012-2014 Basis Technology Corp.
* Contact: carrier <at> sleuthkit <dot> org * Contact: carrier <at> sleuthkit <dot> org
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
@ -18,7 +18,6 @@
*/ */
package org.sleuthkit.autopsy.casemodule; package org.sleuthkit.autopsy.casemodule;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.Toolkit; import java.awt.Toolkit;
import java.awt.event.WindowAdapter; import java.awt.event.WindowAdapter;
@ -31,32 +30,26 @@ import java.io.File;
import javax.swing.JFileChooser; import javax.swing.JFileChooser;
import javax.swing.JFrame; import javax.swing.JFrame;
import javax.swing.JOptionPane; import javax.swing.JOptionPane;
import org.sleuthkit.autopsy.casemodule.GeneralFilter; import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.datamodel.SleuthkitCase; import org.sleuthkit.datamodel.SleuthkitCase;
import org.sleuthkit.datamodel.TskCoreException; import org.sleuthkit.datamodel.TskCoreException;
class MissingImageDialog extends javax.swing.JDialog {
class MissingImageDialog extends javax.swing.JDialog {
private static final Logger logger = Logger.getLogger(MissingImageDialog.class.getName()); private static final Logger logger = Logger.getLogger(MissingImageDialog.class.getName());
long obj_id; long obj_id;
SleuthkitCase db; SleuthkitCase db;
static final GeneralFilter rawFilter = new GeneralFilter(GeneralFilter.RAW_IMAGE_EXTS, GeneralFilter.RAW_IMAGE_DESC); static final GeneralFilter rawFilter = new GeneralFilter(GeneralFilter.RAW_IMAGE_EXTS, GeneralFilter.RAW_IMAGE_DESC);
static final GeneralFilter encaseFilter = new GeneralFilter(GeneralFilter.ENCASE_IMAGE_EXTS, GeneralFilter.ENCASE_IMAGE_DESC); static final GeneralFilter encaseFilter = new GeneralFilter(GeneralFilter.ENCASE_IMAGE_EXTS, GeneralFilter.ENCASE_IMAGE_DESC);
static final List<String> allExt = new ArrayList<String>(); static final List<String> allExt = new ArrayList<String>();
static { static {
allExt.addAll(GeneralFilter.RAW_IMAGE_EXTS); allExt.addAll(GeneralFilter.RAW_IMAGE_EXTS);
allExt.addAll(GeneralFilter.ENCASE_IMAGE_EXTS); allExt.addAll(GeneralFilter.ENCASE_IMAGE_EXTS);
} }
static final String allDesc = "All Supported Types"; static final String allDesc = NbBundle.getMessage(MissingImageDialog.class, "MissingImageDialog.allDesc.text");
static final GeneralFilter allFilter = new GeneralFilter(allExt, allDesc); static final GeneralFilter allFilter = new GeneralFilter(allExt, allDesc);
private JFileChooser fc = new JFileChooser(); private JFileChooser fc = new JFileChooser();
private MissingImageDialog(long obj_id, SleuthkitCase db) { private MissingImageDialog(long obj_id, SleuthkitCase db) {
@ -100,7 +93,7 @@ import org.sleuthkit.datamodel.TskCoreException;
} }
private void display() { private void display() {
this.setTitle("Search for Missing Image"); this.setTitle(NbBundle.getMessage(this.getClass(), "MissingImageDialog.display.title"));
Dimension screenDimension = Toolkit.getDefaultToolkit().getScreenSize(); Dimension screenDimension = Toolkit.getDefaultToolkit().getScreenSize();
// set the popUp window / JFrame // set the popUp window / JFrame
int w = this.getSize().width; int w = this.getSize().width;
@ -280,8 +273,6 @@ import org.sleuthkit.datamodel.TskCoreException;
private void browseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_browseButtonActionPerformed private void browseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_browseButtonActionPerformed
String oldText = pathNameTextField.getText(); String oldText = pathNameTextField.getText();
// set the current directory of the FileChooser if the ImagePath Field is valid // set the current directory of the FileChooser if the ImagePath Field is valid
@ -299,7 +290,6 @@ import org.sleuthkit.datamodel.TskCoreException;
updateSelectButton(); updateSelectButton();
}//GEN-LAST:event_browseButtonActionPerformed }//GEN-LAST:event_browseButtonActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables // Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton browseButton; private javax.swing.JButton browseButton;
private javax.swing.JPanel buttonPanel; private javax.swing.JPanel buttonPanel;
@ -316,13 +306,13 @@ import org.sleuthkit.datamodel.TskCoreException;
// //
void cancel() { void cancel() {
int ret = JOptionPane.showConfirmDialog(null, int ret = JOptionPane.showConfirmDialog(null,
"No image file has been selected, are you sure you\n" + NbBundle.getMessage(this.getClass(),
"would like to exit without finding the image.", "MissingImageDialog.confDlg.noFileSel.msg"),
"Missing Image", JOptionPane.YES_NO_OPTION); NbBundle.getMessage(this.getClass(),
"MissingImageDialog.confDlg.noFileSel.title"),
JOptionPane.YES_NO_OPTION);
if (ret == JOptionPane.YES_OPTION) { if (ret == JOptionPane.YES_OPTION) {
this.dispose(); this.dispose();
} }
} }
} }

View File

@ -19,6 +19,8 @@
package org.sleuthkit.autopsy.casemodule; package org.sleuthkit.autopsy.casemodule;
import org.openide.util.NbBundle;
import java.awt.Component; import java.awt.Component;
import java.io.File; import java.io.File;
import javax.swing.JFileChooser; import javax.swing.JFileChooser;
@ -52,7 +54,7 @@ final class NewCaseVisualPanel1 extends JPanel implements DocumentListener{
*/ */
@Override @Override
public String getName() { public String getName() {
return "Case Info"; return NbBundle.getMessage(this.getClass(), "NewCaseVisualPanel1.getName.text");
} }
/** /**
@ -179,7 +181,8 @@ final class NewCaseVisualPanel1 extends JPanel implements DocumentListener{
//fc.setSelectedFile(new File("C:\\Program Files\\")); //fc.setSelectedFile(new File("C:\\Program Files\\"));
//disableTextField(fc); // disable all the text field on the file chooser //disableTextField(fc); // disable all the text field on the file chooser
int returnValue = fc.showDialog((Component)evt.getSource(), "Select"); int returnValue = fc.showDialog((Component)evt.getSource(), NbBundle.getMessage(this.getClass(),
"NewCaseVisualPanel1.caseDirBrowse.selectButton.text"));
if(returnValue == JFileChooser.APPROVE_OPTION){ if(returnValue == JFileChooser.APPROVE_OPTION){
String path = fc.getSelectedFile().getPath(); String path = fc.getSelectedFile().getPath();
caseParentDirTextField.setText(path); // put the path to the textfield caseParentDirTextField.setText(path); // put the path to the textfield

View File

@ -24,6 +24,8 @@
*/ */
package org.sleuthkit.autopsy.casemodule; package org.sleuthkit.autopsy.casemodule;
import org.openide.util.NbBundle;
/** /**
* *
* @author dfickling * @author dfickling
@ -43,7 +45,7 @@ package org.sleuthkit.autopsy.casemodule;
*/ */
@Override @Override
public String getName() { public String getName() {
return "Additional Information"; return NbBundle.getMessage(this.getClass(), "NewCaseVisualPanel2.getName.text");
} }
/** This method is called from within the constructor to /** This method is called from within the constructor to

View File

@ -31,6 +31,7 @@ import org.openide.DialogDisplayer;
import org.openide.NotifyDescriptor; import org.openide.NotifyDescriptor;
import org.openide.WizardDescriptor; import org.openide.WizardDescriptor;
import org.openide.util.HelpCtx; import org.openide.util.HelpCtx;
import org.openide.util.NbBundle;
import org.openide.util.actions.CallableSystemAction; import org.openide.util.actions.CallableSystemAction;
import org.openide.util.actions.SystemAction; import org.openide.util.actions.SystemAction;
import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.Logger;
@ -52,8 +53,12 @@ import org.sleuthkit.autopsy.coreutils.Logger;
// there's a case open // there's a case open
if (Case.existsCurrentCase()) { if (Case.existsCurrentCase()) {
// show the confirmation first to close the current case and open the "New Case" wizard panel // show the confirmation first to close the current case and open the "New Case" wizard panel
String closeCurrentCase = "Do you want to save and close this case and proceed with the new case creation?"; String closeCurrentCase = NbBundle
NotifyDescriptor d = new NotifyDescriptor.Confirmation(closeCurrentCase, "Warning: Closing the Current Case", NotifyDescriptor.YES_NO_OPTION, NotifyDescriptor.WARNING_MESSAGE); .getMessage(this.getClass(), "NewCaseWizardAction.closeCurCase.confMsg.msg");
NotifyDescriptor d = new NotifyDescriptor.Confirmation(closeCurrentCase,
NbBundle.getMessage(this.getClass(),
"NewCaseWizardAction.closeCurCase.confMsg.title"),
NotifyDescriptor.YES_NO_OPTION, NotifyDescriptor.WARNING_MESSAGE);
d.setValue(NotifyDescriptor.NO_OPTION); d.setValue(NotifyDescriptor.NO_OPTION);
Object res = DialogDisplayer.getDefault().notify(d); Object res = DialogDisplayer.getDefault().notify(d);
@ -77,7 +82,7 @@ import org.sleuthkit.autopsy.coreutils.Logger;
WizardDescriptor wizardDescriptor = new WizardDescriptor(getPanels()); WizardDescriptor wizardDescriptor = new WizardDescriptor(getPanels());
// {0} will be replaced by WizardDesriptor.Panel.getComponent().getName() // {0} will be replaced by WizardDesriptor.Panel.getComponent().getName()
wizardDescriptor.setTitleFormat(new MessageFormat("{0}")); wizardDescriptor.setTitleFormat(new MessageFormat("{0}"));
wizardDescriptor.setTitle("New Case Information"); wizardDescriptor.setTitle(NbBundle.getMessage(this.getClass(), "NewCaseWizardAction.newCase.windowTitle.text"));
Dialog dialog = DialogDisplayer.getDefault().createDialog(wizardDescriptor); Dialog dialog = DialogDisplayer.getDefault().createDialog(wizardDescriptor);
dialog.setVisible(true); dialog.setVisible(true);
dialog.toFront(); dialog.toFront();
@ -115,7 +120,7 @@ import org.sleuthkit.autopsy.coreutils.Logger;
* Initialize panels representing individual wizard's steps and sets * Initialize panels representing individual wizard's steps and sets
* various properties for them influencing wizard appearance. * various properties for them influencing wizard appearance.
*/ */
@SuppressWarnings({"unchecked"}) @SuppressWarnings({"unchecked", "rawtypes"})
private WizardDescriptor.Panel<WizardDescriptor>[] getPanels() { private WizardDescriptor.Panel<WizardDescriptor>[] getPanels() {
if (panels == null) { if (panels == null) {
panels = new WizardDescriptor.Panel[]{ panels = new WizardDescriptor.Panel[]{
@ -149,7 +154,7 @@ import org.sleuthkit.autopsy.coreutils.Logger;
@Override @Override
public String getName() { public String getName() {
return "New Case Wizard"; return NbBundle.getMessage(this.getClass(), "NewCaseWizardAction.getName.text");
} }
@Override @Override

View File

@ -23,6 +23,8 @@ import java.util.HashSet;
import java.util.Iterator; import java.util.Iterator;
import java.util.Set; import java.util.Set;
import java.util.logging.Level; import java.util.logging.Level;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.Logger;
import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener; import javax.swing.event.ChangeListener;
@ -205,13 +207,15 @@ class NewCaseWizardPanel1 implements WizardDescriptor.ValidatingPanel<WizardDesc
// check if case Name contain one of this following symbol: // check if case Name contain one of this following symbol:
// \ / : * ? " < > | // \ / : * ? " < > |
if (!Case.isValidName(caseName)) { if (!Case.isValidName(caseName)) {
String errorMsg = "The Case Name cannot contain any of the following symbols: \\ / : * ? \" < > |"; String errorMsg = NbBundle
.getMessage(this.getClass(), "NewCaseWizardPanel1.validate.errMsg.invalidSymbols");
validationError(errorMsg); validationError(errorMsg);
} else { } else {
// check if the directory exist // check if the directory exist
if (new File(caseDirPath).exists()) { if (new File(caseDirPath).exists()) {
// throw a warning to enter new data or delete the existing directory // throw a warning to enter new data or delete the existing directory
String errorMsg = "Case directory '" + caseDirPath + "' already exists."; String errorMsg = NbBundle
.getMessage(this.getClass(), "NewCaseWizardPanel1.validate.errMsg.dirExists", caseDirPath);
validationError(errorMsg); validationError(errorMsg);
} else { } else {
// check if the "base" directory path is absolute // check if the "base" directory path is absolute
@ -220,8 +224,13 @@ class NewCaseWizardPanel1 implements WizardDescriptor.ValidatingPanel<WizardDesc
// when the base directory doesn't exist // when the base directory doesn't exist
if (!baseDir.exists()) { if (!baseDir.exists()) {
// get confirmation to create directory // get confirmation to create directory
String confMsg = "The base directory \'" + caseParentDir + "\' doesn't exist. \n \n Do you want to create that directory?"; String confMsg = NbBundle
NotifyDescriptor d2 = new NotifyDescriptor.Confirmation(confMsg, "Create directory", NotifyDescriptor.YES_NO_OPTION, NotifyDescriptor.WARNING_MESSAGE); .getMessage(this.getClass(), "NewCaseWizardPanel1.validate.confMsg.createDir.msg",
caseParentDir);
NotifyDescriptor d2 = new NotifyDescriptor.Confirmation(confMsg,
NbBundle.getMessage(this.getClass(),
"NewCaseWizardPanel1.validate.confMsg.createDir.title"),
NotifyDescriptor.YES_NO_OPTION, NotifyDescriptor.WARNING_MESSAGE);
d2.setValue(NotifyDescriptor.NO_OPTION); d2.setValue(NotifyDescriptor.NO_OPTION);
Object res2 = DialogDisplayer.getDefault().notify(d2); Object res2 = DialogDisplayer.getDefault().notify(d2);
@ -230,27 +239,33 @@ class NewCaseWizardPanel1 implements WizardDescriptor.ValidatingPanel<WizardDesc
try { try {
createDirectory(caseDirPath); createDirectory(caseDirPath);
} catch (Exception ex) { } catch (Exception ex) {
String errorMsg = "Error: Couldn't create case parent directory " + caseParentDir; String errorMsg = NbBundle.getMessage(this.getClass(),
"NewCaseWizardPanel1.validate.errMsg.cantCreateParDir.msg",
caseParentDir);
logger.log(Level.WARNING, errorMsg, ex); logger.log(Level.WARNING, errorMsg, ex);
validationError(errorMsg); validationError(errorMsg);
} }
} }
if (res2 != null && res2 == DialogDescriptor.NO_OPTION) { if (res2 != null && res2 == DialogDescriptor.NO_OPTION) {
// if user say no // if user say no
validationError("Prevented from creating base directory " + caseDirPath ); validationError(NbBundle.getMessage(this.getClass(),
"NewCaseWizardPanel1.validate.errMsg.prevCreateBaseDir.msg",
caseDirPath) );
} }
} else { } else {
try { try {
createDirectory(caseDirPath); createDirectory(caseDirPath);
} catch (Exception ex) { } catch (Exception ex) {
String errorMsg = "Error: Couldn't create directory."; String errorMsg = NbBundle
.getMessage(this.getClass(), "NewCaseWizardPanel1.validate.errMsg.cantCreateDir");
logger.log(Level.WARNING, errorMsg, ex); logger.log(Level.WARNING, errorMsg, ex);
validationError(errorMsg); validationError(errorMsg);
} }
} }
} else { } else {
// throw a notification // throw a notification
String errorMsg = "ERROR: The Base Directory that you entered is not valid.\nPlease enter a valid Base Directory."; String errorMsg = NbBundle
.getMessage(this.getClass(), "NewCaseWizardPanel1.validate.errMsg.invalidBaseDir.msg");
validationError(errorMsg); validationError(errorMsg);
} }
} }
@ -282,7 +297,8 @@ class NewCaseWizardPanel1 implements WizardDescriptor.ValidatingPanel<WizardDesc
Case.deleteCaseDirectory(new File(caseDirPath)); Case.deleteCaseDirectory(new File(caseDirPath));
} }
String errorMsg = "ERROR: Could not create the case directory. \nPlease enter a valid Case Name and Directory."; String errorMsg = NbBundle.getMessage(this.getClass(),
"NewCaseWizardPanel1.createDir.errMsg.cantCreateDir.msg");
validationError(errorMsg); validationError(errorMsg);

View File

@ -29,6 +29,7 @@ import org.openide.WizardDescriptor;
import org.openide.WizardValidationException; import org.openide.WizardValidationException;
import org.openide.util.Exceptions; import org.openide.util.Exceptions;
import org.openide.util.HelpCtx; import org.openide.util.HelpCtx;
import org.openide.util.NbBundle;
/** /**
* The "New Case" wizard panel with a component on it. This class represents * The "New Case" wizard panel with a component on it. This class represents
@ -190,7 +191,10 @@ class NewCaseWizardPanel2 implements WizardDescriptor.ValidatingPanel<WizardDesc
//Case.create(createdDirectory, caseName, caseNumber, examiner); //Case.create(createdDirectory, caseName, caseNumber, examiner);
} catch(Exception ex) { } catch(Exception ex) {
throw new WizardValidationException(this.getComponent(), "Error creating case", null); throw new WizardValidationException(this.getComponent(),
NbBundle.getMessage(this.getClass(),
"NewCaseWizardPanel2.validate.errCreateCase.msg"),
null);
} }
} }
} }

View File

@ -28,6 +28,8 @@ import java.util.logging.Level;
import javax.swing.JOptionPane; import javax.swing.JOptionPane;
import javax.swing.JTable; import javax.swing.JTable;
import javax.swing.table.AbstractTableModel; import javax.swing.table.AbstractTableModel;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.Logger;
/** /**
@ -198,7 +200,13 @@ class OpenRecentCasePanel extends javax.swing.JPanel {
// Open the recent cases // Open the recent cases
try { try {
if (caseName.equals("") || casePath.equals("") || (!new File(casePath).exists())) { if (caseName.equals("") || casePath.equals("") || (!new File(casePath).exists())) {
JOptionPane.showMessageDialog(null, "Error: Case " + caseName + " doesn't exist.", "Error", JOptionPane.ERROR_MESSAGE); JOptionPane.showMessageDialog(null,
NbBundle.getMessage(this.getClass(),
"OpenRecentCasePanel.openCase.msgDlg.caseDoesntExist.msg",
caseName),
NbBundle.getMessage(this.getClass(),
"OpenRecentCasePanel.openCase.msgDlg.err"),
JOptionPane.ERROR_MESSAGE);
RecentCases.getInstance().removeRecentCase(caseName, casePath); // remove the recent case if it doesn't exist anymore RecentCases.getInstance().removeRecentCase(caseName, casePath); // remove the recent case if it doesn't exist anymore
//if case is not opened, open the start window //if case is not opened, open the start window
@ -258,10 +266,10 @@ class OpenRecentCasePanel extends javax.swing.JPanel {
switch (column) { switch (column) {
case 0: case 0:
colName = "Case Name"; colName = NbBundle.getMessage(this.getClass(), "OpenRecentCasePanel.colName.caseName");
break; break;
case 1: case 1:
colName = "Path"; colName = NbBundle.getMessage(this.getClass(), "OpenRecentCasePanel.colName.path");
break; break;
default: default:
; ;

View File

@ -31,6 +31,7 @@ import java.util.List;
import java.util.logging.Level; import java.util.logging.Level;
import javax.swing.JMenuItem; import javax.swing.JMenuItem;
import org.openide.util.HelpCtx; import org.openide.util.HelpCtx;
import org.openide.util.NbBundle;
import org.openide.util.actions.CallableSystemAction; import org.openide.util.actions.CallableSystemAction;
import org.openide.util.actions.Presenter; import org.openide.util.actions.Presenter;
import org.openide.filesystems.FileUtil; import org.openide.filesystems.FileUtil;
@ -96,7 +97,8 @@ import org.sleuthkit.autopsy.coreutils.Logger;
private static void validateCaseIndex(int i) { private static void validateCaseIndex(int i) {
if (i < 0 || i >= LENGTH) { if (i < 0 || i >= LENGTH) {
throw new IllegalArgumentException("Recent case index " + i + " is out of range."); throw new IllegalArgumentException(
NbBundle.getMessage(RecentCases.class, "RecentCases.exception.caseIdxOutOfRange.msg", i));
} }
} }
@ -419,7 +421,7 @@ import org.sleuthkit.autopsy.coreutils.Logger;
@Override @Override
public String getName() { public String getName() {
//return NbBundle.getMessage(RecentCases.class, "CTL_RecentCases"); //return NbBundle.getMessage(RecentCases.class, "CTL_RecentCases");
return "Clear Recent Cases"; return NbBundle.getMessage(this.getClass(), "RecentCases.getName.text");
} }
/** /**

View File

@ -26,6 +26,8 @@ import java.io.File;
import java.util.logging.Level; import java.util.logging.Level;
import javax.swing.JOptionPane; import javax.swing.JOptionPane;
import javax.swing.JPanel; import javax.swing.JPanel;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.Logger;
/** /**
@ -56,7 +58,11 @@ class RecentItems implements ActionListener {
// check if the file exists // check if the file exists
if(caseName.equals("") || casePath.equals("") || (!new File(casePath).exists())){ if(caseName.equals("") || casePath.equals("") || (!new File(casePath).exists())){
// throw an error here // throw an error here
JOptionPane.showMessageDialog(caller, "Error: Case " + caseName + " doesn't exist.", "Error", JOptionPane.ERROR_MESSAGE); JOptionPane.showMessageDialog(caller,
NbBundle.getMessage(this.getClass(), "RecentItems.openRecentCase.msgDlg.text",
caseName),
NbBundle.getMessage(this.getClass(), "RecentItems.openRecentCase.msgDlg.err"),
JOptionPane.ERROR_MESSAGE);
RecentCases.getInstance().removeRecentCase(caseName, casePath); // remove the recent case if it doesn't exist anymore RecentCases.getInstance().removeRecentCase(caseName, casePath); // remove the recent case if it doesn't exist anymore
//if case is not opened, open the start window //if case is not opened, open the start window

View File

@ -26,6 +26,8 @@ import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import javax.swing.JDialog; import javax.swing.JDialog;
import javax.swing.JFrame; import javax.swing.JFrame;
import org.openide.util.NbBundle;
import org.openide.util.lookup.ServiceProvider; import org.openide.util.lookup.ServiceProvider;
/** /**
@ -35,7 +37,7 @@ import org.openide.util.lookup.ServiceProvider;
public final class StartupWindow extends JDialog implements StartupWindowInterface { public final class StartupWindow extends JDialog implements StartupWindowInterface {
private static StartupWindow instance; private static StartupWindow instance;
private static final String TITLE = "Welcome"; private static final String TITLE = NbBundle.getMessage(StartupWindow.class, "StartupWindow.title.text");
private static Dimension DIMENSIONS = new Dimension(750, 400); private static Dimension DIMENSIONS = new Dimension(750, 400);
public StartupWindow() { public StartupWindow() {

View File

@ -23,6 +23,7 @@ import javax.swing.JComponent;
import javax.swing.JMenuItem; import javax.swing.JMenuItem;
import javax.swing.JSeparator; import javax.swing.JSeparator;
import org.openide.awt.DynamicMenuContent; import org.openide.awt.DynamicMenuContent;
import org.openide.util.NbBundle;
import org.openide.util.actions.SystemAction; import org.openide.util.actions.SystemAction;
/** /**
@ -66,14 +67,15 @@ import org.openide.util.actions.SystemAction;
// if it has recent case, create clear menu // if it has recent case, create clear menu
if(hasRecentCase){ if(hasRecentCase){
comps[length] = new JSeparator(); comps[length] = new JSeparator();
JMenuItem clearMenu = new JMenuItem("Clear Recent Cases"); JMenuItem clearMenu = new JMenuItem(
NbBundle.getMessage(this.getClass(), "UpdateRecentCases.menuItem.clearRecentCases.text"));
clearMenu.addActionListener(SystemAction.get(RecentCases.class)); clearMenu.addActionListener(SystemAction.get(RecentCases.class));
comps[length+1] = clearMenu; comps[length+1] = clearMenu;
} }
// otherwise, just create a disabled empty menu // otherwise, just create a disabled empty menu
else{ else{
comps = new JComponent[1]; comps = new JComponent[1];
JMenuItem emptyMenu = new JMenuItem("-Empty-"); JMenuItem emptyMenu = new JMenuItem(NbBundle.getMessage(this.getClass(), "UpdateRecentCases.menuItem.empty"));
emptyMenu.addActionListener(new RecentItems("", "")); emptyMenu.addActionListener(new RecentItems("", ""));
comps[0] = emptyMenu; comps[0] = emptyMenu;
comps[0].setEnabled(false); comps[0].setEnabled(false);

View File

@ -30,6 +30,7 @@ import javax.xml.transform.*;
import javax.xml.transform.dom.*; import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*; import javax.xml.transform.stream.*;
import org.openide.util.Exceptions; import org.openide.util.Exceptions;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.autopsy.coreutils.XMLUtil; import org.sleuthkit.autopsy.coreutils.XMLUtil;
import org.w3c.dom.*; import org.w3c.dom.*;
@ -458,7 +459,8 @@ import org.xml.sax.SAXException;
docBuilder = docFactory.newDocumentBuilder(); docBuilder = docFactory.newDocumentBuilder();
} catch (ParserConfigurationException ex) { } catch (ParserConfigurationException ex) {
clear(); clear();
throw new CaseActionException("Error setting up Case XML file, ", ex); throw new CaseActionException(
NbBundle.getMessage(this.getClass(), "XMLCaseManagement.create.exception.msg"), ex);
} }
doc = docBuilder.newDocument(); doc = docBuilder.newDocument();
@ -531,7 +533,8 @@ import org.xml.sax.SAXException;
@Override @Override
public void writeFile() throws CaseActionException { public void writeFile() throws CaseActionException {
if (doc == null || caseName.equals("")) { if (doc == null || caseName.equals("")) {
throw new CaseActionException("No set case to write management file for."); throw new CaseActionException(
NbBundle.getMessage(this.getClass(), "XMLCaseManagement.writeFile.exception.noCase.msg"));
} }
// Prepare the DOM document for writing // Prepare the DOM document for writing
@ -549,7 +552,8 @@ import org.xml.sax.SAXException;
xformer = tfactory.newTransformer(); xformer = tfactory.newTransformer();
} catch (TransformerConfigurationException ex) { } catch (TransformerConfigurationException ex) {
logger.log(Level.SEVERE, "Could not setup tranformer and write case file"); logger.log(Level.SEVERE, "Could not setup tranformer and write case file");
throw new CaseActionException("Error writing to case file", ex); throw new CaseActionException(
NbBundle.getMessage(this.getClass(), "XMLCaseManagement.writeFile.exception.errWriteToFile.msg"), ex);
} }
//Setup indenting to "pretty print" //Setup indenting to "pretty print"
@ -560,7 +564,8 @@ import org.xml.sax.SAXException;
xformer.transform(source, result); xformer.transform(source, result);
} catch (TransformerException ex) { } catch (TransformerException ex) {
logger.log(Level.SEVERE, "Could not run tranformer and write case file"); logger.log(Level.SEVERE, "Could not run tranformer and write case file");
throw new CaseActionException("Error writing to case file", ex); throw new CaseActionException(
NbBundle.getMessage(this.getClass(), "XMLCaseManagement.writeFile.exception.errWriteToFile.msg"), ex);
} }
// preparing the output file // preparing the output file
@ -597,11 +602,17 @@ import org.xml.sax.SAXException;
db = dbf.newDocumentBuilder(); db = dbf.newDocumentBuilder();
doc = db.parse(file); doc = db.parse(file);
} catch (ParserConfigurationException ex) { } catch (ParserConfigurationException ex) {
throw new CaseActionException("Error reading case XML file: " + conFilePath, ex); throw new CaseActionException(
NbBundle.getMessage(this.getClass(), "XMLCaseManagement.open.exception.errReadXMLFile.msg",
conFilePath), ex);
} catch (SAXException ex) { } catch (SAXException ex) {
throw new CaseActionException("Error reading case XML file: " + conFilePath, ex); throw new CaseActionException(
NbBundle.getMessage(this.getClass(), "XMLCaseManagement.open.exception.errReadXMLFile.msg",
conFilePath), ex);
} catch (IOException ex) { } catch (IOException ex) {
throw new CaseActionException("Error reading case XML file: " + conFilePath, ex); throw new CaseActionException(
NbBundle.getMessage(this.getClass(), "XMLCaseManagement.open.exception.errReadXMLFile.msg",
conFilePath), ex);
} }
@ -619,7 +630,13 @@ import org.xml.sax.SAXException;
if (!rootName.equals(TOP_ROOT_NAME)) { if (!rootName.equals(TOP_ROOT_NAME)) {
// throw an error ... // throw an error ...
clear(); clear();
JOptionPane.showMessageDialog(caller, "Error: This is not an Autopsy config file (\"" + file.getName() + "\").\n \nDetail: \nCannot open a non-Autopsy config file (at " + className + ").", "Error", JOptionPane.ERROR_MESSAGE); JOptionPane.showMessageDialog(caller,
NbBundle.getMessage(this.getClass(),
"XMLCaseManagement.open.msgDlg.notAutCase.msg",
file.getName(), className),
NbBundle.getMessage(this.getClass(),
"XMLCaseManagement.open.msgDlg.notAutCase.title"),
JOptionPane.ERROR_MESSAGE);
} else { } else {
/* Autopsy Created Version */ /* Autopsy Created Version */
String createdVersion = getCreatedVersion(); // get the created version String createdVersion = getCreatedVersion(); // get the created version

View File

@ -0,0 +1,16 @@
Metadata.tableRowTitle.name=Name
Metadata.tableRowTitle.size=Size
Metadata.tableRowTitle.fileNameAlloc=File Name Allocation
Metadata.tableRowTitle.metadataAlloc=Metadata Allocation
Metadata.tableRowTitle.modified=Modified
Metadata.tableRowTitle.accessed=Accessed
Metadata.tableRowTitle.created=Created
Metadata.tableRowTitle.changed=Changed
Metadata.tableRowContent.md5notCalc=Not calculated
Metadata.tableRowTitle.md5=MD5
Metadata.tableRowTitle.hashLookupResults=Hash Lookup Results
Metadata.tableRowTitle.internalid=Internal ID
Metadata.tableRowTitle.localPath=Local Path
Metadata.title=Metadata
Metadata.toolTip=Displays metadata about the file.
Metadata.nodeText.nonFilePassedIn=Non-file passed in

View File

@ -0,0 +1,16 @@
Metadata.tableRowTitle.name=\u540D\u79F0
Metadata.tableRowTitle.size=\u30B5\u30A4\u30BA
Metadata.tableRowTitle.fileNameAlloc=\u30D5\u30A1\u30A4\u30EB\u30A2\u30ED\u30B1\u30FC\u30B7\u30E7\u30F3\u72B6\u614B
Metadata.tableRowTitle.metadataAlloc=\u30E1\u30BF\u30C7\u30FC\u30BF\u30A2\u30ED\u30B1\u30FC\u30B7\u30E7\u30F3\u72B6\u614B
Metadata.tableRowTitle.modified=\u4FEE\u6B63\u6E08\u307F
Metadata.tableRowTitle.accessed=\u30A2\u30AF\u30BB\u30B9\u6E08\u307F
Metadata.tableRowTitle.created=\u4F5C\u6210\u6E08\u307F
Metadata.tableRowTitle.changed=\u5909\u66F4\u6E08\u307F
Metadata.tableRowContent.md5notCalc=\u672A\u8A08\u7B97
Metadata.tableRowTitle.md5=MD5
Metadata.tableRowTitle.hashLookupResults=\u30CF\u30C3\u30B7\u30E5\u30EB\u30C3\u30AF\u30A2\u30C3\u30D7\u7D50\u679C
Metadata.tableRowTitle.internalid=\u5185\u90E8ID
Metadata.tableRowTitle.localPath=\u30ED\u30FC\u30AB\u30EB\u30D1\u30B9
Metadata.title=\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=\u51E6\u7406\u4E2D\u306E\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306F\u30D5\u30A1\u30A4\u30EB\u3067\u306F\u3042\u308A\u307E\u305B\u3093

View File

@ -21,6 +21,7 @@ package org.sleuthkit.autopsy.contentviewers;
import java.awt.Component; import java.awt.Component;
import org.openide.nodes.Node; import org.openide.nodes.Node;
import org.openide.util.NbBundle;
import org.openide.util.lookup.ServiceProvider; import org.openide.util.lookup.ServiceProvider;
import org.sleuthkit.autopsy.corecomponentinterfaces.DataContentViewer; import org.sleuthkit.autopsy.corecomponentinterfaces.DataContentViewer;
import org.sleuthkit.autopsy.datamodel.AbstractAbstractFileNode; import org.sleuthkit.autopsy.datamodel.AbstractAbstractFileNode;
@ -122,7 +123,7 @@ public class Metadata extends javax.swing.JPanel implements DataContentViewer
public void setNode(Node node) { public void setNode(Node node) {
AbstractFile file = node.getLookup().lookup(AbstractFile.class); AbstractFile file = node.getLookup().lookup(AbstractFile.class);
if (file == null) { if (file == null) {
setText("Non-file passed in"); setText(NbBundle.getMessage(this.getClass(), "Metadata.nodeText.nonFilePassedIn"));
return; return;
} }
@ -130,29 +131,29 @@ public class Metadata extends javax.swing.JPanel implements DataContentViewer
startTable(sb); startTable(sb);
try { try {
addRow(sb, "Name", file.getUniquePath()); addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.name"), file.getUniquePath());
} catch (TskCoreException ex) { } catch (TskCoreException ex) {
addRow(sb, "Name", file.getParentPath() + "/" + file.getName()); addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.name"), file.getParentPath() + "/" + file.getName());
} }
addRow(sb, "Size", new Long(file.getSize()).toString() ); addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.size"), new Long(file.getSize()).toString() );
addRow(sb, "File Name Allocation", file.getDirFlagAsString()); addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.fileNameAlloc"), file.getDirFlagAsString());
addRow(sb, "Metadata Allocation", file.getMetaFlagsAsString()); addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.metadataAlloc"), file.getMetaFlagsAsString());
addRow(sb, "Modified", ContentUtils.getStringTime(file.getMtime(), file)); addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.modified"), ContentUtils.getStringTime(file.getMtime(), file));
addRow(sb, "Accessed", ContentUtils.getStringTime(file.getAtime(), file)); addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.accessed"), ContentUtils.getStringTime(file.getAtime(), file));
addRow(sb, "Created", ContentUtils.getStringTime(file.getCrtime(), file)); addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.created"), ContentUtils.getStringTime(file.getCrtime(), file));
addRow(sb, "Changed", ContentUtils.getStringTime(file.getCtime(), file)); addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.changed"), ContentUtils.getStringTime(file.getCtime(), file));
String md5 = file.getMd5Hash(); String md5 = file.getMd5Hash();
if (md5 == null) { if (md5 == null) {
md5 = "Not calculated"; md5 = NbBundle.getMessage(this.getClass(), "Metadata.tableRowContent.md5notCalc");
} }
addRow(sb, "MD5", md5); addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.md5"), md5);
addRow(sb, "Hash Lookup Results", file.getKnown().toString()); addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.hashLookupResults"), file.getKnown().toString());
addRow(sb, "Internal ID", new Long(file.getId()).toString()); addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.internalid"), new Long(file.getId()).toString());
if (file.getType().compareTo(TSK_DB_FILES_TYPE_ENUM.LOCAL) == 0) { if (file.getType().compareTo(TSK_DB_FILES_TYPE_ENUM.LOCAL) == 0) {
addRow(sb, "Local Path", file.getLocalAbsPath()); addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.localPath"), file.getLocalAbsPath());
} }
endTable(sb); endTable(sb);
@ -161,12 +162,12 @@ public class Metadata extends javax.swing.JPanel implements DataContentViewer
@Override @Override
public String getTitle() { public String getTitle() {
return "Metadata"; return NbBundle.getMessage(this.getClass(), "Metadata.title");
} }
@Override @Override
public String getToolTip() { public String getToolTip() {
return "Displays metadata about the file."; return NbBundle.getMessage(this.getClass(), "Metadata.toolTip");
} }
@Override @Override

View File

@ -1,7 +1,7 @@
/* /*
* Autopsy Forensic Browser * Autopsy Forensic Browser
* *
* Copyright 2013 Basis Technology Corp. * Copyright 2013-2014 Basis Technology Corp.
* Contact: carrier <at> sleuthkit <dot> org * Contact: carrier <at> sleuthkit <dot> org
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
@ -21,8 +21,6 @@ package org.sleuthkit.autopsy.contentviewers;
import javax.swing.JTextPane; import javax.swing.JTextPane;
import javax.swing.text.html.HTMLEditorKit; import javax.swing.text.html.HTMLEditorKit;
import javax.swing.text.html.StyleSheet; import javax.swing.text.html.StyleSheet;
import org.sleuthkit.datamodel.AbstractFile;
import org.sleuthkit.datamodel.TskCoreException;
/** /**
* *

View File

@ -10,3 +10,5 @@ OpenIDE-Module-Name=Autopsy-Core
OpenIDE-Module-Short-Description=Autopsy Core Module OpenIDE-Module-Short-Description=Autopsy Core Module
org_sleuthkit_autopsy_core_update_center=http://sleuthkit.org/autopsy/updates.xml org_sleuthkit_autopsy_core_update_center=http://sleuthkit.org/autopsy/updates.xml
Services/AutoupdateType/org_sleuthkit_autopsy_core_update_center.settings=Autopsy Update Center 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).

View File

@ -0,0 +1,14 @@
OpenIDE-Module-Display-Category=\u57FA\u76E4
OpenIDE-Module-Long-Description=\
Autopsy\u30E2\u30B8\u30E5\u30FC\u30EB\u306E\u30B3\u30A2\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\u306A\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\u30FC\u3001\u30B3\u30F3\u30C6\u30F3\u30C4\u30D3\u30E5\u30FC\u30A2\u30FC\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\u30FC\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\u3066\u306F\u3044\u3051\u307E\u305B\u3093\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\u4E0B\u8A18\u3092\u3054\u89A7\u4E0B\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.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\u306E\u3092\u78BA\u8A8D\u3057\u3066\u4E0B\u3055\u3044\u3002\uFF08Oracle JRE > 1.7.10\uFF09

View File

@ -23,6 +23,7 @@ import java.util.List;
import java.util.logging.Level; import java.util.logging.Level;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.embed.swing.JFXPanel; import javafx.embed.swing.JFXPanel;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.Logger;
import org.openide.modules.ModuleInstall; import org.openide.modules.ModuleInstall;
import org.openide.windows.WindowManager; import org.openide.windows.WindowManager;
@ -48,8 +49,11 @@ public class Installer extends ModuleInstall {
* If libtsk_jni tries to load them, they will not be found by * If libtsk_jni tries to load them, they will not be found by
* Windows because they are in special NetBeans folders. So, we * Windows because they are in special NetBeans folders. So, we
* manually load them from within Autopsy so that they are found * manually load them from within Autopsy so that they are found
* via the NetBeans loading setup. * via the NetBeans loading setup. These are copied by the build
* On other platforms, we assume the dependncies are all installed * script when making the ZIP file. In a development environment
* they will need to be loaded from standard places in your system.
*
* On non-Windows platforms, we assume the dependncies are all installed
* and loadable (i.e. a 'make install' was done). * and loadable (i.e. a 'make install' was done).
*/ */
if (PlatformUtil.isWindowsOS()) { if (PlatformUtil.isWindowsOS()) {
@ -110,9 +114,8 @@ public class Installer extends ModuleInstall {
javaFxInit = true; javaFxInit = true;
} catch (UnsatisfiedLinkError | NoClassDefFoundError | Exception e) { } catch (UnsatisfiedLinkError | NoClassDefFoundError | Exception e) {
//in case javafx not present //in case javafx not present
final String msg = "Error initializing JavaFX. "; final String msg = NbBundle.getMessage(Installer.class, "Installer.errorInitJavafx.msg");
final String details = " Some features will not be available. " final String details = NbBundle.getMessage(Installer.class, "Installer.errorInitJavafx.details");
+ " Check that you have the right JRE installed (Oracle JRE > 1.7.10). ";
logger.log(Level.SEVERE, msg logger.log(Level.SEVERE, msg
+ details, e); + details, e);

View File

@ -13,7 +13,8 @@
<attr name="Menu\File\Separator4.instance_hidden\position" intvalue="400"/>--> <attr name="Menu\File\Separator4.instance_hidden\position" intvalue="400"/>-->
<folder name="OptionsDialog"> <folder name="OptionsDialog">
<folder name="General.instance_hidden"/> <!--<folder name="General.instance_hidden"/>-->
<file name="General.instance"/>
<folder name="Keymaps.instance_hidden"/> <!-- Keymap --> <folder name="Keymaps.instance_hidden"/> <!-- Keymap -->
<folder name="Java.instance_hidden"/> <folder name="Java.instance_hidden"/>
<folder name="Advanced.instance_hidden"/> <!-- Miscellaneous --> <folder name="Advanced.instance_hidden"/> <!-- Miscellaneous -->

View File

@ -1 +1,3 @@
OpenIDE-Module-Name=CoreComponentInterfaces OpenIDE-Module-Name=CoreComponentInterfaces
CoreComponentControl.CTL_DirectoryTreeTopComponent=Directory Tree
CoreComponentControl.CTL_FavoritesTopComponent=Favorites

View File

@ -0,0 +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\u306E\u30C4\u30EA\u30FC
CoreComponentControl.CTL_FavoritesTopComponent=\u304A\u6C17\u306B\u5165\u308A

View File

@ -22,6 +22,8 @@ import java.util.Collection;
import java.util.Iterator; import java.util.Iterator;
import java.util.Set; import java.util.Set;
import java.util.logging.Level; import java.util.logging.Level;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.Logger;
import org.openide.util.Lookup; import org.openide.util.Lookup;
import org.openide.windows.Mode; import org.openide.windows.Mode;
@ -37,6 +39,10 @@ import org.sleuthkit.autopsy.corecomponents.DataContentTopComponent;
public class CoreComponentControl { public class CoreComponentControl {
private static final Logger logger = Logger.getLogger(CoreComponentControl.class.getName()); private static final Logger logger = Logger.getLogger(CoreComponentControl.class.getName());
private static final String DIRECTORY_TREE = NbBundle.getMessage(CoreComponentControl.class,
"CoreComponentControl.CTL_DirectoryTreeTopComponent");
private static final String FAVORITES = NbBundle.getMessage(CoreComponentControl.class,
"CoreComponentControl.CTL_FavoritesTopComponent");
/** /**
* Opens all TopComponent windows that are needed ({@link DataExplorer}, {@link DataResult}, and * Opens all TopComponent windows that are needed ({@link DataExplorer}, {@link DataResult}, and
@ -83,6 +89,7 @@ public class CoreComponentControl {
Set<? extends Mode> modes = wm.getModes(); Set<? extends Mode> modes = wm.getModes();
Iterator<? extends Mode> iter = wm.getModes().iterator(); Iterator<? extends Mode> iter = wm.getModes().iterator();
TopComponent directoryTree = null; TopComponent directoryTree = null;
TopComponent favorites = null; TopComponent favorites = null;
String tcName = ""; String tcName = "";
@ -94,16 +101,13 @@ public class CoreComponentControl {
logger.log(Level.INFO, "tcName was null"); logger.log(Level.INFO, "tcName was null");
tcName = ""; tcName = "";
} }
switch (tcName) { // switch requires constant strings, so converted to if/else.
case "Directory Tree": if (DIRECTORY_TREE.equals(tcName)) {
directoryTree = tc; directoryTree = tc;
break; } else if (FAVORITES.equals(tcName)) {
case "Favorites":
favorites = tc; favorites = tc;
break; } else {
default:
tc.close(); tc.close();
break;
} }
} }
} }

View File

@ -1,38 +1,15 @@
CTL_DataContentAction=DataContent CTL_DataContentAction=DataContent
CTL_DataContentTopComponent=Data Content CTL_DataContentTopComponent=Data Content
CTL_NodeTableAction=NodeTable
CTL_NodeTableTopComponent=NodeTable Window
CTL_HexViewAction=HexView
CTL_HexViewTopComponent=Hex View
CTL_StringViewAction=StringView
CTL_StringViewTopComponent=String View
CTL_CustomAboutAction=About CTL_CustomAboutAction=About
OptionsCategory_Name_General=Display
OptionsCategory_Keywords_General=display
HINT_DataContentTopComponent=This is a DataContent window HINT_DataContentTopComponent=This is a DataContent window
HINT_NodeTableTopComponent=This is a DataResult window HINT_NodeTableTopComponent=This is a DataResult window
HINT_HexViewTopComponent=This is a HexView window
HINT_StringViewTopComponent=This is a StringView window
OpenIDE-Module-Name=CoreComponents OpenIDE-Module-Name=CoreComponents
OutputViewPanel.prevPageButton.text=Previous Page
OutputViewPanel.totalPageLabel.text=100
OutputViewPanel.ofLabel.text=of
OutputViewPanel.currentPageLabel.text=1
OutputViewPanel.pageLabel.text=Page:
OutputViewPanel.filePathLabel.text=FilePath
OutputViewPanel.nextPageButton.text=Next Page
DataContentViewerHex.filePathLabel.text=FilePath
DataContentViewerHex.pageLabel.text=Page:
DataContentViewerHex.currentPageLabel.text=1
DataContentViewerHex.ofLabel.text=of
DataContentViewerHex.totalPageLabel.text=100
DataContentViewerHex.prevPageButton.text= DataContentViewerHex.prevPageButton.text=
DataContentViewerHex.nextPageButton.text= DataContentViewerHex.nextPageButton.text=
DataContentViewerString.totalPageLabel.text=100
DataContentViewerString.prevPageButton.text= DataContentViewerString.prevPageButton.text=
DataContentViewerString.nextPageButton.text= DataContentViewerString.nextPageButton.text=
DataContentViewerString.filePathLabel.text=FilePath
DataContentViewerString.pageLabel.text=Page:
DataContentViewerString.currentPageLabel.text=1
DataContentViewerString.ofLabel.text=of
DataContentViewerHex.pageLabel.text_1=Page: DataContentViewerHex.pageLabel.text_1=Page:
DataContentViewerHex.currentPageLabel.text_1=1 DataContentViewerHex.currentPageLabel.text_1=1
DataContentViewerHex.ofLabel.text_1=of DataContentViewerHex.ofLabel.text_1=of
@ -41,7 +18,6 @@ DataContentViewerString.pageLabel.text_1=Page:
DataContentViewerString.currentPageLabel.text_1=1 DataContentViewerString.currentPageLabel.text_1=1
DataContentViewerString.ofLabel.text_1=of DataContentViewerString.ofLabel.text_1=of
DataContentViewerString.totalPageLabel.text_1=100 DataContentViewerString.totalPageLabel.text_1=100
DataContentViewerPicture.picLabel.text=[Picture goes Here]
DataContentViewerHex.pageLabel2.text=Page DataContentViewerHex.pageLabel2.text=Page
DataContentViewerString.pageLabel2.text=Page DataContentViewerString.pageLabel2.text=Page
@ -54,13 +30,13 @@ URL_ON_IMG=http://www.sleuthkit.org/
#SwingBrowser #SwingBrowser
LBL_SwingBrowserDescription=Simple HTML Browser based on a Swing component #LBL_SwingBrowserDescription=Simple HTML Browser based on a Swing component
MSG_cannot_create_browser=Cannot create Swing HTML Browser. #MSG_cannot_create_browser=Cannot create Swing HTML Browser.
Services/Browsers/SwingBrowser.settings=Swing HTML Browser #Services/Browsers/SwingBrowser.settings=Swing HTML Browser
LBL_Close=Close LBL_Close=Close
MNE_Close=C #MNE_Close=C
ACSN_Close=Close #ACSN_Close=Close
ACSD_Close=Close #ACSD_Close=Close
DataContentViewerString.copyMenuItem.text=Copy DataContentViewerString.copyMenuItem.text=Copy
DataContentViewerHex.copyMenuItem.text=Copy DataContentViewerHex.copyMenuItem.text=Copy
DataContentViewerString.selectAllMenuItem.text=Select All DataContentViewerString.selectAllMenuItem.text=Select All
@ -107,8 +83,60 @@ MediaViewVideoPanel.progressLabel.text=00:00
DataContentViewerMedia.AccessibleContext.accessibleDescription= DataContentViewerMedia.AccessibleContext.accessibleDescription=
MediaViewVideoPanel.infoLabel.text=info MediaViewVideoPanel.infoLabel.text=info
GeneralPanel.jLabel2.text=When displaying times: GeneralPanel.jLabel2.text=When displaying times:
GeneralPanel.useLocalTimeRB.text=Use local timezone GeneralPanel.useLocalTimeRB.text=Use local time zone
GeneralPanel.useGMTTimeRB.text=Use GMT GeneralPanel.useGMTTimeRB.text=Use GMT
GeneralPanel.jLabel3.text=Hide known files in the Directory Listing when: GeneralPanel.jLabel3.text=Hide known files (i.e. those in the NIST NSRL) in the:
GeneralPanel.viewsHideKnownCB.text=Selecting under Views GeneralPanel.viewsHideKnownCB.text= Views area
GeneralPanel.dataSourcesHideKnownCB.text=Selecting under Data Sources GeneralPanel.dataSourcesHideKnownCB.text=Data Sources area (the directory hierarchy)
DataContentViewerArtifact.waitText=Retrieving and preparing data, please wait...
DataContentViewerArtifact.errorText=Error retrieving result
DataContentViewerArtifact.title=Results
DataContentViewerArtifact.toolTip=Displays Results associated with the file
DataContentViewerHex.goToPageTextField.msgDlg=Please enter a valid page number between 1 and {0}
DataContentViewerHex.goToPageTextField.err=Invalid page number
DataContentViewerHex.setDataView.errorText=(offset {0}-{1} could not be read)
DataContentViewerHex.title=Hex
DataContentViewerHex.toolTip=Displays the binary contents of a file as hexidecimal, with bytes that are displayable as ASCII characters on the right.
DataContentViewerMedia.title=Media
DataContentViewerMedia.toolTip=Displays supported multimedia files (images, videos, audio)
DataContentViewerString.goToPageTextField.msgDlg=Please enter a valid page number between 1 and {0}
DataContentViewerString.goToPageTextField.err=Invalid page number
DataContentViewerString.setDataView.errorText=(offset {0}-{1} could not be read)
DataContentViewerString.setDataView.errorNoText=(offset {0}-{1} contains no text)
DataContentViewerString.title=Strings
DataContentViewerString.toolTip=Displays ASCII and Unicode strings extracted from the file.
DataResultPanel.dummyNodeDisplayName=Please Wait...
DataResultViewerTable.firstColLbl=Name
DataResultViewerTable.illegalArgExc.noChildFromParent=Couldn't get a child Node from the given parent.
DataResultViewerTable.illegalArgExc.childWithoutPropertySet=Child Node doesn't have the regular PropertySet.
DataResultViewerTable.title=Table
DataResultViewerTable.dummyNodeDisplayName=Please Wait...
DataResultViewerThumbnail.title=Thumbnail
DataResultViewerThumbnail.goToPageTextField.msgDlg=Please enter a valid page number between 1 and {0}
DataResultViewerThumbnail.goToPageTextField.err=Invalid page number
DataResultViewerThumbnail.genThumbs=Generating Thumbnails...
DataResultViewerThumbnail.pageNumbers.curOfTotal={0} of {1}
FXVideoPanel.mediaPane.infoLabel=Playback of deleted videos is not supported, use an external player.
FXVideoPanel.progress.bufferingFile=Buffering {0}
FXVideoPanel.progressLabel.buffering=Buffering...
FXVideoPanel.media.unsupportedFormat=Unsupported Format.
GeneralOptionsPanelController.moduleErr=Module Error
GeneralOptionsPanelController.moduleErr.msg=A module caused an error listening to GeneralOptionsPanelController updates. See log to determine which module. Some data could be incomplete.
GstVideoPanel.cannotProcFile.err=The media player cannot process this file.
GstVideoPanel.initGst.gstException.msg=Error initializing gstreamer for audio/video viewing and frame extraction capabilities. Video and audio viewing will be disabled.
GstVideoPanel.initGst.otherException.msg=Error initializing gstreamer for audio/video viewing 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.
GstVideoPanel.exception.problemFile.msg=Cannot capture frames from this file ({0}).
GstVideoPanel.exception.problemPlay.msg=Problem with video file; problem when attempting to play while obtaining duration.
GstVideoPanel.exception.problemPause.msg=Problem with video file; problem when attempting to pause while obtaining duration.
GstVideoPanel.exception.problemPauseCaptFrame.msg=Problem with video file; problem when attempting to pause while capturing a frame.
GstVideoPanel.exception.problemPlayCaptFrame.msg=Problem with video file; problem when attempting to play while capturing a frame.
GstVideoPanel.exception.problemStopCaptFrame.msg=Problem with video file; problem when attempting to stop while capturing a frame.
GstVideoPanel.progress.buffering=Buffering...
GstVideoPanel.progressLabel.bufferingErr=Error buffering file
MediaViewImagePanel.imgFileTooLarge.msg=Could not load image file (too large)\: {0}
ProductInformationPanel.actVerboseLogging.text=Activate verbose logging
ProductInformationPanel.verbLoggingEnabled.text=Verbose logging enabled
ProductInformationPanel.propertyUnknown.text=unknown
ProductInformationPanel.getVMValue.text={0} {1}
TableFilterNode.displayName.text=Name

View File

@ -0,0 +1,115 @@
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
DataContentViewerHex.currentPageLabel.text_1=1
DataContentViewerHex.totalPageLabel.text_1=100
DataContentViewerString.pageLabel.text_1=\u30DA\u30FC\u30B8\uFF1A
DataContentViewerString.currentPageLabel.text_1=1
DataContentViewerString.totalPageLabel.text_1=100
DataContentViewerHex.pageLabel2.text=\u30DA\u30FC\u30B8
DataContentViewerString.pageLabel2.text=\u30DA\u30FC\u30B8
Format_OperatingSystem_Value={0} \u30D0\u30FC\u30B8\u30E7\u30F3 {1} \u30A2\u30FC\u30AD\u30C6\u30AF\u30C1\u30E3\u3000{2}
URL_ON_IMG=http\://www.sleuthkit.org/
LBL_Close=\u9589\u3058\u308B
DataContentViewerString.copyMenuItem.text=\u30B3\u30D4\u30FC
DataContentViewerHex.copyMenuItem.text=\u30B3\u30D4\u30FC
DataContentViewerString.selectAllMenuItem.text=\u3059\u3079\u3066\u9078\u629E
DataContentViewerHex.selectAllMenuItem.text=\u3059\u3079\u3066\u9078\u629E
DataContentViewerArtifact.totalPageLabel.text=100
DataContentViewerArtifact.pageLabel2.text=\u7D50\u679C
DataContentViewerArtifact.currentPageLabel.text=1
DataContentViewerArtifact.copyMenuItem.text=\u30B3\u30D4\u30FC
DataContentViewerArtifact.selectAllMenuItem.text=\u3059\u3079\u3066\u9078\u629E
DataContentViewerArtifact.pageLabel.text=\u7D50\u679C\uFF1A
AdvancedConfigurationDialog.applyButton.text=OK
DataContentViewerString.goToPageLabel.text=\u4E0B\u8A18\u306E\u30DA\u30FC\u30B8\u3078\u79FB\u52D5\uFF1A
DataContentViewerHex.goToPageLabel.text=\u4E0B\u8A18\u306E\u30DA\u30FC\u30B8\u3078\u79FB\u52D5\uFF1A
DataContentViewerString.languageLabel.text=\u30B9\u30AF\u30EA\u30D7\u30C8\uFF1A
DataContentViewerString.languageCombo.toolTipText=\u30D0\u30A4\u30CA\u30EA\u30B9\u30C8\u30EA\u30F3\u30B0\u306E\u51E6\u7406\uFF08\u62BD\u51FA\u304A\u3088\u3073\u30C7\u30B3\u30FC\u30C9\uFF09\u306E\u969B\u306B\u4F7F\u7528\u3059\u308B\u8A00\u8A9E
DataResultViewerThumbnail.pageLabel.text=\u30DA\u30FC\u30B8\uFF1A
DataResultViewerThumbnail.pagesLabel.text=\u30DA\u30FC\u30B8\uFF1A
DataResultViewerThumbnail.imagesLabel.text=\u30A4\u30E1\u30FC\u30B8\uFF1A
DataResultViewerThumbnail.imagesRangeLabel.text=-
DataResultViewerThumbnail.pageNumLabel.text=-
DataResultViewerThumbnail.goToPageLabel.text=\u4E0B\u8A18\u306E\u30DA\u30FC\u30B8\u306B\u79FB\u52D5\uFF1A
GeneralPanel.jLabel1.text=\u30D5\u30A1\u30A4\u30EB\u3092\u9078\u629E\u3059\u308B\u969B\uFF1A
GeneralPanel.useBestViewerRB.text=\u6700\u3082\u5C02\u9580\u7684\u306A\u30D5\u30A1\u30A4\u30EB\u30D3\u30E5\u30FC\u30A2\u306B\u5909\u66F4
GeneralPanel.keepCurrentViewerRB.text=\u305D\u306E\u307E\u307E\u540C\u3058\u30D5\u30A1\u30A4\u30EB\u30D3\u30E5\u30FC\u30A2\u3092\u4F7F\u7528
GeneralPanel.useBestViewerRB.toolTipText=\u4F8B\u3048\u3070\u3001JPEG\u304C\u9078\u629E\u3055\u308C\u305F\u969B\u306B\u306FHEX\u304B\u3089\u30E1\u30C7\u30A3\u30A2\u306B\u5909\u66F4\u3059\u308B\u3002
GeneralPanel.keepCurrentViewerRB.toolTipText=\u4F8B\u3048\u3070\u3001JPEG\u304C\u9078\u629E\u3055\u308C\u305F\u969B\u306B\u305D\u306E\u307E\u307EHEX\u30D3\u30E5\u30FC\u3092\u4F7F\u7528\u3002
AdvancedConfigurationDialog.cancelButton.text=\u30AD\u30E3\u30F3\u30BB\u30EB
DataResultPanel.directoryTablePath.text=\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u30D1\u30B9
DataResultPanel.numberMatchLabel.text=0
DataResultPanel.matchLabel.text=\u7D50\u679C
MediaViewVideoPanel.pauseButton.text=\u25BA
MediaViewVideoPanel.progressLabel.text=00\:00
MediaViewVideoPanel.infoLabel.text=\u60C5\u5831
GeneralPanel.jLabel2.text=\u30A2\u30A4\u30C6\u30E0\u3092\u8868\u793A\u3059\u308B\u969B\uFF1A
GeneralPanel.useLocalTimeRB.text=\u30ED\u30FC\u30AB\u30EB\u30BF\u30A4\u30E0\u30BE\u30FC\u30F3\u3092\u4F7F\u7528
GeneralPanel.useGMTTimeRB.text=GMT\u3092\u4F7F\u7528
GeneralPanel.jLabel3.text=\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u30EA\u30B9\u30C6\u30A3\u30F3\u30B0\u5185\u306E\u65E2\u77E5\u30D5\u30A1\u30A4\u30EB\u306F\u4E0B\u8A18\u306E\u5834\u5408\u306B\u96A0\u3059\uFF1A
GeneralPanel.viewsHideKnownCB.text=\u30D3\u30E5\u30FC\u304B\u3089\u9078\u629E\u3057\u3066\u3044\u308B\u5834\u5408
GeneralPanel.dataSourcesHideKnownCB.text=\u30C7\u30FC\u30BF\u30BD\u30FC\u30B9\u304B\u3089\u9078\u629E\u3057\u3066\u3044\u308B\u5834\u5408
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\u2026
DataContentViewerArtifact.errorText=\u7D50\u679C\u306E\u53D6\u8FBC\u307F\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
DataContentViewerMedia.title=\u30E1\u30C7\u30A3\u30A2
DataContentViewerMedia.toolTip=\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u308B\u30DE\u30EB\u30C1\u30E1\u30C7\u30A3\u30A2\u30D5\u30A1\u30A4\u30EB\uFF08\u753B\u50CF\u3001\u30D3\u30C7\u30AA\u3001\u30AA\u30FC\u30C7\u30A3\u30AA\uFF09\u3092\u8868\u793A\u3057\u307E\u3059\u3002
DataContentViewerString.goToPageTextField.msgDlg=\uFF11\u304B\u3089{0}\u306E\u9593\u306E\u6709\u52B9\u306A\u30DA\u30FC\u30B8\u6570\u3092\u5165\u529B\u3057\u3066\u4E0B\u3055\u3044
DataContentViewerString.goToPageTextField.err=\u7121\u52B9\u306A\u30DA\u30FC\u30B8\u6570
DataContentViewerString.setDataView.errorText=\uFF08\u30AA\u30D5\u30BB\u30C3\u30C8{0}-{1}\u306F\u8AAD\u307F\u53D6\u308C\u307E\u305B\u3093\u3067\u3057\u305F\uFF09\
DataContentViewerString.setDataView.errorNoText=\uFF08\u30AA\u30D5\u30BB\u30C3\u30C8{0}-{1}\u306B\u306F\u30C6\u30AD\u30B9\u30C8\u304C\u3042\u308A\u307E\u305B\u3093\uFF09
DataContentViewerString.title=\u30B9\u30C8\u30EA\u30F3\u30B0
DataContentViewerString.toolTip=\u30D5\u30A1\u30A4\u30EB\u304B\u3089\u62BD\u51FA\u3055\u308C\u305FASCII\u304A\u3088\u3073\u30E6\u30CB\u30B3\u30FC\u30C9\u306E\u30B9\u30C8\u30EA\u30F3\u30B0\u304C\u8868\u793A\u3055\u308C\u307E\u3059\u3002
DataResultPanel.dummyNodeDisplayName=\u3057\u3070\u3089\u304F\u304A\u5F85\u3061\u304F\u3060\u3055\u3044\u2026
DataResultViewerTable.firstColLbl=\u540D\u79F0
DataResultViewerTable.illegalArgExc.noChildFromParent=\u6307\u5B9A\u3055\u308C\u305F\u30DA\u30A2\u30EC\u30F3\u30C8\u304B\u3089\u30C1\u30E3\u30A4\u30EB\u30C9\u30CE\u30FC\u30C9\u3092\u5165\u624B\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.dummyNodeDisplayName=\u3057\u3070\u3089\u304F\u304A\u5F85\u3061\u304F\u3060\u3055\u3044\u2026
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}\u3064\u76EE
FXVideoPanel.mediaPane.infoLabel=\u524A\u9664\u3055\u308C\u305F\u30D3\u30C7\u30AA\u306E\u518D\u751F\u306F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u5916\u90E8\u30D7\u30EC\u30FC\u30E4\u30FC\u3092\u4F7F\u7528\u3057\u3066\u4E0B\u3055\u3044\u3002
FXVideoPanel.progress.bufferingFile={0}\u3092\u30D0\u30C3\u30D5\u30A1\u30EA\u30F3\u30B0
FXVideoPanel.progressLabel.buffering=\u30D0\u30C3\u30D5\u30A1\u30EA\u30F3\u30B0\u4E2D\u2026
FXVideoPanel.media.unsupportedFormat=\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u306A\u3044\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8\u3067\u3059\u3002
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\u3067\u78BA\u8A8D\u3057\u3066\u4E0B\u3055\u3044\u3002\u4E00\u90E8\u306E\u30C7\u30FC\u30BF\u304C\u4E0D\u5B8C\u5168\u304B\u3082\u3057\u308C\u307E\u305B\u3093\u3002
GstVideoPanel.cannotProcFile.err=\u30E1\u30C7\u30A4\u30A2\u30D7\u30EC\u30FC\u30E4\u30FC\u304C\u3053\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u51E6\u7406\u3067\u304D\u307E\u305B\u3093\u3002
GstVideoPanel.initGst.gstException.msg=\u30AA\u30FC\u30C7\u30A3\u30AA\uFF0F\u30D3\u30C7\u30AA\u306E\u518D\u751F\u304A\u3088\u3073\u30D5\u30EC\u30FC\u30E0\u306E\u62BD\u51FA\u306B\u4F7F\u7528\u3059\u308BGStreamer\u306E\u521D\u671F\u5316\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002\u30D3\u30C7\u30AA\u304A\u3088\u3073\u30AA\u30FC\u30C7\u30A3\u30AA\u518D\u751F\u304C\u7121\u52B9\u5316\u3055\u308C\u307E\u3059\u3002
GstVideoPanel.initGst.otherException.msg=\u30AA\u30FC\u30C7\u30A3\u30AA\uFF0F\u30D3\u30C7\u30AA\u306E\u518D\u751F\u304A\u3088\u3073\u30D5\u30EC\u30FC\u30E0\u306E\u62BD\u51FA\u306B\u4F7F\u7528\u3059\u308BGStreamer\u306E\u521D\u671F\u5316\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002\u30D3\u30C7\u30AA\u304A\u3088\u3073\u30AA\u30FC\u30C7\u30A3\u30AA\u518D\u751F\u304C\u7121\u52B9\u5316\u3055\u308C\u307E\u3059\u3002
GstVideoPanel.setupVideo.infoLabel.text=\u524A\u9664\u3055\u308C\u305F\u30D3\u30C7\u30AA\u306E\u518D\u751F\u306F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u5916\u90E8\u30D7\u30EC\u30FC\u30E4\u30FC\u3092\u4F7F\u7528\u3057\u3066\u4E0B\u3055\u3044\u3002
GstVideoPanel.exception.problemFile.msg=\u30D5\u30A1\u30A4\u30EB({0})\u304B\u3089\u306F\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\uFF1B\u9577\u3055\u3092\u78BA\u8A8D\u4E2D\u306B\u518D\u751F\u3092\u3057\u3088\u3046\u3068\u3057\u305F\u969B\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002
LBL_Description=<div style\="font-size\: 12pt; font-family\: Verdana, 'Verdana CE', Arial, 'Arial CE', 'Lucida Grande CE', lucida, 'Helvetica CE', sans-serif;">\n <b>\u88FD\u54C1\u30D0\u30FC\u30B8\u30E7\u30F3\uFF1A</b> {0} ({9}) <br><b>Sleuth Kit\u30D0\u30FC\u30B8\u30E7\u30F3\uFF1A</b> {7} <br><b>Netbeans RCP\u30D3\u30EB\u30C9\:</b> {8} <br> <b>Java\:</b> {1}; {2}<br> <b>\u30B7\u30B9\u30C6\u30E0\uFF1A</b> {3}; {4}; {5}<br><b>\u30E6\u30FC\u30B6\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u540D</b> {6}</div>
LBL_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>
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
MediaViewImagePanel.imgFileTooLarge.msg=\u753B\u50CF\u30D5\u30A1\u30A4\u30EB\u3092\u8AAD\u307F\u8FBC\u3081\u307E\u305B\u3093\u3067\u3057\u305F\uFF08\u5927\u304D\u3059\u304E\u3067\u3059\uFF09\uFF1A {0}
ProductInformationPanel.actVerboseLogging.text=Verbose\u30ED\u30B0\u3092\u6709\u52B9\u5316
ProductInformationPanel.verbLoggingEnabled.text=Verbose\u30ED\u30B0\u304C\u6709\u52B9\u3067\u3059
ProductInformationPanel.propertyUnknown.text=\u4E0D\u660E
ProductInformationPanel.getVMValue.text={0} {1}
TableFilterNode.displayName.text=\u540D\u79F0
CTL_DataContentAction=\u30C7\u30FC\u30BF\u30B3\u30F3\u30C6\u30F3\u30C4
OptionsCategory_Name_General=\u4E00\u822C
OptionsCategory_Keywords_General=\u4E00\u822C
CTL_CustomAboutAction=Autopsy\u306B\u3064\u3044\u3066
DataContentViewerHex.ofLabel.text_1=of
DataContentViewerString.ofLabel.text_1=of
DataContentViewerArtifact.ofLabel.text=of

View File

@ -37,7 +37,7 @@ import org.sleuthkit.autopsy.coreutils.Logger;
ProductInformationPanel pip = new ProductInformationPanel(); ProductInformationPanel pip = new ProductInformationPanel();
DialogDescriptor descriptor = new DialogDescriptor( DialogDescriptor descriptor = new DialogDescriptor(
pip, pip,
NbBundle.getMessage(AboutAction.class, "About_title"), NbBundle.getMessage(CustomAboutAction.class, "CTL_CustomAboutAction"),
true, true,
new Object[0], new Object[0],
null, null,

View File

@ -27,6 +27,8 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
import java.util.logging.Level; import java.util.logging.Level;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.Logger;
import javax.swing.JMenuItem; import javax.swing.JMenuItem;
import javax.swing.JTextPane; import javax.swing.JTextPane;
@ -53,8 +55,8 @@ import org.sleuthkit.datamodel.TskCoreException;
public class DataContentViewerArtifact extends javax.swing.JPanel implements DataContentViewer{ public class DataContentViewerArtifact extends javax.swing.JPanel implements DataContentViewer{
private final static Logger logger = Logger.getLogger(DataContentViewerArtifact.class.getName()); private final static Logger logger = Logger.getLogger(DataContentViewerArtifact.class.getName());
private final static String WAIT_TEXT = "Retrieving and preparing data, please wait..."; private final static String WAIT_TEXT = NbBundle.getMessage(DataContentViewerArtifact.class, "DataContentViewerArtifact.waitText");
private final static String ERROR_TEXT = "Error retrieving result"; private final static String ERROR_TEXT = NbBundle.getMessage(DataContentViewerArtifact.class, "DataContentViewerArtifact.errorText");
private Node currentNode; // @@@ Remove this when the redundant setNode() calls problem is fixed. private Node currentNode; // @@@ Remove this when the redundant setNode() calls problem is fixed.
private int currentPage = 1; private int currentPage = 1;
private final Object lock = new Object(); private final Object lock = new Object();
@ -288,12 +290,12 @@ public class DataContentViewerArtifact extends javax.swing.JPanel implements Dat
@Override @Override
public String getTitle() { public String getTitle() {
return "Results"; return NbBundle.getMessage(this.getClass(), "DataContentViewerArtifact.title");
} }
@Override @Override
public String getToolTip() { public String getToolTip() {
return "Displays Results associated with the file"; return NbBundle.getMessage(this.getClass(), "DataContentViewerArtifact.toolTip");
} }
@Override @Override

View File

@ -23,6 +23,8 @@ import java.awt.Cursor;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import java.util.logging.Level; import java.util.logging.Level;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.Logger;
import javax.swing.JMenuItem; import javax.swing.JMenuItem;
import javax.swing.JOptionPane; import javax.swing.JOptionPane;
@ -257,8 +259,13 @@ public class DataContentViewerHex extends javax.swing.JPanel implements DataCont
pageNumber = totalPages + 1; pageNumber = totalPages + 1;
} }
if (pageNumber > totalPages || pageNumber < 1) { if (pageNumber > totalPages || pageNumber < 1) {
JOptionPane.showMessageDialog(this, "Please enter a valid page number between 1 and " + totalPages, JOptionPane.showMessageDialog(this,
"Invalid page number", JOptionPane.WARNING_MESSAGE); NbBundle.getMessage(this.getClass(),
"DataContentViewerHex.goToPageTextField.msgDlg",
totalPages),
NbBundle.getMessage(this.getClass(),
"DataContentViewerHex.goToPageTextField.err"),
JOptionPane.WARNING_MESSAGE);
return; return;
} }
setDataView(pageNumber); setDataView(pageNumber);
@ -309,16 +316,16 @@ public class DataContentViewerHex extends javax.swing.JPanel implements DataCont
try { try {
bytesRead = dataSource.read(data, offset, pageLength); // read the data bytesRead = dataSource.read(data, offset, pageLength); // read the data
} catch (TskException ex) { } catch (TskException ex) {
errorText = "(offset " + offset + "-" + (offset + pageLength) errorText = NbBundle.getMessage(this.getClass(), "DataContentViewerHex.setDataView.errorText", offset,
+ " could not be read)"; offset + pageLength);
logger.log(Level.WARNING, "Error while trying to show the hex content.", ex); logger.log(Level.WARNING, "Error while trying to show the hex content.", ex);
} }
} }
// set the data on the bottom and show it // set the data on the bottom and show it
if (bytesRead <= 0) { if (bytesRead <= 0) {
errorText = "(offset " + offset + "-" + (offset + pageLength) errorText = NbBundle.getMessage(this.getClass(), "DataContentViewerHex.setDataView.errorText", offset,
+ " could not be read)"; offset + pageLength);
} }
@ -378,13 +385,12 @@ public class DataContentViewerHex extends javax.swing.JPanel implements DataCont
@Override @Override
public String getTitle() { public String getTitle() {
return "Hex"; return NbBundle.getMessage(this.getClass(), "DataContentViewerHex.title");
} }
@Override @Override
public String getToolTip() { public String getToolTip() {
return "Displays the binary contents of a file as hexidecimal, with " return NbBundle.getMessage(this.getClass(), "DataContentViewerHex.toolTip");
+ "bytes that are displayable as ASCII characters on the right.";
} }
@Override @Override

View File

@ -24,6 +24,8 @@ import java.awt.Dimension;
import java.util.Arrays; import java.util.Arrays;
import java.util.logging.Level; import java.util.logging.Level;
import javax.imageio.ImageIO; import javax.imageio.ImageIO;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.Logger;
import org.openide.nodes.Node; import org.openide.nodes.Node;
import org.openide.util.lookup.ServiceProvider; import org.openide.util.lookup.ServiceProvider;
@ -164,12 +166,12 @@ public class DataContentViewerMedia extends javax.swing.JPanel implements DataCo
@Override @Override
public String getTitle() { public String getTitle() {
return "Media"; return NbBundle.getMessage(this.getClass(), "DataContentViewerMedia.title");
} }
@Override @Override
public String getToolTip() { public String getToolTip() {
return "Displays supported multimedia files (images, videos, audio)"; return NbBundle.getMessage(this.getClass(), "DataContentViewerMedia.toolTip");
} }
@Override @Override

View File

@ -284,6 +284,10 @@
<Events> <Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="languageComboActionPerformed"/> <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="languageComboActionPerformed"/>
</Events> </Events>
<AuxValues>
<AuxValue name="JavaCodeGenerator_CreateCodeCustom" type="java.lang.String" value="new javax.swing.JComboBox&lt;&gt;()"/>
<AuxValue name="JavaCodeGenerator_TypeParameters" type="java.lang.String" value="&lt;SCRIPT&gt;"/>
</AuxValues>
</Component> </Component>
<Component class="javax.swing.JLabel" name="languageLabel"> <Component class="javax.swing.JLabel" name="languageLabel">
<Properties> <Properties>

View File

@ -24,6 +24,8 @@ import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import java.util.List; import java.util.List;
import java.util.logging.Level; import java.util.logging.Level;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.Logger;
import javax.swing.JMenuItem; import javax.swing.JMenuItem;
import javax.swing.JOptionPane; import javax.swing.JOptionPane;
@ -114,7 +116,7 @@ public class DataContentViewerString extends javax.swing.JPanel implements DataC
prevPageButton = new javax.swing.JButton(); prevPageButton = new javax.swing.JButton();
goToPageLabel = new javax.swing.JLabel(); goToPageLabel = new javax.swing.JLabel();
goToPageTextField = new javax.swing.JTextField(); goToPageTextField = new javax.swing.JTextField();
languageCombo = new javax.swing.JComboBox(); languageCombo = new javax.swing.JComboBox<>();
languageLabel = new javax.swing.JLabel(); languageLabel = new javax.swing.JLabel();
copyMenuItem.setText(org.openide.util.NbBundle.getMessage(DataContentViewerString.class, "DataContentViewerString.copyMenuItem.text")); // NOI18N copyMenuItem.setText(org.openide.util.NbBundle.getMessage(DataContentViewerString.class, "DataContentViewerString.copyMenuItem.text")); // NOI18N
@ -286,8 +288,13 @@ public class DataContentViewerString extends javax.swing.JPanel implements DataC
pageNumber = maxPage + 1; pageNumber = maxPage + 1;
} }
if (pageNumber > maxPage || pageNumber < 1) { if (pageNumber > maxPage || pageNumber < 1) {
JOptionPane.showMessageDialog(this, "Please enter a valid page number between 1 and " + maxPage, JOptionPane.showMessageDialog(this,
"Invalid page number", JOptionPane.WARNING_MESSAGE); NbBundle.getMessage(this.getClass(),
"DataContentViewerString.goToPageTextField.msgDlg",
maxPage),
NbBundle.getMessage(this.getClass(),
"DataContentViewerString.goToPageTextField.err"),
JOptionPane.WARNING_MESSAGE);
return; return;
} }
currentOffset = (pageNumber - 1) * pageLength; currentOffset = (pageNumber - 1) * pageLength;
@ -309,7 +316,7 @@ public class DataContentViewerString extends javax.swing.JPanel implements DataC
private javax.swing.JTextField goToPageTextField; private javax.swing.JTextField goToPageTextField;
private javax.swing.JPanel jPanel1; private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane jScrollPane1; private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JComboBox languageCombo; private javax.swing.JComboBox<SCRIPT> languageCombo;
private javax.swing.JLabel languageLabel; private javax.swing.JLabel languageLabel;
private javax.swing.JButton nextPageButton; private javax.swing.JButton nextPageButton;
private javax.swing.JLabel ofLabel; private javax.swing.JLabel ofLabel;
@ -346,8 +353,9 @@ public class DataContentViewerString extends javax.swing.JPanel implements DataC
try { try {
bytesRead = dataSource.read(data, offset, pageLength); // read the data bytesRead = dataSource.read(data, offset, pageLength); // read the data
} catch (TskException ex) { } catch (TskException ex) {
text = "(offset " + currentOffset + "-" + (currentOffset + pageLength) text = NbBundle.getMessage(this.getClass(),
+ " could not be read)"; "DataContentViewerString.setDataView.errorText", currentOffset,
currentOffset + pageLength);
logger.log(Level.WARNING, "Error while trying to show the String content.", ex); logger.log(Level.WARNING, "Error while trying to show the String content.", ex);
} }
} }
@ -359,12 +367,13 @@ public class DataContentViewerString extends javax.swing.JPanel implements DataC
StringExtractResult res = stringExtract.extract(data, bytesRead, 0); StringExtractResult res = stringExtract.extract(data, bytesRead, 0);
text = res.getText(); text = res.getText();
if (text.trim().isEmpty()) { if (text.trim().isEmpty()) {
text = "(offset " + currentOffset + "-" + (currentOffset + pageLength) text = NbBundle.getMessage(this.getClass(),
+ " contains no text)"; "DataContentViewerString.setDataView.errorNoText", currentOffset,
currentOffset + pageLength);
} }
} else { } else {
text = "(offset " + currentOffset + "-" + (currentOffset + pageLength) text = NbBundle.getMessage(this.getClass(), "DataContentViewerString.setDataView.errorText", currentOffset,
+ " could not be read)"; currentOffset + pageLength);
} }
// disable or enable the next button // disable or enable the next button
@ -459,12 +468,12 @@ public class DataContentViewerString extends javax.swing.JPanel implements DataC
@Override @Override
public String getTitle() { public String getTitle() {
return "Strings"; return NbBundle.getMessage(this.getClass(), "DataContentViewerString.title");
} }
@Override @Override
public String getToolTip() { public String getToolTip() {
return "Displays ASCII and Unicode strings extracted from the file."; return NbBundle.getMessage(this.getClass(), "DataContentViewerString.toolTip");
} }
@Override @Override

View File

@ -36,6 +36,7 @@ import org.openide.nodes.NodeListener;
import org.openide.nodes.NodeMemberEvent; import org.openide.nodes.NodeMemberEvent;
import org.openide.nodes.NodeReorderEvent; import org.openide.nodes.NodeReorderEvent;
import org.openide.util.Lookup; import org.openide.util.Lookup;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.casemodule.Case;
import org.sleuthkit.autopsy.corecomponentinterfaces.DataContent; import org.sleuthkit.autopsy.corecomponentinterfaces.DataContent;
import org.sleuthkit.autopsy.corecomponentinterfaces.DataResult; import org.sleuthkit.autopsy.corecomponentinterfaces.DataResult;
@ -68,7 +69,8 @@ public class DataResultPanel extends javax.swing.JPanel implements DataResult, C
private static final Logger logger = Logger.getLogger(DataResultPanel.class.getName() ); private static final Logger logger = Logger.getLogger(DataResultPanel.class.getName() );
private boolean listeningToTabbedPane = false; private boolean listeningToTabbedPane = false;
private static final String DUMMY_NODE_DISPLAY_NAME = NbBundle.getMessage(DataResultPanel.class,
"DataResultPanel.dummyNodeDisplayName");
/** /**
* Creates new DataResultPanel * Creates new DataResultPanel
* Default constructor, needed mostly for the palette/UI builder * Default constructor, needed mostly for the palette/UI builder
@ -619,7 +621,7 @@ public class DataResultPanel extends javax.swing.JPanel implements DataResult, C
} }
private class DummyNodeListener implements NodeListener { private class DummyNodeListener implements NodeListener {
private static final String DUMMY_NODE_DISPLAY_NAME = "Please Wait...";
private volatile boolean load = true; private volatile boolean load = true;
public void reset() { public void reset() {

View File

@ -1,7 +1,7 @@
/* /*
* Autopsy Forensic Browser * Autopsy Forensic Browser
* *
* Copyright 2013 Basis Technology Corp. * Copyright 2013-2014 Basis Technology Corp.
* Contact: carrier <at> sleuthkit <dot> org * Contact: carrier <at> sleuthkit <dot> org
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
@ -29,6 +29,8 @@ import java.util.LinkedHashSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.logging.Level; import java.util.logging.Level;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.Logger;
import javax.swing.JTable; import javax.swing.JTable;
import javax.swing.ListSelectionModel; import javax.swing.ListSelectionModel;
@ -55,12 +57,12 @@ import org.sleuthkit.autopsy.corecomponentinterfaces.DataResultViewer;
// service provider when DataResultViewers can be made compatible with node // service provider when DataResultViewers can be made compatible with node
// multiple selection actions. // multiple selection actions.
//@ServiceProvider(service = DataResultViewer.class) //@ServiceProvider(service = DataResultViewer.class)
public class DataResultViewerTable extends AbstractDataResultViewer { public class DataResultViewerTable extends AbstractDataResultViewer {
private String firstColumnLabel = "Name"; private String firstColumnLabel = NbBundle.getMessage(DataResultViewerTable.class, "DataResultViewerTable.firstColLbl");
private Set<Property> propertiesAcc = new LinkedHashSet<>(); private Set<Property> propertiesAcc = new LinkedHashSet<>();
private static final Logger logger = Logger.getLogger(DataResultViewerTable.class.getName());
private final DummyNodeListener dummyNodeListener = new DummyNodeListener(); private final DummyNodeListener dummyNodeListener = new DummyNodeListener();
private static final String DUMMY_NODE_DISPLAY_NAME = NbBundle.getMessage(DataResultViewerTable.class, "DataResultViewerTable.dummyNodeDisplayName");
/** /**
* Creates a DataResultViewerTable object that is compatible with node * Creates a DataResultViewerTable object that is compatible with node
@ -154,7 +156,8 @@ import org.sleuthkit.autopsy.corecomponentinterfaces.DataResultViewer;
Node firstChild = parent.getChildren().getNodeAt(0); Node firstChild = parent.getChildren().getNodeAt(0);
if (firstChild == null) { if (firstChild == null) {
throw new IllegalArgumentException("Couldn't get a child Node from the given parent."); throw new IllegalArgumentException(
NbBundle.getMessage(this.getClass(), "DataResultViewerTable.illegalArgExc.noChildFromParent"));
} else { } else {
for (PropertySet ps : firstChild.getPropertySets()) { for (PropertySet ps : firstChild.getPropertySets()) {
if (ps.getName().equals(Sheet.PROPERTIES)) { if (ps.getName().equals(Sheet.PROPERTIES)) {
@ -162,7 +165,8 @@ import org.sleuthkit.autopsy.corecomponentinterfaces.DataResultViewer;
} }
} }
throw new IllegalArgumentException("Child Node doesn't have the regular PropertySet."); throw new IllegalArgumentException(
NbBundle.getMessage(this.getClass(), "DataResultViewerTable.illegalArgExc.childWithoutPropertySet"));
} }
} }
@ -174,13 +178,15 @@ import org.sleuthkit.autopsy.corecomponentinterfaces.DataResultViewer;
* @param parent Node with at least one child to get properties from * @param parent Node with at least one child to get properties from
* @return Properties, * @return Properties,
*/ */
@SuppressWarnings("rawtypes")
private Node.Property[] getAllChildPropertyHeaders(Node parent) { private Node.Property[] getAllChildPropertyHeaders(Node parent) {
Node firstChild = parent.getChildren().getNodeAt(0); Node firstChild = parent.getChildren().getNodeAt(0);
Property[] properties = null; Property[] properties = null;
if (firstChild == null) { if (firstChild == null) {
throw new IllegalArgumentException("Couldn't get a child Node from the given parent."); throw new IllegalArgumentException(
NbBundle.getMessage(this.getClass(), "DataResultViewerTable.illegalArgExc.noChildFromParent"));
} else { } else {
Set<Property> allProperties = new LinkedHashSet<Property>(); Set<Property> allProperties = new LinkedHashSet<Property>();
while (firstChild != null) { while (firstChild != null) {
@ -236,6 +242,12 @@ import org.sleuthkit.autopsy.corecomponentinterfaces.DataResultViewer;
return true; return true;
} }
/**
* Thread note: Make sure to run this in the EDT as it causes GUI
* operations.
*
* @param selectedNode
*/
@Override @Override
public void setNode(Node selectedNode) { public void setNode(Node selectedNode) {
// change the cursor to "waiting cursor" for this operation // change the cursor to "waiting cursor" for this operation
@ -296,7 +308,7 @@ import org.sleuthkit.autopsy.corecomponentinterfaces.DataResultViewer;
propertiesAcc.clear(); propertiesAcc.clear();
DataResultViewerTable.this.getAllChildPropertyHeadersRec(root, 100); DataResultViewerTable.this.getAllChildPropertyHeadersRec(root, 100);
List<Node.Property> props = new ArrayList<Node.Property>(propertiesAcc); List<Node.Property> props = new ArrayList<>(propertiesAcc);
if (props.size() > 0) { if (props.size() > 0) {
Node.Property prop = props.remove(0); Node.Property prop = props.remove(0);
((DefaultOutlineModel) ov.getOutline().getOutlineModel()).setNodesColumnLabel(prop.getDisplayName()); ((DefaultOutlineModel) ov.getOutline().getOutlineModel()).setNodesColumnLabel(prop.getDisplayName());
@ -386,15 +398,13 @@ import org.sleuthkit.autopsy.corecomponentinterfaces.DataResultViewer;
break; break;
} }
PropertySet[] propertySets = child.getPropertySets(); PropertySet[] propertySets = child.getPropertySets();
if (propertySets.length > 0) if (propertySets.length > 0) {
{
Property[] properties = propertySets[0].getProperties(); Property[] properties = propertySets[0].getProperties();
rowValues[rowCount] = new Object[properties.length]; rowValues[rowCount] = new Object[properties.length];
for (int j = 0; j < properties.length; ++j) { for (int j = 0; j < properties.length; ++j) {
try { try {
rowValues[rowCount][j] = properties[j].getValue(); rowValues[rowCount][j] = properties[j].getValue();
} } catch (IllegalAccessException | InvocationTargetException ignore) {
catch (IllegalAccessException | InvocationTargetException ignore) {
rowValues[rowCount][j] = "n/a"; rowValues[rowCount][j] = "n/a";
} }
} }
@ -406,7 +416,7 @@ import org.sleuthkit.autopsy.corecomponentinterfaces.DataResultViewer;
@Override @Override
public String getTitle() { public String getTitle() {
return "Table"; return NbBundle.getMessage(this.getClass(), "DataResultViewerTable.title");
} }
@Override @Override
@ -425,6 +435,7 @@ import org.sleuthkit.autopsy.corecomponentinterfaces.DataResultViewer;
* @param table the object table * @param table the object table
* @return max the maximum width of the column * @return max the maximum width of the column
*/ */
@SuppressWarnings("rawtypes")
private int getMaxColumnWidth(int index, FontMetrics metrics, int margin, int padding, List<Node.Property> header, Object[][] table) { private int getMaxColumnWidth(int index, FontMetrics metrics, int margin, int padding, List<Node.Property> header, Object[][] table) {
// set the tree (the node / names column) width // set the tree (the node / names column) width
String headerName = header.get(index - 1).getDisplayName(); String headerName = header.get(index - 1).getDisplayName();
@ -477,7 +488,7 @@ import org.sleuthkit.autopsy.corecomponentinterfaces.DataResultViewer;
} }
private class DummyNodeListener implements NodeListener { private class DummyNodeListener implements NodeListener {
private static final String DUMMY_NODE_DISPLAY_NAME = "Please Wait...";
private volatile boolean load = true; private volatile boolean load = true;
public void reset() { public void reset() {

View File

@ -16,7 +16,7 @@
<Layout> <Layout>
<DimensionLayout dim="0"> <DimensionLayout dim="0">
<Group type="103" groupAlignment="0" attributes="0"> <Group type="103" groupAlignment="0" attributes="0">
<Component id="thumbnailScrollPanel" max="32767" attributes="0"/> <Component id="thumbnailScrollPanel" pref="642" max="32767" attributes="0"/>
<Group type="102" attributes="0"> <Group type="102" attributes="0">
<EmptySpace max="-2" attributes="0"/> <EmptySpace max="-2" attributes="0"/>
<Group type="103" groupAlignment="0" attributes="0"> <Group type="103" groupAlignment="0" attributes="0">
@ -201,18 +201,17 @@
</Component> </Component>
<Component class="javax.swing.JComboBox" name="thumbnailSizeComboBox"> <Component class="javax.swing.JComboBox" name="thumbnailSizeComboBox">
<Properties> <Properties>
<Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor"> <Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
<StringArray count="3"> <Connection code="new javax.swing.DefaultComboBoxModel&lt;String&gt;(new String[] { &quot;Small Thumbnails&quot;, &quot;Medium Thumbnails&quot;, &quot;Large Thumbnails&quot; })" type="code"/>
<StringItem index="0" value="Small Thumbnails"/>
<StringItem index="1" value="Medium Thumbnails"/>
<StringItem index="2" value="Large Thumbnails"/>
</StringArray>
</Property> </Property>
<Property name="selectedIndex" type="int" value="1"/>
</Properties> </Properties>
<Events> <Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="thumbnailSizeComboBoxActionPerformed"/> <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="thumbnailSizeComboBoxActionPerformed"/>
</Events> </Events>
<AuxValues>
<AuxValue name="JavaCodeGenerator_CreateCodeCustom" type="java.lang.String" value="new javax.swing.JComboBox&lt;&gt;()"/>
<AuxValue name="JavaCodeGenerator_TypeParameters" type="java.lang.String" value="&lt;String&gt;"/>
</AuxValues>
</Component> </Component>
</SubComponents> </SubComponents>
</Form> </Form>

View File

@ -24,13 +24,18 @@ import java.awt.EventQueue;
import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener; import java.beans.PropertyChangeListener;
import java.util.Arrays; import java.util.Arrays;
import java.util.concurrent.ExecutionException;
import java.util.logging.Level; import java.util.logging.Level;
import javax.swing.JOptionPane; import javax.swing.JOptionPane;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.Logger;
import javax.swing.ListSelectionModel; import javax.swing.ListSelectionModel;
import javax.swing.SwingWorker; import javax.swing.SwingWorker;
import org.netbeans.api.progress.ProgressHandle; import org.netbeans.api.progress.ProgressHandle;
import org.netbeans.api.progress.ProgressHandleFactory; import org.netbeans.api.progress.ProgressHandleFactory;
import org.openide.DialogDisplayer;
import org.openide.NotifyDescriptor;
import org.openide.explorer.ExplorerManager; import org.openide.explorer.ExplorerManager;
import org.openide.explorer.view.IconView; import org.openide.explorer.view.IconView;
import org.openide.nodes.AbstractNode; import org.openide.nodes.AbstractNode;
@ -40,6 +45,7 @@ import org.openide.nodes.NodeEvent;
import org.openide.nodes.NodeListener; import org.openide.nodes.NodeListener;
import org.openide.nodes.NodeMemberEvent; import org.openide.nodes.NodeMemberEvent;
import org.openide.nodes.NodeReorderEvent; import org.openide.nodes.NodeReorderEvent;
import org.openide.util.Exceptions;
import org.sleuthkit.autopsy.corecomponentinterfaces.DataResultViewer; import org.sleuthkit.autopsy.corecomponentinterfaces.DataResultViewer;
import org.sleuthkit.autopsy.coreutils.ImageUtils; import org.sleuthkit.autopsy.coreutils.ImageUtils;
import org.sleuthkit.datamodel.AbstractFile; import org.sleuthkit.datamodel.AbstractFile;
@ -115,7 +121,7 @@ import org.sleuthkit.datamodel.TskCoreException;
filePathLabel = new javax.swing.JLabel(); filePathLabel = new javax.swing.JLabel();
goToPageLabel = new javax.swing.JLabel(); goToPageLabel = new javax.swing.JLabel();
goToPageField = new javax.swing.JTextField(); goToPageField = new javax.swing.JTextField();
thumbnailSizeComboBox = new javax.swing.JComboBox(); thumbnailSizeComboBox = new javax.swing.JComboBox<>();
thumbnailScrollPanel.setPreferredSize(new java.awt.Dimension(582, 348)); thumbnailScrollPanel.setPreferredSize(new java.awt.Dimension(582, 348));
@ -165,8 +171,7 @@ import org.sleuthkit.datamodel.TskCoreException;
} }
}); });
thumbnailSizeComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Small Thumbnails", "Medium Thumbnails", "Large Thumbnails" })); thumbnailSizeComboBox.setModel(new javax.swing.DefaultComboBoxModel<String>(new String[] { "Small Thumbnails", "Medium Thumbnails", "Large Thumbnails" }));
thumbnailSizeComboBox.setSelectedIndex(1);
thumbnailSizeComboBox.addActionListener(new java.awt.event.ActionListener() { thumbnailSizeComboBox.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) { public void actionPerformed(java.awt.event.ActionEvent evt) {
thumbnailSizeComboBoxActionPerformed(evt); thumbnailSizeComboBoxActionPerformed(evt);
@ -177,7 +182,7 @@ import org.sleuthkit.datamodel.TskCoreException;
this.setLayout(layout); this.setLayout(layout);
layout.setHorizontalGroup( layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(thumbnailScrollPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(thumbnailScrollPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 642, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup() .addGroup(layout.createSequentialGroup()
.addContainerGap() .addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
@ -283,7 +288,7 @@ import org.sleuthkit.datamodel.TskCoreException;
private javax.swing.JButton pagePrevButton; private javax.swing.JButton pagePrevButton;
private javax.swing.JLabel pagesLabel; private javax.swing.JLabel pagesLabel;
private javax.swing.JScrollPane thumbnailScrollPanel; private javax.swing.JScrollPane thumbnailScrollPanel;
private javax.swing.JComboBox thumbnailSizeComboBox; private javax.swing.JComboBox<String> thumbnailSizeComboBox;
// End of variables declaration//GEN-END:variables // End of variables declaration//GEN-END:variables
@Override @Override
@ -327,7 +332,7 @@ import org.sleuthkit.datamodel.TskCoreException;
@Override @Override
public String getTitle() { public String getTitle() {
return "Thumbnail"; return NbBundle.getMessage(this.getClass(), "DataResultViewerThumbnail.title");
} }
@Override @Override
@ -380,8 +385,13 @@ import org.sleuthkit.datamodel.TskCoreException;
} }
if (newPage > totalPages || newPage < 1) { if (newPage > totalPages || newPage < 1) {
JOptionPane.showMessageDialog(this, "Please enter a valid page number between 1 and " + totalPages, JOptionPane.showMessageDialog(this,
"Invalid page number", JOptionPane.WARNING_MESSAGE); NbBundle.getMessage(this.getClass(),
"DataResultViewerThumbnail.goToPageTextField.msgDlg",
totalPages),
NbBundle.getMessage(this.getClass(),
"DataResultViewerThumbnail.goToPageTextField.err"),
JOptionPane.WARNING_MESSAGE);
return; return;
} }
@ -407,7 +417,8 @@ import org.sleuthkit.datamodel.TskCoreException;
pagePrevButton.setEnabled(false); pagePrevButton.setEnabled(false);
pageNextButton.setEnabled(false); pageNextButton.setEnabled(false);
goToPageField.setEnabled(false); goToPageField.setEnabled(false);
progress = ProgressHandleFactory.createHandle("Generating Thumbnails..."); progress = ProgressHandleFactory.createHandle(
NbBundle.getMessage(this.getClass(), "DataResultViewerThumbnail.genThumbs"));
progress.start(); progress.start();
progress.switchToIndeterminate(); progress.switchToIndeterminate();
Node root = em.getRootContext(); Node root = em.getRootContext();
@ -422,6 +433,16 @@ import org.sleuthkit.datamodel.TskCoreException;
progress.finish(); progress.finish();
setCursor(null); setCursor(null);
updateControls(); updateControls();
// see if any exceptions were thrown
try {
get();
} catch (InterruptedException | ExecutionException ex) {
NotifyDescriptor d =
new NotifyDescriptor.Message("Error making thumbnails: " + ex.getMessage(),
NotifyDescriptor.ERROR_MESSAGE);
DialogDisplayer.getDefault().notify(d);
logger.log(Level.SEVERE, "Error making thumbnails: " + ex.getMessage());
}
} }
}.execute(); }.execute();
@ -435,7 +456,9 @@ import org.sleuthkit.datamodel.TskCoreException;
pageNumLabel.setText(""); pageNumLabel.setText("");
imagesRangeLabel.setText(""); imagesRangeLabel.setText("");
} else { } else {
pageNumLabel.setText(Integer.toString(curPage) + " of " + Integer.toString(totalPages)); pageNumLabel.setText(
NbBundle.getMessage(this.getClass(), "DataResultViewerThumbnail.pageNumbers.curOfTotal",
Integer.toString(curPage), Integer.toString(totalPages)));
final int imagesFrom = (curPage - 1) * ThumbnailViewChildren.IMAGES_PER_PAGE + 1; final int imagesFrom = (curPage - 1) * ThumbnailViewChildren.IMAGES_PER_PAGE + 1;
final int imagesTo = curPageImages + (curPage - 1) * ThumbnailViewChildren.IMAGES_PER_PAGE; final int imagesTo = curPageImages + (curPage - 1) * ThumbnailViewChildren.IMAGES_PER_PAGE;
imagesRangeLabel.setText(imagesFrom + "-" + imagesTo); imagesRangeLabel.setText(imagesFrom + "-" + imagesTo);

View File

@ -62,6 +62,7 @@ import javax.swing.SwingWorker;
import org.netbeans.api.progress.ProgressHandle; import org.netbeans.api.progress.ProgressHandle;
import org.netbeans.api.progress.ProgressHandleFactory; import org.netbeans.api.progress.ProgressHandleFactory;
import org.openide.util.Cancellable; import org.openide.util.Cancellable;
import org.openide.util.NbBundle;
import org.openide.util.lookup.ServiceProvider; import org.openide.util.lookup.ServiceProvider;
import org.openide.util.lookup.ServiceProviders; import org.openide.util.lookup.ServiceProviders;
import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.casemodule.Case;
@ -139,7 +140,7 @@ public class FXVideoPanel extends MediaViewVideoPanel {
currentFile = file; currentFile = file;
final boolean deleted = file.isDirNameFlagSet(TskData.TSK_FS_NAME_FLAG_ENUM.UNALLOC); final boolean deleted = file.isDirNameFlagSet(TskData.TSK_FS_NAME_FLAG_ENUM.UNALLOC);
if (deleted) { if (deleted) {
mediaPane.setInfoLabelText("Playback of deleted videos is not supported, use an external player."); mediaPane.setInfoLabelText(NbBundle.getMessage(this.getClass(), "FXVideoPanel.mediaPane.infoLabel"));
removeAll(); removeAll();
return; return;
} }
@ -242,13 +243,15 @@ public class FXVideoPanel extends MediaViewVideoPanel {
@Override @Override
protected Object doInBackground() throws Exception { protected Object doInBackground() throws Exception {
success = false; success = false;
progress = ProgressHandleFactory.createHandle("Buffering " + sFile.getName(), new Cancellable() { progress = ProgressHandleFactory.createHandle(
NbBundle.getMessage(this.getClass(), "FXVideoPanel.progress.bufferingFile", sFile.getName()),
new Cancellable() {
@Override @Override
public boolean cancel() { public boolean cancel() {
return ExtractMedia.this.cancel(true); return ExtractMedia.this.cancel(true);
} }
}); });
mediaPane.setProgressLabelText("Buffering... "); mediaPane.setProgressLabelText(NbBundle.getMessage(this.getClass(), "FXVideoPanel.progressLabel.buffering"));
progress.start(); progress.start();
progress.switchToDeterminate(100); progress.switchToDeterminate(100);
try { try {
@ -394,7 +397,7 @@ public class FXVideoPanel extends MediaViewVideoPanel {
mediaView.setMediaPlayer(mediaPlayer); mediaView.setMediaPlayer(mediaPlayer);
} catch (MediaException ex) { } catch (MediaException ex) {
this.setProgressLabelText(""); this.setProgressLabelText("");
this.setInfoLabelText("Unsupported Format."); this.setInfoLabelText(NbBundle.getMessage(this.getClass(), "FXVideoPanel.media.unsupportedFormat"));
} }
} }

View File

@ -1,3 +1,21 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2013 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.corecomponents; package org.sleuthkit.autopsy.corecomponents;
import java.io.File; import java.io.File;

View File

@ -1,6 +1,20 @@
/* /*
* To change this template, choose Tools | Templates * Autopsy Forensic Browser
* and open the template in the editor. *
* Copyright 2013-2014 Basis Technology Corp.
* Contact: carrier <at> sleuthkit <dot> org
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/ */
package org.sleuthkit.autopsy.corecomponents; package org.sleuthkit.autopsy.corecomponents;
@ -10,57 +24,65 @@ import javax.swing.JComponent;
import org.netbeans.spi.options.OptionsPanelController; import org.netbeans.spi.options.OptionsPanelController;
import org.openide.util.HelpCtx; import org.openide.util.HelpCtx;
import org.openide.util.Lookup; import org.openide.util.Lookup;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil;
import java.util.logging.Level; import java.util.logging.Level;
import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.Logger;
@OptionsPanelController.TopLevelRegistration( @OptionsPanelController.TopLevelRegistration(categoryName = "#OptionsCategory_Name_General",
categoryName = "#OptionsCategory_Name_General", iconBase = "org/sleuthkit/autopsy/corecomponents/display-options.png",
iconBase = "org/sleuthkit/autopsy/corecomponents/general-options.png", position = 1,
position = 1, keywords = "#OptionsCategory_Keywords_General",
keywords = "#OptionsCategory_Keywords_General", keywordsCategory = "General")
keywordsCategory = "General")
@org.openide.util.NbBundle.Messages({"OptionsCategory_Name_General=General", "OptionsCategory_Keywords_General=general"})
public final class GeneralOptionsPanelController extends OptionsPanelController { public final class GeneralOptionsPanelController extends OptionsPanelController {
private GeneralPanel panel; private GeneralPanel panel;
private final PropertyChangeSupport pcs = new PropertyChangeSupport(this); private final PropertyChangeSupport pcs = new PropertyChangeSupport(this);
private boolean changed; private boolean changed;
private static final Logger logger = Logger.getLogger(GeneralOptionsPanelController.class.getName()); private static final Logger logger = Logger.getLogger(GeneralOptionsPanelController.class.getName());
@Override
public void update() { public void update() {
getPanel().load(); getPanel().load();
changed = false; changed = false;
} }
@Override
public void applyChanges() { public void applyChanges() {
getPanel().store(); getPanel().store();
changed = false; changed = false;
} }
@Override
public void cancel() { public void cancel() {
// need not do anything special, if no changes have been persisted yet
} }
@Override
public boolean isValid() { public boolean isValid() {
return getPanel().valid(); return getPanel().valid();
} }
@Override
public boolean isChanged() { public boolean isChanged() {
return changed; return changed;
} }
@Override
public HelpCtx getHelpCtx() { public HelpCtx getHelpCtx() {
return null; // new HelpCtx("...ID") if you have a help set return null;
} }
@Override
public JComponent getComponent(Lookup masterLookup) { public JComponent getComponent(Lookup masterLookup) {
return getPanel(); return getPanel();
} }
@Override
public void addPropertyChangeListener(PropertyChangeListener l) { public void addPropertyChangeListener(PropertyChangeListener l) {
pcs.addPropertyChangeListener(l); pcs.addPropertyChangeListener(l);
} }
@Override
public void removePropertyChangeListener(PropertyChangeListener l) { public void removePropertyChangeListener(PropertyChangeListener l) {
pcs.removePropertyChangeListener(l); pcs.removePropertyChangeListener(l);
} }
@ -78,19 +100,23 @@ public final class GeneralOptionsPanelController extends OptionsPanelController
try { try {
pcs.firePropertyChange(OptionsPanelController.PROP_CHANGED, false, true); pcs.firePropertyChange(OptionsPanelController.PROP_CHANGED, false, true);
} } catch (Exception e) {
catch (Exception e) {
logger.log(Level.SEVERE, "GeneralOptionsPanelController listener threw exception", e); logger.log(Level.SEVERE, "GeneralOptionsPanelController listener threw exception", e);
MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to GeneralOptionsPanelController updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); MessageNotifyUtil.Notify.show(
NbBundle.getMessage(this.getClass(), "GeneralOptionsPanelController.moduleErr"),
NbBundle.getMessage(this.getClass(), "GeneralOptionsPanelController.moduleErr.msg"),
MessageNotifyUtil.MessageType.ERROR);
} }
} }
try { try {
pcs.firePropertyChange(OptionsPanelController.PROP_VALID, null, null); pcs.firePropertyChange(OptionsPanelController.PROP_VALID, null, null);
} } catch (Exception e) {
catch (Exception e) {
logger.log(Level.SEVERE, "GeneralOptionsPanelController listener threw exception", e); logger.log(Level.SEVERE, "GeneralOptionsPanelController listener threw exception", e);
MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to GeneralOptionsPanelController updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); MessageNotifyUtil.Notify.show(
NbBundle.getMessage(this.getClass(), "GeneralOptionsPanelController.moduleErr"),
NbBundle.getMessage(this.getClass(), "GeneralOptionsPanelController.moduleErr.msg"),
MessageNotifyUtil.MessageType.ERROR);
} }
} }
} }

View File

@ -148,6 +148,9 @@
<ResourceString bundle="org/sleuthkit/autopsy/corecomponents/Bundle.properties" key="GeneralPanel.useGMTTimeRB.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/> <ResourceString bundle="org/sleuthkit/autopsy/corecomponents/Bundle.properties" key="GeneralPanel.useGMTTimeRB.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property> </Property>
</Properties> </Properties>
<Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="useGMTTimeRBActionPerformed"/>
</Events>
</Component> </Component>
<Component class="javax.swing.JLabel" name="jLabel3"> <Component class="javax.swing.JLabel" name="jLabel3">
<Properties> <Properties>

View File

@ -20,6 +20,7 @@ package org.sleuthkit.autopsy.corecomponents;
import java.util.prefs.Preferences; import java.util.prefs.Preferences;
import org.openide.util.NbPreferences; import org.openide.util.NbPreferences;
import org.sleuthkit.autopsy.datamodel.ContentUtils;
final class GeneralPanel extends javax.swing.JPanel { final class GeneralPanel extends javax.swing.JPanel {
@ -33,6 +34,7 @@ final class GeneralPanel extends javax.swing.JPanel {
GeneralPanel(GeneralOptionsPanelController controller) { GeneralPanel(GeneralOptionsPanelController controller) {
this.controller = controller; this.controller = controller;
initComponents(); initComponents();
ContentUtils.setDisplayInLocalTime(useLocalTimeRB.isSelected());
// TODO listen to changes in form fields and call controller.changed() // TODO listen to changes in form fields and call controller.changed()
} }
@ -80,6 +82,11 @@ final class GeneralPanel extends javax.swing.JPanel {
buttonGroup3.add(useGMTTimeRB); buttonGroup3.add(useGMTTimeRB);
org.openide.awt.Mnemonics.setLocalizedText(useGMTTimeRB, org.openide.util.NbBundle.getMessage(GeneralPanel.class, "GeneralPanel.useGMTTimeRB.text")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(useGMTTimeRB, org.openide.util.NbBundle.getMessage(GeneralPanel.class, "GeneralPanel.useGMTTimeRB.text")); // NOI18N
useGMTTimeRB.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
useGMTTimeRBActionPerformed(evt);
}
});
org.openide.awt.Mnemonics.setLocalizedText(jLabel3, org.openide.util.NbBundle.getMessage(GeneralPanel.class, "GeneralPanel.jLabel3.text")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(jLabel3, org.openide.util.NbBundle.getMessage(GeneralPanel.class, "GeneralPanel.jLabel3.text")); // NOI18N
@ -144,6 +151,10 @@ final class GeneralPanel extends javax.swing.JPanel {
// TODO add your handling code here: // TODO add your handling code here:
}//GEN-LAST:event_useBestViewerRBActionPerformed }//GEN-LAST:event_useBestViewerRBActionPerformed
private void useGMTTimeRBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_useGMTTimeRBActionPerformed
ContentUtils.setDisplayInLocalTime(useLocalTimeRB.isSelected());
}//GEN-LAST:event_useGMTTimeRBActionPerformed
void load() { void load() {
boolean keepPreferredViewer = prefs.getBoolean(KEEP_PREFERRED_VIEWER, false); boolean keepPreferredViewer = prefs.getBoolean(KEEP_PREFERRED_VIEWER, false);
keepCurrentViewerRB.setSelected(keepPreferredViewer); keepCurrentViewerRB.setSelected(keepPreferredViewer);

View File

@ -29,6 +29,7 @@ import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.concurrent.CancellationException; import java.util.concurrent.CancellationException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.logging.Level; import java.util.logging.Level;
import javax.swing.BoxLayout; import javax.swing.BoxLayout;
@ -50,7 +51,10 @@ import org.gstreamer.elements.RGBDataSink;
import org.gstreamer.swing.VideoComponent; import org.gstreamer.swing.VideoComponent;
import org.netbeans.api.progress.ProgressHandle; import org.netbeans.api.progress.ProgressHandle;
import org.netbeans.api.progress.ProgressHandleFactory; import org.netbeans.api.progress.ProgressHandleFactory;
import org.openide.DialogDisplayer;
import org.openide.NotifyDescriptor;
import org.openide.util.Cancellable; import org.openide.util.Cancellable;
import org.openide.util.NbBundle;
import org.openide.util.lookup.ServiceProvider; import org.openide.util.lookup.ServiceProvider;
import org.openide.util.lookup.ServiceProviders; import org.openide.util.lookup.ServiceProviders;
import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.casemodule.Case;
@ -73,7 +77,7 @@ public class GstVideoPanel extends MediaViewVideoPanel {
private boolean gstInited; private boolean gstInited;
private static final long MIN_FRAME_INTERVAL_MILLIS = 500; private static final long MIN_FRAME_INTERVAL_MILLIS = 500;
private static final long FRAME_CAPTURE_TIMEOUT_MILLIS = 1000; private static final long FRAME_CAPTURE_TIMEOUT_MILLIS = 1000;
private static final String MEDIA_PLAYER_ERROR_STRING = "The media player cannot process this file."; private static final String MEDIA_PLAYER_ERROR_STRING = NbBundle.getMessage(GstVideoPanel.class, "GstVideoPanel.cannotProcFile.err");
//playback //playback
private long durationMillis = 0; private long durationMillis = 0;
private VideoProgressWorker videoProgressWorker; private VideoProgressWorker videoProgressWorker;
@ -163,15 +167,15 @@ public class GstVideoPanel extends MediaViewVideoPanel {
} catch (GstException e) { } catch (GstException e) {
gstInited = false; gstInited = false;
logger.log(Level.SEVERE, "Error initializing gstreamer for audio/video viewing and frame extraction capabilities", e); logger.log(Level.SEVERE, "Error initializing gstreamer for audio/video viewing and frame extraction capabilities", e);
MessageNotifyUtil.Notify.error("Error initializing gstreamer for audio/video viewing and frame extraction capabilities. " MessageNotifyUtil.Notify.error(
+ " Video and audio viewing will be disabled. ", NbBundle.getMessage(this.getClass(), "GstVideoPanel.initGst.gstException.msg"),
e.getMessage()); e.getMessage());
return false; return false;
} catch (UnsatisfiedLinkError | NoClassDefFoundError | Exception e) { } catch (UnsatisfiedLinkError | NoClassDefFoundError | Exception e) {
gstInited = false; gstInited = false;
logger.log(Level.SEVERE, "Error initializing gstreamer for audio/video viewing and extraction capabilities", e); logger.log(Level.SEVERE, "Error initializing gstreamer for audio/video viewing and extraction capabilities", e);
MessageNotifyUtil.Notify.error("Error initializing gstreamer for audio/video viewing frame extraction capabilities. " MessageNotifyUtil.Notify.error(
+ " Video and audio viewing will be disabled. ", NbBundle.getMessage(this.getClass(), "GstVideoPanel.initGst.otherException.msg"),
e.getMessage()); e.getMessage());
return false; return false;
} }
@ -186,7 +190,7 @@ public class GstVideoPanel extends MediaViewVideoPanel {
currentFile = file; currentFile = file;
final boolean deleted = file.isDirNameFlagSet(TskData.TSK_FS_NAME_FLAG_ENUM.UNALLOC); final boolean deleted = file.isDirNameFlagSet(TskData.TSK_FS_NAME_FLAG_ENUM.UNALLOC);
if (deleted) { if (deleted) {
infoLabel.setText("Playback of deleted videos is not supported, use an external player."); infoLabel.setText(NbBundle.getMessage(this.getClass(), "GstVideoPanel.setupVideo.infoLabel.text"));
videoPanel.removeAll(); videoPanel.removeAll();
pauseButton.setEnabled(false); pauseButton.setEnabled(false);
progressSlider.setEnabled(false); progressSlider.setEnabled(false);
@ -315,7 +319,8 @@ public class GstVideoPanel extends MediaViewVideoPanel {
// throw exception if this file is known to be problematic // throw exception if this file is known to be problematic
if (badVideoFiles.contains(file.getName())) { if (badVideoFiles.contains(file.getName())) {
throw new Exception("Cannot capture frames from this file (" + file.getName() + ")."); throw new Exception(
NbBundle.getMessage(this.getClass(), "GstVideoPanel.exception.problemFile.msg", file.getName()));
} }
// set up a PlayBin2 object // set up a PlayBin2 object
@ -329,13 +334,13 @@ public class GstVideoPanel extends MediaViewVideoPanel {
if (ret == StateChangeReturn.FAILURE) { if (ret == StateChangeReturn.FAILURE) {
// add this file to the set of known bad ones // add this file to the set of known bad ones
badVideoFiles.add(file.getName()); badVideoFiles.add(file.getName());
throw new Exception("Problem with video file; problem when attempting to play while obtaining duration."); throw new Exception(NbBundle.getMessage(this.getClass(), "GstVideoPanel.exception.problemPlay.msg"));
} }
ret = playbin.pause(); ret = playbin.pause();
if (ret == StateChangeReturn.FAILURE) { if (ret == StateChangeReturn.FAILURE) {
// add this file to the set of known bad ones // add this file to the set of known bad ones
badVideoFiles.add(file.getName()); badVideoFiles.add(file.getName());
throw new Exception("Problem with video file; problem when attempting to pause while obtaining duration."); throw new Exception(NbBundle.getMessage(this.getClass(), "GstVideoPanel.exception.problemPause.msg"));
} }
playbin.getState(); playbin.getState();
@ -361,7 +366,8 @@ public class GstVideoPanel extends MediaViewVideoPanel {
if (ret == StateChangeReturn.FAILURE) { if (ret == StateChangeReturn.FAILURE) {
// add this file to the set of known bad ones // add this file to the set of known bad ones
badVideoFiles.add(file.getName()); badVideoFiles.add(file.getName());
throw new Exception("Problem with video file; problem when attempting to pause while capturing a frame."); throw new Exception(
NbBundle.getMessage(this.getClass(), "GstVideoPanel.exception.problemPauseCaptFrame.msg"));
} }
playbin.getState(); playbin.getState();
@ -374,7 +380,8 @@ public class GstVideoPanel extends MediaViewVideoPanel {
if (ret == StateChangeReturn.FAILURE) { if (ret == StateChangeReturn.FAILURE) {
// add this file to the set of known bad ones // add this file to the set of known bad ones
badVideoFiles.add(file.getName()); badVideoFiles.add(file.getName());
throw new Exception("Problem with video file; problem when attempting to play while capturing a frame."); throw new Exception(
NbBundle.getMessage(this.getClass(), "GstVideoPanel.exception.problemPlayCaptFrame.msg"));
} }
// wait for FrameCaptureRGBListener to finish // wait for FrameCaptureRGBListener to finish
@ -391,7 +398,8 @@ public class GstVideoPanel extends MediaViewVideoPanel {
if (ret == StateChangeReturn.FAILURE) { if (ret == StateChangeReturn.FAILURE) {
// add this file to the set of known bad ones // add this file to the set of known bad ones
badVideoFiles.add(file.getName()); badVideoFiles.add(file.getName());
throw new Exception("Problem with video file; problem when attempting to stop while capturing a frame."); throw new Exception(
NbBundle.getMessage(this.getClass(), "GstVideoPanel.exception.problemStopCaptFrame.msg"));
} }
if (image == null) { if (image == null) {
@ -659,6 +667,18 @@ public class GstVideoPanel extends MediaViewVideoPanel {
return null; return null;
} }
@Override
protected void done() {
// see if any exceptions were thrown
try {
get();
} catch (InterruptedException | ExecutionException ex) {
logger.log(Level.WARNING, "Error updating video progress: " + ex.getMessage());
infoLabel.setText("Error updating video progress: " + ex.getMessage());
}
}
} //end class progress worker } //end class progress worker
/* Thread that extracts and plays a file */ /* Thread that extracts and plays a file */
@ -690,7 +710,7 @@ public class GstVideoPanel extends MediaViewVideoPanel {
return ExtractMedia.this.cancel(true); return ExtractMedia.this.cancel(true);
} }
}); });
progressLabel.setText("Buffering... "); progressLabel.setText(NbBundle.getMessage(this.getClass(), "GstVideoPanel.progress.buffering"));
progress.start(); progress.start();
progress.switchToDeterminate(100); progress.switchToDeterminate(100);
try { try {
@ -723,7 +743,7 @@ public class GstVideoPanel extends MediaViewVideoPanel {
void playMedia() { void playMedia() {
if (jFile == null || !jFile.exists()) { if (jFile == null || !jFile.exists()) {
progressLabel.setText("Error buffering file"); progressLabel.setText(NbBundle.getMessage(this.getClass(), "GstVideoPanel.progressLabel.bufferingErr"));
return; return;
} }
ClockTime dur = null; ClockTime dur = null;

View File

@ -107,7 +107,7 @@ public class Installer extends ModuleInstall {
final String[] UI_MENU_ITEM_KEYS = new String[]{"MenuBarUI", final String[] UI_MENU_ITEM_KEYS = new String[]{"MenuBarUI",
}; };
Map<Object, Object> uiEntries = new TreeMap<Object, Object>(); Map<Object, Object> uiEntries = new TreeMap<>();
// Store the keys that deal with menu items // Store the keys that deal with menu items
for(String key : UI_MENU_ITEM_KEYS) { for(String key : UI_MENU_ITEM_KEYS) {
@ -129,7 +129,7 @@ public class Installer extends ModuleInstall {
} }
// Overwrite the Metal menu item keys to use the Aqua versions // Overwrite the Metal menu item keys to use the Aqua versions
for(Map.Entry entry : uiEntries.entrySet()) { for(Map.Entry<Object,Object> entry : uiEntries.entrySet()) {
UIManager.put(entry.getKey(), entry.getValue()); UIManager.put(entry.getKey(), entry.getValue());
} }

View File

@ -33,6 +33,8 @@ import javafx.scene.image.ImageView;
import javafx.scene.layout.BorderPane; import javafx.scene.layout.BorderPane;
import javax.imageio.ImageIO; import javax.imageio.ImageIO;
import javax.swing.SwingUtilities; import javax.swing.SwingUtilities;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.casemodule.Case;
import org.sleuthkit.autopsy.corelibs.ScalrWrapper; import org.sleuthkit.autopsy.corelibs.ScalrWrapper;
import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.Logger;
@ -160,7 +162,9 @@ import org.sleuthkit.datamodel.ReadContentInputStream;
return; return;
} catch (OutOfMemoryError ex) { } catch (OutOfMemoryError ex) {
logger.log(Level.WARNING, "Could not load image file into media view (too large): " + fileName, ex); logger.log(Level.WARNING, "Could not load image file into media view (too large): " + fileName, ex);
MessageNotifyUtil.Notify.warn("Could not load image file (too large): " + file.getName(), ex.getMessage()); MessageNotifyUtil.Notify.warn(
NbBundle.getMessage(this.getClass(), "MediaViewImagePanel.imgFileTooLarge.msg", file.getName()),
ex.getMessage());
return; return;
} finally { } finally {
try { try {

View File

@ -109,7 +109,8 @@ public class ProductInformationPanel extends JPanel implements HyperlinkListener
jScrollPane2.setViewportView(description); jScrollPane2.setViewportView(description);
verboseLoggingButton.setBackground(new java.awt.Color(255, 255, 255)); verboseLoggingButton.setBackground(new java.awt.Color(255, 255, 255));
verboseLoggingButton.setText("Activate verbose logging"); verboseLoggingButton.setText(
NbBundle.getMessage(this.getClass(), "ProductInformationPanel.actVerboseLogging.text"));
verboseLoggingButton.addActionListener(new java.awt.event.ActionListener() { verboseLoggingButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) { public void actionPerformed(java.awt.event.ActionEvent evt) {
activateVerboseLogging(evt); activateVerboseLogging(evt);
@ -196,7 +197,8 @@ private void jLabel1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:eve
private void disableVerboseLoggingButton() { private void disableVerboseLoggingButton() {
this.verboseLoggingButton.setEnabled(false); this.verboseLoggingButton.setEnabled(false);
this.verboseLoggingButton.setText("Verbose logging enabled"); this.verboseLoggingButton.setText(
NbBundle.getMessage(this.getClass(), "ProductInformationPanel.verbLoggingEnabled.text"));
} }
private void closeDialog() { private void closeDialog() {
@ -225,17 +227,30 @@ private void jLabel1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:eve
private static String getOperatingSystemValue() { private static String getOperatingSystemValue() {
return NbBundle.getMessage(ProductInformationPanel.class, "Format_OperatingSystem_Value", return NbBundle.getMessage(ProductInformationPanel.class, "Format_OperatingSystem_Value",
System.getProperty("os.name", "unknown"), System.getProperty("os.name",
System.getProperty("os.version", "unknown"), NbBundle.getMessage(ProductInformationPanel.class,
System.getProperty("os.arch", "unknown")); "ProductInformationPanel.propertyUnknown.text")),
System.getProperty("os.version",
NbBundle.getMessage(ProductInformationPanel.class,
"ProductInformationPanel.propertyUnknown.text")),
System.getProperty("os.arch",
NbBundle.getMessage(ProductInformationPanel.class,
"ProductInformationPanel.propertyUnknown.text")));
} }
private static String getJavaValue() { private static String getJavaValue() {
return System.getProperty("java.version", "unknown"); return System.getProperty("java.version",
NbBundle.getMessage(ProductInformationPanel.class,
"ProductInformationPanel.propertyUnknown.text"));
} }
private static String getVMValue() { private static String getVMValue() {
return System.getProperty("java.vm.name", "unknown") + " " + System.getProperty("java.vm.version", ""); return NbBundle.getMessage(ProductInformationPanel.class,
"ProductInformationPanel.getVMValue.text",
System.getProperty("java.vm.name",
NbBundle.getMessage(ProductInformationPanel.class,
"ProductInformationPanel.propertyUnknown.text")),
System.getProperty("java.vm.version", ""));
} }
private static String getSystemLocaleValue() { private static String getSystemLocaleValue() {
@ -248,7 +263,8 @@ private void jLabel1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:eve
} }
private static String getEncodingValue() { private static String getEncodingValue() {
return System.getProperty("file.encoding", "unknown"); return System.getProperty("file.encoding",
NbBundle.getMessage(ProductInformationPanel.class, "ProductInformationPanel.propertyUnknown.text"));
} }
public void setCopyright(String text) { public void setCopyright(String text) {

View File

@ -20,6 +20,7 @@ package org.sleuthkit.autopsy.corecomponents;
import org.openide.nodes.FilterNode; import org.openide.nodes.FilterNode;
import org.openide.nodes.Node; import org.openide.nodes.Node;
import org.openide.util.NbBundle;
/** /**
* This class is used to filter the nodes that we want to show on the "TreeTableView". * This class is used to filter the nodes that we want to show on the "TreeTableView".
@ -46,7 +47,7 @@ public class TableFilterNode extends FilterNode {
@Override @Override
public String getDisplayName() { public String getDisplayName() {
if (createChild) { if (createChild) {
return "Name"; return NbBundle.getMessage(this.getClass(), "TableFilterNode.displayName.text");
} else { } else {
return super.getDisplayName(); return super.getDisplayName();
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -1,2 +1,24 @@
OpenIDE-Module-Name=CoreUtils OpenIDE-Module-Name=CoreUtils
JLNK.noPrefPath.text=No preferred path found
PlatformUtil.nameUnknown=unknown
PlatformUtil.verUnknown=unknown
PlatformUtil.archUnknown=unknown
PlatformUtil.jrePath.jreDir.msg=Embedded jre directory found in\: {0}
PlatformUtil.jrePath.usingJavaPath.msg=Using java binary path\: {0}
PlatformUtil.getPID.sigarNotInit.msg=Can't get PID, sigar not initialized
PlatformUtil.getPID.gen.msg=Can't get PID,{0}
PlatformUtil.getJavaPID.sigarNotInit.msg=Can't get PID of a java process, sigar not initialized
PlatformUtil.getJavaPID.gen.msg=Can't get PID for query\: {0}, {1}
PlatformUtil.getJavaPIDs.sigarNotInit=Can't get PIDs of a java process, sigar not initialized
PlatformUtil.getJavaPIDs.gen.msg=Can't get PIDs for query\: {0}, {1}
PlatformUtil.killProcess.sigarNotInit.msg=Can't kill process by pid, sigar not initialized.
PlatformUtil.killProcess.gen.msg=Can't kill process\: {0}, {1}
PlatformUtil.getProcVmUsed.sigarNotInit.msg=Can't get virt mem used, sigar not initialized.
PlatformUtil.getProcVmUsed.gen.msg=Can't 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}\
{1}\
Process Virtual Memory\: {2}
StringExtract.illegalStateException.cannotInit.msg=Unicode table not properly initialized, cannot instantiate StringExtract

View File

@ -0,0 +1,23 @@
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\u4E0B\u8A18\u3067\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\u4FEE\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\u4FEE\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}
PlatformUtil.getAllMemUsageInfo.usageText={0}\
{1}\
\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

View File

@ -193,10 +193,7 @@ public class ImageUtils {
* Check for the JPEG header. Since Java bytes are signed, we cast them * Check for the JPEG header. Since Java bytes are signed, we cast them
* to an int first. * to an int first.
*/ */
if (((int) (fileHeaderBuffer[0] & 0xff) == 0xff) && ((int) (fileHeaderBuffer[1] & 0xff) == 0xd8)) { return (((fileHeaderBuffer[0] & 0xff) == 0xff) && ((fileHeaderBuffer[1] & 0xff) == 0xd8));
return true;
}
return false;
} }

View File

@ -21,6 +21,8 @@ package org.sleuthkit.autopsy.coreutils;
import java.io.File; import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.coreutils.LnkEnums.CommonNetworkRelativeLinkFlags; import org.sleuthkit.autopsy.coreutils.LnkEnums.CommonNetworkRelativeLinkFlags;
import org.sleuthkit.autopsy.coreutils.LnkEnums.DriveType; import org.sleuthkit.autopsy.coreutils.LnkEnums.DriveType;
import org.sleuthkit.autopsy.coreutils.LnkEnums.FileAttributesFlags; import org.sleuthkit.autopsy.coreutils.LnkEnums.FileAttributesFlags;
@ -294,7 +296,7 @@ import org.sleuthkit.autopsy.coreutils.LnkEnums.NetworkProviderType;
} }
return ret; return ret;
} }
return "No preferred path found"; return NbBundle.getMessage(this.getClass(), "JLNK.noPrefPath.text");
} }
public String getBestName() { public String getBestName() {

View File

@ -16,7 +16,7 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package org.sleuthkit.autopsy.casemodule; package org.sleuthkit.autopsy.coreutils;
/** /**
* Representation of a PhysicalDisk or partition. * Representation of a PhysicalDisk or partition.

View File

@ -36,7 +36,7 @@ import java.util.logging.Level;
*/ */
public class ModuleSettings { public class ModuleSettings {
// The directory where the properties file is lcoated // The directory where the properties file is located
private final static String moduleDirPath = PlatformUtil.getUserConfigDirectory(); private final static String moduleDirPath = PlatformUtil.getUserConfigDirectory();
public static final String DEFAULT_CONTEXT = "GeneralContext"; public static final String DEFAULT_CONTEXT = "GeneralContext";
public static final String MAIN_SETTINGS = "Case"; public static final String MAIN_SETTINGS = "Case";

View File

@ -37,7 +37,7 @@ import org.hyperic.sigar.Sigar;
import org.hyperic.sigar.ptql.ProcessFinder; import org.hyperic.sigar.ptql.ProcessFinder;
import org.openide.modules.InstalledFileLocator; import org.openide.modules.InstalledFileLocator;
import org.openide.modules.Places; import org.openide.modules.Places;
import org.sleuthkit.autopsy.casemodule.LocalDisk; import org.openide.util.NbBundle;
import org.sleuthkit.datamodel.SleuthkitJNI; import org.sleuthkit.datamodel.SleuthkitJNI;
import org.sleuthkit.datamodel.TskCoreException; import org.sleuthkit.datamodel.TskCoreException;
@ -48,9 +48,9 @@ import org.sleuthkit.datamodel.TskCoreException;
public class PlatformUtil { public class PlatformUtil {
private static String javaPath = null; private static String javaPath = null;
public static final String OS_NAME_UNKNOWN = "unknown"; public static final String OS_NAME_UNKNOWN = NbBundle.getMessage(PlatformUtil.class, "PlatformUtil.nameUnknown");
public static final String OS_VERSION_UNKNOWN = "unknown"; public static final String OS_VERSION_UNKNOWN = NbBundle.getMessage(PlatformUtil.class, "PlatformUtil.verUnknown");
public static final String OS_ARCH_UNKNOWN = "unknown"; public static final String OS_ARCH_UNKNOWN = NbBundle.getMessage(PlatformUtil.class, "PlatformUtil.archUnknown");
private static volatile long pid = -1; private static volatile long pid = -1;
private static volatile Sigar sigar = null; private static volatile Sigar sigar = null;
private static volatile MemoryMXBean memoryManager = null; private static volatile MemoryMXBean memoryManager = null;
@ -118,7 +118,10 @@ public class PlatformUtil {
File jrePath = new File(getInstallPath() + File.separator + "jre"); File jrePath = new File(getInstallPath() + File.separator + "jre");
if (jrePath != null && jrePath.exists() && jrePath.isDirectory()) { if (jrePath != null && jrePath.exists() && jrePath.isDirectory()) {
System.out.println("Embedded jre directory found in: " + jrePath.getAbsolutePath()); System.out.println(
NbBundle.getMessage(PlatformUtil.class,
"PlatformUtil.jrePath.jreDir.msg",
jrePath.getAbsolutePath()));
javaPath = jrePath.getAbsolutePath() + File.separator + "bin" + File.separator + "java"; javaPath = jrePath.getAbsolutePath() + File.separator + "bin" + File.separator + "java";
} else { } else {
//else use system installed java in PATH env variable //else use system installed java in PATH env variable
@ -126,7 +129,7 @@ public class PlatformUtil {
} }
System.out.println("Using java binary path: " + javaPath); System.out.println(NbBundle.getMessage(PlatformUtil.class, "PlatformUtil.jrePath.usingJavaPath.msg", javaPath));
return javaPath; return javaPath;
@ -205,7 +208,7 @@ public class PlatformUtil {
* @throws IOException exception thrown if extract the file failed for IO * @throws IOException exception thrown if extract the file failed for IO
* reasons * reasons
*/ */
public static boolean extractResourceToUserConfigDir(final Class resourceClass, final String resourceFile) throws IOException { public static <T> boolean extractResourceToUserConfigDir(final Class<T> resourceClass, final String resourceFile) throws IOException {
final File userDir = new File(getUserConfigDirectory()); final File userDir = new File(getUserConfigDirectory());
final File resourceFileF = new File(userDir + File.separator + resourceFile); final File resourceFileF = new File(userDir + File.separator + resourceFile);
@ -427,10 +430,10 @@ public class PlatformUtil {
if (sigar != null) { if (sigar != null) {
pid = sigar.getPid(); pid = sigar.getPid();
} else { } else {
System.out.println("Can't get PID, sigar not initialized"); System.out.println(NbBundle.getMessage(PlatformUtil.class, "PlatformUtil.getPID.sigarNotInit.msg"));
} }
} catch (Exception e) { } catch (Exception e) {
System.out.println("Can't get PID," + e.toString()); System.out.println(NbBundle.getMessage(PlatformUtil.class, "PlatformUtil.getPID.gen.msg", e.toString()));
} }
return pid; return pid;
@ -457,10 +460,11 @@ public class PlatformUtil {
ProcessFinder finder = new ProcessFinder(sigar); ProcessFinder finder = new ProcessFinder(sigar);
jpid = finder.findSingleProcess(sigarQuery); jpid = finder.findSingleProcess(sigarQuery);
} else { } else {
System.out.println("Can't get PID of a java process, sigar not initialized"); System.out.println(NbBundle.getMessage(PlatformUtil.class, "PlatformUtil.getJavaPID.sigarNotInit.msg"));
} }
} catch (Exception e) { } catch (Exception e) {
System.out.println("Can't get PID for query: " + sigarQuery + ", " + e.toString()); System.out.println(
NbBundle.getMessage(PlatformUtil.class, "PlatformUtil.getJavaPID.gen.msg", sigarQuery, e.toString()));
} }
return jpid; return jpid;
@ -487,10 +491,11 @@ public class PlatformUtil {
ProcessFinder finder = new ProcessFinder(sigar); ProcessFinder finder = new ProcessFinder(sigar);
jpids = finder.find(sigarQuery); jpids = finder.find(sigarQuery);
} else { } else {
System.out.println("Can't get PIDs of a java process, sigar not initialized"); System.out.println(NbBundle.getMessage(PlatformUtil.class, "PlatformUtil.getJavaPIDs.sigarNotInit"));
} }
} catch (Exception e) { } catch (Exception e) {
System.out.println("Can't get PIDs for query: " + sigarQuery + ", " + e.toString()); System.out.println(
NbBundle.getMessage(PlatformUtil.class, "PlatformUtil.getJavaPIDs.gen.msg", sigarQuery, e.toString()));
} }
return jpids; return jpids;
@ -509,10 +514,11 @@ public class PlatformUtil {
if (sigar != null) { if (sigar != null) {
sigar.kill(pid, 9); sigar.kill(pid, 9);
} else { } else {
System.out.println("Can't kill process by pid, sigar not initialized."); System.out.println(NbBundle.getMessage(PlatformUtil.class, "PlatformUtil.killProcess.sigarNotInit.msg"));
} }
} catch (Exception e) { } catch (Exception e) {
System.out.println("Can't kill process: " + pid + ", " + e.toString()); System.out.println(
NbBundle.getMessage(PlatformUtil.class, "PlatformUtil.killProcess.gen.msg", pid, e.toString()));
} }
} }
@ -532,12 +538,12 @@ public class PlatformUtil {
} }
if (sigar == null || pid == -1) { if (sigar == null || pid == -1) {
System.out.println("Can't get virt mem used, sigar not initialized. "); System.out.println(NbBundle.getMessage(PlatformUtil.class, "PlatformUtil.getProcVmUsed.sigarNotInit.msg"));
return -1; return -1;
} }
virtMem = sigar.getProcMem(pid).getSize(); virtMem = sigar.getProcMem(pid).getSize();
} catch (Exception e) { } catch (Exception e) {
System.out.println("Can't get virt mem used, " + e.toString()); System.out.println(NbBundle.getMessage(PlatformUtil.class, "PlatformUtil.getProcVmUsed.gen.msg", e.toString()));
} }
return virtMem; return virtMem;
@ -557,9 +563,9 @@ public class PlatformUtil {
final MemoryUsage heap = memoryManager.getHeapMemoryUsage(); final MemoryUsage heap = memoryManager.getHeapMemoryUsage();
final MemoryUsage nonHeap = memoryManager.getNonHeapMemoryUsage(); final MemoryUsage nonHeap = memoryManager.getNonHeapMemoryUsage();
return "JVM heap usage: " + heap.toString() + ", JVM non-heap usage: " + nonHeap.toString(); return NbBundle.getMessage(PlatformUtil.class,
"PlatformUtil.getJvmMemInfo.usageText",
heap.toString(), nonHeap.toString());
} }
/** /**
@ -572,9 +578,9 @@ public class PlatformUtil {
final long maxMemory = runTime.maxMemory(); final long maxMemory = runTime.maxMemory();
final long totalMemory = runTime.totalMemory(); final long totalMemory = runTime.totalMemory();
final long freeMemory = runTime.freeMemory(); final long freeMemory = runTime.freeMemory();
return "Physical memory usage (max, total, free): " return NbBundle.getMessage(PlatformUtil.class,
+ Long.toString(maxMemory) + ", " + Long.toString(totalMemory) "PlatformUtil.getPhysicalMemInfo.usageText",
+ ", " + Long.toString(freeMemory); Long.toString(maxMemory), Long.toString(totalMemory), Long.toString(freeMemory));
} }
/** /**
@ -583,10 +589,14 @@ public class PlatformUtil {
* @return formatted string with all memory usage info * @return formatted string with all memory usage info
*/ */
public static String getAllMemUsageInfo() { public static String getAllMemUsageInfo() {
StringBuilder sb = new StringBuilder(); // StringBuilder sb = new StringBuilder();
sb.append(PlatformUtil.getPhysicalMemInfo()).append("\n"); // sb.append(PlatformUtil.getPhysicalMemInfo()).append("\n");
sb.append(PlatformUtil.getJvmMemInfo()).append("\n"); // sb.append(PlatformUtil.getJvmMemInfo()).append("\n");
sb.append("Process Virtual Memory: ").append(PlatformUtil.getProcessVirtualMemoryUsed()); // sb.append("Process Virtual Memory: ").append(PlatformUtil.getProcessVirtualMemoryUsed());
return sb.toString(); // return sb.toString();
return NbBundle.getMessage(PlatformUtil.class,
"PlatformUtil.getAllMemUsageInfo.usageText",
PlatformUtil.getPhysicalMemInfo(), PlatformUtil.getJvmMemInfo(),
PlatformUtil.getProcessVirtualMemoryUsed());
} }
} }

View File

@ -20,7 +20,7 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package org.sleuthkit.autopsy.report; package org.sleuthkit.autopsy.coreutils;
import java.sql.Connection; import java.sql.Connection;
import java.sql.DriverManager; import java.sql.DriverManager;
@ -32,7 +32,7 @@ import org.sleuthkit.autopsy.coreutils.Logger;
/** /**
* Database connection class & utilities * * Database connection class & utilities *
*/ */
public class SQLiteDBConnect { public class SQLiteDBConnect {
public String sDriver = ""; public String sDriver = "";
public String sUrl = null; public String sUrl = null;

View File

@ -26,6 +26,8 @@ import java.util.List;
import java.util.Properties; import java.util.Properties;
import java.util.StringTokenizer; import java.util.StringTokenizer;
import java.util.logging.Level; import java.util.logging.Level;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.autopsy.coreutils.StringExtract.StringExtractUnicodeTable.SCRIPT; import org.sleuthkit.autopsy.coreutils.StringExtract.StringExtractUnicodeTable.SCRIPT;
@ -78,7 +80,8 @@ public class StringExtract {
unicodeTable = StringExtractUnicodeTable.getInstance(); unicodeTable = StringExtractUnicodeTable.getInstance();
if (unicodeTable == null) { if (unicodeTable == null) {
throw new IllegalStateException("Unicode table not properly initialized, cannot instantiate StringExtract"); throw new IllegalStateException(
NbBundle.getMessage(StringExtract.class, "StringExtract.illegalStateException.cannotInit.msg"));
} }
setEnabledScripts(SUPPORTED_SCRIPTS); setEnabledScripts(SUPPORTED_SCRIPTS);

View File

@ -68,7 +68,7 @@ public class XMLUtil {
* For example usages, please see KeywordSearchListsXML, HashDbXML, or IngestModuleLoader. * For example usages, please see KeywordSearchListsXML, HashDbXML, or IngestModuleLoader.
* *
*/ */
public static boolean xmlIsValid(DOMSource xmlfile, Class clazz, String schemaFile) { public static <T> boolean xmlIsValid(DOMSource xmlfile, Class<T> clazz, String schemaFile) {
try{ try{
PlatformUtil.extractResourceToUserConfigDir(clazz, schemaFile); PlatformUtil.extractResourceToUserConfigDir(clazz, schemaFile);
File schemaLoc = new File(PlatformUtil.getUserConfigDirectory() + File.separator + schemaFile); File schemaLoc = new File(PlatformUtil.getUserConfigDirectory() + File.separator + schemaFile);
@ -103,7 +103,7 @@ public class XMLUtil {
* For example usages, please see KeywordSearchListsXML, HashDbXML, or IngestModuleLoader. * For example usages, please see KeywordSearchListsXML, HashDbXML, or IngestModuleLoader.
* *
*/ */
public static boolean xmlIsValid(Document doc, Class clazz, String type){ public static <T> boolean xmlIsValid(Document doc, Class<T> clazz, String type){
DOMSource dms = new DOMSource(doc); DOMSource dms = new DOMSource(doc);
return xmlIsValid(dms, clazz, type); return xmlIsValid(dms, clazz, type);
} }
@ -118,7 +118,7 @@ public class XMLUtil {
* @param xsdPath the full path to the file to validate against * @param xsdPath the full path to the file to validate against
* *
*/ */
public static Document loadDoc(Class clazz, String xmlPath, String xsdPath) { public static <T> Document loadDoc(Class<T> clazz, String xmlPath, String xsdPath) {
DocumentBuilderFactory builderFactory = DocumentBuilderFactory builderFactory =
DocumentBuilderFactory.newInstance(); DocumentBuilderFactory.newInstance();
Document ret = null; Document ret = null;
@ -154,7 +154,7 @@ public class XMLUtil {
* @param doc the document to save * @param doc the document to save
* *
*/ */
public static boolean saveDoc(Class clazz, String xmlPath, String encoding, final Document doc) { public static <T> boolean saveDoc(Class<T> clazz, String xmlPath, String encoding, final Document doc) {
TransformerFactory xf = TransformerFactory.newInstance(); TransformerFactory xf = TransformerFactory.newInstance();
xf.setAttribute("indent-number", new Integer(1)); xf.setAttribute("indent-number", new Integer(1));
boolean success = false; boolean success = false;

View File

@ -1,7 +1,7 @@
/* /*
* Autopsy Forensic Browser * Autopsy Forensic Browser
* *
* Copyright 2011 Basis Technology Corp. * Copyright 2011-2014 Basis Technology Corp.
* Contact: carrier <at> sleuthkit <dot> org * Contact: carrier <at> sleuthkit <dot> org
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
@ -22,6 +22,8 @@ import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.Map; import java.util.Map;
import java.util.logging.Level; import java.util.logging.Level;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.datamodel.AbstractFile; import org.sleuthkit.datamodel.AbstractFile;
import org.sleuthkit.datamodel.BlackboardArtifact; import org.sleuthkit.datamodel.BlackboardArtifact;
@ -52,117 +54,125 @@ public abstract class AbstractAbstractFileNode<T extends AbstractFile> extends A
NAME { NAME {
@Override @Override
public String toString() { public String toString() {
return "Name"; return NbBundle.getMessage(this.getClass(), "AbstractAbstractFileNode.nameColLbl");
} }
}, },
LOCATION { LOCATION {
@Override @Override
public String toString() { public String toString() {
return "Location"; return NbBundle.getMessage(this.getClass(), "AbstractAbstractFileNode.locationColLbl");
} }
}, },
MOD_TIME { MOD_TIME {
@Override @Override
public String toString() { public String toString() {
return "Modified Time"; return NbBundle.getMessage(this.getClass(), "AbstractAbstractFileNode.modifiedTimeColLbl");
} }
}, },
CHANGED_TIME { CHANGED_TIME {
@Override @Override
public String toString() { public String toString() {
return "Change Time"; return NbBundle.getMessage(this.getClass(), "AbstractAbstractFileNode.changeTimeColLbl");
} }
}, },
ACCESS_TIME { ACCESS_TIME {
@Override @Override
public String toString() { public String toString() {
return "Access Time"; return NbBundle.getMessage(this.getClass(), "AbstractAbstractFileNode.accessTimeColLbl");
} }
}, },
CREATED_TIME { CREATED_TIME {
@Override @Override
public String toString() { public String toString() {
return "Created Time"; return NbBundle.getMessage(this.getClass(), "AbstractAbstractFileNode.createdTimeColLbl");
} }
}, },
SIZE { SIZE {
@Override @Override
public String toString() { public String toString() {
return "Size"; return NbBundle.getMessage(this.getClass(), "AbstractAbstractFileNode.sizeColLbl");
} }
}, },
FLAGS_DIR { FLAGS_DIR {
@Override @Override
public String toString() { public String toString() {
return "Flags(Dir)"; return NbBundle.getMessage(this.getClass(), "AbstractAbstractFileNode.flagsDirColLbl");
} }
}, },
FLAGS_META { FLAGS_META {
@Override @Override
public String toString() { public String toString() {
return "Flags(Meta)"; return NbBundle.getMessage(this.getClass(), "AbstractAbstractFileNode.flagsMetaColLbl");
} }
}, },
MODE { MODE {
@Override @Override
public String toString() { public String toString() {
return "Mode"; return NbBundle.getMessage(this.getClass(), "AbstractAbstractFileNode.modeColLbl");
} }
}, },
USER_ID { USER_ID {
@Override @Override
public String toString() { public String toString() {
return "UserID"; return NbBundle.getMessage(this.getClass(), "AbstractAbstractFileNode.useridColLbl");
} }
}, },
GROUP_ID { GROUP_ID {
@Override @Override
public String toString() { public String toString() {
return "GroupID"; return NbBundle.getMessage(this.getClass(), "AbstractAbstractFileNode.groupidColLbl");
} }
}, },
META_ADDR { META_ADDR {
@Override @Override
public String toString() { public String toString() {
return "Meta Addr."; return NbBundle.getMessage(this.getClass(), "AbstractAbstractFileNode.metaAddrColLbl");
} }
}, },
ATTR_ADDR { ATTR_ADDR {
@Override @Override
public String toString() { public String toString() {
return "Attr. Addr."; return NbBundle.getMessage(this.getClass(), "AbstractAbstractFileNode.attrAddrColLbl");
} }
}, },
TYPE_DIR { TYPE_DIR {
@Override @Override
public String toString() { public String toString() {
return "Type(Dir)"; return NbBundle.getMessage(this.getClass(), "AbstractAbstractFileNode.typeDirColLbl");
} }
}, },
TYPE_META { TYPE_META {
@Override @Override
public String toString() { public String toString() {
return "Type(Meta)"; return NbBundle.getMessage(this.getClass(), "AbstractAbstractFileNode.typeMetaColLbl");
} }
}, },
KNOWN { KNOWN {
@Override @Override
public String toString() { public String toString() {
return "Known"; return NbBundle.getMessage(this.getClass(), "AbstractAbstractFileNode.knownColLbl");
} }
}, },
HASHSETS { HASHSETS {
@Override @Override
public String toString() { public String toString() {
return "In Hashsets"; return NbBundle.getMessage(this.getClass(), "AbstractAbstractFileNode.inHashsetsColLbl");
} }
}, },
MD5HASH { MD5HASH {
@Override @Override
public String toString() { public String toString() {
return "MD5 Hash";
return NbBundle.getMessage(this.getClass(), "AbstractAbstractFileNode.md5HashColLbl");
} }
},
ObjectID {
@Override
public String toString() {
return "Object ID";
} }
},
} }
@ -179,7 +189,7 @@ public abstract class AbstractAbstractFileNode<T extends AbstractFile> extends A
try { try {
path = content.getUniquePath(); path = content.getUniquePath();
} catch (TskCoreException ex) { } catch (TskCoreException ex) {
logger.log(Level.SEVERE, "Except while calling Content.getUniquePath() on " + content); logger.log(Level.SEVERE, "Except while calling Content.getUniquePath() on {0}", content);
} }
map.put(AbstractFilePropertyType.NAME.toString(), AbstractAbstractFileNode.getContentDisplayName(content)); map.put(AbstractFilePropertyType.NAME.toString(), AbstractAbstractFileNode.getContentDisplayName(content));
@ -201,15 +211,19 @@ public abstract class AbstractAbstractFileNode<T extends AbstractFile> extends A
map.put(AbstractFilePropertyType.KNOWN.toString(), content.getKnown().getName()); map.put(AbstractFilePropertyType.KNOWN.toString(), content.getKnown().getName());
map.put(AbstractFilePropertyType.HASHSETS.toString(), getHashSetHitsForFile(content)); map.put(AbstractFilePropertyType.HASHSETS.toString(), getHashSetHitsForFile(content));
map.put(AbstractFilePropertyType.MD5HASH.toString(), content.getMd5Hash() == null ? "" : content.getMd5Hash()); map.put(AbstractFilePropertyType.MD5HASH.toString(), content.getMd5Hash() == null ? "" : content.getMd5Hash());
map.put(AbstractFilePropertyType.ObjectID.toString(), content.getId());
} }
static String getContentDisplayName(AbstractFile file) { static String getContentDisplayName(AbstractFile file) {
String name = file.getName(); String name = file.getName();
if (name.equals("..")) { switch (name) {
case "..":
name = DirectoryNode.DOTDOTDIR; name = DirectoryNode.DOTDOTDIR;
} else if (name.equals(".")) { break;
case ".":
name = DirectoryNode.DOTDIR; name = DirectoryNode.DOTDIR;
break;
} }
return name; return name;
} }

View File

@ -1,7 +1,7 @@
/* /*
* Autopsy Forensic Browser * Autopsy Forensic Browser
* *
* Copyright 2011 Basis Technology Corp. * Copyright 2011-2014 Basis Technology Corp.
* Contact: carrier <at> sleuthkit <dot> org * Contact: carrier <at> sleuthkit <dot> org
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
@ -21,7 +21,9 @@ package org.sleuthkit.autopsy.datamodel;
import org.openide.nodes.AbstractNode; import org.openide.nodes.AbstractNode;
import org.openide.nodes.Children.Keys; import org.openide.nodes.Children.Keys;
import org.openide.nodes.Node; import org.openide.nodes.Node;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.datamodel.KeywordHits.KeywordHitsRootNode; import org.sleuthkit.autopsy.datamodel.KeywordHits.KeywordHitsRootNode;
import org.sleuthkit.datamodel.Content;
import org.sleuthkit.datamodel.DerivedFile; import org.sleuthkit.datamodel.DerivedFile;
import org.sleuthkit.datamodel.Directory; import org.sleuthkit.datamodel.Directory;
import org.sleuthkit.datamodel.File; import org.sleuthkit.datamodel.File;
@ -62,51 +64,52 @@ abstract class AbstractContentChildren<T> extends Keys<T> {
/** /**
* Creates appropriate Node for each sub-class of Content * Creates appropriate Node for each sub-class of Content
*/ */
public static class CreateSleuthkitNodeVisitor extends SleuthkitItemVisitor.Default<AbstractContentNode> { public static class CreateSleuthkitNodeVisitor extends SleuthkitItemVisitor.Default<AbstractContentNode<? extends Content>> {
@Override @Override
public AbstractContentNode visit(Directory drctr) { public AbstractContentNode<? extends Content> visit(Directory drctr) {
return new DirectoryNode(drctr); return new DirectoryNode(drctr);
} }
@Override @Override
public AbstractContentNode visit(File file) { public AbstractContentNode<? extends Content> visit(File file) {
return new FileNode(file); return new FileNode(file);
} }
@Override @Override
public AbstractContentNode visit(Image image) { public AbstractContentNode<? extends Content> visit(Image image) {
return new ImageNode(image); return new ImageNode(image);
} }
@Override @Override
public AbstractContentNode visit(Volume volume) { public AbstractContentNode<? extends Content> visit(Volume volume) {
return new VolumeNode(volume); return new VolumeNode(volume);
} }
@Override @Override
public AbstractContentNode visit(LayoutFile lf) { public AbstractContentNode<? extends Content> visit(LayoutFile lf) {
return new LayoutFileNode(lf); return new LayoutFileNode(lf);
} }
@Override @Override
public AbstractContentNode visit(DerivedFile df) { public AbstractContentNode<? extends Content> visit(DerivedFile df) {
return new LocalFileNode(df); return new LocalFileNode(df);
} }
@Override @Override
public AbstractContentNode visit(LocalFile lf) { public AbstractContentNode<? extends Content> visit(LocalFile lf) {
return new LocalFileNode(lf); return new LocalFileNode(lf);
} }
@Override @Override
public AbstractContentNode visit(VirtualDirectory ld) { public AbstractContentNode<? extends Content> visit(VirtualDirectory ld) {
return new VirtualDirectoryNode(ld); return new VirtualDirectoryNode(ld);
} }
@Override @Override
protected AbstractContentNode defaultVisit(SleuthkitVisitableItem di) { protected AbstractContentNode<? extends Content> defaultVisit(SleuthkitVisitableItem di) {
throw new UnsupportedOperationException("No Node defined for the given SleuthkitItem"); throw new UnsupportedOperationException(NbBundle.getMessage(this.getClass(),
"AbstractContentChildren.CreateTSKNodeVisitor.exception.noNodeMsg"));
} }
} }
@ -186,7 +189,9 @@ abstract class AbstractContentChildren<T> extends Keys<T> {
@Override @Override
protected AbstractNode defaultVisit(AutopsyVisitableItem di) { protected AbstractNode defaultVisit(AutopsyVisitableItem di) {
throw new UnsupportedOperationException("No Node defined for the given DisplayableItem"); throw new UnsupportedOperationException(
NbBundle.getMessage(this.getClass(),
"AbstractContentChildren.createAutopsyNodeVisitor.exception.noNodeMsg"));
} }
} }
} }

View File

@ -20,6 +20,8 @@ package org.sleuthkit.autopsy.datamodel;
import java.util.List; import java.util.List;
import java.util.logging.Level; import java.util.logging.Level;
import org.openide.util.NbBundle;
import org.openide.util.lookup.Lookups; import org.openide.util.lookup.Lookups;
import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.datamodel.Content; import org.sleuthkit.datamodel.Content;
@ -63,7 +65,8 @@ public abstract class AbstractContentNode<T extends Content> extends ContentNode
@Override @Override
public void setName(String name) { public void setName(String name) {
throw new UnsupportedOperationException("Can't change the system name."); throw new UnsupportedOperationException(
NbBundle.getMessage(this.getClass(), "AbstractContentNode.exception.cannotChangeSysName.msg"));
} }
@Override @Override

View File

@ -21,6 +21,7 @@ package org.sleuthkit.autopsy.datamodel;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.Map; import java.util.Map;
import org.openide.nodes.Sheet; import org.openide.nodes.Sheet;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.datamodel.AbstractFile; import org.sleuthkit.datamodel.AbstractFile;
@ -73,14 +74,14 @@ public abstract class AbstractFsContentNode<T extends AbstractFile> extends Abst
AbstractFilePropertyType[] fsTypes = AbstractFilePropertyType.values(); AbstractFilePropertyType[] fsTypes = AbstractFilePropertyType.values();
final int FS_PROPS_LEN = fsTypes.length; final int FS_PROPS_LEN = fsTypes.length;
final String NO_DESCR = "no description"; final String NO_DESCR = NbBundle.getMessage(this.getClass(), "AbstractFsContentNode.noDesc.text");
for (int i = 0; i < FS_PROPS_LEN; ++i) { for (int i = 0; i < FS_PROPS_LEN; ++i) {
final AbstractFilePropertyType propType = AbstractFilePropertyType.values()[i]; final AbstractFilePropertyType propType = AbstractFilePropertyType.values()[i];
final String propString = propType.toString(); final String propString = propType.toString();
ss.put(new NodeProperty(propString, propString, NO_DESCR, map.get(propString))); ss.put(new NodeProperty<>(propString, propString, NO_DESCR, map.get(propString)));
} }
if (directoryBrowseMode) { if (directoryBrowseMode) {
ss.put(new NodeProperty(HIDE_PARENT, HIDE_PARENT, HIDE_PARENT, HIDE_PARENT)); ss.put(new NodeProperty<>(HIDE_PARENT, HIDE_PARENT, HIDE_PARENT, HIDE_PARENT));
} }
return s; return s;

View File

@ -22,6 +22,8 @@ import java.text.SimpleDateFormat;
import java.util.Arrays; import java.util.Arrays;
import java.util.TimeZone; import java.util.TimeZone;
import java.util.logging.Level; import java.util.logging.Level;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.datamodel.BlackboardArtifact; import org.sleuthkit.datamodel.BlackboardArtifact;
import org.sleuthkit.datamodel.BlackboardAttribute; import org.sleuthkit.datamodel.BlackboardAttribute;
@ -135,7 +137,9 @@ public class ArtifactStringContent implements StringContent {
//add file path //add file path
buffer.append("<tr>"); buffer.append("<tr>");
buffer.append("<td>Source File Path</td>"); buffer.append("<td>");
buffer.append(NbBundle.getMessage(this.getClass(), "ArtifactStringContent.getStr.srcFilePath.text"));
buffer.append("</td>");
buffer.append("<td>"); buffer.append("<td>");
buffer.append(path); buffer.append(path);
buffer.append("</td>"); buffer.append("</td>");
@ -146,7 +150,7 @@ public class ArtifactStringContent implements StringContent {
stringContent = buffer.toString(); stringContent = buffer.toString();
} catch (TskException ex) { } catch (TskException ex) {
stringContent = "Error getting content"; stringContent = NbBundle.getMessage(this.getClass(), "ArtifactStringContent.getStr.err");
} }
} }
@ -159,7 +163,7 @@ public class ArtifactStringContent implements StringContent {
} catch (TskException ex) { } catch (TskException ex) {
logger.log(Level.WARNING, "Getting file failed", ex); logger.log(Level.WARNING, "Getting file failed", ex);
} }
throw new IllegalArgumentException("Couldn't get file from database"); throw new IllegalArgumentException(NbBundle.getMessage(ArtifactStringContent.class, "ArtifactStringContent.exception.msg"));
} }
private static TimeZone getTimeZone(BlackboardArtifact artifact) { private static TimeZone getTimeZone(BlackboardArtifact artifact) {

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