mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-17 02:07:42 +00:00
Merge branch 'develop' of https://www.github.com/sleuthkit/autopsy into develop
This commit is contained in:
commit
00baf95ee4
1
.gitignore
vendored
1
.gitignore
vendored
@ -36,7 +36,6 @@
|
||||
!/Ingest/nbproject/project.properties
|
||||
/branding_spear
|
||||
/installer_spear
|
||||
Bundle_*.properties
|
||||
*/genfiles.properties
|
||||
genfiles.properties
|
||||
/branding/core/core.jar/org/netbeans/core/startup/Bundle.properties
|
||||
|
@ -27,6 +27,8 @@ import javax.swing.AbstractAction;
|
||||
import javax.swing.JMenu;
|
||||
import javax.swing.JMenuItem;
|
||||
import javax.swing.JOptionPane;
|
||||
|
||||
import org.openide.util.NbBundle;
|
||||
import org.openide.util.Utilities;
|
||||
import org.openide.util.Lookup;
|
||||
import org.openide.util.actions.Presenter;
|
||||
@ -41,6 +43,10 @@ import static org.sleuthkit.autopsy.hashdatabase.HashDbManager.HashDb;
|
||||
*/
|
||||
final class AddContentToHashDbAction extends AbstractAction implements Presenter.Popup {
|
||||
private static AddContentToHashDbAction instance;
|
||||
private final static String SINGLE_SELECTION_NAME = NbBundle.getMessage(AddContentToHashDbAction.class,
|
||||
"AddContentToHashDbAction.singleSelectionName");
|
||||
private final static String MULTIPLE_SELECTION_NAME = NbBundle.getMessage(AddContentToHashDbAction.class,
|
||||
"AddContentToHashDbAction.multipleSelectionName");
|
||||
|
||||
/**
|
||||
* AddContentToHashDbAction is a singleton to support multi-selection of nodes, since
|
||||
@ -70,8 +76,6 @@ final class AddContentToHashDbAction extends AbstractAction implements Presenter
|
||||
// Instances of this class are used to implement the a pop up menu for this
|
||||
// action.
|
||||
private final class AddContentToHashDbMenu extends JMenu {
|
||||
private final static String SINGLE_SELECTION_NAME = "Add file to hash database";
|
||||
private final static String MULTIPLE_SELECTION_NAME = "Add files to hash database";
|
||||
|
||||
AddContentToHashDbMenu() {
|
||||
super(SINGLE_SELECTION_NAME);
|
||||
@ -117,7 +121,9 @@ final class AddContentToHashDbAction extends AbstractAction implements Presenter
|
||||
}
|
||||
}
|
||||
else {
|
||||
JMenuItem empty = new JMenuItem("No hash databases configured");
|
||||
JMenuItem empty = new JMenuItem(
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"AddContentToHashDbAction.ContentMenu.noHashDbsConfigd"));
|
||||
empty.setEnabled(false);
|
||||
add(empty);
|
||||
}
|
||||
@ -126,7 +132,8 @@ final class AddContentToHashDbAction extends AbstractAction implements Presenter
|
||||
// a hash database creation dialog and adds the selected files to the
|
||||
// the new database.
|
||||
addSeparator();
|
||||
JMenuItem newHashSetItem = new JMenuItem("Create database...");
|
||||
JMenuItem newHashSetItem = new JMenuItem(NbBundle.getMessage(this.getClass(),
|
||||
"AddContentToHashDbAction.ContentMenu.createDbItem"));
|
||||
newHashSetItem.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
@ -147,13 +154,26 @@ final class AddContentToHashDbAction extends AbstractAction implements Presenter
|
||||
try {
|
||||
hashSet.addHashes(file);
|
||||
}
|
||||
catch (TskCoreException ex) {
|
||||
Logger.getLogger(AddContentToHashDbAction.class.getName()).log(Level.SEVERE, "Error adding to hash database", ex);
|
||||
JOptionPane.showMessageDialog(null, "Unable to add " + file.getName() + " to the hash database.", "Add to Hash Database Error", JOptionPane.ERROR_MESSAGE);
|
||||
catch (TskCoreException ex) {
|
||||
//noinspection HardCodedStringLiteral
|
||||
Logger.getLogger(AddContentToHashDbAction.class.getName()).log(Level.SEVERE, "Error adding to hash database", ex);
|
||||
JOptionPane.showMessageDialog(null,
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"AddContentToHashDbAction.addFilesToHashSet.unableToAddFileMsg",
|
||||
file.getName()),
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"AddContentToHashDbAction.addFilesToHashSet.addToHashDbErr"),
|
||||
JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
}
|
||||
else {
|
||||
JOptionPane.showMessageDialog(null, "Unable to add the " + (files.size() > 1 ? "files" : "file") + " to the hash database. Hashes have not been calculated. Please configure and run an appropriate ingest module.", "Add to Hash Database Error", JOptionPane.ERROR_MESSAGE);
|
||||
JOptionPane.showMessageDialog(null,
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"AddContentToHashDbAction.addFilesToHashSet.unableToAddFileSzMsg",
|
||||
files.size() > 1 ? "files" : "file"),
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"AddContentToHashDbAction.addFilesToHashSet.addToHashDbErr"),
|
||||
JOptionPane.ERROR_MESSAGE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -4,14 +4,13 @@ OpenIDE-Module-Long-Description=\
|
||||
The ingest module analyzes files in the disk image and marks them as "known" (based on NSRL database lookup for "known" files) and "bad / interesting" (based on one or more databases supplied by the user).\n\n\
|
||||
The module also contains additional non-ingest tools that are integrated in the GUI, such as file lookup by hash and hash database configuration.
|
||||
OpenIDE-Module-Name=HashDatabase
|
||||
HashDbSimplePanel.knownLabel.text=NSRL Database:
|
||||
OptionsCategory_Name_HashDatabase=Hash Database
|
||||
OptionsCategory_Keywords_HashDatabase=Hash Database
|
||||
HashDbSimplePanel.knownLabel.text=NSRL Database:
|
||||
HashDbSimplePanel.notableLabel.text=Known Bad Database(s):
|
||||
HashDbSimplePanel.knownValLabel.text=-
|
||||
HashDbSimplePanel.notableValLabel.text=-
|
||||
HashDbSearchPanel.hashTable.columnModel.title0=MD5 Hashes
|
||||
HashDbSearchPanel.hashTable.columnModel.title3=Title 4
|
||||
HashDbSearchPanel.hashTable.columnModel.title2=Title 3
|
||||
HashDbSearchPanel.hashTable.columnModel.title1=Title 2
|
||||
HashDbSearchPanel.addButton.text=Add Hash
|
||||
HashDbSearchPanel.hashField.text=
|
||||
HashDbSearchPanel.hashLabel.text=MD5 hash:
|
||||
@ -25,7 +24,7 @@ OpenIDE-Module-Short-Description=Hash Database Ingest Module and hash db tools
|
||||
HashDbImportDatabaseDialog.jLabel1.text=Hash Set Name:
|
||||
HashDbImportDatabaseDialog.databasePathTextField.text=
|
||||
HashDbImportDatabaseDialog.knownBadRadioButton.text=Known Bad
|
||||
HashDbImportDatabaseDialog.jLabel2.text=Type of database:
|
||||
HashDbImportDatabaseDialog.jLabel2.text=Type of database\:
|
||||
HashDbImportDatabaseDialog.okButton.text=OK
|
||||
HashDbImportDatabaseDialog.cancelButton.text=Cancel
|
||||
HashDbCreateDatabaseDialog.jLabel2.text=Type:
|
||||
@ -50,12 +49,11 @@ HashDbConfigPanel.indexLabel.text=Index Status:
|
||||
HashDbConfigPanel.informationLabel.text=Information
|
||||
HashDbConfigPanel.importDatabaseButton.text=Import Database
|
||||
HashDbConfigPanel.deleteDatabaseButton.text=Delete Database
|
||||
HashDbConfigPanel.indexPathLabelLabel.text=Index Path:
|
||||
HashDbConfigPanel.indexPathLabelLabel.text=Index Path:
|
||||
HashDbConfigPanel.indexPathLabel.text=No database selected
|
||||
ModalNoButtons.CURRENTDB_LABEL.text=(CurrentDb)
|
||||
ModalNoButtons.CURRENTLYON_LABEL.text=Currently Indexing x of y
|
||||
ModalNoButtons.GO_GET_COFFEE_LABEL.text=Hash databases are currently being indexed, this may take some time.
|
||||
ModalNoButtons.cancelButton.text=Cancel
|
||||
ModalNoButtons.CANCEL_BUTTON.text=Cancel
|
||||
HashDbSimpleConfigPanel.knownBadHashDbsLabel.text=Select known BAD hash databases to use:
|
||||
HashDbSimpleConfigPanel.knownHashDbsLabel.text=Select known hash databases to use:
|
||||
@ -79,3 +77,130 @@ HashDbCreateDatabaseDialog.okButton.text=OK
|
||||
HashDbCreateDatabaseDialog.databasePathTextField.text=
|
||||
HashDbConfigPanel.searchDuringIngestCheckbox.text=Search during ingest
|
||||
HashDbConfigPanel.sendIngestMessagesCheckBox.text=Send ingest messages
|
||||
AddContentToHashDbAction.ContentMenu.noHashDbsConfigd=No hash databases configured
|
||||
AddContentToHashDbAction.ContentMenu.createDbItem=Create database...
|
||||
AddContentToHashDbAction.addFilesToHashSet.addToHashDbErr=Add to Hash Database Error
|
||||
AddContentToHashDbAction.addFilesToHashSet.unableToAddFileMsg=Unable to add {0} to the hash database.
|
||||
AddContentToHashDbAction.addFilesToHashSet.unableToAddFileSzMsg=Unable to add the {0} to the hash database. Hashes have not been calculated. Please configure and run an appropriate ingest module.
|
||||
HashDatabaseOptionsPanelController.moduleErr=Module Error
|
||||
HashDatabaseOptionsPanelController.moduleErrMsg=A module caused an error listening to HashDatabaseOptionsPanelController updates. See log to determine which module. Some data could be incomplete.
|
||||
HashDbConfigPanel.noSelectionText=No database selected
|
||||
HashDbConfigPanel.errorGettingPathText=Error occurred getting path
|
||||
HashDbConfigPanel.errorGettingIndexStatusText=Error occurred getting status
|
||||
HashDbConfigPanel.setName.hashSetConfig=Hash Set Configuration
|
||||
HashDbConfigPanel.indexButtonText.index=Index
|
||||
HashDbConfigPanel.indexButtonText.indexing=Indexing
|
||||
HashDbConfigPanel.indexStatusText.indexGen=Index is currently being generated
|
||||
HashDbConfigPanel.indexStatusText.indexOnly=Index only
|
||||
HashDbConfigPanel.indexStatusText.indexed=Indexed
|
||||
HashDbConfigPanel.indexButtonText.reIndex=Re-Index
|
||||
HashDbConfigPanel.indexStatusText.noIndex=No index
|
||||
HashDbConfigPanel.dbsNotIndexedMsg=The following databases are not indexed, would you like to index them now? \
|
||||
{0}
|
||||
HashDbConfigPanel.dbNotIndexedMsg=The following database is not indexed, would you like to index it now? \
|
||||
{0}
|
||||
HashDbConfigPanel.unindexedDbsMsg=Unindexed databases
|
||||
HashDbConfigPanel.allUnindexedDbsRmFromListMsg=All unindexed databases will be removed from the list
|
||||
HashDbConfigPanel.nameColLbl=Name
|
||||
HashDbConfigPanel.editingCellsNotSupportedMsg=Editing of cells is not supported
|
||||
HashDbConfigPanel.deleteDbActionConfirmMsg=This will remove the hash database for all cases. Do you want to proceed?
|
||||
HashDbConfigPanel.deleteDbActionMsg=Delete Hash Database from Configuration
|
||||
HashDbCreateDatabaseDialog.defaultFileName=hashset
|
||||
HashDbCreateDatabaseDialog.createHashDbMsg=Create Hash Database
|
||||
HashDbCreateDatabaseDialog.hashDbMustHaveFileExtensionMsg=The hash database file must have a .{0} extension.
|
||||
HashDbCreateDatabaseDialog.fileNameErr=File Name Error
|
||||
HashDbCreateDatabaseDialog.fileNameAlreadyExistsMsg=A file with this name already exists. Please choose a new file name.
|
||||
HashDbCreateDatabaseDialog.fileExistsErr=File Already Exists Error
|
||||
HashDbCreateDatabaseDialog.mustEnterHashSetNameMsg=A hash set name must be entered.
|
||||
HashDbCreateDatabaseDialog.createHashDbErr=Create Hash Database Error
|
||||
HashDbCreateDatabaseDialog.mustEnterHashDbPathMsg=A database path must be entered.
|
||||
HashDbCreateDatabaseDialog.errMsg.hashDbCreationErr=Hash database creation error
|
||||
HashDbCreateDatabaseDialog.cannotCreateFileAtLocMsg=Cannot create a hash database file at the selected location.
|
||||
HashDbCreateDatabaseDialog.failedToCreateHashDbMsg=Failed to create the hash database.
|
||||
HashDbImportDatabaseDialog.importHashDbMsg=Import Hash Database
|
||||
HashDbImportDatabaseDialog.fileNameExtFilter.text=Hash Database File
|
||||
HashDbImportDatabaseDialog.failedToGetDbPathMsg=Failed to get the path of the selected database.
|
||||
HashDbImportDatabaseDialog.importHashDbErr=Import Hash Database Error
|
||||
HashDbImportDatabaseDialog.mustSelectHashDbFilePathMsg=A hash database file path must be selected.
|
||||
HashDbImportDatabaseDialog.hashDbDoesNotExistMsg=The selected hash database does not exist.
|
||||
HashDbImportDatabaseDialog.errorMessage.failedToOpenHashDbMsg=Failed to open hash database at {0}.
|
||||
HashDbIngestModule.moduleName=Hash Lookup
|
||||
HashDbIngestModule.moduleDescription=Identifies known and notables files using supplied hash databases, such as a standard NSRL database.
|
||||
HashDbIngestModule.noKnownHashDbSetMsg=No known hash database set
|
||||
HashDbIngestModule.knownFileSearchWillNotExecuteWarn=Known file search will not be executed.
|
||||
HashDbIngestModule.noKnownBadHashDbSetMsg=No known bad hash database set
|
||||
HashDbIngestModule.knownBadFileSearchWillNotExecuteWarn=Known bad file search will not be executed.
|
||||
HashDbIngestModule.fileReadErrorMsg=Read Error\: {0}
|
||||
HashDbIngestModule.calcHashValueErr=Error encountered while calculating the hash value for {0}.
|
||||
HashDbIngestModule.hashLookupErrorMsg=Hash Lookup Error\: {0}
|
||||
HashDbIngestModule.settingKnownBadStateErr=Error encountered while setting known bad state for {0}.
|
||||
HashDbIngestModule.lookingUpKnownBadHashValueErr=Error encountered while looking up known bad hash value for {0}.
|
||||
HashDbIngestModule.settingsKnownStateErr=Error encountered while setting known state for {0}.
|
||||
HashDbIngestModule.lookingUpKnownHashValueErr=Error encountered while looking up known hash value for {0}.
|
||||
HashDbIngestModule.postToBB.fileName=File Name
|
||||
HashDbIngestModule.postToBB.md5Hash=MD5 Hash
|
||||
HashDbIngestModule.postToBB.hashsetName=Hashset Name
|
||||
HashDbIngestModule.postToBB.knownBadMsg=Known Bad\: {0}
|
||||
HashDbIngestModule.complete.knownBadsFound=Known bads found\:
|
||||
HashDbIngestModule.complete.totalCalcTime=Total Calculation Time
|
||||
HashDbIngestModule.complete.totalLookupTime=Total Lookup Time
|
||||
HashDbIngestModule.complete.databasesUsed=Databases Used\:
|
||||
HashDbIngestModule.complete.hashLookupResults=Hash Lookup Results
|
||||
HashDbManager.moduleErrorListeningToUpdatesMsg=A module caused an error listening to HashDbManager updates. See log to determine which module. Some data could be incomplete.
|
||||
HashDbManager.replacingDuplicateHashsetNameMsg=Duplicate hash set name {0} found.\
|
||||
Replacing with {1}.
|
||||
HashDbManager.openHashDbErr=Open Hash Database Error
|
||||
HashDbManager.unableToOpenHashDbMsg=Unable to open {0} hash database.
|
||||
HashDbManager.savedBackupOfOldConfigMsg={0}\
|
||||
A backup copy of the old configuration has been saved as\
|
||||
{1}
|
||||
HashDbManager.baseMessage.updatedFormatHashDbConfig=The format of the hash database configuration file has been updated.
|
||||
HashDbManager.msgBoxTitle.confFileFmtChanged=Configuration File Format Changed
|
||||
HashDbManager.dlgMsg.dbNotFoundAtLoc=Database {0} could not be found at location\
|
||||
{1}\
|
||||
Would you like to search for the file?
|
||||
HashDbManager.dlgTitle.MissingDb=Missing Database
|
||||
HashDbManager.progress.indexingHashSet=Indexing {0}
|
||||
HashDbManager.dlgMsg.errorIndexingHashSet=Error indexing {0} hash database.
|
||||
HashDbManager.hashDbIndexingErr=Hash Database Indexing Error
|
||||
HashDbPanelSearchAction.actionName=File Search by MD5 Hash
|
||||
HashDbSearchAction.dlgMsg.noFilesHaveMD5Calculated=No files currently have an MD5 hash calculated, run HashDB ingest first.
|
||||
HashDbSearchManager.MD5HashSearch=MD5 Hash Search
|
||||
HashDbSearchManager.noResultsFoundMsg=No results were found.
|
||||
HashDbSearchPanel.titleText.ingestOngoing=Ingest is ongoing; this service will be unavailable until it finishes.
|
||||
HashDbSearchPanel.noFilesHaveMD5HashMsg=No files currently have an MD5 hash.
|
||||
HashDbSearchPanel.errorText.noHashesAddedMsg=Error\: No hashes have been added.
|
||||
HashDbSearchPanel.errorText.hashAlreadyAddedMsg=Error\: Hash has already been added.
|
||||
HashDbSearchPanel.errorText.invalidMD5HashMsg=Error\: That is not a valid MD5 hash.
|
||||
HashDbSearchThread.progress.cancellingSearch={0} (Cancelling...)
|
||||
HashDbSearchThread.name.searching=Searching
|
||||
HashDbSearchThread.noMoreFilesWithMD5Msg=No other files with the same MD5 hash were found.
|
||||
HashDbSimpleConfigPanel.dlgMsg.mustIndexDbBeforeUse=Hash databases must be indexed before they can be used for ingest
|
||||
ModalNoButtons.indexingDbsTitle=Indexing databases
|
||||
ModalNoButtons.indexingDbTitle=Indexing database
|
||||
ModalNoButtons.exitHashDbIndexingMsg=You are about to exit out of indexing your hash databases. \
|
||||
The generated index will be left unusable. If you choose to continue,\
|
||||
please delete the corresponding -md5.idx file in the hash folder.\
|
||||
Exit indexing?
|
||||
ModalNoButtons.dlgTitle.unfinishedIndexing=Unfinished Indexing
|
||||
ModalNoButtons.indexThis.currentlyIndexing1Db=Currently indexing 1 database
|
||||
ModalNoButtons.indexThese.currentlyIndexing1OfNDbs=Currently indexing 1 of {0}
|
||||
ModalNoButtons.propChg.currentlyIndexingXofN=Currently indexing {0} of {1}
|
||||
HashDbManager.duplicateHashSetNameExceptionMsg=The hash set name ''{0}'' has already been used for another hash database.
|
||||
HashDbManager.hashDbDoesNotExistExceptionMsg=No hash database found at\
|
||||
{0}
|
||||
HashDbManager.hashDbFileExistsExceptionMsg=A file already exists at\
|
||||
{0}
|
||||
HashDbManager.hashDbAlreadyAddedExceptionMsg=The hash database at\
|
||||
{0}\
|
||||
has already been created or imported.
|
||||
HashDbManager.illegalHashDbFileNameExtensionMsg=The hash database file name must have a .{0} extension.
|
||||
HashDbManager.moduleErr=Module Error
|
||||
HashDbManager.knownBad.text=Known Bad
|
||||
HashDbManager.known.text=Known
|
||||
HashDbManager.fileNameExtensionFilter.title=Hash Database File
|
||||
HashDbSearchAction.dlgMsg.title=File Search by MD5 Hash
|
||||
HashDbSearchAction.getName.text=Hash Search
|
||||
HashDbSearchPanel.dlgMsg.title=File Search by MD5 Hash
|
||||
AddContentToHashDbAction.singleSelectionName=Add file to hash database
|
||||
AddContentToHashDbAction.multipleSelectionName=Add files to hash database
|
||||
|
@ -0,0 +1,194 @@
|
||||
HashDbSimplePanel.knownLabel.text=NSRL\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9
|
||||
OpenIDE-Module-Display-Category=\u30E2\u30B8\u30E5\u30FC\u30EB\u633F\u5165
|
||||
OpenIDE-Module-Long-Description=\u30CF\u30C3\u30B7\u30E5\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u30E2\u30B8\u30E5\u30FC\u30EB\u633F\u5165 \n\n\
|
||||
\u30C7\u30A3\u30B9\u30AF\u30A4\u30E1\u30FC\u30B8\u306B\u3042\u308B\u30D5\u30A1\u30A4\u30EB\u3092\u89E3\u6790\u3057\u3001\u300C\u65E2\u77E5\u300D\uFF08NSRL\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u306E\u300C\u65E2\u77E5\u300D\u30D5\u30A1\u30A4\u30EB\u30EB\u30C3\u30AF\u30A2\u30C3\u30D7\u3092\u57FA\u306B\uFF09\u307E\u305F\u306F\u300C\u4E0D\u826F\uFF0F\u7591\u308F\u3057\u3044\u300D\uFF08\u30E6\u30FC\u30B6\u30FC\u304C\u6307\u5B9A\u3057\u305F\uFF11\u3064\u307E\u305F\u306F\u8907\u6570\u306E\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u3092\u57FA\u306B\uFF09\u3068\u30DE\u30FC\u30AF\u3057\u307E\u3059\u3002\n\n\
|
||||
\u30CF\u30C3\u30B7\u30E5\u3084\u30CF\u30C3\u30B7\u30E5\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u30B3\u30F3\u30D5\u30A3\u30AE\u30E5\u30EC\u30FC\u30B7\u30E7\u30F3\u306B\u57FA\u3065\u3044\u305F\u30D5\u30A1\u30A4\u30EB\u30EB\u30C3\u30AF\u30A2\u30C3\u30D7\u306A\u3069\u3001\u3053\u306E\u30E2\u30B8\u30E5\u30FC\u30EB\u306FGUI\u306B\u9023\u643A\u3057\u3066\u3044\u308B\u30A4\u30F3\u30B8\u30A7\u30B9\u30C8\u3057\u306A\u3044\u3001\u8FFD\u52A0\u306E\u30C4\u30FC\u30EB\u304C\u542B\u307E\u308C\u307E\u3059\u3002
|
||||
OpenIDE-Module-Name=\u30CF\u30C3\u30B7\u30E5\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9
|
||||
HashDbSimplePanel.notableLabel.text=\u65E2\u77E5\u306E\u4E0D\u826F\u306E\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9
|
||||
HashDbSearchPanel.hashTable.columnModel.title0=MD5\u30CF\u30C3\u30B7\u30E5
|
||||
HashDbSearchPanel.addButton.text=\u30CF\u30C3\u30B7\u30E5\u3092\u8FFD\u52A0
|
||||
HashDbSearchPanel.hashLabel.text=MD5\u30CF\u30C3\u30B7\u30E5\uFF1A
|
||||
HashDbSearchPanel.searchButton.text=\u691C\u7D22
|
||||
HashDbSearchPanel.removeButton.text=\u9078\u629E\u3057\u305F\u3082\u306E\u3092\u524A\u9664
|
||||
HashDbSearchPanel.titleLabel.text=\u4E0B\u8A18\u306EMD5\u30CF\u30C3\u30B7\u30E5\u4ED8\u304D\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u691C\u7D22\uFF1A
|
||||
HashDbSearchPanel.errorField.text=\u30A8\u30E9\u30FC\uFF1A\u5168\u3066\u306E\u30D5\u30A1\u30A4\u30EB\u304C\u30CF\u30C3\u30B7\u30E5\u3055\u308C\u307E\u305B\u3093\u3067\u3057\u305F\u3002
|
||||
HashDbSearchPanel.saveBox.text=\u30CF\u30C3\u30B7\u30E5\u3092\u8A18\u61B6
|
||||
HashDbSearchPanel.cancelButton.text=\u30AD\u30E3\u30F3\u30BB\u30EB
|
||||
OpenIDE-Module-Short-Description=\u30CF\u30C3\u30B7\u30E5\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u633F\u5165\u30E2\u30B8\u30E5\u30FC\u30EB\u304A\u3088\u3073\u30CF\u30C3\u30B7\u30E5\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u30C4\u30FC\u30EB
|
||||
HashDbImportDatabaseDialog.jLabel1.text=\u30CF\u30C3\u30B7\u30E5\u30BB\u30C3\u30C8\u306E\u540D\u524D\uFF1A
|
||||
HashDbImportDatabaseDialog.knownBadRadioButton.text=\u65E2\u77E5\u306E\u60AA\u8CEA
|
||||
HashDbImportDatabaseDialog.jLabel2.text=\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u306E\u7A2E\u985E\uFF1A
|
||||
HashDbImportDatabaseDialog.okButton.text=OK
|
||||
HashDbImportDatabaseDialog.cancelButton.text=\u30AD\u30E3\u30F3\u30BB\u30EB
|
||||
HashDbCreateDatabaseDialog.jLabel2.text=\u7A2E\u985E\uFF1A
|
||||
HashDbCreateDatabaseDialog.knownBadRadioButton.text=\u65E2\u77E5\u306E\u60AA\u8CEA
|
||||
HashDbCreateDatabaseDialog.cancelButton.text=\u30AD\u30E3\u30F3\u30BB\u30EB
|
||||
HashDbConfigPanel.nameLabel.text=\u30CF\u30C3\u30B7\u30E5\u30BB\u30C3\u30C8\u306E\u540D\u524D\uFF1A
|
||||
HashDbConfigPanel.hashDbNameLabel.text=\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u304C\u9078\u629E\u3055\u308C\u3066\u3044\u307E\u305B\u3093
|
||||
HashDbConfigPanel.hashDatabasesLabel.text=\u30CF\u30C3\u30B7\u30E5\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\uFF1A
|
||||
HashDbConfigPanel.hashDbLocationLabel.text=\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u304C\u9078\u629E\u3055\u308C\u3066\u3044\u307E\u305B\u3093
|
||||
HashDbConfigPanel.ingestWarningLabel.text=\u51E6\u7406\u4E2D\u3067\u3059\u3002\u5B8C\u4E86\u3059\u308B\u307E\u3067\u4E00\u90E8\u306E\u8A2D\u5B9A\u306F\u5229\u7528\u3067\u304D\u307E\u305B\u3093\u3002
|
||||
HashDbConfigPanel.jButton3.text=\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u3092\u30A4\u30F3\u30DD\u30FC\u30C8
|
||||
HashDbConfigPanel.jLabel6.text=\u7A2E\u985E\uFF1A
|
||||
HashDbConfigPanel.jLabel4.text=\u30ED\u30B1\u30FC\u30B7\u30E7\u30F3\uFF1A
|
||||
HashDbConfigPanel.jLabel2.text=\u540D\u524D\uFF1A
|
||||
HashDbConfigPanel.optionsLabel.text=\u30AA\u30D7\u30B7\u30E7\u30F3
|
||||
HashDbConfigPanel.typeLabel.text=\u7A2E\u985E\uFF1A
|
||||
HashDbConfigPanel.locationLabel.text=\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u30D1\u30B9\uFF1A
|
||||
HashDbConfigPanel.hashDbIndexStatusLabel.text=\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u304C\u9078\u629E\u3055\u308C\u3066\u3044\u307E\u305B\u3093
|
||||
HashDbConfigPanel.hashDbTypeLabel.text=\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u304C\u9078\u629E\u3055\u308C\u3066\u3044\u307E\u305B\u3093
|
||||
HashDbConfigPanel.indexButton.text=\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9
|
||||
HashDbConfigPanel.indexLabel.text=\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u30B9\u30C6\u30FC\u30BF\u30B9\uFF1A
|
||||
HashDbConfigPanel.informationLabel.text=\u30A4\u30F3\u30D5\u30A9\u30E1\u30FC\u30B7\u30E7\u30F3
|
||||
HashDbConfigPanel.importDatabaseButton.text=\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u3092\u30A4\u30F3\u30DD\u30FC\u30C8
|
||||
HashDbConfigPanel.deleteDatabaseButton.text=\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u3092\u524A\u9664
|
||||
HashDbConfigPanel.indexPathLabelLabel.text=\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u30D1\u30B9\uFF1A
|
||||
HashDbConfigPanel.indexPathLabel.text=\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u304C\u9078\u629E\u3055\u308C\u3066\u3044\u307E\u305B\u3093
|
||||
ModalNoButtons.CURRENTLYON_LABEL.text=y\u306Ex\u3092\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u4E2D
|
||||
ModalNoButtons.GO_GET_COFFEE_LABEL.text=\u30CF\u30C3\u30B7\u30E5\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u3092\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u4E2D\u3067\u3059\u3002\u6642\u9593\u304C\u304B\u304B\u308B\u5834\u5408\u304C\u3042\u308A\u307E\u3059\u3002
|
||||
ModalNoButtons.CANCEL_BUTTON.text=\u30AD\u30E3\u30F3\u30BB\u30EB
|
||||
HashDbSimpleConfigPanel.knownBadHashDbsLabel.text=\u65E2\u77E5\u306E\u60AA\u8CEA\u306A\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u3092\u51E6\u7406\u306B\u5229\u7528\uFF1A
|
||||
HashDbImportDatabaseDialog.knownRadioButton.text=\u65E2\u77E5\uFF08NSRL\u307E\u305F\u306F\u305D\u306E\u4ED6\uFF09
|
||||
HashDbCreateDatabaseDialog.knownRadioButton.text=\u65E2\u77E5
|
||||
HashDbCreateDatabaseDialog.jLabel1.text=\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u30D1\u30B9\uFF1A
|
||||
HashDbCreateDatabaseDialog.saveAsButton.text=\u540D\u524D\u3092\u3064\u3051\u3066\u4FDD\u5B58\u2026
|
||||
HashDbImportDatabaseDialog.jLabel3.text=\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u30D1\u30B9\uFF1A
|
||||
HashDbCreateDatabaseDialog.searchDuringIngestCheckbox.text=\u51E6\u7406\u4E2D\u306B\u691C\u7D22
|
||||
HashDbImportDatabaseDialog.searchDuringIngestCheckbox.text=\u51E6\u7406\u4E2D\u306B\u691C\u7D22
|
||||
HashDbCreateDatabaseDialog.sendIngestMessagesCheckbox.text=\u51E6\u7406\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u9001\u308B
|
||||
HashDbImportDatabaseDialog.sendIngestMessagesCheckbox.text=\u51E6\u7406\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u9001\u308B
|
||||
HashDbConfigPanel.createDatabaseButton.text=\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u3092\u4F5C\u6210
|
||||
HashDbImportDatabaseDialog.openButton.text=\u958B\u304F...
|
||||
HashDbSimpleConfigPanel.alwaysCalcHashesCheckbox.text=\u30CF\u30C3\u30B7\u30E5\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u304C\u9078\u629E\u3055\u308C\u3066\u3044\u306A\u304F\u3066\u3082\u3001\u30CF\u30C3\u30B7\u30E5\u5024\u3092\u8A08\u7B97
|
||||
HashDbCreateDatabaseDialog.jLabel3.text=\u30CF\u30C3\u30B7\u30E5\u30BB\u30C3\u30C8\u306E\u540D\u524D\uFF1A
|
||||
HashDbCreateDatabaseDialog.okButton.text=OK
|
||||
HashDbConfigPanel.searchDuringIngestCheckbox.text=\u51E6\u7406\u4E2D\u306B\u691C\u7D22
|
||||
HashDbConfigPanel.sendIngestMessagesCheckBox.text=\u51E6\u7406\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u9001\u308B
|
||||
AddContentToHashDbAction.ContentMenu.noHashDbsConfigd=\u30CF\u30C3\u30B7\u30E5\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u304C\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093
|
||||
AddContentToHashDbAction.ContentMenu.createDbItem=\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u3092\u4F5C\u6210...
|
||||
AddContentToHashDbAction.addFilesToHashSet.addToHashDbErr=\u30CF\u30C3\u30B7\u30E5\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u30A8\u30E9\u30FC\u306B\u8FFD\u52A0
|
||||
AddContentToHashDbAction.addFilesToHashSet.unableToAddFileMsg=\u30CF\u30C3\u30B7\u30E5\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u306B {0} \u3092\u8FFD\u52A0\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002
|
||||
AddContentToHashDbAction.addFilesToHashSet.unableToAddFileSzMsg=\u30CF\u30C3\u30B7\u30E5\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u306B {0} \u3092\u8FFD\u52A0\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u30CF\u30C3\u30B7\u30E5\u5024\u304C\u8A08\u7B97\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u9069\u5207\u306A\u30A4\u30F3\u30B8\u30A7\u30B9\u30C8\u30E2\u30B8\u30E5\u30FC\u30EB\u3092\u8A2D\u5B9A\u3057\u3001\u5B9F\u884C\u3057\u3066\u4E0B\u3055\u3044\u3002
|
||||
HashDatabaseOptionsPanelController.moduleErr=\u30E2\u30B8\u30E5\u30FC\u30EB\u30A8\u30E9\u30FC
|
||||
HashDatabaseOptionsPanelController.moduleErrMsg=HashDatabaseOptionsPanelController\u306E\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u3092\u78BA\u8A8D\u4E2D\u306B\u30E2\u30B8\u30E5\u30FC\u30EB\u304C\u30A8\u30E9\u30FC\u3092\u8D77\u3053\u3057\u307E\u3057\u305F\u3002\u3069\u306E\u30E2\u30B8\u30E5\u30FC\u30EB\u304C\u539F\u56E0\u306A\u306E\u304B\u3092\u30ED\u30B0\u3067\u78BA\u8A8D\u3057\u3066\u4E0B\u3055\u3044\u3002\u4E00\u90E8\u306E\u30C7\u30FC\u30BF\u304C\u5B8C\u5168\u3067\u306A\u3044\u3053\u3068\u304C\u3042\u308A\u307E\u3059\u3002
|
||||
HashDbConfigPanel.noSelectionText=\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u304C\u9078\u629E\u3055\u308C\u3066\u3044\u307E\u305B\u3093
|
||||
HashDbConfigPanel.errorGettingPathText=\u30D1\u30B9\u306E\u5165\u624B\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F
|
||||
HashDbConfigPanel.errorGettingIndexStatusText=\u30B9\u30C6\u30FC\u30BF\u30B9\u306E\u78BA\u8A8D\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F
|
||||
HashDbConfigPanel.setName.hashSetConfig=\u30CF\u30C3\u30B7\u30E5\u30BB\u30C3\u30C8\u8A2D\u5B9A
|
||||
HashDbConfigPanel.indexButtonText.index=\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9
|
||||
HashDbConfigPanel.indexButtonText.indexing=\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u4E2D
|
||||
HashDbConfigPanel.indexStatusText.indexGen=\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u3092\u4F5C\u6210\u4E2D\u3067\u3059
|
||||
HashDbConfigPanel.indexStatusText.indexOnly=\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u306E\u307F
|
||||
HashDbConfigPanel.indexStatusText.indexed=\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u6E08\u307F
|
||||
HashDbConfigPanel.indexButtonText.reIndex=\u518D\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9
|
||||
HashDbConfigPanel.indexStatusText.noIndex=\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u7121\u3057
|
||||
HashDbConfigPanel.dbsNotIndexedMsg=\u4E0B\u8A18\u306E\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u306F\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3057\u307E\u3059\u304B\uFF1F\
|
||||
{0}
|
||||
HashDbConfigPanel.unindexedDbsMsg=\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3055\u308C\u3066\u3044\u306A\u3044\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9
|
||||
HashDbConfigPanel.allUnindexedDbsRmFromListMsg=\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3055\u308C\u3066\u3044\u306A\u3044\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u306F\u30EA\u30B9\u30C8\u304B\u3089\u524A\u9664\u3055\u308C\u307E\u3059
|
||||
HashDbConfigPanel.nameColLbl=\u540D\u524D
|
||||
HashDbConfigPanel.editingCellsNotSupportedMsg=\u30BB\u30EB\u306F\u7DE8\u96C6\u4E0D\u53EF\u3067\u3059
|
||||
HashDbConfigPanel.deleteDbActionConfirmMsg=\u5168\u3066\u306E\u30B1\u30FC\u30B9\u306B\u304A\u3051\u308B\u30CF\u30C3\u30B7\u30E5\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u3092\u524A\u9664\u3057\u307E\u3059\u3002\u5B9F\u884C\u3057\u307E\u3059\u304B\uFF1F
|
||||
HashDbConfigPanel.deleteDbActionMsg=\u8A2D\u5B9A\u304B\u3089\u30CF\u30C3\u30B7\u30E5\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u3092\u524A\u9664
|
||||
HashDbCreateDatabaseDialog.createHashDbMsg=\u30CF\u30C3\u30B7\u30E5\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u3092\u4F5C\u6210
|
||||
HashDbCreateDatabaseDialog.hashDbMustHaveFileExtensionMsg=\u30CF\u30C3\u30B7\u30E5\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u30D5\u30A1\u30A4\u30EB\u306F .{0} \u306E\u62E1\u5F35\u5B50\u304C\u5FC5\u8981\u3067\u3059\u3002
|
||||
HashDbCreateDatabaseDialog.fileNameErr=\u30D5\u30A1\u30A4\u30EB\u540D\u30A8\u30E9\u30FC
|
||||
HashDbCreateDatabaseDialog.fileNameAlreadyExistsMsg=\u540C\u540D\u306E\u30D5\u30A1\u30A4\u30EB\u304C\u65E2\u306B\u5B58\u5728\u3057\u307E\u3059\u3002\u5225\u306E\u30D5\u30A1\u30A4\u30EB\u540D\u3092\u8A2D\u5B9A\u3057\u3066\u4E0B\u3055\u3044\u3002
|
||||
HashDbCreateDatabaseDialog.fileExistsErr=\u30D5\u30A1\u30A4\u30EB\u304C\u65E2\u306B\u5B58\u5728\u3057\u3066\u3044\u308B\u30A8\u30E9\u30FC
|
||||
HashDbCreateDatabaseDialog.mustEnterHashSetNameMsg=\u30CF\u30C3\u30B7\u30E5\u30BB\u30C3\u30C8\u540D\u306E\u5165\u529B\u304C\u5FC5\u8981\u3067\u3059
|
||||
HashDbCreateDatabaseDialog.createHashDbErr=\u30CF\u30C3\u30B7\u30E5\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u4F5C\u6210\u30A8\u30E9\u30FC
|
||||
HashDbCreateDatabaseDialog.mustEnterHashDbPathMsg=\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u30D1\u30B9\u306E\u5165\u529B\u304C\u5FC5\u8981\u3067\u3059\u3002
|
||||
HashDbCreateDatabaseDialog.errMsg.hashDbCreationErr=\u30CF\u30C3\u30B7\u30E5\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u4F5C\u6210\u30A8\u30E9\u30FC
|
||||
HashDbCreateDatabaseDialog.cannotCreateFileAtLocMsg=\u6307\u5B9A\u3055\u308C\u305F\u30ED\u30B1\u30FC\u30B7\u30E7\u30F3\u3067\u30CF\u30C3\u30B7\u30E5\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u30D5\u30A1\u30A4\u30EB\u3092\u4F5C\u6210\u3067\u304D\u307E\u305B\u3093\u3002
|
||||
HashDbCreateDatabaseDialog.failedToCreateHashDbMsg=\u30CF\u30C3\u30B7\u30E5\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u306E\u4F5C\u6210\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002
|
||||
HashDbImportDatabaseDialog.importHashDbMsg=\u30CF\u30C3\u30B7\u30E5\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u3092\u30A4\u30F3\u30DD\u30FC\u30C8
|
||||
HashDbImportDatabaseDialog.fileNameExtFilter.text=\u30CF\u30C3\u30B7\u30E5\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u30D5\u30A1\u30A4\u30EB
|
||||
HashDbImportDatabaseDialog.failedToGetDbPathMsg=\u9078\u629E\u3057\u305F\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u306E\u30D1\u30B9\u306E\u5165\u624B\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002
|
||||
HashDbImportDatabaseDialog.importHashDbErr=\u30CF\u30C3\u30B7\u30E5\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u306E\u30A4\u30F3\u30DD\u30FC\u30C8\u30A8\u30E9\u30FC
|
||||
HashDbImportDatabaseDialog.mustSelectHashDbFilePathMsg=\u30CF\u30C3\u30B7\u30E5\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u30D5\u30A1\u30A4\u30EB\u30D1\u30B9\u306E\u9078\u629E\u304C\u5FC5\u8981\u3067\u3059\u3002
|
||||
HashDbImportDatabaseDialog.hashDbDoesNotExistMsg=\u9078\u629E\u3055\u308C\u305F\u30CF\u30C3\u30B7\u30E5\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u306F\u5B58\u5728\u3057\u307E\u305B\u3093\u3002
|
||||
HashDbImportDatabaseDialog.errorMessage.failedToOpenHashDbMsg=\ {0}\u3067\u30CF\u30C3\u30B7\u30E5\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u3092\u958B\u304F\u306E\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002
|
||||
HashDbIngestModule.moduleName=\u30CF\u30C3\u30B7\u30E5\u30EB\u30C3\u30AF\u30A2\u30C3\u30D7
|
||||
HashDbIngestModule.moduleDescription=\u6A19\u6E96\u306ENSRL\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u306A\u3069\u3001\u63D0\u4F9B\u3055\u308C\u305F\u30CF\u30C3\u30B7\u30E5\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u3092\u5229\u7528\u3057\u3066\u65E2\u77E5\u307E\u305F\u306F\u7591\u308F\u3057\u3044\u3082\u306E\u3092\u7279\u5B9A\u3057\u307E\u3059\u3002
|
||||
HashDbIngestModule.noKnownHashDbSetMsg=\u65E2\u77E5\u306E\u30CF\u30C3\u30B7\u30E5\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u304C\u5B58\u5728\u3057\u307E\u305B\u3093\u3002
|
||||
HashDbIngestModule.knownFileSearchWillNotExecuteWarn=\u65E2\u77E5\u306E\u30D5\u30A1\u30A4\u30EB\u691C\u7D22\u304C\u5B9F\u884C\u3055\u308C\u307E\u305B\u3093\u3002
|
||||
HashDbIngestModule.noKnownBadHashDbSetMsg=\u65E2\u77E5\u306E\u60AA\u8CEA\u306A\u30CF\u30C3\u30B7\u30E5\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u30BB\u30C3\u30C8\u306F\u3042\u308A\u307E\u305B\u3093\u3002
|
||||
HashDbSimpleConfigPanel.knownHashDbsLabel.text=\u65E2\u77E5\u306E\u30CF\u30C3\u30B7\u30E5\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u3092\u51E6\u7406\u306B\u5229\u7528\uFF1A
|
||||
HashDbConfigPanel.dbNotIndexedMsg=\u4E0B\u8A18\u306E\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u306F\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3057\u307E\u3059\u304B\uFF1F\
|
||||
{0}
|
||||
HashDbIngestModule.knownBadFileSearchWillNotExecuteWarn=\u65E2\u77E5\u306E\u60AA\u8CEA\u30D5\u30A1\u30A4\u30EB\u691C\u7D22\u306F\u5B9F\u884C\u3055\u308C\u307E\u305B\u3093\u3002
|
||||
HashDbIngestModule.fileReadErrorMsg=\u8AAD\u307F\u8FBC\u307F\u30A8\u30E9\u30FC\uFF1A {0}
|
||||
HashDbIngestModule.calcHashValueErr=\ {0}\u306E\u30CF\u30C3\u30B7\u30E5\u5024\u3092\u8A08\u7B97\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002
|
||||
HashDbIngestModule.hashLookupErrorMsg=\u30CF\u30C3\u30B7\u30E5\u30EB\u30C3\u30AF\u30A2\u30C3\u30D7\u30A8\u30E9\u30FC\uFF1A {0}
|
||||
HashDbIngestModule.settingKnownBadStateErr={0}\u306E\u30B9\u30C6\u30FC\u30BF\u30B9\u3092\u65E2\u77E5\u306E\u60AA\u8CEA\u3068\u8A2D\u5B9A\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002
|
||||
HashDbIngestModule.lookingUpKnownBadHashValueErr={0}\u306E\u65E2\u77E5\u306E\u60AA\u8CEA\u30CF\u30C3\u30B7\u30E5\u5024\u3092\u30EB\u30C3\u30AF\u30A2\u30C3\u30D7\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002
|
||||
HashDbIngestModule.settingsKnownStateErr={0}\u306E\u30B9\u30C6\u30FC\u30BF\u30B9\u3092\u65E2\u77E5\u3068\u8A2D\u5B9A\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002
|
||||
HashDbIngestModule.lookingUpKnownHashValueErr={0}\u306E\u65E2\u77E5\u306E\u4E0D\u826F\u30CF\u30C3\u30B7\u30E5\u5024\u3092\u30EB\u30C3\u30AF\u30A2\u30C3\u30D7\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002
|
||||
HashDbIngestModule.postToBB.fileName=\u30D5\u30A1\u30A4\u30EB\u540D
|
||||
HashDbIngestModule.postToBB.md5Hash=MD5\u30CF\u30C3\u30B7\u30E5
|
||||
HashDbIngestModule.postToBB.hashsetName=\u30CF\u30C3\u30B7\u30E5\u30BB\u30C3\u30C8\u540D
|
||||
HashDbIngestModule.postToBB.knownBadMsg=\u65E2\u77E5\u306E\u60AA\u8CEA\: {0}
|
||||
HashDbIngestModule.complete.knownBadsFound=\u767A\u898B\u3055\u308C\u305F\u65E2\u77E5\u306E\u60AA\u8CEA\uFF1A
|
||||
HashDbIngestModule.complete.totalCalcTime=\u8A08\u7B97\u6642\u9593\u306E\u5408\u8A08
|
||||
HashDbIngestModule.complete.totalLookupTime=\u30EB\u30C3\u30AF\u30A2\u30C3\u30D7\u6642\u9593\u306E\u5408\u8A08
|
||||
HashDbIngestModule.complete.databasesUsed=\u5229\u7528\u3057\u305F\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\uFF1A
|
||||
HashDbIngestModule.complete.hashLookupResults=\u30CF\u30C3\u30B7\u30E5\u30EB\u30C3\u30AF\u30A2\u30C3\u30D7\u7D50\u679C
|
||||
HashDbManager.moduleErrorListeningToUpdatesMsg=HashDbManager\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\u304C\u539F\u56E0\u306A\u306E\u304B\u3092\u30ED\u30B0\u3067\u78BA\u8A8D\u3057\u3066\u4E0B\u3055\u3044\u3002\u4E00\u90E8\u306E\u30C7\u30FC\u30BF\u304C\u5B8C\u5168\u3067\u306A\u3044\u3053\u3068\u304C\u3042\u308A\u307E\u3059\u3002
|
||||
HashDbManager.replacingDuplicateHashsetNameMsg=\u8907\u88FD\u306E\u30CF\u30C3\u30B7\u30E5\u30BB\u30C3\u30C8\u540D {0} \u304C\u898B\u3064\u304B\u308A\u307E\u3057\u305F\u3002\
|
||||
{1}\u306B\u66F8\u304D\u63DB\u3048\u307E\u3059\u3002
|
||||
HashDbManager.openHashDbErr=\u30CF\u30C3\u30B7\u30E5\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u3092\u958B\u304F\u30A8\u30E9\u30FC
|
||||
HashDbManager.unableToOpenHashDbMsg=\ {0} \u30CF\u30C3\u30B7\u30E5\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u3092\u958B\u3051\u307E\u305B\u3093\u3002
|
||||
HashDbManager.savedBackupOfOldConfigMsg={0}\
|
||||
\u53E4\u3044\u8A2D\u5B9A\u306E\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u30B3\u30D4\u30FC\u304C\u4E0B\u8A18\u306E\u901A\u308A\u4FDD\u5B58\u3055\u308C\u307E\u3057\u305F\u3002\
|
||||
{1}
|
||||
HashDbManager.baseMessage.updatedFormatHashDbConfig=\u30CF\u30C3\u30B7\u30E5\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u8A2D\u5B9A\u30D5\u30A1\u30A4\u30EB\u306E\u5F62\u5F0F\u304C\u66F4\u65B0\u3055\u308C\u307E\u3057\u305F\u3002
|
||||
HashDbManager.msgBoxTitle.confFileFmtChanged=\u8A2D\u5B9A\u30D5\u30A1\u30A4\u30EB\u5F62\u5F0F\u306E\u5909\u66F4\u5B8C\u4E86
|
||||
HashDbManager.dlgMsg.dbNotFoundAtLoc=\ {0} \u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u306F\u4E0B\u8A18\u306E\u30ED\u30B1\u30FC\u30B7\u30E7\u30F3\u306B\u3042\u308A\u307E\u305B\u3093\u3067\u3057\u305F\u3002\
|
||||
{1}\
|
||||
\u30D5\u30A1\u30A4\u30EB\u3092\u691C\u7D22\u3057\u307E\u3059\u304B\uFF1F
|
||||
HashDbManager.dlgTitle.MissingDb=\u6B20\u843D\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9
|
||||
HashDbManager.progress.indexingHashSet=\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u4E2D {0}
|
||||
HashDbManager.dlgMsg.errorIndexingHashSet=\ {0} \u30CF\u30C3\u30B7\u30E5\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u306E\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u4E2D\u306E\u30A8\u30E9\u30FC
|
||||
HashDbManager.hashDbIndexingErr=\u30CF\u30C3\u30B7\u30E5\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u306E\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u4E2D\u306E\u30A8\u30E9\u30FC
|
||||
HashDbPanelSearchAction.actionName=MD5\u30CF\u30C3\u30B7\u30E5\u306B\u57FA\u3065\u304F\u30D5\u30A1\u30A4\u30EB\u691C\u7D22
|
||||
HashDbSearchAction.dlgMsg.noFilesHaveMD5Calculated=MD5\u30CF\u30C3\u30B7\u30E5\u304C\u8A08\u7B97\u3055\u308C\u3066\u3044\u308B\u30D5\u30A1\u30A4\u30EB\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u307E\u305A\u306FHashDB\u3092\u30A4\u30F3\u30B8\u30A7\u30B9\u30C8\u3057\u3066\u4E0B\u3055\u3044\u3002
|
||||
HashDbSearchManager.MD5HashSearch=MD5\u30CF\u30C3\u30B7\u30E5\u691C\u7D22
|
||||
HashDbSearchManager.noResultsFoundMsg=\u4E00\u81F4\u3059\u308B\u3082\u306E\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3067\u3057\u305F\u3002
|
||||
HashDbSearchPanel.titleText.ingestOngoing=\u30A4\u30F3\u30B8\u30A7\u30B9\u30C8\u4E2D\uFF1B\u5B8C\u4E86\u3059\u308B\u307E\u3067\u3053\u306E\u30B5\u30FC\u30D3\u30B9\u306F\u5229\u7528\u3067\u304D\u307E\u305B\u3093\u3002
|
||||
HashDbSearchPanel.noFilesHaveMD5HashMsg=MD5\u30CF\u30C3\u30B7\u30E5\u4ED8\u304D\u306E\u30D5\u30A1\u30A4\u30EB\u304C\u3042\u308A\u307E\u305B\u3093\u3002
|
||||
HashDbSearchPanel.errorText.noHashesAddedMsg=\u30A8\u30E9\u30FC\uFF1A\u30CF\u30C3\u30B7\u30E5\u304C\u8FFD\u52A0\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002
|
||||
HashDbSearchPanel.errorText.hashAlreadyAddedMsg=\u30A8\u30E9\u30FC\uFF1A\u30CF\u30C3\u30B7\u30E5\u304C\u65E2\u306B\u8FFD\u52A0\u3055\u308C\u3066\u3044\u307E\u3059\u3002
|
||||
HashDbSearchPanel.errorText.invalidMD5HashMsg=\u30A8\u30E9\u30FC\uFF1A\u6709\u52B9\u306AMD5\u30CF\u30C3\u30B7\u30E5\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002
|
||||
HashDbSearchThread.progress.cancellingSearch={0}\uFF08\u30AD\u30E3\u30F3\u30BB\u30EB\u4E2D\u2026\uFF09
|
||||
HashDbSearchThread.name.searching=\u691C\u7D22\u4E2D
|
||||
HashDbSearchThread.noMoreFilesWithMD5Msg=\u540C\u3058MD5\u30CF\u30C3\u30B7\u30E5\u4ED8\u304D\u306E\u30D5\u30A1\u30A4\u30EB\u306F\u4ED6\u306B\u3042\u308A\u307E\u305B\u3093\u3067\u3057\u305F\u3002
|
||||
HashDbSimpleConfigPanel.dlgMsg.mustIndexDbBeforeUse=\u30CF\u30C3\u30B7\u30E5\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u3092\u30A4\u30F3\u30B8\u30A7\u30B9\u30C8\u306B\u5229\u7528\u3059\u308B\u306B\u306F\u3001\u4E8B\u524D\u306B\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002
|
||||
ModalNoButtons.indexingDbsTitle=\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u3092\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u4E2D
|
||||
ModalNoButtons.indexingDbTitle=\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u3092\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u4E2D
|
||||
ModalNoButtons.exitHashDbIndexingMsg=\u30CF\u30C3\u30B7\u30E5\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u306E\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3092\u4E2D\u6B62\u3057\u307E\u3059\u3002\
|
||||
\u4F5C\u6210\u3055\u308C\u305F\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u306F\u5229\u7528\u4E0D\u53EF\u3068\u306A\u308A\u307E\u3059\u3002\u7D9A\u884C\u3059\u308B\u969B\u306F\u30CF\u30C3\u30B7\u30E5\u30D5\u30A9\u30EB\u30C0\u5185\u306B\u3042\u308B\u3001\u5BFE\u5FDC\u3059\u308B-md5.idx \u30D5\u30A1\u30A4\u30EB\u3092\u524A\u9664\u3057\u3066\u4E0B\u3055\u3044\u3002\
|
||||
\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3092\u4E2D\u6B62\u3057\u307E\u3059\u304B\uFF1F
|
||||
ModalNoButtons.dlgTitle.unfinishedIndexing=\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u672A\u5B8C\u4E86
|
||||
ModalNoButtons.indexThis.currentlyIndexing1Db=\uFF11\u3064\u306E\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u3092\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u4E2D
|
||||
ModalNoButtons.indexThese.currentlyIndexing1OfNDbs=\uFF11\uFF0F {0}\u3064\u76EE\u3092\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u4E2D
|
||||
ModalNoButtons.propChg.currentlyIndexingXofN={0}\uFF0F {1}\u3064\u76EE\u3092\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u4E2D
|
||||
HashDbManager.duplicateHashSetNameExceptionMsg=\u30CF\u30C3\u30B7\u30E5\u30BB\u30C3\u30C8\u540D''{0}''\u306F\u65E2\u306B\u5225\u306E\u30CF\u30C3\u30B7\u30E5\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u306B\u4F7F\u308F\u308C\u3066\u3044\u307E\u3059\u3002
|
||||
HashDbManager.hashDbDoesNotExistExceptionMsg=\u4E0B\u8A18\u3067\u306F\u30CF\u30C3\u30B7\u30E5\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3067\u3057\u305F\
|
||||
{0}
|
||||
HashDbManager.hashDbFileExistsExceptionMsg=\u4E0B\u8A18\u306B\u306F\u65E2\u306B\u30D5\u30A1\u30A4\u30EB\u304C\u5B58\u5728\u3057\u307E\u3059\u3002\
|
||||
{0}
|
||||
HashDbManager.hashDbAlreadyAddedExceptionMsg=\u4E0B\u8A18\u306E\u30CF\u30C3\u30B7\u30E5\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\
|
||||
{0}\
|
||||
\u306F\u65E2\u306B\u4F5C\u6210\u307E\u305F\u306F\u30A4\u30F3\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u3059\u3002
|
||||
HashDbManager.illegalHashDbFileNameExtensionMsg=\u30CF\u30C3\u30B7\u30E5\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u30D5\u30A1\u30A4\u30EB\u540D\u306F.{0}\u306E\u62E1\u5F35\u5B50\u304C\u5FC5\u8981\u3067\u3059\u3002
|
||||
HashDbManager.moduleErr=\u30E2\u30B8\u30E5\u30FC\u30EB\u30A8\u30E9\u30FC
|
||||
HashDbManager.knownBad.text=\u65E2\u77E5\u306E\u60AA\u8CEA
|
||||
HashDbManager.known.text=\u65E2\u77E5
|
||||
HashDbManager.fileNameExtensionFilter.title=\u30CF\u30C3\u30B7\u30E5\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u30D5\u30A1\u30A4\u30EB
|
||||
HashDbSearchAction.dlgMsg.title=MD5\u30CF\u30C3\u30B7\u30E5\u306B\u57FA\u3065\u3044\u305F\u30D5\u30A1\u30A4\u30EB\u691C\u7D22
|
||||
HashDbSearchAction.getName.text=\u30CF\u30C3\u30B7\u30E5\u691C\u7D22
|
||||
HashDbSearchPanel.dlgMsg.title=MD5\u30CF\u30C3\u30B7\u30E5\u306B\u57FA\u3065\u304F\u30D5\u30A1\u30A4\u30EB\u691C\u7D22
|
||||
AddContentToHashDbAction.singleSelectionName=\u30CF\u30C3\u30B7\u30E5\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u306B\u30D5\u30A1\u30A4\u30EB\u3092\u8FFD\u52A0
|
||||
AddContentToHashDbAction.multipleSelectionName=\u30CF\u30C3\u30B7\u30E5\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u306B\u30D5\u30A1\u30A4\u30EB\u3092\u8FFD\u52A0
|
||||
OptionsCategory_Name_HashDatabase=\u30CF\u30C3\u30B7\u30E5\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9
|
||||
OptionsCategory_Keywords_HashDatabase=\u30CF\u30C3\u30B7\u30E5\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9
|
@ -25,6 +25,7 @@ import javax.swing.JComponent;
|
||||
import org.netbeans.spi.options.OptionsPanelController;
|
||||
import org.openide.util.HelpCtx;
|
||||
import org.openide.util.Lookup;
|
||||
import org.openide.util.NbBundle;
|
||||
import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil;
|
||||
import java.util.logging.Level;
|
||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||
@ -36,7 +37,8 @@ position = 3,
|
||||
keywords = "#OptionsCategory_Keywords_HashDatabase",
|
||||
keywordsCategory = "HashDatabase",
|
||||
id = "HashDatabase")
|
||||
@org.openide.util.NbBundle.Messages({"OptionsCategory_Name_HashDatabase=Hash Database", "OptionsCategory_Keywords_HashDatabase=Hash Database"})
|
||||
// moved messages to Bundle.properties
|
||||
//@org.openide.util.NbBundle.Messages({"OptionsCategory_Name_HashDatabase=Hash Database", "OptionsCategory_Keywords_HashDatabase=Hash Database"})
|
||||
public final class HashDatabaseOptionsPanelController extends OptionsPanelController {
|
||||
|
||||
private HashDbConfigPanel panel;
|
||||
@ -106,7 +108,10 @@ public final class HashDatabaseOptionsPanelController extends OptionsPanelContro
|
||||
}
|
||||
catch (Exception e) {
|
||||
logger.log(Level.SEVERE, "HashDatabaseOptionsPanelController listener threw exception", e);
|
||||
MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to HashDatabaseOptionsPanelController updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR);
|
||||
MessageNotifyUtil.Notify.show(
|
||||
NbBundle.getMessage(this.getClass(), "HashDatabaseOptionsPanelController.moduleErr"),
|
||||
NbBundle.getMessage(this.getClass(), "HashDatabaseOptionsPanelController.moduleErrMsg"),
|
||||
MessageNotifyUtil.MessageType.ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
@ -115,7 +120,10 @@ public final class HashDatabaseOptionsPanelController extends OptionsPanelContro
|
||||
}
|
||||
catch (Exception e) {
|
||||
logger.log(Level.SEVERE, "HashDatabaseOptionsPanelController listener threw exception", e);
|
||||
MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to HashDatabaseOptionsPanelController updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR);
|
||||
MessageNotifyUtil.Notify.show(
|
||||
NbBundle.getMessage(this.getClass(), "HashDatabaseOptionsPanelController.moduleErr"),
|
||||
NbBundle.getMessage(this.getClass(), "HashDatabaseOptionsPanelController.moduleErrMsg"),
|
||||
MessageNotifyUtil.MessageType.ERROR);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -36,6 +36,8 @@ import javax.swing.event.ListSelectionEvent;
|
||||
import javax.swing.event.ListSelectionListener;
|
||||
import javax.swing.table.AbstractTableModel;
|
||||
import javax.swing.table.TableCellRenderer;
|
||||
|
||||
import org.openide.util.NbBundle;
|
||||
import org.sleuthkit.autopsy.corecomponents.OptionsPanel;
|
||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||
import org.sleuthkit.autopsy.ingest.IngestManager;
|
||||
@ -47,9 +49,12 @@ import org.sleuthkit.autopsy.hashdatabase.HashDbManager.HashDb.KnownFilesType;
|
||||
* Instances of this class provide a comprehensive UI for managing the hash sets configuration.
|
||||
*/
|
||||
public final class HashDbConfigPanel extends javax.swing.JPanel implements OptionsPanel {
|
||||
private static final String NO_SELECTION_TEXT = "No database selected";
|
||||
private static final String ERROR_GETTING_PATH_TEXT = "Error occurred getting path";
|
||||
private static final String ERROR_GETTING_INDEX_STATUS_TEXT = "Error occurred getting status";
|
||||
private static final String NO_SELECTION_TEXT = NbBundle
|
||||
.getMessage(HashDbConfigPanel.class, "HashDbConfigPanel.noSelectionText");
|
||||
private static final String ERROR_GETTING_PATH_TEXT = NbBundle
|
||||
.getMessage(HashDbConfigPanel.class, "HashDbConfigPanel.errorGettingPathText");
|
||||
private static final String ERROR_GETTING_INDEX_STATUS_TEXT = NbBundle
|
||||
.getMessage(HashDbConfigPanel.class, "HashDbConfigPanel.errorGettingIndexStatusText");
|
||||
private HashDbManager hashSetManager = HashDbManager.getInstance();
|
||||
private HashSetTableModel hashSetTableModel = new HashSetTableModel();
|
||||
|
||||
@ -71,7 +76,7 @@ public final class HashDbConfigPanel extends javax.swing.JPanel implements Optio
|
||||
}
|
||||
|
||||
private void customizeComponents() {
|
||||
setName("Hash Set Configuration");
|
||||
setName(NbBundle.getMessage(this.getClass(), "HashDbConfigPanel.setName.hashSetConfig"));
|
||||
this.ingestWarningLabel.setVisible(false);
|
||||
this.hashSetTable.setModel(hashSetTableModel);
|
||||
this.hashSetTable.setTableHeader(null);
|
||||
@ -109,7 +114,7 @@ public final class HashDbConfigPanel extends javax.swing.JPanel implements Optio
|
||||
// Update indexing components.
|
||||
hashDbIndexStatusLabel.setText(NO_SELECTION_TEXT);
|
||||
hashDbIndexStatusLabel.setForeground(Color.black);
|
||||
indexButton.setText("Index");
|
||||
indexButton.setText(NbBundle.getMessage(this.getClass(), "HashDbConfigPanel.indexButtonText.index"));
|
||||
indexButton.setEnabled(false);
|
||||
|
||||
// Update ingest options.
|
||||
@ -140,7 +145,7 @@ public final class HashDbConfigPanel extends javax.swing.JPanel implements Optio
|
||||
hashDbLocationLabel.setText(shortenPath(db.getDatabasePath()));
|
||||
}
|
||||
catch (TskCoreException ex) {
|
||||
Logger.getLogger(HashDbConfigPanel.class.getName()).log(Level.SEVERE, "Error getting database path of " + db.getHashSetName() + " hash database", ex);
|
||||
Logger.getLogger(HashDbConfigPanel.class.getName()).log(Level.SEVERE, "Error getting database path of " + db.getHashSetName() + " hash database", ex);
|
||||
hashDbLocationLabel.setText(ERROR_GETTING_PATH_TEXT);
|
||||
}
|
||||
|
||||
@ -148,39 +153,45 @@ public final class HashDbConfigPanel extends javax.swing.JPanel implements Optio
|
||||
indexPathLabel.setText(shortenPath(db.getIndexPath()));
|
||||
}
|
||||
catch (TskCoreException ex) {
|
||||
Logger.getLogger(HashDbConfigPanel.class.getName()).log(Level.SEVERE, "Error getting index path of " + db.getHashSetName() + " hash database", ex);
|
||||
Logger.getLogger(HashDbConfigPanel.class.getName()).log(Level.SEVERE, "Error getting index path of " + db.getHashSetName() + " hash database", ex);
|
||||
indexPathLabel.setText(ERROR_GETTING_PATH_TEXT);
|
||||
}
|
||||
|
||||
// Update indexing components.
|
||||
try {
|
||||
if (db.isIndexing()) {
|
||||
indexButton.setText("Indexing");
|
||||
hashDbIndexStatusLabel.setText("Index is currently being generated");
|
||||
indexButton.setText(
|
||||
NbBundle.getMessage(this.getClass(), "HashDbConfigPanel.indexButtonText.indexing"));
|
||||
hashDbIndexStatusLabel.setText(
|
||||
NbBundle.getMessage(this.getClass(), "HashDbConfigPanel.indexStatusText.indexGen"));
|
||||
hashDbIndexStatusLabel.setForeground(Color.black);
|
||||
indexButton.setEnabled(false);
|
||||
}
|
||||
else if (db.hasIndex()) {
|
||||
if (db.hasIndexOnly()) {
|
||||
hashDbIndexStatusLabel.setText("Index only");
|
||||
hashDbIndexStatusLabel.setText(
|
||||
NbBundle.getMessage(this.getClass(), "HashDbConfigPanel.indexStatusText.indexOnly"));
|
||||
}
|
||||
else {
|
||||
hashDbIndexStatusLabel.setText("Indexed");
|
||||
hashDbIndexStatusLabel.setText(
|
||||
NbBundle.getMessage(this.getClass(), "HashDbConfigPanel.indexStatusText.indexed"));
|
||||
}
|
||||
hashDbIndexStatusLabel.setForeground(Color.black);
|
||||
if (db.canBeReIndexed()) {
|
||||
indexButton.setText("Re-Index");
|
||||
indexButton.setText(
|
||||
NbBundle.getMessage(this.getClass(), "HashDbConfigPanel.indexButtonText.reIndex"));
|
||||
indexButton.setEnabled(true);
|
||||
}
|
||||
else {
|
||||
indexButton.setText("Index");
|
||||
indexButton.setText(NbBundle.getMessage(this.getClass(), "HashDbConfigPanel.indexButtonText.index"));
|
||||
indexButton.setEnabled(false);
|
||||
}
|
||||
}
|
||||
else {
|
||||
hashDbIndexStatusLabel.setText("No index");
|
||||
hashDbIndexStatusLabel.setText(
|
||||
NbBundle.getMessage(this.getClass(), "HashDbConfigPanel.indexStatusText.noIndex"));
|
||||
hashDbIndexStatusLabel.setForeground(Color.red);
|
||||
indexButton.setText("Index");
|
||||
indexButton.setText(NbBundle.getMessage(this.getClass(), "HashDbConfigPanel.indexButtonText.index"));
|
||||
indexButton.setEnabled(true);
|
||||
}
|
||||
}
|
||||
@ -188,7 +199,7 @@ public final class HashDbConfigPanel extends javax.swing.JPanel implements Optio
|
||||
Logger.getLogger(HashDbConfigPanel.class.getName()).log(Level.SEVERE, "Error getting index state of hash database", ex);
|
||||
hashDbIndexStatusLabel.setText(ERROR_GETTING_INDEX_STATUS_TEXT);
|
||||
hashDbIndexStatusLabel.setForeground(Color.red);
|
||||
indexButton.setText("Index");
|
||||
indexButton.setText(NbBundle.getMessage(this.getClass(), "HashDbConfigPanel.indexButtonText.index"));
|
||||
indexButton.setEnabled(false);
|
||||
}
|
||||
|
||||
@ -282,12 +293,15 @@ public final class HashDbConfigPanel extends javax.swing.JPanel implements Optio
|
||||
total+= "\n" + hdb.getHashSetName();
|
||||
}
|
||||
if(plural){
|
||||
message = "The following databases are not indexed, would you like to index them now? \n " + total;
|
||||
message = NbBundle.getMessage(this.getClass(), "HashDbConfigPanel.dbsNotIndexedMsg", total);
|
||||
}
|
||||
else{
|
||||
message = "The following database is not indexed, would you like to index it now? \n" + total;
|
||||
message = NbBundle.getMessage(this.getClass(), "HashDbConfigPanel.dbNotIndexedMsg", total);
|
||||
}
|
||||
int res = JOptionPane.showConfirmDialog(this, message, "Unindexed databases", JOptionPane.YES_NO_OPTION);
|
||||
int res = JOptionPane.showConfirmDialog(this, message,
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"HashDbConfigPanel.unindexedDbsMsg"),
|
||||
JOptionPane.YES_NO_OPTION);
|
||||
if(res == JOptionPane.YES_OPTION){
|
||||
ModalNoButtons indexingDialog = new ModalNoButtons(this, new Frame(),unindexed);
|
||||
indexingDialog.setLocationRelativeTo(null);
|
||||
@ -296,7 +310,8 @@ public final class HashDbConfigPanel extends javax.swing.JPanel implements Optio
|
||||
hashSetTableModel.refreshModel();
|
||||
}
|
||||
if(res == JOptionPane.NO_OPTION){
|
||||
JOptionPane.showMessageDialog(this, "All unindexed databases will be removed the list");
|
||||
JOptionPane.showMessageDialog(this, NbBundle.getMessage(this.getClass(),
|
||||
"HashDbConfigPanel.allUnindexedDbsRmFromListMsg"));
|
||||
removeThese(unindexed);
|
||||
}
|
||||
}
|
||||
@ -362,7 +377,7 @@ public final class HashDbConfigPanel extends javax.swing.JPanel implements Optio
|
||||
|
||||
@Override
|
||||
public String getColumnName(int column) {
|
||||
return "Name";
|
||||
return NbBundle.getMessage(this.getClass(), "HashDbConfigPanel.nameColLbl");
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -387,7 +402,8 @@ public final class HashDbConfigPanel extends javax.swing.JPanel implements Optio
|
||||
|
||||
@Override
|
||||
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
|
||||
throw new UnsupportedOperationException("Editing of cells is not supported");
|
||||
throw new UnsupportedOperationException(
|
||||
NbBundle.getMessage(this.getClass(), "HashDbConfigPanel.editingCellsNotSupportedMsg"));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -720,7 +736,12 @@ public final class HashDbConfigPanel extends javax.swing.JPanel implements Optio
|
||||
}//GEN-LAST:event_indexButtonActionPerformed
|
||||
|
||||
private void deleteDatabaseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteDatabaseButtonActionPerformed
|
||||
if (JOptionPane.showConfirmDialog(null, "This will remove the hash database for all cases. Do you want to proceed? ", "Delete Hash Database from Configuration", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE) == JOptionPane.YES_OPTION) {
|
||||
if (JOptionPane.showConfirmDialog(null,
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"HashDbConfigPanel.deleteDbActionConfirmMsg"),
|
||||
NbBundle.getMessage(this.getClass(), "HashDbConfigPanel.deleteDbActionMsg"),
|
||||
JOptionPane.YES_NO_OPTION,
|
||||
JOptionPane.WARNING_MESSAGE) == JOptionPane.YES_OPTION) {
|
||||
HashDb hashDb = ((HashSetTable)hashSetTable).getSelection();
|
||||
if (hashDb != null) {
|
||||
hashSetManager.removeHashDatabase(hashDb);
|
||||
|
@ -24,6 +24,8 @@ import java.awt.Toolkit;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import org.openide.util.NbBundle;
|
||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||
import javax.swing.JFileChooser;
|
||||
import javax.swing.JOptionPane;
|
||||
@ -44,7 +46,8 @@ import org.sleuthkit.autopsy.hashdatabase.HashDbManager.IllegalHashDatabaseFileN
|
||||
*/
|
||||
final class HashDbCreateDatabaseDialog extends javax.swing.JDialog {
|
||||
|
||||
private static final String DEFAULT_FILE_NAME = "hashset";
|
||||
private static final String DEFAULT_FILE_NAME = NbBundle
|
||||
.getMessage(HashDbCreateDatabaseDialog.class, "HashDbCreateDatabaseDialog.defaultFileName");
|
||||
private JFileChooser fileChooser = null;
|
||||
private HashDb newHashDb = null;
|
||||
|
||||
@ -54,7 +57,7 @@ final class HashDbCreateDatabaseDialog extends javax.swing.JDialog {
|
||||
* or known bad.
|
||||
*/
|
||||
HashDbCreateDatabaseDialog() {
|
||||
super(new JFrame(), "Create Hash Database", true);
|
||||
super(new JFrame(), NbBundle.getMessage(HashDbCreateDatabaseDialog.class, "HashDbCreateDatabaseDialog.createHashDbMsg"), true);
|
||||
initFileChooser();
|
||||
initComponents();
|
||||
display();
|
||||
@ -74,13 +77,24 @@ final class HashDbCreateDatabaseDialog extends javax.swing.JDialog {
|
||||
public void approveSelection() {
|
||||
File selectedFile = getSelectedFile();
|
||||
if (!FilenameUtils.getExtension(selectedFile.getName()).equalsIgnoreCase(HashDbManager.getHashDatabaseFileExtension())) {
|
||||
if (JOptionPane.showConfirmDialog(this, "The hash database file must have a ." + HashDbManager.getHashDatabaseFileExtension() + " extension.", "File Name Error", JOptionPane.OK_CANCEL_OPTION) == JOptionPane.CANCEL_OPTION) {
|
||||
if (JOptionPane.showConfirmDialog(this,
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"HashDbCreateDatabaseDialog.hashDbMustHaveFileExtensionMsg",
|
||||
HashDbManager.getHashDatabaseFileExtension()),
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"HashDbCreateDatabaseDialog.fileNameErr"),
|
||||
JOptionPane.OK_CANCEL_OPTION) == JOptionPane.CANCEL_OPTION) {
|
||||
cancelSelection();
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (selectedFile.exists()) {
|
||||
if (JOptionPane.showConfirmDialog(this, "A file with this name already exists. Please choose a new file name.", "File Already Exists Error", JOptionPane.OK_CANCEL_OPTION) == JOptionPane.CANCEL_OPTION) {
|
||||
if (JOptionPane.showConfirmDialog(this,
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"HashDbCreateDatabaseDialog.fileNameAlreadyExistsMsg"),
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"HashDbCreateDatabaseDialog.fileExistsErr"),
|
||||
JOptionPane.OK_CANCEL_OPTION) == JOptionPane.CANCEL_OPTION) {
|
||||
cancelSelection();
|
||||
}
|
||||
return;
|
||||
@ -310,12 +324,22 @@ final class HashDbCreateDatabaseDialog extends javax.swing.JDialog {
|
||||
// dialog to allow the user to try again, if desired.
|
||||
|
||||
if (hashSetNameTextField.getText().isEmpty()) {
|
||||
JOptionPane.showMessageDialog(this, "A hash set name must be entered.", "Create Hash Database Error", JOptionPane.ERROR_MESSAGE);
|
||||
JOptionPane.showMessageDialog(this,
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"HashDbCreateDatabaseDialog.mustEnterHashSetNameMsg"),
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"HashDbCreateDatabaseDialog.createHashDbErr"),
|
||||
JOptionPane.ERROR_MESSAGE);
|
||||
return;
|
||||
}
|
||||
|
||||
if (databasePathTextField.getText().isEmpty()) {
|
||||
JOptionPane.showMessageDialog(this, "A database path must be entered.", "Create Hash Database Error", JOptionPane.ERROR_MESSAGE);
|
||||
JOptionPane.showMessageDialog(this,
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"HashDbCreateDatabaseDialog.mustEnterHashDbPathMsg"),
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"HashDbCreateDatabaseDialog.createHashDbErr"),
|
||||
JOptionPane.ERROR_MESSAGE);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -327,24 +351,39 @@ final class HashDbCreateDatabaseDialog extends javax.swing.JDialog {
|
||||
type = KnownFilesType.KNOWN_BAD;
|
||||
}
|
||||
|
||||
String errorMessage = "Hash database creation error";
|
||||
String errorMessage = NbBundle
|
||||
.getMessage(this.getClass(), "HashDbCreateDatabaseDialog.errMsg.hashDbCreationErr");
|
||||
try
|
||||
{
|
||||
newHashDb = HashDbManager.getInstance().addNewHashDatabase(hashSetNameTextField.getText(), fileChooser.getSelectedFile().getCanonicalPath(), searchDuringIngestCheckbox.isSelected(), sendIngestMessagesCheckbox.isSelected(), type);
|
||||
}
|
||||
catch (IOException ex) {
|
||||
Logger.getLogger(HashDbCreateDatabaseDialog.class.getName()).log(Level.WARNING, errorMessage, ex);
|
||||
JOptionPane.showMessageDialog(this, "Cannot create a hash database file at the selected location.", "Create Hash Database Error", JOptionPane.ERROR_MESSAGE);
|
||||
JOptionPane.showMessageDialog(this,
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"HashDbCreateDatabaseDialog.cannotCreateFileAtLocMsg"),
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"HashDbCreateDatabaseDialog.createHashDbErr"),
|
||||
JOptionPane.ERROR_MESSAGE);
|
||||
return;
|
||||
}
|
||||
catch (HashDatabaseFileAlreadyExistsException | DuplicateHashSetNameException | HashDatabaseAlreadyAddedException | IllegalHashDatabaseFileNameExtensionException ex) {
|
||||
Logger.getLogger(HashDbCreateDatabaseDialog.class.getName()).log(Level.WARNING, errorMessage, ex);
|
||||
JOptionPane.showMessageDialog(this, ex.getMessage(), "Create Hash Database Error", JOptionPane.ERROR_MESSAGE);
|
||||
JOptionPane.showMessageDialog(this,
|
||||
ex.getMessage(),
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"HashDbCreateDatabaseDialog.createHashDbErr"),
|
||||
JOptionPane.ERROR_MESSAGE);
|
||||
return;
|
||||
}
|
||||
catch (TskCoreException ex) {
|
||||
Logger.getLogger(HashDbCreateDatabaseDialog.class.getName()).log(Level.SEVERE, errorMessage, ex);
|
||||
JOptionPane.showMessageDialog(this, "Failed to create the hash database.", "Create Hash Database Error", JOptionPane.ERROR_MESSAGE);
|
||||
JOptionPane.showMessageDialog(this,
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"HashDbCreateDatabaseDialog.failedToCreateHashDbMsg"),
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"HashDbCreateDatabaseDialog.createHashDbErr"),
|
||||
JOptionPane.ERROR_MESSAGE);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -23,6 +23,8 @@ import java.awt.Toolkit;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import org.openide.util.NbBundle;
|
||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||
import javax.swing.JFileChooser;
|
||||
import javax.swing.JOptionPane;
|
||||
@ -53,7 +55,9 @@ final class HashDbImportDatabaseDialog extends javax.swing.JDialog {
|
||||
* known, or known bad.
|
||||
*/
|
||||
HashDbImportDatabaseDialog() {
|
||||
super(new JFrame(), "Import Hash Database", true);
|
||||
super(new JFrame(),
|
||||
NbBundle.getMessage(HashDbImportDatabaseDialog.class, "HashDbImportDatabaseDialog.importHashDbMsg"),
|
||||
true);
|
||||
initFileChooser();
|
||||
initComponents();
|
||||
display();
|
||||
@ -71,7 +75,8 @@ final class HashDbImportDatabaseDialog extends javax.swing.JDialog {
|
||||
fileChooser.setDragEnabled(false);
|
||||
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
|
||||
String[] EXTENSION = new String[] { "txt", "kdb", "idx", "hash", "Hash", "hsh"};
|
||||
FileNameExtensionFilter filter = new FileNameExtensionFilter("Hash Database File", EXTENSION);
|
||||
FileNameExtensionFilter filter = new FileNameExtensionFilter(
|
||||
NbBundle.getMessage(this.getClass(), "HashDbImportDatabaseDialog.fileNameExtFilter.text"), EXTENSION);
|
||||
fileChooser.setFileFilter(filter);
|
||||
fileChooser.setMultiSelectionEnabled(false);
|
||||
}
|
||||
@ -268,7 +273,9 @@ final class HashDbImportDatabaseDialog extends javax.swing.JDialog {
|
||||
}
|
||||
catch (IOException ex) {
|
||||
Logger.getLogger(HashDbImportDatabaseDialog.class.getName()).log(Level.SEVERE, "Failed to get path of selected database", ex);
|
||||
JOptionPane.showMessageDialog(this, "Failed to get the path of the selected database.");
|
||||
JOptionPane.showMessageDialog(this,
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"HashDbImportDatabaseDialog.failedToGetDbPathMsg"));
|
||||
}
|
||||
}
|
||||
}//GEN-LAST:event_openButtonActionPerformed
|
||||
@ -294,17 +301,32 @@ final class HashDbImportDatabaseDialog extends javax.swing.JDialog {
|
||||
// dialog to allow the user to try again, if desired.
|
||||
|
||||
if(hashSetNameTextField.getText().isEmpty()) {
|
||||
JOptionPane.showMessageDialog(this, "A hash set name must be entered.", "Import Hash Database Error", JOptionPane.ERROR_MESSAGE);
|
||||
JOptionPane.showMessageDialog(this,
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"HashDbCreateDatabaseDialog.mustEnterHashSetNameMsg"),
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"HashDbImportDatabaseDialog.importHashDbErr"),
|
||||
JOptionPane.ERROR_MESSAGE);
|
||||
return;
|
||||
}
|
||||
|
||||
if(selectedFilePath.isEmpty()) {
|
||||
JOptionPane.showMessageDialog(this, "A hash database file path must be selected.", "Import Hash Database Error", JOptionPane.ERROR_MESSAGE);
|
||||
JOptionPane.showMessageDialog(this,
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"HashDbImportDatabaseDialog.mustSelectHashDbFilePathMsg"),
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"HashDbImportDatabaseDialog.importHashDbErr"),
|
||||
JOptionPane.ERROR_MESSAGE);
|
||||
return;
|
||||
}
|
||||
File file = new File(selectedFilePath);
|
||||
if (!file.exists()) {
|
||||
JOptionPane.showMessageDialog(this, "The selected hash database does not exist.", "Import Hash Database Error", JOptionPane.ERROR_MESSAGE);
|
||||
JOptionPane.showMessageDialog(this,
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"HashDbImportDatabaseDialog.hashDbDoesNotExistMsg"),
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"HashDbImportDatabaseDialog.importHashDbErr"),
|
||||
JOptionPane.ERROR_MESSAGE);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -316,18 +338,28 @@ final class HashDbImportDatabaseDialog extends javax.swing.JDialog {
|
||||
type = KnownFilesType.KNOWN_BAD;
|
||||
}
|
||||
|
||||
String errorMessage = "Failed to open hash database at " + selectedFilePath + ".";
|
||||
String errorMessage = NbBundle.getMessage(this.getClass(),
|
||||
"HashDbImportDatabaseDialog.errorMessage.failedToOpenHashDbMsg",
|
||||
selectedFilePath);
|
||||
try {
|
||||
selectedHashDb = HashDbManager.getInstance().addExistingHashDatabase(hashSetNameTextField.getText(), selectedFilePath, searchDuringIngestCheckbox.isSelected(), sendIngestMessagesCheckbox.isSelected(), type);
|
||||
}
|
||||
catch (HashDatabaseDoesNotExistException | DuplicateHashSetNameException | HashDatabaseAlreadyAddedException ex) {
|
||||
Logger.getLogger(HashDbImportDatabaseDialog.class.getName()).log(Level.WARNING, errorMessage, ex);
|
||||
JOptionPane.showMessageDialog(this, ex.getMessage(), "Import Hash Database Error", JOptionPane.ERROR_MESSAGE);
|
||||
JOptionPane.showMessageDialog(this,
|
||||
ex.getMessage(),
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"HashDbImportDatabaseDialog.importHashDbErr"),
|
||||
JOptionPane.ERROR_MESSAGE);
|
||||
return;
|
||||
}
|
||||
catch (TskCoreException ex) {
|
||||
Logger.getLogger(HashDbCreateDatabaseDialog.class.getName()).log(Level.SEVERE, errorMessage, ex);
|
||||
JOptionPane.showMessageDialog(this, errorMessage, "Import Hash Database Error", JOptionPane.ERROR_MESSAGE);
|
||||
JOptionPane.showMessageDialog(this,
|
||||
errorMessage,
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"HashDbImportDatabaseDialog.importHashDbErr"),
|
||||
JOptionPane.ERROR_MESSAGE);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -23,6 +23,8 @@ import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import org.openide.util.NbBundle;
|
||||
import org.sleuthkit.autopsy.casemodule.Case;
|
||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||
import org.sleuthkit.autopsy.coreutils.Version;
|
||||
@ -47,8 +49,10 @@ import org.sleuthkit.datamodel.HashInfo;
|
||||
|
||||
public class HashDbIngestModule extends IngestModuleAbstractFile {
|
||||
private static HashDbIngestModule instance = null;
|
||||
public final static String MODULE_NAME = "Hash Lookup";
|
||||
public final static String MODULE_DESCRIPTION = "Identifies known and notables files using supplied hash databases, such as a standard NSRL database.";
|
||||
public final static String MODULE_NAME = NbBundle.getMessage(HashDbIngestModule.class,
|
||||
"HashDbIngestModule.moduleName");
|
||||
public final static String MODULE_DESCRIPTION = NbBundle.getMessage(HashDbIngestModule.class,
|
||||
"HashDbIngestModule.moduleDescription");
|
||||
final public static String MODULE_VERSION = Version.getVersion();
|
||||
private static final Logger logger = Logger.getLogger(HashDbIngestModule.class.getName());
|
||||
private static final int MAX_COMMENT_SIZE = 500;
|
||||
@ -151,10 +155,20 @@ public class HashDbIngestModule extends IngestModuleAbstractFile {
|
||||
calcHashesIsSet = hashDbManager.getAlwaysCalculateHashes();
|
||||
|
||||
if (knownHashSets.isEmpty()) {
|
||||
services.postMessage(IngestMessage.createWarningMessage(++messageId, this, "No known hash database set", "Known file search will not be executed."));
|
||||
services.postMessage(IngestMessage.createWarningMessage(++messageId,
|
||||
this,
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"HashDbIngestModule.noKnownHashDbSetMsg"),
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"HashDbIngestModule.knownFileSearchWillNotExecuteWarn")));
|
||||
}
|
||||
if (knownBadHashSets.isEmpty()) {
|
||||
services.postMessage(IngestMessage.createWarningMessage(++messageId, this, "No known bad hash database set", "Known bad file search will not be executed."));
|
||||
services.postMessage(IngestMessage.createWarningMessage(++messageId,
|
||||
this,
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"HashDbIngestModule.noKnownBadHashDbSetMsg"),
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"HashDbIngestModule.knownBadFileSearchWillNotExecuteWarn")));
|
||||
}
|
||||
}
|
||||
|
||||
@ -207,8 +221,14 @@ public class HashDbIngestModule extends IngestModuleAbstractFile {
|
||||
calctime += (System.currentTimeMillis() - calcstart);
|
||||
} catch (IOException ex) {
|
||||
logger.log(Level.WARNING, "Error calculating hash of file " + name, ex);
|
||||
services.postMessage(IngestMessage.createErrorMessage(++messageId, HashDbIngestModule.this, "Read Error: " + name,
|
||||
"Error encountered while calculating the hash value for " + name + "."));
|
||||
services.postMessage(IngestMessage.createErrorMessage(++messageId,
|
||||
HashDbIngestModule.this,
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"HashDbIngestModule.fileReadErrorMsg",
|
||||
name),
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"HashDbIngestModule.calcHashValueErr",
|
||||
name)));
|
||||
return ProcessResult.ERROR;
|
||||
}
|
||||
}
|
||||
@ -227,8 +247,14 @@ public class HashDbIngestModule extends IngestModuleAbstractFile {
|
||||
skCase.setKnown(file, TskData.FileKnown.BAD);
|
||||
} catch (TskException ex) {
|
||||
logger.log(Level.WARNING, "Couldn't set known bad state for file " + name + " - see sleuthkit log for details", ex);
|
||||
services.postMessage(IngestMessage.createErrorMessage(++messageId, HashDbIngestModule.this, "Hash Lookup Error: " + name,
|
||||
"Error encountered while setting known bad state for " + name + "."));
|
||||
services.postMessage(IngestMessage.createErrorMessage(++messageId,
|
||||
HashDbIngestModule.this,
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"HashDbIngestModule.hashLookupErrorMsg",
|
||||
name),
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"HashDbIngestModule.settingKnownBadStateErr",
|
||||
name)));
|
||||
ret = ProcessResult.ERROR;
|
||||
}
|
||||
String hashSetName = db.getHashSetName();
|
||||
@ -252,8 +278,14 @@ public class HashDbIngestModule extends IngestModuleAbstractFile {
|
||||
lookuptime += (System.currentTimeMillis() - lookupstart);
|
||||
} catch (TskException ex) {
|
||||
logger.log(Level.WARNING, "Couldn't lookup known bad hash for file " + name + " - see sleuthkit log for details", ex);
|
||||
services.postMessage(IngestMessage.createErrorMessage(++messageId, HashDbIngestModule.this, "Hash Lookup Error: " + name,
|
||||
"Error encountered while looking up known bad hash value for " + name + "."));
|
||||
services.postMessage(IngestMessage.createErrorMessage(++messageId,
|
||||
HashDbIngestModule.this,
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"HashDbIngestModule.hashLookupErrorMsg",
|
||||
name),
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"HashDbIngestModule.lookingUpKnownBadHashValueErr",
|
||||
name)));
|
||||
ret = ProcessResult.ERROR;
|
||||
}
|
||||
}
|
||||
@ -271,16 +303,28 @@ public class HashDbIngestModule extends IngestModuleAbstractFile {
|
||||
break;
|
||||
} catch (TskException ex) {
|
||||
logger.log(Level.WARNING, "Couldn't set known state for file " + name + " - see sleuthkit log for details", ex);
|
||||
services.postMessage(IngestMessage.createErrorMessage(++messageId, HashDbIngestModule.this, "Hash Lookup Error: " + name,
|
||||
"Error encountered while setting known state for " + name + "."));
|
||||
services.postMessage(IngestMessage.createErrorMessage(++messageId,
|
||||
HashDbIngestModule.this,
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"HashDbIngestModule.hashLookupErrorMsg",
|
||||
name),
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"HashDbIngestModule.settingsKnownStateErr",
|
||||
name)));
|
||||
ret = ProcessResult.ERROR;
|
||||
}
|
||||
}
|
||||
lookuptime += (System.currentTimeMillis() - lookupstart);
|
||||
} catch (TskException ex) {
|
||||
logger.log(Level.WARNING, "Couldn't lookup known hash for file " + name + " - see sleuthkit log for details", ex);
|
||||
services.postMessage(IngestMessage.createErrorMessage(++messageId, HashDbIngestModule.this, "Hash Lookup Error: " + name,
|
||||
"Error encountered while looking up known hash value for " + name + "."));
|
||||
services.postMessage(IngestMessage.createErrorMessage(++messageId,
|
||||
HashDbIngestModule.this,
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"HashDbIngestModule.hashLookupErrorMsg",
|
||||
name),
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"HashDbIngestModule.lookingUpKnownHashValueErr",
|
||||
name)));
|
||||
ret = ProcessResult.ERROR;
|
||||
}
|
||||
}
|
||||
@ -307,27 +351,37 @@ public class HashDbIngestModule extends IngestModuleAbstractFile {
|
||||
detailsSb.append("<table border='0' cellpadding='4' width='280'>");
|
||||
//hit
|
||||
detailsSb.append("<tr>");
|
||||
detailsSb.append("<th>File Name</th>");
|
||||
detailsSb.append("<td>").append(abstractFile.getName()).append("</td>");
|
||||
detailsSb.append("<th>")
|
||||
.append(NbBundle.getMessage(this.getClass(), "HashDbIngestModule.postToBB.fileName"))
|
||||
.append("</th>");
|
||||
detailsSb.append("<td>")
|
||||
.append(abstractFile.getName())
|
||||
.append("</td>");
|
||||
detailsSb.append("</tr>");
|
||||
|
||||
detailsSb.append("<tr>");
|
||||
detailsSb.append("<th>MD5 Hash</th>");
|
||||
detailsSb.append("<th>")
|
||||
.append(NbBundle.getMessage(this.getClass(), "HashDbIngestModule.postToBB.md5Hash"))
|
||||
.append("</th>");
|
||||
detailsSb.append("<td>").append(md5Hash).append("</td>");
|
||||
detailsSb.append("</tr>");
|
||||
|
||||
detailsSb.append("<tr>");
|
||||
detailsSb.append("<th>Hashset Name</th>");
|
||||
detailsSb.append("<th>")
|
||||
.append(NbBundle.getMessage(this.getClass(), "HashDbIngestModule.postToBB.hashsetName"))
|
||||
.append("</th>");
|
||||
detailsSb.append("<td>").append(hashSetName).append("</td>");
|
||||
detailsSb.append("</tr>");
|
||||
|
||||
detailsSb.append("</table>");
|
||||
|
||||
services.postMessage(IngestMessage.createDataMessage(++messageId, this,
|
||||
"Known Bad: " + abstractFile.getName(),
|
||||
detailsSb.toString(),
|
||||
abstractFile.getName() + md5Hash,
|
||||
badFile));
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"HashDbIngestModule.postToBB.knownBadMsg",
|
||||
abstractFile.getName()),
|
||||
detailsSb.toString(),
|
||||
abstractFile.getName() + md5Hash,
|
||||
badFile));
|
||||
}
|
||||
services.fireModuleDataEvent(new ModuleDataEvent(MODULE_NAME, ARTIFACT_TYPE.TSK_HASHSET_HIT, Collections.singletonList(badFile)));
|
||||
} catch (TskException ex) {
|
||||
@ -343,20 +397,33 @@ public class HashDbIngestModule extends IngestModuleAbstractFile {
|
||||
//details
|
||||
detailsSb.append("<table border='0' cellpadding='4' width='280'>");
|
||||
|
||||
detailsSb.append("<tr><td>Known bads found:</td>");
|
||||
detailsSb.append("<tr><td>")
|
||||
.append(NbBundle.getMessage(this.getClass(), "HashDbIngestModule.complete.knownBadsFound"))
|
||||
.append("</td>");
|
||||
detailsSb.append("<td>").append(knownBadCount).append("</td></tr>");
|
||||
|
||||
detailsSb.append("<tr><td>Total Calculation Time</td><td>").append(calctime).append("</td></tr>\n");
|
||||
detailsSb.append("<tr><td>Total Lookup Time</td><td>").append(lookuptime).append("</td></tr>\n");
|
||||
detailsSb.append("<tr><td>")
|
||||
.append(NbBundle.getMessage(this.getClass(), "HashDbIngestModule.complete.totalCalcTime"))
|
||||
.append("</td><td>").append(calctime).append("</td></tr>\n");
|
||||
detailsSb.append("<tr><td>")
|
||||
.append(NbBundle.getMessage(this.getClass(), "HashDbIngestModule.complete.totalLookupTime"))
|
||||
.append("</td><td>").append(lookuptime).append("</td></tr>\n");
|
||||
detailsSb.append("</table>");
|
||||
|
||||
detailsSb.append("<p>Databases Used:</p>\n<ul>");
|
||||
detailsSb.append("<p>")
|
||||
.append(NbBundle.getMessage(this.getClass(), "HashDbIngestModule.complete.databasesUsed"))
|
||||
.append("</p>\n<ul>");
|
||||
for (HashDb db : knownBadHashSets) {
|
||||
detailsSb.append("<li>").append(db.getHashSetName()).append("</li>\n");
|
||||
}
|
||||
|
||||
detailsSb.append("</ul>");
|
||||
services.postMessage(IngestMessage.createMessage(++messageId, IngestMessage.MessageType.INFO, this, "Hash Lookup Results", detailsSb.toString()));
|
||||
services.postMessage(IngestMessage.createMessage(++messageId,
|
||||
IngestMessage.MessageType.INFO,
|
||||
this,
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"HashDbIngestModule.complete.hashLookupResults"),
|
||||
detailsSb.toString()));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -31,6 +31,8 @@ import javax.swing.filechooser.FileNameExtensionFilter;
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
import javax.xml.parsers.ParserConfigurationException;
|
||||
|
||||
import org.openide.util.NbBundle;
|
||||
import org.sleuthkit.autopsy.coreutils.PlatformUtil;
|
||||
import org.sleuthkit.autopsy.coreutils.XMLUtil;
|
||||
import org.w3c.dom.Document;
|
||||
@ -52,8 +54,7 @@ import org.sleuthkit.datamodel.HashInfo;
|
||||
import org.sleuthkit.datamodel.SleuthkitJNI;
|
||||
import org.sleuthkit.datamodel.TskCoreException;
|
||||
import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil;
|
||||
import java.util.logging.Level;
|
||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||
|
||||
/**
|
||||
* This class implements a singleton that manages the set of hash databases
|
||||
* used to classify files as unknown, known or known bad.
|
||||
@ -63,11 +64,11 @@ public class HashDbManager implements PropertyChangeListener {
|
||||
private static final String ROOT_ELEMENT = "hash_sets";
|
||||
private static final String SET_ELEMENT = "hash_set";
|
||||
private static final String SET_NAME_ATTRIBUTE = "name";
|
||||
private static final String SET_TYPE_ATTRIBUTE = "type";
|
||||
private static final String SET_TYPE_ATTRIBUTE = "type";
|
||||
private static final String SEARCH_DURING_INGEST_ATTRIBUTE = "use_for_ingest";
|
||||
private static final String SEND_INGEST_MESSAGES_ATTRIBUTE = "show_inbox_messages";
|
||||
private static final String PATH_ELEMENT = "hash_set_path";
|
||||
private static final String LEGACY_PATH_NUMBER_ATTRIBUTE = "number";
|
||||
private static final String LEGACY_PATH_NUMBER_ATTRIBUTE = "number";
|
||||
private static final String CONFIG_FILE_NAME = "hashsets.xml";
|
||||
private static final String XSD_FILE_NAME = "HashsetsSchema.xsd";
|
||||
private static final String ENCODING = "UTF-8";
|
||||
@ -123,31 +124,32 @@ public class HashDbManager implements PropertyChangeListener {
|
||||
|
||||
class DuplicateHashSetNameException extends Exception {
|
||||
private DuplicateHashSetNameException(String hashSetName) {
|
||||
super("The hash set name '"+ hashSetName +"' has already been used for another hash database.");
|
||||
super(NbBundle.getMessage(HashDbManager.class, "HashDbManager.duplicateHashSetNameExceptionMsg", hashSetName));
|
||||
}
|
||||
}
|
||||
|
||||
class HashDatabaseDoesNotExistException extends Exception {
|
||||
private HashDatabaseDoesNotExistException(String path) {
|
||||
super("No hash database found at\n" + path);
|
||||
super(NbBundle.getMessage(HashDbManager.class, "HashDbManager.hashDbDoesNotExistExceptionMsg", path));
|
||||
}
|
||||
}
|
||||
|
||||
class HashDatabaseFileAlreadyExistsException extends Exception {
|
||||
private HashDatabaseFileAlreadyExistsException(String path) {
|
||||
super("A file already exists at\n" + path);
|
||||
super(NbBundle.getMessage(HashDbManager.class, "HashDbManager.hashDbFileExistsExceptionMsg", path));
|
||||
}
|
||||
}
|
||||
|
||||
class HashDatabaseAlreadyAddedException extends Exception {
|
||||
private HashDatabaseAlreadyAddedException(String path) {
|
||||
super("The hash database at\n" + path + "\nhas already been created or imported.");
|
||||
super(NbBundle.getMessage(HashDbManager.class, "HashDbManager.hashDbAlreadyAddedExceptionMsg", path));
|
||||
}
|
||||
}
|
||||
|
||||
class IllegalHashDatabaseFileNameExtensionException extends Exception {
|
||||
private IllegalHashDatabaseFileNameExtensionException() {
|
||||
super("The hash database file name must have a ." + getHashDatabaseFileExtension() + " extension.");
|
||||
super(NbBundle.getMessage(HashDbManager.class, "HashDbManager.illegalHashDbFileNameExtensionMsg",
|
||||
getHashDatabaseFileExtension()));
|
||||
}
|
||||
}
|
||||
|
||||
@ -244,7 +246,10 @@ public class HashDbManager implements PropertyChangeListener {
|
||||
}
|
||||
catch (Exception e) {
|
||||
logger.log(Level.SEVERE, "HashDbManager listener threw exception", e);
|
||||
MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to HashDbManager updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR);
|
||||
MessageNotifyUtil.Notify.show(
|
||||
"Module Error",
|
||||
NbBundle.getMessage(this.getClass(), "HashDbManager.moduleErrorListeningToUpdatesMsg"),
|
||||
MessageNotifyUtil.MessageType.ERROR);
|
||||
}
|
||||
return hashDb;
|
||||
}
|
||||
@ -319,7 +324,10 @@ public class HashDbManager implements PropertyChangeListener {
|
||||
}
|
||||
catch (Exception e) {
|
||||
logger.log(Level.SEVERE, "HashDbManager listener threw exception", e);
|
||||
MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to HashDbManager updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR);
|
||||
MessageNotifyUtil.Notify.show(
|
||||
"Module Error",
|
||||
NbBundle.getMessage(this.getClass(), "HashDbManager.moduleErrorListeningToUpdatesMsg"),
|
||||
MessageNotifyUtil.MessageType.ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
@ -536,7 +544,12 @@ public class HashDbManager implements PropertyChangeListener {
|
||||
newHashSetName = hashSetName + suffix;
|
||||
}
|
||||
while (hashSetNames.contains(newHashSetName));
|
||||
JOptionPane.showMessageDialog(null, "Duplicate hash set name " + hashSetName + " found.\nReplacing with " + newHashSetName + ".", "Open Hash Database Error", JOptionPane.ERROR_MESSAGE);
|
||||
JOptionPane.showMessageDialog(null,
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"HashDbManager.replacingDuplicateHashsetNameMsg",
|
||||
hashSetName, newHashSetName),
|
||||
NbBundle.getMessage(this.getClass(), "HashDbManager.openHashDbErr"),
|
||||
JOptionPane.ERROR_MESSAGE);
|
||||
hashSetName = newHashSetName;
|
||||
}
|
||||
|
||||
@ -595,7 +608,11 @@ public class HashDbManager implements PropertyChangeListener {
|
||||
}
|
||||
catch (HashDatabaseDoesNotExistException | DuplicateHashSetNameException | HashDatabaseAlreadyAddedException | TskCoreException ex) {
|
||||
Logger.getLogger(HashDbManager.class.getName()).log(Level.SEVERE, "Error opening hash database", ex);
|
||||
JOptionPane.showMessageDialog(null, "Unable to open " + dbPath + " hash database.", "Open Hash Database Error", JOptionPane.ERROR_MESSAGE);
|
||||
JOptionPane.showMessageDialog(null,
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"HashDbManager.unableToOpenHashDbMsg", dbPath),
|
||||
NbBundle.getMessage(this.getClass(), "HashDbManager.openHashDbErr"),
|
||||
JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
}
|
||||
else {
|
||||
@ -617,11 +634,18 @@ public class HashDbManager implements PropertyChangeListener {
|
||||
|
||||
if (updatedSchema) {
|
||||
String backupFilePath = configFilePath + ".v1_backup";
|
||||
String messageBoxTitle = "Configuration File Format Changed";
|
||||
String baseMessage = "The format of the hash database configuration file has been updated.";
|
||||
String messageBoxTitle = NbBundle.getMessage(this.getClass(),
|
||||
"HashDbManager.msgBoxTitle.confFileFmtChanged");
|
||||
String baseMessage = NbBundle.getMessage(this.getClass(),
|
||||
"HashDbManager.baseMessage.updatedFormatHashDbConfig");
|
||||
try {
|
||||
FileUtils.copyFile(new File(configFilePath), new File (backupFilePath));
|
||||
JOptionPane.showMessageDialog(null, baseMessage + "\nA backup copy of the old configuration has been saved as\n" + backupFilePath, messageBoxTitle, JOptionPane.INFORMATION_MESSAGE);
|
||||
JOptionPane.showMessageDialog(null,
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"HashDbManager.savedBackupOfOldConfigMsg",
|
||||
baseMessage, backupFilePath),
|
||||
messageBoxTitle,
|
||||
JOptionPane.INFORMATION_MESSAGE);
|
||||
}
|
||||
catch (IOException ex) {
|
||||
Logger.getLogger(HashDbManager.class.getName()).log(Level.WARNING, "Failed to save backup of old format configuration file to " + backupFilePath, ex);
|
||||
@ -643,7 +667,11 @@ public class HashDbManager implements PropertyChangeListener {
|
||||
|
||||
// Give the user an opportunity to find the desired file.
|
||||
String newPath = null;
|
||||
if (JOptionPane.showConfirmDialog(null, "Database " + hashSetName + " could not be found at location\n" + configuredPath + "\nWould you like to search for the file?", "Missing Database", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
|
||||
if (JOptionPane.showConfirmDialog(null,
|
||||
NbBundle.getMessage(this.getClass(), "HashDbManager.dlgMsg.dbNotFoundAtLoc",
|
||||
hashSetName, configuredPath),
|
||||
NbBundle.getMessage(this.getClass(), "HashDbManager.dlgTitle.MissingDb"),
|
||||
JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
|
||||
newPath = searchForFile();
|
||||
if (null != newPath && !newPath.isEmpty()) {
|
||||
database = new File(newPath);
|
||||
@ -661,7 +689,8 @@ public class HashDbManager implements PropertyChangeListener {
|
||||
fc.setDragEnabled(false);
|
||||
fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
|
||||
String[] EXTENSION = new String[] { "txt", "idx", "hash", "Hash", "kdb" };
|
||||
FileNameExtensionFilter filter = new FileNameExtensionFilter("Hash Database File", EXTENSION);
|
||||
FileNameExtensionFilter filter = new FileNameExtensionFilter(
|
||||
NbBundle.getMessage(this.getClass(), "HashDbManager.fileNameExtensionFilter.title"), EXTENSION);
|
||||
fc.setFileFilter(filter);
|
||||
fc.setMultiSelectionEnabled(false);
|
||||
if (fc.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
|
||||
@ -686,8 +715,8 @@ public class HashDbManager implements PropertyChangeListener {
|
||||
* object should be classified.
|
||||
*/
|
||||
public enum KnownFilesType{
|
||||
KNOWN("Known"),
|
||||
KNOWN_BAD("Known Bad");
|
||||
KNOWN(NbBundle.getMessage(HashDbManager.class, "HashDbManager.known.text")),
|
||||
KNOWN_BAD(NbBundle.getMessage(HashDbManager.class, "HashDbManager.knownBad.text"));
|
||||
|
||||
private String displayName;
|
||||
|
||||
@ -861,7 +890,8 @@ public class HashDbManager implements PropertyChangeListener {
|
||||
@Override
|
||||
protected Object doInBackground() {
|
||||
hashDb.indexing = true;
|
||||
progress = ProgressHandleFactory.createHandle("Indexing " + hashDb.hashSetName);
|
||||
progress = ProgressHandleFactory.createHandle(
|
||||
NbBundle.getMessage(this.getClass(), "HashDbManager.progress.indexingHashSet", hashDb.hashSetName));
|
||||
progress.start();
|
||||
progress.switchToIndeterminate();
|
||||
try {
|
||||
@ -869,7 +899,12 @@ public class HashDbManager implements PropertyChangeListener {
|
||||
}
|
||||
catch (TskCoreException ex) {
|
||||
Logger.getLogger(HashDb.class.getName()).log(Level.SEVERE, "Error indexing hash database", ex);
|
||||
JOptionPane.showMessageDialog(null, "Error indexing " + hashDb.getHashSetName() + " hash database.", "Hash Database Indexing Error", JOptionPane.ERROR_MESSAGE);
|
||||
JOptionPane.showMessageDialog(null,
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"HashDbManager.dlgMsg.errorIndexingHashSet",
|
||||
hashDb.getHashSetName()),
|
||||
NbBundle.getMessage(this.getClass(), "HashDbManager.hashDbIndexingErr"),
|
||||
JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@ -884,7 +919,10 @@ public class HashDbManager implements PropertyChangeListener {
|
||||
}
|
||||
catch (Exception e) {
|
||||
logger.log(Level.SEVERE, "HashDbManager listener threw exception", e);
|
||||
MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to HashDbManager updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR);
|
||||
MessageNotifyUtil.Notify.show(
|
||||
NbBundle.getMessage(this.getClass(), "HashDbManager.moduleErr"),
|
||||
NbBundle.getMessage(this.getClass(), "HashDbManager.moduleErrorListeningToUpdatesMsg"),
|
||||
MessageNotifyUtil.MessageType.ERROR);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -25,6 +25,7 @@ import java.awt.event.WindowEvent;
|
||||
import java.beans.PropertyChangeEvent;
|
||||
import java.beans.PropertyChangeListener;
|
||||
import org.openide.util.HelpCtx;
|
||||
import org.openide.util.NbBundle;
|
||||
import org.openide.util.actions.CallableSystemAction;
|
||||
import org.sleuthkit.autopsy.casemodule.Case;
|
||||
import org.sleuthkit.autopsy.corecomponents.AdvancedConfigurationCleanDialog;
|
||||
@ -35,7 +36,7 @@ import org.sleuthkit.autopsy.corecomponents.AdvancedConfigurationCleanDialog;
|
||||
*/
|
||||
class HashDbPanelSearchAction extends CallableSystemAction {
|
||||
|
||||
static final String ACTION_NAME = "File Search by MD5 Hash";
|
||||
static final String ACTION_NAME = NbBundle.getMessage(HashDbPanelSearchAction.class, "HashDbPanelSearchAction.actionName");
|
||||
private static HashDbPanelSearchAction instance = null;
|
||||
|
||||
HashDbPanelSearchAction() {
|
||||
|
@ -21,6 +21,7 @@ package org.sleuthkit.autopsy.hashdatabase;
|
||||
import javax.swing.JOptionPane;
|
||||
import org.openide.nodes.Node;
|
||||
import org.openide.util.HelpCtx;
|
||||
import org.openide.util.NbBundle;
|
||||
import org.openide.util.actions.CallableSystemAction;
|
||||
import org.sleuthkit.autopsy.datamodel.ContentUtils;
|
||||
import org.sleuthkit.autopsy.directorytree.HashSearchProvider;
|
||||
@ -103,8 +104,11 @@ class HashDbSearchAction extends CallableSystemAction implements HashSearchProvi
|
||||
if (HashDbSearcher.countFilesMd5Hashed() > 0) {
|
||||
doSearch();
|
||||
} else {
|
||||
JOptionPane.showMessageDialog(null, "No files currently have an MD5 hash calculated, run HashDB ingest first.",
|
||||
"File Search by MD5 Hash", JOptionPane.ERROR_MESSAGE);
|
||||
JOptionPane.showMessageDialog(null,
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"HashDbSearchAction.dlgMsg.noFilesHaveMD5Calculated"),
|
||||
NbBundle.getMessage(this.getClass(), "HashDbSearchAction.dlgMsg.title"),
|
||||
JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
}
|
||||
|
||||
@ -115,7 +119,7 @@ class HashDbSearchAction extends CallableSystemAction implements HashSearchProvi
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Hash Search";
|
||||
return NbBundle.getMessage(this.getClass(), "HashDbSearchAction.getName.text");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -26,6 +26,7 @@ import javax.swing.JOptionPane;
|
||||
import org.openide.nodes.AbstractNode;
|
||||
import org.openide.nodes.Children;
|
||||
import org.openide.nodes.Node;
|
||||
import org.openide.util.NbBundle;
|
||||
import org.openide.windows.TopComponent;
|
||||
import org.sleuthkit.autopsy.corecomponents.DataResultTopComponent;
|
||||
import org.sleuthkit.datamodel.AbstractFile;
|
||||
@ -78,11 +79,17 @@ import org.sleuthkit.datamodel.AbstractFile;
|
||||
rootNode = Node.EMPTY;
|
||||
}
|
||||
|
||||
final String pathText = "MD5 Hash Search";
|
||||
TopComponent searchResultWin = DataResultTopComponent.createInstance("MD5 Hash Search", pathText, rootNode, kvCollection.size());
|
||||
final String pathText = NbBundle.getMessage(this.getClass(), "HashDbSearchManager.MD5HashSearch");
|
||||
TopComponent searchResultWin = DataResultTopComponent.createInstance(
|
||||
NbBundle.getMessage(this.getClass(), "HashDbSearchManager.MD5HashSearch"),
|
||||
pathText,
|
||||
rootNode,
|
||||
kvCollection.size());
|
||||
|
||||
searchResultWin.requestActive();
|
||||
} else {
|
||||
JOptionPane.showMessageDialog(null, "No results were found.");
|
||||
JOptionPane.showMessageDialog(null,
|
||||
NbBundle.getMessage(this.getClass(), "HashDbSearchManager.noResultsFoundMsg"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -24,6 +24,8 @@ import java.awt.event.ActionListener;
|
||||
import java.awt.event.KeyAdapter;
|
||||
import java.awt.event.KeyEvent;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.openide.util.NbBundle;
|
||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||
import javax.swing.JOptionPane;
|
||||
import javax.swing.table.DefaultTableModel;
|
||||
@ -56,10 +58,10 @@ import org.sleuthkit.autopsy.ingest.IngestManager;
|
||||
boolean running = IngestManager.getDefault().isIngestRunning();
|
||||
if(running) {
|
||||
titleLabel.setForeground(Color.red);
|
||||
titleLabel.setText("Ingest is ongoing; this service will be unavailable until it finishes.");
|
||||
titleLabel.setText(NbBundle.getMessage(this.getClass(), "HashDbSearchPanel.titleText.ingestOngoing"));
|
||||
} else {
|
||||
titleLabel.setForeground(Color.black);
|
||||
titleLabel.setText("Search for files with the following MD5 hash(es):");
|
||||
titleLabel.setText(NbBundle.getMessage(this.getClass(), "HashDbSearchPanel.titleLabel.text"));
|
||||
}
|
||||
hashField.setEditable(!running);
|
||||
searchButton.setEnabled(!running);
|
||||
@ -151,7 +153,7 @@ import org.sleuthkit.autopsy.ingest.IngestManager;
|
||||
|
||||
},
|
||||
new String [] {
|
||||
"MD5 Hashes"
|
||||
NbBundle.getMessage(this.getClass(), "HashDbSearchPanel.hashTable.columnModel.title0")
|
||||
}
|
||||
) {
|
||||
Class[] types = new Class [] {
|
||||
@ -294,12 +296,15 @@ import org.sleuthkit.autopsy.ingest.IngestManager;
|
||||
if(HashDbSearcher.countFilesMd5Hashed() > 0) {
|
||||
return doSearch();
|
||||
} else {
|
||||
JOptionPane.showMessageDialog(null, "No files currently have an MD5 hash.",
|
||||
"File Search by MD5 Hash", JOptionPane.ERROR_MESSAGE);
|
||||
JOptionPane.showMessageDialog(null,
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"HashDbSearchPanel.noFilesHaveMD5HashMsg"),
|
||||
NbBundle.getMessage(this.getClass(), "HashDbSearchPanel.dlgMsg.title"),
|
||||
JOptionPane.ERROR_MESSAGE);
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
errorField.setText("Error: No hashes have been added.");
|
||||
errorField.setText(NbBundle.getMessage(this.getClass(), "HashDbSearchPanel.errorText.noHashesAddedMsg"));
|
||||
errorField.setVisible(true);
|
||||
return false;
|
||||
}
|
||||
@ -331,7 +336,8 @@ import org.sleuthkit.autopsy.ingest.IngestManager;
|
||||
for(int i=0; i<model.getRowCount(); i++) {
|
||||
if(model.getValueAt(i, 0).equals(hashField.getText())) {
|
||||
hashField.setText("");
|
||||
errorField.setText("Error: Hash has already been added.");
|
||||
errorField.setText(
|
||||
NbBundle.getMessage(this.getClass(), "HashDbSearchPanel.errorText.hashAlreadyAddedMsg"));
|
||||
errorField.setVisible(true);
|
||||
errorField.setVisible(true);
|
||||
return;
|
||||
@ -340,7 +346,7 @@ import org.sleuthkit.autopsy.ingest.IngestManager;
|
||||
model.addRow(new String[] {hash});
|
||||
hashField.setText(""); // wipe the field
|
||||
} else {
|
||||
errorField.setText("Error: That is not a valid MD5 hash.");
|
||||
errorField.setText(NbBundle.getMessage(this.getClass(), "HashDbSearchPanel.errorText.invalidMD5HashMsg"));
|
||||
errorField.setVisible(true);
|
||||
}
|
||||
}
|
||||
|
@ -23,6 +23,8 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.CancellationException;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import org.openide.util.NbBundle;
|
||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||
import javax.swing.JOptionPane;
|
||||
import javax.swing.SwingWorker;
|
||||
@ -52,12 +54,14 @@ class HashDbSearchThread extends SwingWorker<Object,Void> {
|
||||
logger.log(Level.INFO, "Starting background processing for file search by MD5 hash.");
|
||||
|
||||
// Setup progress bar
|
||||
final String displayName = "Searching";
|
||||
final String displayName = NbBundle.getMessage(this.getClass(), "HashDbSearchThread.name.searching");
|
||||
progress = ProgressHandleFactory.createHandle(displayName, new Cancellable() {
|
||||
@Override
|
||||
public boolean cancel() {
|
||||
if (progress != null)
|
||||
progress.setDisplayName(displayName + " (Cancelling...)");
|
||||
progress.setDisplayName(
|
||||
NbBundle.getMessage(this.getClass(), "HashDbSearchThread.progress.cancellingSearch",
|
||||
displayName));
|
||||
return HashDbSearchThread.this.cancel(true);
|
||||
}
|
||||
});
|
||||
@ -97,7 +101,9 @@ class HashDbSearchThread extends SwingWorker<Object,Void> {
|
||||
}
|
||||
}
|
||||
if(quit) {
|
||||
JOptionPane.showMessageDialog(null, "No other files with the same MD5 hash were found.");
|
||||
JOptionPane.showMessageDialog(null,
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"HashDbSearchThread.noMoreFilesWithMD5Msg"));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -28,6 +28,8 @@ import javax.swing.JScrollPane;
|
||||
import javax.swing.JTable;
|
||||
import javax.swing.table.AbstractTableModel;
|
||||
import javax.swing.table.TableColumn;
|
||||
|
||||
import org.openide.util.NbBundle;
|
||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||
import org.sleuthkit.autopsy.ingest.IngestManager;
|
||||
import org.sleuthkit.datamodel.TskCoreException;
|
||||
@ -155,7 +157,9 @@ public class HashDbSimpleConfigPanel extends javax.swing.JPanel {
|
||||
db.setSearchDuringIngest((Boolean) aValue);
|
||||
}
|
||||
else {
|
||||
JOptionPane.showMessageDialog(HashDbSimpleConfigPanel.this, "Hash databases must be indexed before they can be used for ingest");
|
||||
JOptionPane.showMessageDialog(HashDbSimpleConfigPanel.this,
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"HashDbSimpleConfigPanel.dlgMsg.mustIndexDbBeforeUse"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -24,6 +24,8 @@ import java.beans.PropertyChangeListener;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import javax.swing.JOptionPane;
|
||||
|
||||
import org.openide.util.NbBundle;
|
||||
import org.sleuthkit.autopsy.hashdatabase.HashDbManager.HashDb;
|
||||
|
||||
/**
|
||||
@ -52,7 +54,7 @@ class ModalNoButtons extends javax.swing.JDialog implements PropertyChangeListen
|
||||
* @param unindexed the list of unindexed databases to index.
|
||||
*/
|
||||
ModalNoButtons(HashDbConfigPanel hdbmp, java.awt.Frame parent, List<HashDb> unindexed) {
|
||||
super(parent, "Indexing databases", true);
|
||||
super(parent, NbBundle.getMessage(ModalNoButtons.class, "ModalNoButtons.indexingDbsTitle"), true);
|
||||
this.unindexed = unindexed;
|
||||
this.toIndex = null;
|
||||
this.hdbmp = hdbmp;
|
||||
@ -67,7 +69,7 @@ class ModalNoButtons extends javax.swing.JDialog implements PropertyChangeListen
|
||||
* @param unindexed The unindexed database to index.
|
||||
*/
|
||||
ModalNoButtons(HashDbConfigPanel hdbmp, java.awt.Frame parent, HashDb unindexed){
|
||||
super(parent, "Indexing database", true);
|
||||
super(parent, NbBundle.getMessage(ModalNoButtons.class, "ModalNoButtons.indexingDbTitle"), true);
|
||||
this.unindexed = null;
|
||||
this.toIndex = unindexed;
|
||||
this.hdbmp = hdbmp;
|
||||
@ -163,12 +165,13 @@ class ModalNoButtons extends javax.swing.JDialog implements PropertyChangeListen
|
||||
* @param evt mouse click event
|
||||
*/
|
||||
private void CANCEL_BUTTONMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_CANCEL_BUTTONMouseClicked
|
||||
String message = "You are about to exit out of indexing your hash databases. \n"
|
||||
+ "The generated index will be left unusable. If you choose to continue,\n "
|
||||
+ "please delete the corresponding -md5.idx file in the hash folder.\n"
|
||||
+ " Exit indexing?";
|
||||
String message = NbBundle.getMessage(this.getClass(), "ModalNoButtons.exitHashDbIndexingMsg");
|
||||
|
||||
int res = JOptionPane.showConfirmDialog(this, message, "Unfinished Indexing", JOptionPane.YES_NO_OPTION);
|
||||
int res = JOptionPane.showConfirmDialog(this,
|
||||
message,
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"ModalNoButtons.dlgTitle.unfinishedIndexing"),
|
||||
JOptionPane.YES_NO_OPTION);
|
||||
if(res == JOptionPane.YES_OPTION){
|
||||
List<HashDb> remove = new ArrayList<>();
|
||||
if(this.toIndex == null){
|
||||
@ -203,7 +206,8 @@ class ModalNoButtons extends javax.swing.JDialog implements PropertyChangeListen
|
||||
currentDb = this.toIndex.getHashSetName();
|
||||
this.CURRENTDB_LABEL.setText("(" + currentDb + ")");
|
||||
this.length = 1;
|
||||
this.CURRENTLYON_LABEL.setText("Currently indexing 1 database");
|
||||
this.CURRENTLYON_LABEL.setText(
|
||||
NbBundle.getMessage(this.getClass(), "ModalNoButtons.indexThis.currentlyIndexing1Db"));
|
||||
if (!this.toIndex.isIndexing()) {
|
||||
this.toIndex.addPropertyChangeListener(this);
|
||||
HashDbManager.getInstance().indexHashDatabase(toIndex);
|
||||
@ -219,7 +223,8 @@ class ModalNoButtons extends javax.swing.JDialog implements PropertyChangeListen
|
||||
for (HashDb db : this.unindexed) {
|
||||
currentDb = db.getHashSetName();
|
||||
this.CURRENTDB_LABEL.setText("(" + currentDb + ")");
|
||||
this.CURRENTLYON_LABEL.setText("Currently indexing 1 of " + length);
|
||||
this.CURRENTLYON_LABEL.setText(
|
||||
NbBundle.getMessage(this.getClass(), "ModalNoButtons.indexThese.currentlyIndexing1OfNDbs", length));
|
||||
if (!db.isIndexing()) {
|
||||
db.addPropertyChangeListener(this);
|
||||
HashDbManager.getInstance().indexHashDatabase(db);
|
||||
@ -247,7 +252,9 @@ class ModalNoButtons extends javax.swing.JDialog implements PropertyChangeListen
|
||||
this.dispose();
|
||||
} else {
|
||||
currentcount++;
|
||||
this.CURRENTLYON_LABEL.setText("Currently indexing " + currentcount + " of " + length);
|
||||
this.CURRENTLYON_LABEL.setText(
|
||||
NbBundle.getMessage(this.getClass(), "ModalNoButtons.propChg.currentlyIndexingXofN",
|
||||
currentcount, length));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -21,9 +21,11 @@ package org.sleuthkit.autopsy.keywordsearch;
|
||||
import java.beans.PropertyChangeEvent;
|
||||
import java.beans.PropertyChangeListener;
|
||||
import java.util.List;
|
||||
|
||||
import org.sleuthkit.autopsy.ingest.IngestManager;
|
||||
import org.sleuthkit.autopsy.keywordsearch.KeywordSearch.QueryType;
|
||||
import org.sleuthkit.autopsy.keywordsearch.KeywordSearchQueryManager.Presentation;
|
||||
import org.openide.util.NbBundle;
|
||||
|
||||
/**
|
||||
* Common functionality among keyword search performers / widgets.
|
||||
@ -31,6 +33,7 @@ import org.sleuthkit.autopsy.keywordsearch.KeywordSearchQueryManager.Presentatio
|
||||
*/
|
||||
abstract class AbstractKeywordSearchPerformer extends javax.swing.JPanel implements KeywordSearchPerformerInterface {
|
||||
|
||||
private final String keywordSearchErrorDialogHeader = org.openide.util.NbBundle.getMessage(this.getClass(), "AbstractKeywordSearchPerformer.search.dialogErrorHeader");
|
||||
protected int filesIndexed;
|
||||
|
||||
AbstractKeywordSearchPerformer() {
|
||||
@ -58,7 +61,7 @@ abstract class AbstractKeywordSearchPerformer extends javax.swing.JPanel impleme
|
||||
* Hook to run after indexed files number changed
|
||||
*/
|
||||
protected abstract void postFilesIndexedChange();
|
||||
|
||||
|
||||
@Override
|
||||
public abstract boolean isMultiwordQuery();
|
||||
|
||||
@ -79,25 +82,23 @@ abstract class AbstractKeywordSearchPerformer extends javax.swing.JPanel impleme
|
||||
@Override
|
||||
public void search() {
|
||||
boolean isRunning = IngestManager.getDefault().isModuleRunning(KeywordSearchIngestModule.getDefault());
|
||||
|
||||
|
||||
if (filesIndexed == 0) {
|
||||
if (isRunning) {
|
||||
KeywordSearchUtil.displayDialog("Keyword Search Error", "<html>No files are in index yet. <br />"
|
||||
+ "Try again later. Index is updated every " + KeywordSearchSettings.getUpdateFrequency().getTime() + " minutes.</html>", KeywordSearchUtil.DIALOG_MESSAGE_TYPE.ERROR);
|
||||
}
|
||||
else {
|
||||
KeywordSearchUtil.displayDialog("Keyword Search Error", "<html>No files were indexed.<br />"
|
||||
+ "Re-ingest the image with the Keyword Search Module enabled. </html>", KeywordSearchUtil.DIALOG_MESSAGE_TYPE.ERROR);
|
||||
KeywordSearchUtil.displayDialog(keywordSearchErrorDialogHeader, NbBundle.getMessage(this.getClass(),
|
||||
"AbstractKeywordSearchPerformer.search.noFilesInIdxMsg",
|
||||
KeywordSearchSettings.getUpdateFrequency().getTime()), KeywordSearchUtil.DIALOG_MESSAGE_TYPE.ERROR);
|
||||
} else {
|
||||
KeywordSearchUtil.displayDialog(keywordSearchErrorDialogHeader, NbBundle.getMessage(this.getClass(),
|
||||
"AbstractKeywordSearchPerformer.search.noFilesIdxdMsg"), KeywordSearchUtil.DIALOG_MESSAGE_TYPE.ERROR);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
//check if keyword search module ingest is running (indexing, etc)
|
||||
if (isRunning) {
|
||||
if (KeywordSearchUtil.displayConfirmDialog("Keyword Search Ingest in Progress",
|
||||
"<html>Keyword Search Ingest is currently running.<br />"
|
||||
+ "Not all files have been indexed and this search might yield incomplete results.<br />"
|
||||
+ "Do you want to proceed with this search anyway?</html>", KeywordSearchUtil.DIALOG_MESSAGE_TYPE.WARN) == false) {
|
||||
if (KeywordSearchUtil.displayConfirmDialog(org.openide.util.NbBundle.getMessage(this.getClass(), "AbstractKeywordSearchPerformer.search.searchIngestInProgressTitle"),
|
||||
NbBundle.getMessage(this.getClass(), "AbstractKeywordSearchPerformer.search.ingestInProgressBody"), KeywordSearchUtil.DIALOG_MESSAGE_TYPE.WARN) == false) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -106,12 +107,13 @@ abstract class AbstractKeywordSearchPerformer extends javax.swing.JPanel impleme
|
||||
if (isMultiwordQuery()) {
|
||||
final List<Keyword> keywords = getQueryList();
|
||||
if (keywords.isEmpty()) {
|
||||
KeywordSearchUtil.displayDialog("Keyword Search Error", "Keyword list is empty, please add at least one keyword to the list", KeywordSearchUtil.DIALOG_MESSAGE_TYPE.ERROR);
|
||||
KeywordSearchUtil.displayDialog(keywordSearchErrorDialogHeader, NbBundle.getMessage(this.getClass(),
|
||||
"AbstractKeywordSearchPerformer.search.emptyKeywordErrorBody"),
|
||||
KeywordSearchUtil.DIALOG_MESSAGE_TYPE.ERROR);
|
||||
return;
|
||||
}
|
||||
man = new KeywordSearchQueryManager(keywords, Presentation.FLAT);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
QueryType queryType = null;
|
||||
if (isLuceneQuerySelected()) {
|
||||
queryType = QueryType.WORD;
|
||||
@ -120,7 +122,8 @@ abstract class AbstractKeywordSearchPerformer extends javax.swing.JPanel impleme
|
||||
}
|
||||
final String queryText = getQueryText();
|
||||
if (queryText == null || queryText.trim().equals("")) {
|
||||
KeywordSearchUtil.displayDialog("Keyword Search Error", "Please enter a keyword to search for", KeywordSearchUtil.DIALOG_MESSAGE_TYPE.ERROR);
|
||||
KeywordSearchUtil.displayDialog(keywordSearchErrorDialogHeader, NbBundle.getMessage(this.getClass(),
|
||||
"AbstractKeywordSearchPerformer.search.pleaseEnterKeywordBody"), KeywordSearchUtil.DIALOG_MESSAGE_TYPE.ERROR);
|
||||
return;
|
||||
}
|
||||
man = new KeywordSearchQueryManager(getQueryText(), queryType, Presentation.FLAT);
|
||||
@ -129,7 +132,8 @@ abstract class AbstractKeywordSearchPerformer extends javax.swing.JPanel impleme
|
||||
if (man.validate()) {
|
||||
man.execute();
|
||||
} else {
|
||||
KeywordSearchUtil.displayDialog("Keyword Search Error", "Invalid query syntax.", KeywordSearchUtil.DIALOG_MESSAGE_TYPE.ERROR);
|
||||
KeywordSearchUtil.displayDialog(keywordSearchErrorDialogHeader, NbBundle.getMessage(this.getClass(),
|
||||
"AbstractKeywordSearchPerformer.search.invalidSyntaxHeader"), KeywordSearchUtil.DIALOG_MESSAGE_TYPE.ERROR);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -5,6 +5,8 @@ OpenIDE-Module-Long-Description=\
|
||||
It then periodically runs the search on the indexed files using one or more keyword lists (containing pure words and/or regular expressions) and posts results.\n\n\
|
||||
The module also contains additional tools integrated in the main GUI, such as keyword list configuration, keyword seach bar in the top-right corner, extracted text viewer and search results viewer showing highlighted keywords found.
|
||||
OpenIDE-Module-Name=KeywordSearch
|
||||
OptionsCategory_Name_KeywordSearchOptions=Keyword Search
|
||||
OptionsCategory_Keywords_KeywordSearchOptions=Keyword Search
|
||||
ListBundleName=Keyword Lists
|
||||
ListBundleConfig=Keyword List Configuration
|
||||
IndexProgressPanel.statusText.text=Status text
|
||||
@ -88,3 +90,97 @@ KeywordSearchListsViewerPanel.manageListsButton.toolTipText=Manage keyword lists
|
||||
KeywordSearchConfigurationPanel2.frequencyLabel.text=Results update frequency during ingest:
|
||||
KeywordSearchConfigurationPanel2.timeRadioButton4.text_1=1 minute (faster feedback, longest ingest)
|
||||
KeywordSearchConfigurationPanel2.timeRadioButton4.toolTipText=1 minute (overall ingest time will be longest)
|
||||
KeywordSearchConfigurationPanel2.showSnippetsCB.text=Show Keyword Preview in Keyword Search Results (will result in longer search times)
|
||||
AbstractKeywordSearchPerformer.search.dialogErrorHeader=Keyword Search Error
|
||||
AbstractKeywordSearchPerformer.search.invalidSyntaxHeader=Invalid query syntax.
|
||||
AbstractKeywordSearchPerformer.search.searchIngestInProgressTitle=Keyword Search Ingest in Progress
|
||||
AbstractKeywordSearchPerformer.search.ingestInProgressBody=<html>Keyword Search Ingest is currently running.<br />Not all files have been indexed and this search might yield incomplete results.<br />Do you want to proceed with this search anyway?</html>
|
||||
AbstractKeywordSearchPerformer.search.emptyKeywordErrorBody=Keyword list is empty, please add at least one keyword to the list
|
||||
AbstractKeywordSearchPerformer.search.pleaseEnterKeywordBody=Please enter a keyword to search for
|
||||
AbstractKeywordSearchPerformer.search.noFilesInIdxMsg=<html>No files are in index yet. <br />Try again later. Index is updated every {0} minutes.</html>
|
||||
AbstractKeywordSearchPerformer.search.noFilesIdxdMsg=<html>No files were indexed.<br />Re-ingest the image with the Keyword Search Module enabled. </html>
|
||||
ExtractedContentPanel.setMarkup.panelTxt=<span style\='font-style\:italic'>Loading text... Please wait</span>
|
||||
ExtractedContentViewer.toString=Extracted Text
|
||||
ExtractedContentViewer.toolTip=Displays extracted text from files and keyword-search results. Requires Keyword Search ingest to be run on a file to activate this viewer.
|
||||
ExtractedContentViewer.getTitle=Text
|
||||
ExtractedContentViewer.getSolrContent.knownFileMsg=<p style\=''font-style\:italic''>{0} is a known file (based on MD5 hash) and does not have text in the index.</p>
|
||||
ExtractedContentViewer.getSolrContent.noTxtYetMsg=<p style\=''font-style\:italic''>{0} does not have text in the index.<br/>It may have no text, not been analyzed yet, or keyword search was not enabled during ingest.</p>
|
||||
ExtractedContentViewer.getSolrContent.txtBodyItal=<span style\=''font-style\:italic''>{0}</span>
|
||||
HighlightedMatchesSource.getMarkup.noMatchMsg=<html><pre><span style\\\\\='background\\\\\:yellow'>There were no keyword hits on this page. <br />Keyword could have been in file name. <br />Advance to another page for hits or choose Extracted Text to view original text..</span></pre></html>
|
||||
HighlightedMatchesSource.toString=Search Results
|
||||
Installer.reportPortError=Indexing server port {0} is not available. Check if your security software does not block {1} and consider changing {2} in {3} property file in the application user folder. Then try rebooting your system if another process was causing the conflict.
|
||||
Installer.reportStopPortError=Indexing server stop port {0} is not available. Consider changing {1} in {2} property file in the application user folder.
|
||||
Installer.errorInitKsmMsg=Error initializing Keyword Search module
|
||||
Installer.reportInitError=Indexing server port {0} is not available. Check if your security software does not block {1} and consider changing {2} in {3} property file in the application user folder. Then try rebooting your system if another process was causing the conflict.
|
||||
KeywordSearchConfigurationPanel.customizeComponents.title=Advanced Keyword Search Configuration
|
||||
KeywordSearchConfigurationPanel.customizeComponents.listTabTitle=Lists
|
||||
KeywordSearchConfigurationPanel.customizeComponents.stringExtTitle=String Extraction
|
||||
KeywordSearchConfigurationPanel.customizeComponents.genTabTitle=General
|
||||
KeywordSearchConfigurationPanel.customizeComponents.listLabToolTip=List configuration
|
||||
KeywordSearchConfigurationPanel.customizeComponents.stringExtToolTip=String extraction configuration for Keyword Search Ingest
|
||||
KeywordSearchConfigurationPanel.customizeComponents.genTabToolTip=General configuration
|
||||
KeywordSearchConfigurationPanel1.customizeComponents.title=Delete a keyword list
|
||||
KeywordSearchConfigurationPanel1.customizeComponents.body=This will delete the keyword list globally (for all Cases). Do you want to proceed with the deletion?
|
||||
KeywordSearchConfigurationPanel1.customizeComponents.keywordListEmptyErr=Keyword List is empty and cannot be saved
|
||||
KeywordSearch.newKwListTitle=New keyword list name\:
|
||||
KeywordSearchConfigurationPanel1.customizeComponents.noOwDefaultMsg=Cannot overwrite default list
|
||||
KeywordSearchConfigurationPanel1.customizeComponents.kwListExistMsg=Keyword List <{0}> already exists, do you want to replace it?
|
||||
KeywordSearchConfigurationPanel1.customizeComponents.kwListSavedMsg=Keyword List <{0}> saved
|
||||
KeywordSearchEditListPanel.customizeComponents.kwReToolTip=Keyword is a regular expression
|
||||
KeywordSearchEditListPanel.customizeComponents.addWordToolTip=Add a new word to the keyword search list
|
||||
KeywordSearchEditListPanel.customizeComponents.enterNewWordToolTip=Enter a new word or regex to search
|
||||
KeywordSearchEditListPanel.customizeComponents.exportToFile=Export the current keyword list to a file
|
||||
KeywordSearchEditListPanel.customizeComponents.saveCurrentWIthNewNameToolTip=Save the current keyword list with a new name
|
||||
KeywordSearchEditListPanel.customizeComponents.removeSelectedMsg=Remove selected keyword(s) from the list
|
||||
KeywordSearchEditListPanel.newKwTitle=New Keyword Entry
|
||||
KeywordSearchEditListPanel.addWordButtonAction.kwAlreadyExistsMsg=Keyword already exists in the list.
|
||||
KeywordSearchEditListPanel.invalidKwMsg=Invalid keyword pattern. Use words or a correct regex pattern.
|
||||
KeywordSearchEditListPanel.removeKwMsg=Removing a keyword
|
||||
KeywordSearchEditListPanel.deleteWordButtonActionPerformed.delConfirmMsg=This will remove a keyword from the list globally (for all Cases). Do you want to proceed?
|
||||
KeywordSearchEditListPanel.exportButtonActionPerformed.fileFilterLabel=Keyword List XML file
|
||||
KeywordSearchEditListPanel.exportButtonActionPerformed.fileExistPrompt=File {0} exists, overwrite?
|
||||
KeywordSearchEditListPanel.exportButtonActionPerformed.kwListExportedMsg=Keyword lists exported
|
||||
KeywordSearchEditListPanel.kwColName=Keyword
|
||||
KeywordSearchEditListPanel.exportButtonActionPerformed.regExColName=RegEx
|
||||
KeywordSearchFilterNode.getFileActions.openExternViewActLbl=Open in External Viewer
|
||||
KeywordSearchFilterNode.getFileActions.searchSameMd5=Search for files with the same MD5 hash
|
||||
KeywordSearchFilterNode.getFileActions.viewInNewWinActionLbl=View in New Window
|
||||
KeywordSearchIngestModule.init.badInitMsg=Keyword search server was not properly initialized, cannot run keyword search ingest.
|
||||
KeywordSearchIngestModule.init.tryStopSolrMsg={0}<br />Please try stopping old java Solr process (if it exists) and restart the application.
|
||||
KeywordSearchIngestModule.init.noKwInLstMsg=No keywords in keyword list.
|
||||
KeywordSearchIngestModule.init.onlyIdxKwSkipMsg=Only indexing will be done and and keyword search will be skipped (you can still add keyword lists using the Keyword Lists - Add to Ingest).
|
||||
KeywordSearchIngestModule.postIndexSummary.knowFileHeaderLbl=Files with known types
|
||||
KeywordSearchIngestModule.postIndexSummary.fileGenStringsHead=Files with general strings extracted
|
||||
KeywordSearchIngestModule.postIndexSummary.mdOnlyLbl=Metadata only was indexed
|
||||
KeywordSearchIngestModule.postIndexSummary.idxErrLbl=Error (indexer)
|
||||
KeywordSearchIngestModule.postIndexSummary.errTxtLbl=Error (text extraction)
|
||||
KeywordSearchIngestModule.postIndexSummary.errIoLbl=Error (I/O)
|
||||
KeywordSearchIngestModule.postIndexSummary.kwIdxResultsLbl=Keyword Indexing Results
|
||||
KeywordSearchIngestModule.postIndexSummary.kwIdxErrsTitle=Keyword Indexing Errors
|
||||
KeywordSearchIngestModule.postIndexSummary.kwIdxErrMsgFiles=Keyword index service had errors ingesting {0} files.
|
||||
KeywordSearchIngestModule.postIndexSummary.kwIdxWarnMsgTitle=Keyword Indexing Warning
|
||||
KeywordSearchIngestModule.postIndexSummary.idxErrReadFilesMsg=Keyword index service had errors reading files and extracting text. Could have been from corrupt media or files.
|
||||
KeywordSearchListsViewerPanel.initIngest.addIngestTitle=Add to Ingest
|
||||
KeywordSearchListsViewerPanel.initIngest.addIngestMsg=<html>You can select additional keyword lists<br />and enqueue them to the ongoing ingest.<br />The selected lists will be searched next time the file index is rebuilt.</html>
|
||||
KeywordSearchListsViewerPanel.initIngest.searchIngestTitle=Search
|
||||
KeywordSearchListsViewerPanel.initIngest.addIdxSearchMsg=Search indexed files for keywords in selected lists
|
||||
KeywordSearchListsViewerPanel.initIngest.ongoingIngestMsg=Files Indexed\: {0} (ingest is ongoing)
|
||||
KeywordSearchListsViewerPanel.initIngest.fileIndexCtMsg=Files Indexed\: {0}
|
||||
KeywordSearch.selectedColLbl=Selected
|
||||
KeywordSearch.nameColLbl=Name
|
||||
KeywordSearch.regExColLbl=RegEx
|
||||
KeywordSearchQueryManager.execute.exeWinTitle=Keyword search {0} - {1}
|
||||
KeywordSearch.newKeywordListMsg=New Keyword List
|
||||
KeywordSearch.importListFileDialogMsg=Error importing keyword list from file {0}
|
||||
KeywordSearch.yesOwMsg=Yes, overwrite
|
||||
KeywordSearch.noSkipMsg=No, skip
|
||||
KeywordSearch.cancelImportMsg=Cancel import
|
||||
KeywordSearch.overwriteListPrompt=Keyword list <{0}> already exists locally, overwrite?
|
||||
KeywordSearch.importOwConflict=Import list conflict
|
||||
KeywordSearch.kwListFailImportMsg=Keyword list not imported
|
||||
KeywordSearchListsManagementPanel.fileExtensionFilterLbl=Keyword List File
|
||||
KeywordSearch.listImportFeatureTitle=Keyword List Import
|
||||
KeywordSearchIngestModule.hashDbModuleName=Hash Lookup
|
||||
KeywordSearchIngestModule.moduleName=Keyword Search
|
||||
KeywordSearchIngestModule.moduleDescription=Performs file indexing and periodic search using keywords and regular expressions in lists.
|
||||
|
||||
|
@ -0,0 +1,166 @@
|
||||
OpenIDE-Module-Display-Category=\u30E2\u30B8\u30E5\u30FC\u30EB\u633F\u5165
|
||||
OpenIDE-Module-Long-Description=\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u30E2\u30B8\u30E5\u30FC\u30EB\u633F\u5165\n\n\
|
||||
\u633F\u5165\u6642\u306E\u30C7\u30A3\u30B9\u30AF\u30A4\u30E1\u30FC\u30B8\u306B\u3042\u308B\u30D5\u30A1\u30A4\u30EB\u3092\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3057\u307E\u3059\u3002\
|
||||
\u305D\u3057\u3066\u3001\u4E00\u3064\u4EE5\u4E0A\u306E\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8\uFF08\u5358\u8A9E\u3084\u4E00\u822C\u7684\u306A\u8868\u73FE\u3092\u542B\u3080\uFF09\u3092\u5229\u7528\u3057\u3001\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\u3092\u5B9A\u671F\u7684\u306B\u691C\u7D22\u3057\u3001\u7D50\u679C\u3092\u8868\u793A\u3057\u307E\u3059\u3002\n\n\
|
||||
\u3053\u306E\u30E2\u30B8\u30E5\u30FC\u30EB\u306B\u306F\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8\u8A2D\u5B9A\u3001\u53F3\u4E0A\u9685\u306E\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u30D0\u30FC\u3001\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u306E\u7D50\u679C\u3092\u30CF\u30A4\u30E9\u30A4\u30C8\u3057\u3066\u8868\u793A\u3059\u308B\u62BD\u51FA\u3055\u308C\u305F\u30C6\u30AD\u30B9\u30C8\u30D3\u30E5\u30FC\u30A2\u3068\u691C\u7D22\u7D50\u679C\u30D3\u30E5\u30FC\u30A2\u306A\u3069\u3001\u30E1\u30A4\u30F3GUI\u3068\u9023\u643A\u3059\u308B\u8FFD\u52A0\u306E\u30C4\u30FC\u30EB\u304C\u542B\u307E\u308C\u307E\u3059\u3002
|
||||
OpenIDE-Module-Name=\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22
|
||||
ListBundleName=\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8
|
||||
ListBundleConfig=\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8\u8A2D\u5B9A
|
||||
IndexProgressPanel.statusText.text=\u30B9\u30C6\u30FC\u30BF\u30B9\u30C6\u30AD\u30B9\u30C8
|
||||
IndexProgressPanel.cancelButton.text=\u30AD\u30E3\u30F3\u30BB\u30EB
|
||||
ExtractedContentPanel.hitLabel.text=\u30DA\u30FC\u30B8\u4E0A\u306E\u4E00\u81F4
|
||||
ExtractedContentPanel.hitCountLabel.text=
|
||||
ExtractedContentPanel.hitOfLabel.text=
|
||||
ExtractedContentPanel.hitTotalLabel.text=
|
||||
ExtractedContentPanel.hitButtonsLabel.text=\u4E00\u81F4
|
||||
ExtractedContentPanel.copyMenuItem.text=\u30B3\u30D4\u30FC
|
||||
ExtractedContentPanel.selectAllMenuItem.text=\u3059\u3079\u3066\u9078\u629E
|
||||
KeywordSearchEditListPanel.saveListButton.text=\u30EA\u30B9\u30C8\u3092\u30B3\u30D4\u30FC
|
||||
KeywordSearchEditListPanel.addWordButton.text=\u8FFD\u52A0
|
||||
KeywordSearchEditListPanel.chRegex.text=\u4E00\u822C\u7684\u306A\u8868\u73FE
|
||||
KeywordSearchEditListPanel.deleteWordButton.text=\u9078\u629E\u3057\u305F\u3082\u306E\u3092\u524A\u9664
|
||||
KeywordSearchEditListPanel.cutMenuItem.text=\u30AB\u30C3\u30C8
|
||||
KeywordSearchEditListPanel.selectAllMenuItem.text=\u3059\u3079\u3066\u9078\u629E
|
||||
KeywordSearchEditListPanel.pasteMenuItem.text=\u8CBC\u308A\u4ED8\u3051
|
||||
KeywordSearchEditListPanel.copyMenuItem.text=\u30B3\u30D4\u30FC
|
||||
KeywordSearchEditListPanel.exportButton.text=\u30EA\u30B9\u30C8\u3092\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8
|
||||
KeywordSearchEditListPanel.deleteListButton.text=\u30EA\u30B9\u30C8\u3092\u524A\u9664
|
||||
KeywordSearchListsManagementPanel.newListButton.text=\u65B0\u898F\u30EA\u30B9\u30C8
|
||||
KeywordSearchEditListPanel.useForIngestCheckbox.text=\u51E6\u7406\u4E2D\u306B\u4F7F\u7528
|
||||
KeywordSearchListsManagementPanel.importButton.text=\u30EA\u30B9\u30C8\u3092\u30A4\u30F3\u30DD\u30FC\u30C8
|
||||
KeywordSearchPanel.searchBox.text=\u691C\u7D22...
|
||||
KeywordSearchPanel.regExCheckboxMenuItem.text=\u4E00\u822C\u7684\u306A\u8868\u73FE\u3092\u4F7F\u7528
|
||||
KeywordSearchListsViewerPanel.searchAddButton.text=\u691C\u7D22
|
||||
KeywordSearchListsViewerPanel.manageListsButton.text=\u30EA\u30B9\u30C8\u3092\u7BA1\u7406
|
||||
KeywordSearchListsViewerPanel.ingestIndexLabel.text=\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\uFF1A
|
||||
KeywordSearchPanel.cutMenuItem.text=\u30AB\u30C3\u30C8
|
||||
KeywordSearchPanel.copyMenuItem.text=\u30B3\u30D4\u30FC
|
||||
KeywordSearchPanel.pasteMenuItem.text=\u8CBC\u308A\u4ED8\u3051
|
||||
KeywordSearchPanel.selectAllMenuItem.text=\u3059\u3079\u3066\u9078\u629E
|
||||
ExtractedContentPanel.pageButtonsLabel.text=\u30DA\u30FC\u30B8
|
||||
ExtractedContentPanel.pagesLabel.text=\u30DA\u30FC\u30B8\uFF1A
|
||||
KeywordSearchEditListPanel.ingestMessagesCheckbox.text=\u51E6\u7406\u4E2D\u306B\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u30A4\u30F3\u30DC\u30C3\u30AF\u30B9\u306B\u9001\u4FE1
|
||||
KeywordSearchEditListPanel.ingestMessagesCheckbox.toolTipText=\u3053\u306E\u30EA\u30B9\u30C8\u306E\u30AD\u30FC\u30EF\u30FC\u30C9\u304C\u691C\u7D22\u306B\u30D2\u30C3\u30C8\u3057\u305F\u5834\u5408\u3001\u51E6\u7406\u4E2D\u306B\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u30A4\u30F3\u30DC\u30C3\u30AF\u30B9\u306B\u9001\u4FE1
|
||||
KeywordSearchConfigurationPanel2.skipNSRLCheckBox.text=\u51E6\u7406\u4E2D\u306BNSRL\u306E\u30D5\u30A1\u30A4\u30EB\uFF08\u65E2\u77E5\u306E\u30D5\u30A1\u30A4\u30EB\uFF09\u3092\u30AD\u30FC\u30EF\u30FC\u30C9\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u306B\u8FFD\u52A0\u3057\u306A\u3044
|
||||
KeywordSearchConfigurationPanel2.skipNSRLCheckBox.toolTipText=Hash DB\u30B5\u30FC\u30D3\u30B9\u3092\u4E8B\u524D\u306B\u5B9F\u884C\u3059\u308B\u304B\u3001\u6B21\u56DE\u306E\u51E6\u7406\u6642\u306B\u9078\u629E\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002
|
||||
KeywordSearchConfigurationPanel2.filesIndexedLabel.text=\u30AD\u30FC\u30EF\u30FC\u30C9\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5185\u306E\u30D5\u30A1\u30A4\u30EB\uFF1A
|
||||
KeywordSearchIngestSimplePanel.languagesLabel.text=\u4E0D\u660E\u306A\u30D5\u30A1\u30A4\u30EB\u5F62\u5F0F\u304B\u3089\u306E\u30B9\u30C8\u30EA\u30F3\u30B0\u62BD\u51FA\u3092\u6709\u52B9\u306B\u3057\u305F\u30B9\u30AF\u30EA\u30D7\u30C8\uFF1A
|
||||
KeywordSearchIngestSimplePanel.languagesLabel.toolTipText=\u4E0D\u660E\u306A\u30D5\u30A1\u30A4\u30EB\u5F62\u5F0F\u304B\u3089\u306E\u30B9\u30C8\u30EA\u30F3\u30B0\u62BD\u51FA\u3092\u6709\u52B9\u306B\u3057\u305F\u30B9\u30AF\u30EA\u30D7\u30C8\u3002\u30A2\u30C9\u30D0\u30F3\u30B9\u8A2D\u5B9A\u3067\u5909\u66F4\u304C\u53EF\u80FD\u3067\u3059\u3002
|
||||
KeywordSearchConfigurationPanel3.languagesLabel.text=\u6709\u52B9\u306A\u30B9\u30AF\u30EA\u30D7\u30C8\uFF08\u8A00\u8A9E\uFF09\uFF1A
|
||||
KeywordSearchConfigurationPanel2.chunksLabel.text=\u30AD\u30FC\u30EF\u30FC\u30C9\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5185\u306E\u30C1\u30E3\u30F3\u30AF\uFF1A
|
||||
KeywordSearchConfigurationPanel3.enableUTF8Checkbox.text=UTF8\u30C6\u30AD\u30B9\u30C8\u62BD\u51FA\u306E\u6709\u52B9\u5316
|
||||
KeywordSearchConfigurationPanel3.enableUTF16Checkbox.text=UTF16LE\u3068UTF16BE\u30B9\u30C8\u30EA\u30F3\u30B0\u62BD\u51FA\u306E\u6709\u52B9\u5316
|
||||
KeywordSearchEditListPanel.keywordOptionsLabel.text=\u30AD\u30FC\u30EF\u30FC\u30C9\u30AA\u30D7\u30B7\u30E7\u30F3
|
||||
KeywordSearchEditListPanel.listOptionsLabel.text=\u30EA\u30B9\u30C8\u30AA\u30D7\u30B7\u30E7\u30F3
|
||||
KeywordSearchConfigurationPanel3.ingestSettingsLabel.text=\u4E0D\u660E\u306A\u30D5\u30A1\u30A4\u30EB\u5F62\u5F0F\u304B\u3089\u306E\u30B9\u30C8\u30EA\u30F3\u30B0\u62BD\u51FA\u306E\u51E6\u7406\u65B9\u6CD5\u306E\u8A2D\u5B9A\uFF08\u5909\u66F4\u306F\u6B21\u56DE\u306E\u51E6\u7406\u304B\u3089\u6709\u52B9\uFF09\uFF1A
|
||||
KeywordSearchConfigurationPanel2.settingsLabel.text=\u8A2D\u5B9A
|
||||
KeywordSearchConfigurationPanel2.informationLabel.text=\u30A4\u30F3\u30D5\u30A9\u30E1\u30FC\u30B7\u30E7\u30F3
|
||||
KeywordSearchListsManagementPanel.keywordListsLabel.text=\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8\uFF1A
|
||||
KeywordSearchEditListPanel.keywordsLabel.text=\u30AD\u30FC\u30EF\u30FC\u30C9\uFF1A
|
||||
KeywordSearchConfigurationPanel2.timeRadioButton1.toolTipText=\uFF12\uFF10\u5206\uFF08\u6700\u77ED\u306E\u51E6\u7406\u6642\u9593\uFF09
|
||||
KeywordSearchConfigurationPanel2.timeRadioButton1.text=\uFF12\uFF10\u5206\uFF08\u6700\u3082\u9045\u3044\u30D5\u30A3\u30FC\u30C9\u30D0\u30C3\u30AF\u3001\u6700\u77ED\u306E\u51E6\u7406\u6642\u9593\uFF09
|
||||
KeywordSearchConfigurationPanel2.timeRadioButton2.toolTipText=\uFF11\uFF10\u5206\uFF08\u30C7\u30D5\u30A9\u30EB\u30C8\u3088\u308A\u5168\u4F53\u7684\u306B\u901F\u3044\u51E6\u7406\u6642\u9593\uFF09
|
||||
KeywordSearchConfigurationPanel2.timeRadioButton2.text=\uFF11\uFF10\u5206\uFF08\u3088\u308A\u9045\u3044\u30D5\u30A3\u30FC\u30C9\u30D0\u30C3\u30AF\u3001\u3088\u308A\u901F\u3044\u51E6\u7406\u6642\u9593\uFF09
|
||||
KeywordSearchConfigurationPanel2.timeRadioButton3.toolTipText=\uFF15\u5206\uFF08\u5168\u4F53\u7684\u306A\u51E6\u7406\u6642\u9593\u304C\u9577\u304F\u306A\u308A\u307E\u3059\uFF09
|
||||
KeywordSearchConfigurationPanel2.timeRadioButton3.text=\uFF15\u5206\uFF08\u30C7\u30D5\u30A9\u30EB\u30C8\uFF09
|
||||
KeywordSearchIngestSimplePanel.encodingsLabel.text=\u30A8\u30F3\u30B3\u30FC\u30C7\u30A3\u30F3\u30B0\uFF1A
|
||||
KeywordSearchIngestSimplePanel.titleLabel.text=\u51E6\u7406\u4E2D\u306B\u6709\u52B9\u306A\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8\u3092\u9078\u629E\uFF1A
|
||||
OpenIDE-Module-Short-Description=\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u51E6\u7406\u30E2\u30B8\u30E5\u30FC\u30EB\u3001\u62BD\u51FA\u3055\u308C\u305F\u30C6\u30AD\u30B9\u30C8\u30D3\u30E5\u30FC\u30A2\u3001\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u30C4\u30FC\u30EB
|
||||
KeywordSearchListsViewerPanel.manageListsButton.toolTipText=\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8\u3001\u30EA\u30B9\u30C8\u306E\u8A2D\u5B9A\u3068\u95A2\u9023\u3059\u308B\u30AD\u30FC\u30EF\u30FC\u30C9\u306E\u7BA1\u7406\u3002\u3053\u306E\u8A2D\u5B9A\u306F\u5168\u3066\u306E\u30B1\u30FC\u30B9\u306B\u9069\u7528\u3055\u308C\u307E\u3059\u3002
|
||||
KeywordSearchConfigurationPanel2.frequencyLabel.text=\u51E6\u7406\u4E2D\u306E\u7D50\u679C\u66F4\u65B0\u306E\u983B\u5EA6\uFF1A
|
||||
KeywordSearchConfigurationPanel2.timeRadioButton4.text_1=\uFF11\u5206\uFF08\u3088\u308A\u901F\u3044\u30D5\u30A3\u30FC\u30C9\u30D0\u30C3\u30AF\u3001\u6700\u3082\u9577\u3044\u51E6\u7406\u6642\u9593\uFF09
|
||||
KeywordSearchConfigurationPanel2.timeRadioButton4.toolTipText=\uFF11\u5206\uFF08\u5168\u4F53\u7684\u306A\u51E6\u7406\u6642\u9593\u304C\u9577\u304F\u306A\u308A\u307E\u3059\uFF09
|
||||
KeywordSearchConfigurationPanel2.showSnippetsCB.text=\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u7D50\u679C\u306B\u30AD\u30FC\u30EF\u30FC\u30C9\u30D7\u30EC\u30D3\u30E5\u30FC\u3092\u8868\u793A\uFF08\u691C\u7D22\u6642\u9593\u304C\u9577\u304F\u306A\u308A\u307E\u3059\uFF09
|
||||
AbstractKeywordSearchPerformer.search.dialogErrorHeader=\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u30A8\u30E9\u30FC
|
||||
AbstractKeywordSearchPerformer.search.invalidSyntaxHeader=\u30B7\u30F3\u30BF\u30C3\u30AF\u30B9\u30A8\u30E9\u30FC
|
||||
AbstractKeywordSearchPerformer.search.searchIngestInProgressTitle=\u30AD\u30FC\u30EF\u30FC\u30C9\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3092\u5B9F\u884C\u4E2D
|
||||
AbstractKeywordSearchPerformer.search.ingestInProgressBody=<html>\u30AD\u30FC\u30EF\u30FC\u30C9\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3092\u5B9F\u884C\u4E2D<br />\u5168\u3066\u306E\u30D5\u30A1\u30A4\u30EB\u304C\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u691C\u7D22\u7D50\u679C\u304C\u4E0D\u5B8C\u5168\u306B\u306A\u308B\u5834\u5408\u304C\u3042\u308A\u307E\u3059\u3002<br />\u3053\u306E\u691C\u7D22\u3092\u5B9F\u884C\u3057\u307E\u3059\u304B\uFF1F</html>
|
||||
AbstractKeywordSearchPerformer.search.emptyKeywordErrorBody=\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8\u304C\u7A7A\u767D\u3067\u3059\u3002\u6700\u4F4E\uFF11\u3064\u30AD\u30FC\u30EF\u30FC\u30C9\u3092\u8FFD\u52A0\u3057\u3066\u4E0B\u3055\u3044\u3002
|
||||
AbstractKeywordSearchPerformer.search.pleaseEnterKeywordBody=\u691C\u7D22\u3059\u308B\u30AD\u30FC\u30EF\u30FC\u30C9\u3092\u5165\u529B\u3057\u3066\u4E0B\u3055\u3044
|
||||
AbstractKeywordSearchPerformer.search.noFilesInIdxMsg=<html>\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u306B\u307E\u3060\u30D5\u30A1\u30A4\u30EB\u304C\u3042\u308A\u307E\u305B\u3093\u3002<br />\u3057\u3070\u3089\u304F\u3057\u3066\u304B\u3089\u3001\u518D\u5EA6\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u306F\u3000{0}\u3000\u5206\u6BCE\u66F4\u65B0\u3055\u308C\u307E\u3059\u3002</html>
|
||||
AbstractKeywordSearchPerformer.search.noFilesIdxdMsg=<html>\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\u304C\u3042\u308A\u307E\u305B\u3093\u3002<br />\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u30E2\u30B8\u30E5\u30FC\u30EB\u3092\u6709\u52B9\u5316\u3057\u3066\u30A4\u30E1\u30FC\u30B8\u3092\u518D\u51E6\u7406\u3002</html>
|
||||
ExtractedContentPanel.setMarkup.panelTxt=<span style\='font-style\:italic'>\u30C6\u30AD\u30B9\u30C8\u30ED\u30FC\u30C9\u4E2D\u3002\u3057\u3070\u3089\u304F\u304A\u5F85\u3061\u304F\u3060\u3055\u3044...</span>
|
||||
ExtractedContentViewer.toString=\u62BD\u51FA\u3055\u308C\u305F\u30C6\u30AD\u30B9\u30C8
|
||||
ExtractedContentViewer.toolTip=\u30D5\u30A1\u30A4\u30EB\u3084\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u7D50\u679C\u304B\u3089\u62BD\u51FA\u3055\u308C\u305F\u30C6\u30AD\u30B9\u30C8\u3092\u8868\u793A\u3002\u3053\u306E\u30D3\u30E5\u30FC\u30A2\u3092\u30A2\u30AF\u30C6\u30A3\u30D9\u30A4\u30C8\u3059\u308B\u306B\u306F\u3001\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u51E6\u7406\u3092\u30D5\u30A1\u30A4\u30EB\u4E0A\u3067\u5B9F\u884C\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002
|
||||
ExtractedContentViewer.getTitle=\u30C6\u30AD\u30B9\u30C8
|
||||
ExtractedContentViewer.getSolrContent.knownFileMsg=<p style\=''font-style\:italic''>{0}\u306F\u65E2\u77E5\u30D5\u30A1\u30A4\u30EB\u3067\u3059\uFF08MDS\u30CF\u30C3\u30B7\u30E5\u306B\u57FA\u3065\u304F\u3068\uFF09\u3002\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u306B\u30C6\u30AD\u30B9\u30C8\u304C\u3042\u308A\u307E\u305B\u3093\u3002</p>
|
||||
ExtractedContentViewer.getSolrContent.noTxtYetMsg=<p style\=''font-style\:italic''>{0}\u306E\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u306B\u30C6\u30AD\u30B9\u30C8\u304C\u3042\u308A\u307E\u305B\u3093\u3002<br/>\u30C6\u30AD\u30B9\u30C8\u304C\u7121\u3044\u304B\u3001\u307E\u3060\u89E3\u6790\u3055\u308C\u3066\u3044\u306A\u3044\u304B\u3001\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u304C\u51E6\u7406\u4E2D\u306B\u6709\u52B9\u5316\u3055\u308C\u3066\u3044\u306A\u304B\u3063\u305F\u306E\u304B\u3082\u3057\u308C\u307E\u305B\u3093\u3002</p>
|
||||
HighlightedMatchesSource.getMarkup.noMatchMsg=<html><pre><span style\\\\\='background\\\\\:yellow'>\u3053\u306E\u30DA\u30FC\u30B8\u4E0A\u3067\u30AD\u30FC\u30EF\u30FC\u30C9\u304C\u30D2\u30C3\u30C8\u3057\u307E\u305B\u3093\u3067\u3057\u305F\u3002<br />\u30AD\u30FC\u30EF\u30FC\u30C9\u304C\u30D5\u30A1\u30A4\u30EB\u540D\u306B\u542B\u307E\u308C\u3066\u3044\u305F\u304B\u3082\u3057\u308C\u307E\u305B\u3093\u3002 <br />\u5225\u306E\u30DA\u30FC\u30B8\u306B\u79FB\u52D5\u3059\u308B\u304B\u3001\u30AA\u30EA\u30B8\u30CA\u30EB\u30C6\u30AD\u30B9\u30C8\u3092\u8868\u793A\u3059\u308B\u306E\u306B\u3001\u300C\u62BD\u51FA\u3055\u308C\u305F\u30C6\u30AD\u30B9\u30C8\u300D\u3092\u9078\u629E\u3057\u3066\u4E0B\u3055\u3044\u3002</span></pre></html>
|
||||
HighlightedMatchesSource.toString=\u691C\u7D22\u7D50\u679C
|
||||
Installer.reportPortError=\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u30B5\u30FC\u30D0\u30FC\u30DD\u30FC\u30C8 {0} \u306F\u5229\u7528\u3067\u304D\u307E\u305B\u3093\u3002\u4F7F\u7528\u3057\u3066\u3044\u308B\u30BB\u30AD\u30E5\u30EA\u30C6\u30A3\u30BD\u30D5\u30C8\u30A6\u30A7\u30A2\u304C {1} \u3092\u30D6\u30ED\u30C3\u30AF\u3057\u3066\u3044\u306A\u3044\u304B\u78BA\u8A8D\u3057\u3001\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u30E6\u30FC\u30B6\u30FC\u30D5\u30A9\u30EB\u30C0\u30FC\u5185\u306E {3} \u306E {2} \u306E\u30D7\u30ED\u30D1\u30C6\u30A3\u30D5\u30A1\u30A4\u30EB\u306E\u5909\u66F4\u3092\u691C\u8A0E\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u3082\u3057\u4ED6\u306E\u51E6\u7406\u304C\u554F\u984C\u306E\u539F\u56E0\u3067\u3042\u308C\u3070\u3001\u30B7\u30B9\u30C6\u30E0\u3092\u518D\u8D77\u52D5\u3057\u3066\u4E0B\u3055\u3044\u3002
|
||||
Installer.reportStopPortError=\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u30B5\u30FC\u30D0\u30FC\u30B9\u30C8\u30C3\u30D7\u30DD\u30FC\u30C8 {0} \u306F\u5229\u7528\u3067\u304D\u307E\u305B\u3093\u3002\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u30E6\u30FC\u30B6\u30FC\u30D5\u30A9\u30EB\u30C0\u30FC\u5185\u306E {1} \u306E {2} \u306E\u30D7\u30ED\u30D1\u30C6\u30A3\u30D5\u30A1\u30A4\u30EB\u306E\u5909\u66F4\u3092\u691C\u8A0E\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
||||
Installer.errorInitKsmMsg=\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u30E2\u30B8\u30E5\u30FC\u30EB\u306E\u8D77\u52D5\u30A8\u30E9\u30FC
|
||||
Installer.reportInitError=\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u30B5\u30FC\u30D0\u30FC\u30DD\u30FC\u30C8 {0} \u306F\u5229\u7528\u3067\u304D\u307E\u305B\u3093\u3002\u4F7F\u7528\u3057\u3066\u3044\u308B\u30BB\u30AD\u30E5\u30EA\u30C6\u30A3\u30BD\u30D5\u30C8\u30A6\u30A7\u30A2\u304C {1} \u3092\u30D6\u30ED\u30C3\u30AF\u3057\u3066\u3044\u306A\u3044\u304B\u78BA\u8A8D\u3057\u3001\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u30E6\u30FC\u30B6\u30FC\u30D5\u30A9\u30EB\u30C0\u30FC\u5185\u306E {2} \u306E {3} \u306E\u30D7\u30ED\u30D1\u30C6\u30A3\u30D5\u30A1\u30A4\u30EB\u306E\u5909\u66F4\u3092\u691C\u8A0E\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u3082\u3057\u4ED6\u306E\u51E6\u7406\u304C\u554F\u984C\u306E\u539F\u56E0\u3067\u3042\u308C\u3070\u3001\u30B7\u30B9\u30C6\u30E0\u3092\u518D\u8D77\u52D5\u3057\u3066\u4E0B\u3055\u3044\u3002
|
||||
KeywordSearchConfigurationPanel.customizeComponents.title=\u30A2\u30C9\u30D0\u30F3\u30B9\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u8A2D\u5B9A
|
||||
KeywordSearchConfigurationPanel.customizeComponents.listTabTitle=\u30EA\u30B9\u30C8
|
||||
KeywordSearchConfigurationPanel.customizeComponents.stringExtTitle=\u30B9\u30C8\u30EA\u30F3\u30B0\u62BD\u51FA
|
||||
KeywordSearchConfigurationPanel.customizeComponents.genTabTitle=\u4E00\u822C
|
||||
KeywordSearchConfigurationPanel.customizeComponents.listLabToolTip=\u30EA\u30B9\u30C8\u8A2D\u5B9A
|
||||
KeywordSearchConfigurationPanel.customizeComponents.stringExtToolTip=\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u51E6\u7406\u306E\u30B9\u30C8\u30EA\u30F3\u30B0\u62BD\u51FA\u8A2D\u5B9A
|
||||
KeywordSearchConfigurationPanel.customizeComponents.genTabToolTip=\u4E00\u822C\u8A2D\u5B9A
|
||||
KeywordSearchConfigurationPanel1.customizeComponents.title=\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8\u3092\u524A\u9664
|
||||
KeywordSearchConfigurationPanel1.customizeComponents.body=\u5168\u3066\u306E\u30B1\u30FC\u30B9\u306B\u304A\u3051\u308B\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8\u3092\u524A\u9664\u3057\u307E\u3059\u3002\u3053\u306E\u524A\u9664\u3092\u5B9F\u884C\u3057\u307E\u3059\u304B\uFF1F
|
||||
KeywordSearchConfigurationPanel1.customizeComponents.keywordListEmptyErr=\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8\u304C\u7A7A\u767D\u3067\u3059\u306E\u3067\u3001\u4FDD\u5B58\u3067\u304D\u307E\u305B\u3093
|
||||
KeywordSearch.newKwListTitle=\u65B0\u898F\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8\u540D\uFF1A
|
||||
KeywordSearchConfigurationPanel1.customizeComponents.noOwDefaultMsg=\u30C7\u30D5\u30A9\u30EB\u30C8\u30EA\u30B9\u30C8\u306F\u4E0A\u66F8\u304D\u3067\u304D\u307E\u305B\u3093
|
||||
KeywordSearchConfigurationPanel1.customizeComponents.kwListExistMsg=\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8 <{0}> \u306F\u65E2\u306B\u5B58\u5728\u3057\u307E\u3059\u3002\u4E0A\u66F8\u304D\u3057\u307E\u3059\u304B\uFF1F
|
||||
KeywordSearchConfigurationPanel1.customizeComponents.kwListSavedMsg=\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8 <{0}> \u4FDD\u5B58\u3055\u308C\u307E\u3057\u305F
|
||||
KeywordSearchEditListPanel.customizeComponents.kwReToolTip=\u30AD\u30FC\u30EF\u30FC\u30C9\u306F\u4E00\u822C\u7684\u306A\u8868\u73FE\u3067\u3059
|
||||
KeywordSearchEditListPanel.customizeComponents.addWordToolTip=\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u30EA\u30B9\u30C8\u306B\u5358\u8A9E\u3092\u8FFD\u52A0
|
||||
KeywordSearchEditListPanel.customizeComponents.enterNewWordToolTip=\u65B0\u898F\u5358\u8A9E\u3084\u4E00\u822C\u7684\u306A\u8868\u73FE\u3092\u5165\u529B
|
||||
KeywordSearchEditListPanel.customizeComponents.exportToFile=\u65E2\u5B58\u306E\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8\u3092\u30D5\u30A1\u30A4\u30EB\u306B\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8
|
||||
KeywordSearchEditListPanel.customizeComponents.saveCurrentWIthNewNameToolTip=\u65E2\u5B58\u306E\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8\u306B\u540D\u524D\u3092\u4ED8\u3051\u3066\u4FDD\u5B58
|
||||
KeywordSearchEditListPanel.customizeComponents.removeSelectedMsg=\u9078\u629E\u3057\u305F\u30AD\u30FC\u30EF\u30FC\u30C9\u3092\u30EA\u30B9\u30C8\u304B\u3089\u524A\u9664
|
||||
KeywordSearchEditListPanel.newKwTitle=\u65B0\u898F\u30AD\u30FC\u30EF\u30FC\u30C9\u30A8\u30F3\u30C8\u30EA\u30FC
|
||||
KeywordSearchEditListPanel.addWordButtonAction.kwAlreadyExistsMsg=\u30AD\u30FC\u30EF\u30FC\u30C9\u306F\u65E2\u306B\u30EA\u30B9\u30C8\u306B\u5B58\u5728\u3057\u307E\u3059\u3002
|
||||
KeywordSearchEditListPanel.invalidKwMsg=\u7121\u52B9\u306A\u30AD\u30FC\u30EF\u30FC\u30C9\u30D1\u30BF\u30FC\u30F3\u3002\u5358\u8A9E\u3082\u3057\u304F\u306F\u6B63\u3057\u3044\u4E00\u822C\u7684\u306A\u8868\u73FE\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
||||
KeywordSearchEditListPanel.removeKwMsg=\u30AD\u30FC\u30EF\u30FC\u30C9\u3092\u524A\u9664
|
||||
KeywordSearchEditListPanel.deleteWordButtonActionPerformed.delConfirmMsg=\u5168\u3066\u306E\u30B1\u30FC\u30B9\u306B\u304A\u3051\u308B\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8\u3092\u524A\u9664\u3057\u307E\u3059\u3002\u3053\u306E\u524A\u9664\u3092\u5B9F\u884C\u3057\u307E\u3059\u304B\uFF1F
|
||||
KeywordSearchEditListPanel.exportButtonActionPerformed.fileFilterLabel=\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8XML\u30D5\u30A1\u30A4\u30EB
|
||||
KeywordSearchEditListPanel.exportButtonActionPerformed.fileExistPrompt=\ {0} \u30D5\u30A1\u30A4\u30EB\u306F\u65E2\u306B\u5B58\u5728\u3057\u307E\u3059\u3002\u4E0A\u66F8\u304D\u3057\u307E\u3059\u304B\uFF1F
|
||||
KeywordSearchEditListPanel.exportButtonActionPerformed.kwListExportedMsg=\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8\u3055\u308C\u305F\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8
|
||||
KeywordSearchEditListPanel.kwColName=\u30AD\u30FC\u30EF\u30FC\u30C9
|
||||
KeywordSearchEditListPanel.exportButtonActionPerformed.regExColName=\u4E00\u822C\u7684\u306A\u8868\u73FE
|
||||
KeywordSearchFilterNode.getFileActions.openExternViewActLbl=\u5916\u90E8\u30D3\u30E5\u30FC\u30A2\u3067\u958B\u304F
|
||||
KeywordSearchFilterNode.getFileActions.searchSameMd5=\u540C\u4E00\u306EMD5\u30CF\u30C3\u30B7\u30E5\u3092\u6301\u3064\u30D5\u30A1\u30A4\u30EB\u3092\u691C\u7D22
|
||||
KeywordSearchFilterNode.getFileActions.viewInNewWinActionLbl=\u65B0\u3057\u3044\u30A6\u30A3\u30F3\u30C9\u30A6\u3067\u8868\u793A
|
||||
KeywordSearchIngestModule.init.badInitMsg=\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u30B5\u30FC\u30D0\u30FC\u304C\u6B63\u3057\u304F\u8D77\u52D5\u3057\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u51E6\u7406\u3092\u5B9F\u884C\u3067\u304D\u307E\u305B\u3093\u3002
|
||||
KeywordSearchIngestModule.init.tryStopSolrMsg={0}<br />\u53E4\u3044java Solr\u51E6\u7406\u3092\u505C\u6B62\u3057\uFF08\u3082\u3057\u5B58\u5728\u3059\u308C\u3070\uFF09\u3001\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u3092\u518D\u8D77\u52D5\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
||||
KeywordSearchIngestModule.init.noKwInLstMsg=\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8\u306B\u30AD\u30FC\u30EF\u30FC\u30C9\u304C\u3042\u308A\u307E\u305B\u3093\u3002
|
||||
KeywordSearchIngestModule.init.onlyIdxKwSkipMsg=\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3060\u3051\u5B9F\u884C\u3055\u308C\u3001\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u306F\u30B9\u30AD\u30C3\u30D7\u3055\u308C\u307E\u3059\uFF08\u300C\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8 - \u51E6\u7406\u306B\u8FFD\u52A0\u300D\u3092\u4F7F\u7528\u3057\u3001\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8\u3092\u8FFD\u52A0\u3059\u308B\u306E\u306F\u53EF\u80FD\u3067\u3059
|
||||
KeywordSearchIngestModule.postIndexSummary.knowFileHeaderLbl=\u65E2\u77E5\u306E\u7A2E\u985E\u306E\u30D5\u30A1\u30A4\u30EB
|
||||
KeywordSearchIngestModule.postIndexSummary.fileGenStringsHead=\u4E00\u822C\u7684\u306A\u30B9\u30C8\u30EA\u30F3\u30B0\u304C\u62BD\u51FA\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB
|
||||
KeywordSearchIngestModule.postIndexSummary.mdOnlyLbl=\u30E1\u30BF\u30C7\u30FC\u30BF\u306E\u307F\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3055\u308C\u307E\u3057\u305F
|
||||
KeywordSearchIngestModule.postIndexSummary.idxErrLbl=\u30A8\u30E9\u30FC\uFF08\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u30A8\u30E9\u30FC\uFF09
|
||||
KeywordSearchIngestModule.postIndexSummary.errTxtLbl=\u30A8\u30E9\u30FC\uFF08\u30C6\u30AD\u30B9\u30C8\u62BD\u51FA\uFF09
|
||||
KeywordSearchIngestModule.postIndexSummary.errIoLbl=\u30A8\u30E9\u30FC\uFF08I/O\uFF09
|
||||
KeywordSearchIngestModule.postIndexSummary.kwIdxResultsLbl=\u30AD\u30FC\u30EF\u30FC\u30C9\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u7D50\u679C
|
||||
KeywordSearchIngestModule.postIndexSummary.kwIdxErrsTitle=\u30AD\u30FC\u30EF\u30FC\u30C9\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u30A8\u30E9\u30FC
|
||||
KeywordSearchIngestModule.postIndexSummary.kwIdxErrMsgFiles=\u30AD\u30FC\u30EF\u30FC\u30C9\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u30B5\u30FC\u30D3\u30B9\u4E2D\u306B {0} \u30D5\u30A1\u30A4\u30EB\u306E\u51E6\u7406\u30A8\u30E9\u30FC\u304C\u3042\u308A\u307E\u3057\u305F\u3002
|
||||
KeywordSearchIngestModule.postIndexSummary.kwIdxWarnMsgTitle=\u30AD\u30FC\u30EF\u30FC\u30C9\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u8B66\u544A
|
||||
KeywordSearchIngestModule.postIndexSummary.idxErrReadFilesMsg=\u30AD\u30FC\u30EF\u30FC\u30C9\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u30B5\u30FC\u30D3\u30B9\u4E2D\u306B\u30D5\u30A1\u30A4\u30EB\u306E\u8AAD\u307F\u8FBC\u307F\u3084\u30C6\u30AD\u30B9\u30C8\u62BD\u51FA\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u3042\u308A\u307E\u3057\u305F\u3002\u539F\u56E0\u306F\u7834\u640D\u3057\u305F\u30E1\u30C7\u30A3\u30A2\u3084\u30D5\u30A1\u30A4\u30EB\u304B\u3082\u3057\u308C\u307E\u305B\u3093\u3002
|
||||
KeywordSearchListsViewerPanel.initIngest.addIngestTitle=\u51E6\u7406\u306B\u8FFD\u52A0
|
||||
KeywordSearchListsViewerPanel.initIngest.addIngestMsg=<html>\u8FFD\u52A0\u306E\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8\u3092\u9078\u629E\u3067\u304D\u307E\u3059<br />\u305D\u3057\u3066\u5B9F\u884C\u4E2D\u306E\u51E6\u7406\u306B\u8FFD\u52A0\u3067\u304D\u307E\u3059<br />\u6B21\u56DE\u306E\u30D5\u30A1\u30A4\u30EB\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u518D\u69CB\u7BC9\u306E\u3068\u304D\u306B\u9078\u629E\u3055\u308C\u305F\u30EA\u30B9\u30C8\u3082\u691C\u7D22\u3055\u308C\u307E\u3059\u3002</html>
|
||||
KeywordSearchListsViewerPanel.initIngest.searchIngestTitle=\u691C\u7D22
|
||||
KeywordSearchListsViewerPanel.initIngest.addIdxSearchMsg=\u9078\u629E\u3057\u305F\u30EA\u30B9\u30C8\u5185\u306E\u30AD\u30FC\u30EF\u30FC\u30C9\u3092\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\u5185\u3067\u691C\u7D22
|
||||
KeywordSearchListsViewerPanel.initIngest.ongoingIngestMsg=\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\uFF1A {0} \uFF08\u51E6\u7406\u306F\u5B9F\u884C\u4E2D\uFF09
|
||||
KeywordSearchListsViewerPanel.initIngest.fileIndexCtMsg=\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\uFF1A {0}
|
||||
KeywordSearch.selectedColLbl=\u9078\u629E\u6E08\u307F
|
||||
KeywordSearch.nameColLbl=\u540D\u524D
|
||||
KeywordSearch.regExColLbl=\u4E00\u822C\u7684\u306A\u8868\u73FE
|
||||
KeywordSearchQueryManager.execute.exeWinTitle=\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22 {0} - {1}
|
||||
KeywordSearch.newKeywordListMsg=\u65B0\u898F\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8
|
||||
KeywordSearch.importListFileDialogMsg=\ {0}\u3000\u30D5\u30A1\u30A4\u30EB\u304B\u3089\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8\u3092\u30A4\u30F3\u30DD\u30FC\u30C8\u3059\u308B\u306E\u306B\u30A8\u30E9\u30FC\u304C\u3042\u308A\u307E\u3057\u305F
|
||||
KeywordSearch.yesOwMsg=\u306F\u3044\u3001\u4E0A\u66F8\u304D\u3057\u307E\u3059
|
||||
KeywordSearch.noSkipMsg=\u3044\u3044\u3048\u3001\u30B9\u30AD\u30C3\u30D7\u3057\u307E\u3059
|
||||
KeywordSearch.cancelImportMsg=\u30A4\u30F3\u30DD\u30FC\u30C8\u3092\u30AD\u30E3\u30F3\u30BB\u30EB
|
||||
KeywordSearch.overwriteListPrompt=\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8 <{0}> \u306F\u30ED\u30FC\u30AB\u30EB\u306B\u65E2\u306B\u5B58\u5728\u3057\u307E\u3059\u304C\u3001\u4E0A\u66F8\u304D\u3057\u307E\u3059\u304B\uFF1F
|
||||
KeywordSearch.importOwConflict=\u30EA\u30B9\u30C8\u30A4\u30F3\u30DD\u30FC\u30C8\u306E\u554F\u984C
|
||||
KeywordSearch.kwListFailImportMsg=\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8\u304C\u30A4\u30F3\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093
|
||||
KeywordSearchListsManagementPanel.fileExtensionFilterLbl=\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8\u30D5\u30A1\u30A4\u30EB
|
||||
KeywordSearch.listImportFeatureTitle=\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8\u30A4\u30F3\u30DD\u30FC\u30C8
|
||||
KeywordSearchIngestModule.hashDbModuleName=\u30CF\u30C3\u30B7\u30E5\u30EB\u30C3\u30AF\u30A2\u30C3\u30D7
|
||||
KeywordSearchIngestModule.moduleName=\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22
|
||||
KeywordSearchIngestModule.moduleDescription=\u30EA\u30B9\u30C8\u5185\u306E\u30AD\u30FC\u30EF\u30FC\u30C9\u304A\u3088\u3073\u4E00\u822C\u7684\u306A\u8868\u73FE\u3092\u4F7F\u3044\u3001\u30D5\u30A1\u30A4\u30EB\u306E\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u304A\u3088\u3073\u5B9A\u671F\u7684\u306A\u691C\u7D22\u3092\u5B9F\u884C\u3057\u307E\u3059\u3002
|
||||
OptionsCategory_Name_KeywordSearchOptions=\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22
|
||||
OptionsCategory_Keywords_KeywordSearchOptions=\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22
|
@ -26,6 +26,8 @@ import java.awt.event.ItemEvent;
|
||||
import java.awt.event.ItemListener;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.openide.util.NbBundle;
|
||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||
import javax.swing.JMenuItem;
|
||||
import javax.swing.JTextPane;
|
||||
@ -659,7 +661,7 @@ class ExtractedContentPanel extends javax.swing.JPanel {
|
||||
* background thread. To be invoked from GUI thread only.
|
||||
*/
|
||||
private void setMarkup(MarkupSource source) {
|
||||
setPanelText("<span style='font-style:italic'>Loading text... Please wait</span>", false);
|
||||
setPanelText(NbBundle.getMessage(this.getClass(), "ExtractedContentPanel.setMarkup.panelTxt"), false);
|
||||
new SetMarkup(source).execute();
|
||||
}
|
||||
|
||||
|
@ -27,6 +27,8 @@ import java.util.Collection;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import org.openide.util.NbBundle;
|
||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||
import org.apache.solr.client.solrj.SolrServerException;
|
||||
import org.openide.nodes.Node;
|
||||
@ -184,7 +186,7 @@ public class ExtractedContentViewer implements DataContentViewer {
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Extracted Text";
|
||||
return NbBundle.getMessage(this.getClass(), "ExtractedContentViewer.toString");
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -264,12 +266,12 @@ public class ExtractedContentViewer implements DataContentViewer {
|
||||
|
||||
@Override
|
||||
public String getTitle() {
|
||||
return "Text";
|
||||
return NbBundle.getMessage(this.getClass(), "ExtractedContentViewer.getTitle");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getToolTip() {
|
||||
return "Displays extracted text from files and keyword-search results. Requires Keyword Search ingest to be run on a file to activate this viewer. ";
|
||||
return NbBundle.getMessage(this.getClass(), "ExtractedContentViewer.toolTip");
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -424,13 +426,13 @@ public class ExtractedContentViewer implements DataContentViewer {
|
||||
//we know it's AbstractFile, but do quick check to make sure if we index other objects in future
|
||||
boolean isKnown = FileKnown.KNOWN.equals(((AbstractFile)contentObj).getKnown());
|
||||
if (isKnown && KeywordSearchSettings.getSkipKnown()) {
|
||||
msg = "<p style='font-style:italic'>" + name + " is a known file (based on MD5 hash) and does not have text in the index.</p>";
|
||||
msg = NbBundle.getMessage(this.getClass(), "ExtractedContentViewer.getSolrContent.knownFileMsg", name);
|
||||
}
|
||||
}
|
||||
if (msg == null) {
|
||||
msg = "<p style='font-style:italic'>" + name + " does not have text in the index.<br/>It may have no text, not been analyzed yet, or keyword search was not enabled during ingest.</p>";
|
||||
msg = NbBundle.getMessage(this.getClass(), "ExtractedContentViewer.getSolrContent.noTxtYetMsg", name);
|
||||
}
|
||||
String htmlMsg = "<span style='font-style:italic'>" + msg + "</span>";
|
||||
String htmlMsg = NbBundle.getMessage(this.getClass(), "ExtractedContentViewer.getSolrContent.txtBodyItal", msg);
|
||||
return htmlMsg;
|
||||
}
|
||||
|
||||
|
@ -26,6 +26,8 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.TreeSet;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import org.openide.util.NbBundle;
|
||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||
import org.apache.solr.client.solrj.SolrQuery;
|
||||
import org.apache.solr.client.solrj.SolrRequest.METHOD;
|
||||
@ -46,7 +48,7 @@ class HighlightedMatchesSource implements MarkupSource, HighlightLookup {
|
||||
private static final String HIGHLIGHT_PRE = "<span style='background:yellow'>";
|
||||
private static final String HIGHLIGHT_POST = "</span>";
|
||||
private static final String ANCHOR_PREFIX = HighlightedMatchesSource.class.getName() + "_";
|
||||
private static final String NO_MATCHES = "<html><pre><span style='background:yellow'>There were no keyword hits on this page. <br />Keyword could have been in file name. <br />Advance to another page for hits or choose Extracted Text to view original text..</span></pre></html>";
|
||||
|
||||
private Content content;
|
||||
private String keywordHitQuery;
|
||||
private Server solrServer;
|
||||
@ -364,11 +366,12 @@ class HighlightedMatchesSource implements MarkupSource, HighlightLookup {
|
||||
|
||||
Map<String, List<String>> responseHighlightID = responseHighlight.get(contentIdStr);
|
||||
if (responseHighlightID == null) {
|
||||
return NO_MATCHES;
|
||||
return NbBundle.getMessage(this.getClass(), "HighlightedMatchesSource.getMarkup.noMatchMsg");
|
||||
|
||||
}
|
||||
List<String> contentHighlights = responseHighlightID.get(highLightField);
|
||||
if (contentHighlights == null) {
|
||||
return NO_MATCHES;
|
||||
return NbBundle.getMessage(this.getClass(), "HighlightedMatchesSource.getMarkup.noMatchMsg");
|
||||
} else {
|
||||
// extracted content (minus highlight tags) is HTML-escaped
|
||||
String highlightedContent = contentHighlights.get(0).trim();
|
||||
@ -388,7 +391,7 @@ class HighlightedMatchesSource implements MarkupSource, HighlightLookup {
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Search Results";
|
||||
return NbBundle.getMessage(this.getClass(), "HighlightedMatchesSource.toString");
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -453,4 +456,4 @@ class HighlightedMatchesSource implements MarkupSource, HighlightLookup {
|
||||
public HighlightLookup createInstance(Content c, String keywordHitQuery, boolean isRegex, String originalQuery) {
|
||||
return new HighlightedMatchesSource(c, keywordHitQuery, isRegex, originalQuery);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -20,6 +20,7 @@ package org.sleuthkit.autopsy.keywordsearch;
|
||||
|
||||
import java.util.logging.Level;
|
||||
import org.openide.modules.ModuleInstall;
|
||||
import org.openide.util.NbBundle;
|
||||
import org.openide.windows.WindowManager;
|
||||
import org.sleuthkit.autopsy.casemodule.Case;
|
||||
import org.sleuthkit.autopsy.keywordsearch.Server.SolrServerNoPortException;
|
||||
@ -201,12 +202,8 @@ class Installer extends ModuleInstall {
|
||||
WindowManager.getDefault().invokeWhenUIReady(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
final String msg = "Indexing server port " + curFailPort + " is not available. "
|
||||
+ " Check if your security software does not block " + Version.getName()
|
||||
+ " and consider changing " + Server.PROPERTIES_CURRENT_SERVER_PORT + " in "
|
||||
+ Server.PROPERTIES_FILE + " property file in the application user folder."
|
||||
+ " Then try rebooting your system if another process was causing the conflict. ";
|
||||
MessageNotifyUtil.Notify.error("Error initializing Keyword Search module", msg);
|
||||
final String msg = NbBundle.getMessage(this.getClass(), "Installer.reportPortError", curFailPort, Version.getName(), Server.PROPERTIES_CURRENT_SERVER_PORT, Server.PROPERTIES_FILE);
|
||||
MessageNotifyUtil.Notify.error(NbBundle.getMessage(this.getClass(), "Installer.errorInitKsmMsg"), msg);
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -215,10 +212,8 @@ class Installer extends ModuleInstall {
|
||||
WindowManager.getDefault().invokeWhenUIReady(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
final String msg = "Indexing server stop port " + curFailPort + " is not available. "
|
||||
+ " Consider changing " + Server.PROPERTIES_CURRENT_STOP_PORT + " in "
|
||||
+ Server.PROPERTIES_FILE + " property file in the application user folder.";
|
||||
MessageNotifyUtil.Notify.error("Error initializing Keyword Search module", msg);
|
||||
final String msg = NbBundle.getMessage(this.getClass(), "Installer.reportStopPortError", curFailPort, Server.PROPERTIES_CURRENT_STOP_PORT, Server.PROPERTIES_FILE);
|
||||
MessageNotifyUtil.Notify.error(NbBundle.getMessage(this.getClass(), "Installer.errorInitKsmMsg"), msg);
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -227,14 +222,10 @@ class Installer extends ModuleInstall {
|
||||
WindowManager.getDefault().invokeWhenUIReady(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
final String msg = "Indexing server port " + KeywordSearch.getServer().getCurrentSolrServerPort() + " is not available. "
|
||||
+ " Check if your security software does not block " + Version.getName()
|
||||
+ " and consider changing " + Server.PROPERTIES_CURRENT_SERVER_PORT + " in "
|
||||
+ Server.PROPERTIES_FILE + " property file in the application user folder."
|
||||
+ " Then try rebooting your system if another process was causing the conflict. ";
|
||||
MessageNotifyUtil.Notify.error("Error initializing Keyword Search module", msg);
|
||||
final String msg = NbBundle.getMessage(this.getClass(), "Installer.reportInitError", KeywordSearch.getServer().getCurrentSolrServerPort(), Version.getName(), Server.PROPERTIES_CURRENT_SERVER_PORT, Server.PROPERTIES_FILE);
|
||||
MessageNotifyUtil.Notify.error(NbBundle.getMessage(this.getClass(), "Installer.errorInitKsmMsg"), msg);
|
||||
|
||||
MessageNotifyUtil.Notify.error("Error initializing Keyword Search module", msg);
|
||||
MessageNotifyUtil.Notify.error(NbBundle.getMessage(this.getClass(), "Installer.errorInitKsmMsg"), msg);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -19,6 +19,7 @@
|
||||
|
||||
package org.sleuthkit.autopsy.keywordsearch;
|
||||
|
||||
import org.openide.util.NbBundle;
|
||||
import org.sleuthkit.autopsy.corecomponents.OptionsPanel;
|
||||
|
||||
/**
|
||||
@ -36,13 +37,16 @@ public final class KeywordSearchConfigurationPanel extends javax.swing.JPanel im
|
||||
}
|
||||
|
||||
private void customizeComponents() {
|
||||
setName("Advanced Keyword Search Configuration");
|
||||
setName(NbBundle.getMessage(this.getClass(), "KeywordSearchConfigurationPanel.customizeComponents.title"));
|
||||
listsPanel = new KeywordSearchConfigurationPanel1();
|
||||
languagesPanel = new KeywordSearchConfigurationPanel3();
|
||||
generalPanel = new KeywordSearchConfigurationPanel2();
|
||||
tabbedPane.insertTab("Lists", null, listsPanel, "List configuration", 0);
|
||||
tabbedPane.insertTab("String Extraction", null, languagesPanel, "String extraction configuration for Keyword Search Ingest", 1);
|
||||
tabbedPane.insertTab("General", null, generalPanel, "General configuration", 2);
|
||||
tabbedPane.insertTab(NbBundle.getMessage(this.getClass(), "KeywordSearchConfigurationPanel.customizeComponents.listTabTitle"), null,
|
||||
listsPanel, NbBundle.getMessage(this.getClass(), "KeywordSearchConfigurationPanel.customizeComponents.listLabToolTip"), 0);
|
||||
tabbedPane.insertTab(NbBundle.getMessage(this.getClass(), "KeywordSearchConfigurationPanel.customizeComponents.stringExtTitle"), null,
|
||||
languagesPanel, NbBundle.getMessage(this.getClass(), "KeywordSearchConfigurationPanel.customizeComponents.stringExtToolTip"), 1);
|
||||
tabbedPane.insertTab(NbBundle.getMessage(this.getClass(), "KeywordSearchConfigurationPanel.customizeComponents.genTabTitle"), null,
|
||||
generalPanel, NbBundle.getMessage(this.getClass(), "KeywordSearchConfigurationPanel.customizeComponents.genTabToolTip"), 2);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -28,9 +28,10 @@ import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.util.List;
|
||||
import javax.swing.JOptionPane;
|
||||
|
||||
import org.openide.util.NbBundle;
|
||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||
import org.sleuthkit.autopsy.corecomponents.OptionsPanel;
|
||||
import org.sleuthkit.autopsy.ingest.IngestManager;
|
||||
|
||||
/**
|
||||
* Panel containing all other Keyword search Options panels.
|
||||
@ -59,9 +60,8 @@ class KeywordSearchConfigurationPanel1 extends javax.swing.JPanel implements Opt
|
||||
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
if (KeywordSearchUtil.displayConfirmDialog("Delete a keyword list"
|
||||
, "This will delete the keyword list globally (for all Cases). "
|
||||
+ "Do you want to proceed with the deletion? "
|
||||
if (KeywordSearchUtil.displayConfirmDialog(NbBundle.getMessage(this.getClass(), "KeywordSearchConfigurationPanel1.customizeComponents.title")
|
||||
, NbBundle.getMessage(this.getClass(), "KeywordSearchConfigurationPanel1.customizeComponents.body" )
|
||||
, KeywordSearchUtil.DIALOG_MESSAGE_TYPE.WARN) ) {
|
||||
|
||||
KeywordSearchListsXML deleter = KeywordSearchListsXML.getCurrent();
|
||||
@ -84,13 +84,14 @@ class KeywordSearchConfigurationPanel1 extends javax.swing.JPanel implements Opt
|
||||
|
||||
List<Keyword> keywords = currentKeywordList.getKeywords();
|
||||
if (keywords.isEmpty()) {
|
||||
KeywordSearchUtil.displayDialog(FEATURE_NAME, "Keyword List is empty and cannot be saved", KeywordSearchUtil.DIALOG_MESSAGE_TYPE.INFO);
|
||||
KeywordSearchUtil.displayDialog(FEATURE_NAME, NbBundle.getMessage(this.getClass(), "KeywordSearchConfigurationPanel1.customizeComponents.keywordListEmptyErr"),
|
||||
KeywordSearchUtil.DIALOG_MESSAGE_TYPE.INFO);
|
||||
return;
|
||||
}
|
||||
|
||||
String listName = (String) JOptionPane.showInputDialog(
|
||||
null,
|
||||
"New keyword list name:",
|
||||
NbBundle.getMessage(this.getClass(), "KeywordSearch.newKwListTitle"),
|
||||
FEATURE_NAME,
|
||||
JOptionPane.PLAIN_MESSAGE,
|
||||
null,
|
||||
@ -101,12 +102,12 @@ class KeywordSearchConfigurationPanel1 extends javax.swing.JPanel implements Opt
|
||||
}
|
||||
|
||||
if (writer.listExists(listName) && writer.getList(listName).isLocked()) {
|
||||
KeywordSearchUtil.displayDialog(FEATURE_NAME, "Cannot overwrite default list", KeywordSearchUtil.DIALOG_MESSAGE_TYPE.WARN);
|
||||
KeywordSearchUtil.displayDialog(FEATURE_NAME, NbBundle.getMessage(this.getClass(), "KeywordSearchConfigurationPanel1.customizeComponents.noOwDefaultMsg"), KeywordSearchUtil.DIALOG_MESSAGE_TYPE.WARN);
|
||||
return;
|
||||
}
|
||||
boolean shouldAdd = false;
|
||||
if (writer.listExists(listName)) {
|
||||
boolean replace = KeywordSearchUtil.displayConfirmDialog(FEATURE_NAME, "Keyword List <" + listName + "> already exists, do you want to replace it?",
|
||||
boolean replace = KeywordSearchUtil.displayConfirmDialog(FEATURE_NAME, NbBundle.getMessage(this.getClass(), "KeywordSearchConfigurationPanel1.customizeComponents.kwListExistMsg", listName),
|
||||
KeywordSearchUtil.DIALOG_MESSAGE_TYPE.WARN);
|
||||
if (replace) {
|
||||
shouldAdd = true;
|
||||
@ -118,7 +119,7 @@ class KeywordSearchConfigurationPanel1 extends javax.swing.JPanel implements Opt
|
||||
|
||||
if (shouldAdd) {
|
||||
writer.addList(listName, keywords);
|
||||
KeywordSearchUtil.displayDialog(FEATURE_NAME, "Keyword List <" + listName + "> saved", KeywordSearchUtil.DIALOG_MESSAGE_TYPE.INFO);
|
||||
KeywordSearchUtil.displayDialog(FEATURE_NAME, NbBundle.getMessage(this.getClass(), "KeywordSearchConfigurationPanel1.customizeComponents.kwListSavedMsg", listName), KeywordSearchUtil.DIALOG_MESSAGE_TYPE.INFO);
|
||||
}
|
||||
|
||||
//currentKeywordList = writer.getList(listName);
|
||||
|
@ -30,6 +30,8 @@ import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import org.openide.util.NbBundle;
|
||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.regex.PatternSyntaxException;
|
||||
@ -71,12 +73,12 @@ class KeywordSearchEditListPanel extends javax.swing.JPanel implements ListSelec
|
||||
|
||||
|
||||
private void customizeComponents() {
|
||||
chRegex.setToolTipText("Keyword is a regular expression");
|
||||
addWordButton.setToolTipText(("Add a new word to the keyword search list"));
|
||||
addWordField.setToolTipText("Enter a new word or regex to search");
|
||||
exportButton.setToolTipText("Export the current keyword list to a file");
|
||||
saveListButton.setToolTipText("Save the current keyword list with a new name");
|
||||
deleteWordButton.setToolTipText("Remove selected keyword(s) from the list");
|
||||
chRegex.setToolTipText(NbBundle.getMessage(this.getClass(), "KeywordSearchEditListPanel.customizeComponents.kwReToolTip"));
|
||||
addWordButton.setToolTipText((NbBundle.getMessage(this.getClass(), "KeywordSearchEditListPanel.customizeComponents.addWordToolTip")));
|
||||
addWordField.setToolTipText(NbBundle.getMessage(this.getClass(), "KeywordSearchEditListPanel.customizeComponents.enterNewWordToolTip"));
|
||||
exportButton.setToolTipText(NbBundle.getMessage(this.getClass(), "KeywordSearchEditListPanel.customizeComponents.exportToFile"));
|
||||
saveListButton.setToolTipText(NbBundle.getMessage(this.getClass(), "KeywordSearchEditListPanel.customizeComponents.saveCurrentWIthNewNameToolTip"));
|
||||
deleteWordButton.setToolTipText(NbBundle.getMessage(this.getClass(), "KeywordSearchEditListPanel.customizeComponents.removeSelectedMsg"));
|
||||
|
||||
//keywordTable.setAutoscrolls(true);
|
||||
//keywordTable.setTableHeader(null);
|
||||
@ -489,7 +491,8 @@ class KeywordSearchEditListPanel extends javax.swing.JPanel implements ListSelec
|
||||
if (newWord.equals("")) {
|
||||
return;
|
||||
} else if (currentKeywordList.hasKeyword(keyword)) {
|
||||
KeywordSearchUtil.displayDialog("New Keyword Entry", "Keyword already exists in the list.", KeywordSearchUtil.DIALOG_MESSAGE_TYPE.INFO);
|
||||
KeywordSearchUtil.displayDialog(NbBundle.getMessage(this.getClass(), "KeywordSearchEditListPanel.newKwTitle"),
|
||||
NbBundle.getMessage(this.getClass(), "KeywordSearchEditListPanel.addWordButtonAction.kwAlreadyExistsMsg"), KeywordSearchUtil.DIALOG_MESSAGE_TYPE.INFO);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -504,7 +507,8 @@ class KeywordSearchEditListPanel extends javax.swing.JPanel implements ListSelec
|
||||
valid = false;
|
||||
}
|
||||
if (!valid) {
|
||||
KeywordSearchUtil.displayDialog("New Keyword Entry", "Invalid keyword pattern. Use words or a correct regex pattern.", KeywordSearchUtil.DIALOG_MESSAGE_TYPE.ERROR);
|
||||
KeywordSearchUtil.displayDialog(NbBundle.getMessage(this.getClass(), "KeywordSearchEditListPanel.newKwTitle"),
|
||||
NbBundle.getMessage(this.getClass(), "KeywordSearchEditListPanel.invalidKwMsg"), KeywordSearchUtil.DIALOG_MESSAGE_TYPE.ERROR);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -518,9 +522,8 @@ class KeywordSearchEditListPanel extends javax.swing.JPanel implements ListSelec
|
||||
}//GEN-LAST:event_addWordButtonActionPerformed
|
||||
|
||||
private void deleteWordButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteWordButtonActionPerformed
|
||||
if (KeywordSearchUtil.displayConfirmDialog("Removing a keyword"
|
||||
, "This will remove a keyword from the list globally (for all Cases). "
|
||||
+ "Do you want to proceed? "
|
||||
if (KeywordSearchUtil.displayConfirmDialog(NbBundle.getMessage(this.getClass(), "KeywordSearchEditListPanel.removeKwMsg")
|
||||
, NbBundle.getMessage(this.getClass(), "KeywordSearchEditListPanel.deleteWordButtonActionPerformed.delConfirmMsg")
|
||||
, KeywordSearchUtil.DIALOG_MESSAGE_TYPE.WARN) ) {
|
||||
|
||||
tableModel.deleteSelected(keywordTable.getSelectedRows());
|
||||
@ -540,7 +543,7 @@ class KeywordSearchEditListPanel extends javax.swing.JPanel implements ListSelec
|
||||
JFileChooser chooser = new JFileChooser();
|
||||
final String EXTENSION = "xml";
|
||||
FileNameExtensionFilter filter = new FileNameExtensionFilter(
|
||||
"Keyword List XML file", EXTENSION);
|
||||
NbBundle.getMessage(this.getClass(), "KeywordSearchEditListPanel.exportButtonActionPerformed.fileFilterLabel"), EXTENSION);
|
||||
chooser.setFileFilter(filter);
|
||||
chooser.setSelectedFile(new File(currentKeywordList.getName()));
|
||||
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
|
||||
@ -561,7 +564,9 @@ class KeywordSearchEditListPanel extends javax.swing.JPanel implements ListSelec
|
||||
|
||||
boolean shouldWrite = true;
|
||||
if (selFile.exists()) {
|
||||
shouldWrite = KeywordSearchUtil.displayConfirmDialog(FEATURE_NAME, "File " + selFile.getName() + " exists, overwrite?", KeywordSearchUtil.DIALOG_MESSAGE_TYPE.WARN);
|
||||
shouldWrite = KeywordSearchUtil.displayConfirmDialog(FEATURE_NAME,
|
||||
NbBundle.getMessage(this.getClass(), "KeywordSearchEditListPanel.exportButtonActionPerformed.fileExistPrompt",
|
||||
selFile.getName()), KeywordSearchUtil.DIALOG_MESSAGE_TYPE.WARN);
|
||||
}
|
||||
if (!shouldWrite) {
|
||||
return;
|
||||
@ -575,7 +580,8 @@ class KeywordSearchEditListPanel extends javax.swing.JPanel implements ListSelec
|
||||
final KeywordSearchListsXML exporter = new KeywordSearchListsXML(fileAbs);
|
||||
boolean written = exporter.saveLists(toWrite);
|
||||
if (written) {
|
||||
KeywordSearchUtil.displayDialog(FEATURE_NAME, "Keyword lists exported",
|
||||
KeywordSearchUtil.displayDialog(FEATURE_NAME,
|
||||
NbBundle.getMessage(this.getClass(), "KeywordSearchEditListPanel.exportButtonActionPerformed.kwListExportedMsg"),
|
||||
KeywordSearchUtil.DIALOG_MESSAGE_TYPE.INFO);
|
||||
}
|
||||
}
|
||||
@ -689,10 +695,10 @@ private void useForIngestCheckboxActionPerformed(java.awt.event.ActionEvent evt)
|
||||
|
||||
switch (column) {
|
||||
case 0:
|
||||
colName = "Keyword";
|
||||
colName = NbBundle.getMessage(this.getClass(), "KeywordSearchEditListPanel.kwColName");
|
||||
break;
|
||||
case 1:
|
||||
colName = "RegEx";
|
||||
colName = NbBundle.getMessage(this.getClass(), "KeywordSearchEditListPanel.exportButtonActionPerformed.regExColName");
|
||||
break;
|
||||
default:
|
||||
;
|
||||
|
@ -26,6 +26,7 @@ import org.openide.nodes.Node;
|
||||
import org.openide.nodes.Node.Property;
|
||||
import org.openide.nodes.PropertySupport;
|
||||
import org.openide.nodes.Sheet;
|
||||
import org.openide.util.NbBundle;
|
||||
import org.openide.util.lookup.Lookups;
|
||||
import org.openide.util.lookup.ProxyLookup;
|
||||
import org.sleuthkit.autopsy.coreutils.ContextMenuExtensionPoint;
|
||||
@ -127,11 +128,11 @@ class KeywordSearchFilterNode extends FilterNode {
|
||||
|
||||
private List<Action> getFileActions() {
|
||||
List<Action> actions = new ArrayList<>();
|
||||
actions.add(new NewWindowViewAction("View in New Window", KeywordSearchFilterNode.this));
|
||||
actions.add(new ExternalViewerAction("Open in External Viewer", getOriginal()));
|
||||
actions.add(new NewWindowViewAction(NbBundle.getMessage(this.getClass(), "KeywordSearchFilterNode.getFileActions.viewInNewWinActionLbl"), KeywordSearchFilterNode.this));
|
||||
actions.add(new ExternalViewerAction(NbBundle.getMessage(this.getClass(), "KeywordSearchFilterNode.getFileActions.openExternViewActLbl"), getOriginal()));
|
||||
actions.add(null);
|
||||
actions.add(ExtractAction.getInstance());
|
||||
actions.add(new HashSearchAction("Search for files with the same MD5 hash", getOriginal()));
|
||||
actions.add(new HashSearchAction(NbBundle.getMessage(this.getClass(), "KeywordSearchFilterNode.getFileActions.searchSameMd5"), getOriginal()));
|
||||
actions.add(null); // creates a menu separator
|
||||
actions.add(AddContentTagAction.getInstance());
|
||||
actions.addAll(ContextMenuExtensionPoint.getActions());
|
||||
|
64
KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchIngestModule.java
Normal file → Executable file
64
KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchIngestModule.java
Normal file → Executable file
@ -33,6 +33,8 @@ import java.util.concurrent.CancellationException;
|
||||
import java.util.concurrent.locks.Lock;
|
||||
import java.util.concurrent.locks.ReentrantReadWriteLock;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import org.openide.util.NbBundle;
|
||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||
import javax.swing.SwingUtilities;
|
||||
import javax.swing.SwingWorker;
|
||||
@ -96,8 +98,10 @@ public final class KeywordSearchIngestModule extends IngestModuleAbstractFile {
|
||||
}
|
||||
};
|
||||
private static final Logger logger = Logger.getLogger(KeywordSearchIngestModule.class.getName());
|
||||
public static final String MODULE_NAME = "Keyword Search";
|
||||
public static final String MODULE_DESCRIPTION = "Performs file indexing and periodic search using keywords and regular expressions in lists.";
|
||||
public static final String MODULE_NAME = NbBundle.getMessage(KeywordSearchIngestModule.class,
|
||||
"KeywordSearchIngestModule.moduleName");
|
||||
public static final String MODULE_DESCRIPTION = NbBundle.getMessage(KeywordSearchIngestModule.class,
|
||||
"KeywordSearchIngestModule.moduleDescription");
|
||||
final public static String MODULE_VERSION = Version.getVersion();
|
||||
private static KeywordSearchIngestModule instance = null;
|
||||
private IngestServices services;
|
||||
@ -122,7 +126,8 @@ public final class KeywordSearchIngestModule extends IngestModuleAbstractFile {
|
||||
private volatile int messageID = 0;
|
||||
private boolean processedFiles;
|
||||
private volatile boolean finalSearcherDone = true; //mark as done, until it's inited
|
||||
private final String hashDBModuleName = "Hash Lookup"; //NOTE this needs to match the HashDB module getName()
|
||||
private final String hashDBModuleName = NbBundle
|
||||
.getMessage(this.getClass(), "KeywordSearchIngestModule.hashDbModuleName"); //NOTE this needs to match the HashDB module getName()
|
||||
private SleuthkitCase caseHandle = null;
|
||||
private static List<AbstractFileExtract> textExtractors;
|
||||
private static AbstractFileStringExtract stringExtractor;
|
||||
@ -352,9 +357,9 @@ public final class KeywordSearchIngestModule extends IngestModuleAbstractFile {
|
||||
final Server server = KeywordSearch.getServer();
|
||||
try {
|
||||
if (!server.isRunning()) {
|
||||
String msg = "Keyword search server was not properly initialized, cannot run keyword search ingest. ";
|
||||
String msg = NbBundle.getMessage(this.getClass(), "KeywordSearchIngestModule.init.badInitMsg");
|
||||
logger.log(Level.SEVERE, msg);
|
||||
String details = msg + "<br />Please try stopping old java Solr process (if it exists) and restart the application.";
|
||||
String details = NbBundle.getMessage(this.getClass(), "KeywordSearchIngestModule.init.tryStopSolrMsg", msg);
|
||||
services.postMessage(IngestMessage.createErrorMessage(++messageID, instance, msg, details));
|
||||
return;
|
||||
|
||||
@ -362,8 +367,8 @@ public final class KeywordSearchIngestModule extends IngestModuleAbstractFile {
|
||||
} catch (KeywordSearchModuleException ex) {
|
||||
logger.log(Level.WARNING, "Error checking if Solr server is running while initializing ingest", ex);
|
||||
//this means Solr is not properly initialized
|
||||
String msg = "Keyword search server was not properly initialized, cannot run keyword search ingest. ";
|
||||
String details = msg + "<br />Please try stopping old java Solr process (if it exists) and restart the application.";
|
||||
String msg = NbBundle.getMessage(this.getClass(), "KeywordSearchIngestModule.init.badInitMsg");
|
||||
String details = NbBundle.getMessage(this.getClass(), "KeywordSearchIngestModule.init.tryStopSolrMsg", msg);
|
||||
services.postMessage(IngestMessage.createErrorMessage(++messageID, instance, msg, details));
|
||||
return;
|
||||
}
|
||||
@ -397,7 +402,8 @@ public final class KeywordSearchIngestModule extends IngestModuleAbstractFile {
|
||||
initKeywords();
|
||||
|
||||
if (keywords.isEmpty() || keywordLists.isEmpty()) {
|
||||
services.postMessage(IngestMessage.createWarningMessage(++messageID, instance, "No keywords in keyword list.", "Only indexing will be done and and keyword search will be skipped (you can still add keyword lists using the Keyword Lists - Add to Ingest)."));
|
||||
services.postMessage(IngestMessage.createWarningMessage(++messageID, instance, NbBundle.getMessage(this.getClass(), "KeywordSearchIngestModule.init.noKwInLstMsg"),
|
||||
NbBundle.getMessage(this.getClass(), "KeywordSearchIngestModule.init.onlyIdxKwSkipMsg")));
|
||||
}
|
||||
|
||||
processedFiles = false;
|
||||
@ -540,21 +546,23 @@ public final class KeywordSearchIngestModule extends IngestModuleAbstractFile {
|
||||
}
|
||||
|
||||
StringBuilder msg = new StringBuilder();
|
||||
msg.append("<table border=0><tr><td>Files with known types</td><td>").append(text_ingested).append("</td></tr>");
|
||||
msg.append("<tr><td>Files with general strings extracted</td><td>").append(strings_ingested).append("</td></tr>");
|
||||
msg.append("<tr><td>Metadata only was indexed</td><td>").append(metadata_ingested).append("</td></tr>");
|
||||
msg.append("<tr><td>Error (indexer)</td><td>").append(error_index).append("</td></tr>");
|
||||
msg.append("<tr><td>Error (text extraction)</td><td>").append(error_text).append("</td></tr>");
|
||||
msg.append("<tr><td>Error (I/O)</td><td>").append(error_io).append("</td></tr>");
|
||||
msg.append("<table border=0><tr><td>").append(NbBundle.getMessage(this.getClass(), "KeywordSearchIngestModule.postIndexSummary.knowFileHeaderLbl")).append("</td><td>").append(text_ingested).append("</td></tr>");
|
||||
msg.append("<tr><td>").append(NbBundle.getMessage(this.getClass(), "KeywordSearchIngestModule.postIndexSummary.fileGenStringsHead")).append("</td><td>").append(strings_ingested).append("</td></tr>");
|
||||
msg.append("<tr><td>").append(NbBundle.getMessage(this.getClass(), "KeywordSearchIngestModule.postIndexSummary.mdOnlyLbl")).append("</td><td>").append(metadata_ingested).append("</td></tr>");
|
||||
msg.append("<tr><td>").append(NbBundle.getMessage(this.getClass(), "KeywordSearchIngestModule.postIndexSummary.idxErrLbl")).append("</td><td>").append(error_index).append("</td></tr>");
|
||||
msg.append("<tr><td>").append(NbBundle.getMessage(this.getClass(), "KeywordSearchIngestModule.postIndexSummary.errTxtLbl")).append("</td><td>").append(error_text).append("</td></tr>");
|
||||
msg.append("<tr><td>").append(NbBundle.getMessage(this.getClass(), "KeywordSearchIngestModule.postIndexSummary.errIoLbl")).append("</td><td>").append(error_io).append("</td></tr>");
|
||||
msg.append("</table>");
|
||||
String indexStats = msg.toString();
|
||||
logger.log(Level.INFO, "Keyword Indexing Completed: " + indexStats);
|
||||
services.postMessage(IngestMessage.createMessage(++messageID, MessageType.INFO, this, "Keyword Indexing Results", indexStats));
|
||||
services.postMessage(IngestMessage.createMessage(++messageID, MessageType.INFO, this, NbBundle.getMessage(this.getClass(), "KeywordSearchIngestModule.postIndexSummary.kwIdxResultsLbl"), indexStats));
|
||||
if (error_index > 0) {
|
||||
MessageNotifyUtil.Notify.error("Keyword Indexing Errors", "Keyword index service had errors ingesting " + error_index + " files.");
|
||||
MessageNotifyUtil.Notify.error(NbBundle.getMessage(this.getClass(), "KeywordSearchIngestModule.postIndexSummary.kwIdxErrsTitle"),
|
||||
NbBundle.getMessage(this.getClass(), "KeywordSearchIngestModule.postIndexSummary.kwIdxErrMsgFiles", error_index));
|
||||
}
|
||||
else if (error_io + error_text > 0) {
|
||||
MessageNotifyUtil.Notify.warn("Keyword Indexing Warning", "Keyword index service had errors reading files and extracting text. Could have been from corrupt media or files.");
|
||||
MessageNotifyUtil.Notify.warn(NbBundle.getMessage(this.getClass(), "KeywordSearchIngestModule.postIndexSummary.kwIdxWarnMsgTitle"),
|
||||
NbBundle.getMessage(this.getClass(), "KeywordSearchIngestModule.postIndexSummary.idxErrReadFilesMsg"));
|
||||
}
|
||||
}
|
||||
|
||||
@ -901,13 +909,15 @@ public final class KeywordSearchIngestModule extends IngestModuleAbstractFile {
|
||||
logger.log(Level.INFO, "Pending start of new searcher");
|
||||
}
|
||||
|
||||
final String displayName = "Keyword Search" + (finalRun ? " - Finalizing" : "");
|
||||
progressGroup = AggregateProgressFactory.createSystemHandle(displayName + (" (Pending)"), null, new Cancellable() {
|
||||
final String displayName = NbBundle.getMessage(this.getClass(), "KeywordSearchIngestModule.doInBackGround.displayName") +
|
||||
(finalRun ? (" - "+ NbBundle.getMessage(this.getClass(), "KeywordSearchIngestModule.doInBackGround.finalizeMsg")) : "");
|
||||
progressGroup = AggregateProgressFactory.createSystemHandle(displayName + (" ("+
|
||||
NbBundle.getMessage(this.getClass(), "KeywordSearchIngestModule.doInBackGround.pendingMsg") +")"), null, new Cancellable() {
|
||||
@Override
|
||||
public boolean cancel() {
|
||||
logger.log(Level.INFO, "Cancelling the searcher by user.");
|
||||
if (progressGroup != null) {
|
||||
progressGroup.setDisplayName(displayName + " (Cancelling...)");
|
||||
progressGroup.setDisplayName(displayName + " ("+ NbBundle.getMessage(this.getClass(), "KeywordSearchIngestModule.doInBackGround.cancelMsg") +"...)");
|
||||
}
|
||||
return Searcher.this.cancel(true);
|
||||
}
|
||||
@ -1069,9 +1079,9 @@ public final class KeywordSearchIngestModule extends IngestModuleAbstractFile {
|
||||
//final int hitFiles = newResults.size();
|
||||
|
||||
if (!keywordQuery.isLiteral()) {
|
||||
subjectSb.append("RegExp hit: ");
|
||||
subjectSb.append(NbBundle.getMessage(this.getClass(), "KeywordSearchIngestModule.regExpHitLbl"));
|
||||
} else {
|
||||
subjectSb.append("Keyword hit: ");
|
||||
subjectSb.append(NbBundle.getMessage(this.getClass(), "KeywordSearchIngestModule.kwHitLbl"));
|
||||
}
|
||||
//subjectSb.append("<");
|
||||
String uniqueKey = null;
|
||||
@ -1089,7 +1099,7 @@ public final class KeywordSearchIngestModule extends IngestModuleAbstractFile {
|
||||
detailsSb.append("<table border='0' cellpadding='4' width='280'>");
|
||||
//hit
|
||||
detailsSb.append("<tr>");
|
||||
detailsSb.append("<th>Keyword hit</th>");
|
||||
detailsSb.append(NbBundle.getMessage(this.getClass(), "KeywordSearchIngestModule.kwHitLThLbl"));
|
||||
detailsSb.append("<td>").append(EscapeUtil.escapeHtml(attr.getValueString())).append("</td>");
|
||||
detailsSb.append("</tr>");
|
||||
|
||||
@ -1097,7 +1107,7 @@ public final class KeywordSearchIngestModule extends IngestModuleAbstractFile {
|
||||
attr = written.getAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_KEYWORD_PREVIEW.getTypeID());
|
||||
if (attr != null) {
|
||||
detailsSb.append("<tr>");
|
||||
detailsSb.append("<th>Preview</th>");
|
||||
detailsSb.append(NbBundle.getMessage(this.getClass(), "KeywordSearchIngestModule.previewThLbl"));
|
||||
detailsSb.append("<td>").append(EscapeUtil.escapeHtml(attr.getValueString())).append("</td>");
|
||||
detailsSb.append("</tr>");
|
||||
|
||||
@ -1105,7 +1115,7 @@ public final class KeywordSearchIngestModule extends IngestModuleAbstractFile {
|
||||
|
||||
//file
|
||||
detailsSb.append("<tr>");
|
||||
detailsSb.append("<th>File</th>");
|
||||
detailsSb.append(NbBundle.getMessage(this.getClass(), "KeywordSearchIngestModule.fileThLbl"));
|
||||
detailsSb.append("<td>").append(hitFile.getParentPath()).append(hitFile.getName()).append("</td>");
|
||||
|
||||
detailsSb.append("</tr>");
|
||||
@ -1114,7 +1124,7 @@ public final class KeywordSearchIngestModule extends IngestModuleAbstractFile {
|
||||
//list
|
||||
attr = written.getAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_SET_NAME.getTypeID());
|
||||
detailsSb.append("<tr>");
|
||||
detailsSb.append("<th>List</th>");
|
||||
detailsSb.append(NbBundle.getMessage(this.getClass(), "KeywordSearchIngestModule.listThLbl"));
|
||||
detailsSb.append("<td>").append(attr.getValueString()).append("</td>");
|
||||
detailsSb.append("</tr>");
|
||||
|
||||
@ -1123,7 +1133,7 @@ public final class KeywordSearchIngestModule extends IngestModuleAbstractFile {
|
||||
attr = written.getAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_KEYWORD_REGEXP.getTypeID());
|
||||
if (attr != null) {
|
||||
detailsSb.append("<tr>");
|
||||
detailsSb.append("<th>RegEx</th>");
|
||||
detailsSb.append(NbBundle.getMessage(this.getClass(), "KeywordSearchIngestModule.regExThLbl"));
|
||||
detailsSb.append("<td>").append(attr.getValueString()).append("</td>");
|
||||
detailsSb.append("</tr>");
|
||||
|
||||
|
8
KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchListsAbstract.java
Normal file → Executable file
8
KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchListsAbstract.java
Normal file → Executable file
@ -55,7 +55,7 @@ public abstract class KeywordSearchListsAbstract {
|
||||
|
||||
/**
|
||||
* Property change event support
|
||||
* In events: For all of these enums, the old value should be null, and
|
||||
* In events: For all of these enums, the old value should be null, and
|
||||
* the new value should be the keyword list name string.
|
||||
*/
|
||||
public enum ListsEvt {
|
||||
@ -91,8 +91,10 @@ public abstract class KeywordSearchListsAbstract {
|
||||
ips.add(new Keyword("(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])", false, BlackboardAttribute.ATTRIBUTE_TYPE.TSK_IP_ADDRESS));
|
||||
//email
|
||||
List<Keyword> emails = new ArrayList<Keyword>();
|
||||
emails.add(new Keyword("(?=.{8})[a-z0-9%+_-]+(?:\\.[a-z0-9%+_-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z]{2,4}(?<!\\.txt|\\.exe|\\.dll|\\.jpg|\\.xml)", false, BlackboardAttribute.ATTRIBUTE_TYPE.TSK_EMAIL));
|
||||
//emails.add(new Keyword("[A-Z0-9._%-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}", false, BlackboardAttribute.ATTRIBUTE_TYPE.TSK_EMAIL));
|
||||
emails.add(new Keyword("(?=.{8})[a-z0-9%+_-]+(?:\\.[a-z0-9%+_-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z]{2,4}(?<!\\.txt|\\.exe|\\.dll|\\.jpg|\\.xml)",
|
||||
false, BlackboardAttribute.ATTRIBUTE_TYPE.TSK_EMAIL));
|
||||
//emails.add(new Keyword("[A-Z0-9._%-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}",
|
||||
// false, BlackboardAttribute.ATTRIBUTE_TYPE.TSK_EMAIL));
|
||||
//URL
|
||||
List<Keyword> urls = new ArrayList<Keyword>();
|
||||
//urls.add(new Keyword("http://|https://|^www\\.", false, BlackboardAttribute.ATTRIBUTE_TYPE.TSK_URL));
|
||||
|
@ -25,11 +25,11 @@
|
||||
package org.sleuthkit.autopsy.keywordsearch;
|
||||
|
||||
import java.awt.event.KeyEvent;
|
||||
import java.beans.PropertyChangeEvent;
|
||||
import java.beans.PropertyChangeListener;
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.openide.util.NbBundle;
|
||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||
import javax.swing.JFileChooser;
|
||||
import javax.swing.JOptionPane;
|
||||
@ -176,21 +176,23 @@ class KeywordSearchListsManagementPanel extends javax.swing.JPanel implements Op
|
||||
|
||||
private void newListButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_newListButtonActionPerformed
|
||||
KeywordSearchListsXML writer = KeywordSearchListsXML.getCurrent();
|
||||
String listName = (String) JOptionPane.showInputDialog(null, "New keyword list name:", "New Keyword List", JOptionPane.PLAIN_MESSAGE, null, null, "");
|
||||
String listName = (String) JOptionPane.showInputDialog(null, NbBundle.getMessage(this.getClass(), "KeywordSearch.newKwListTitle"),
|
||||
NbBundle.getMessage(this.getClass(), "KeywordSearch.newKeywordListMsg"), JOptionPane.PLAIN_MESSAGE, null, null, "");
|
||||
if (listName == null || listName.trim().equals("")) {
|
||||
return;
|
||||
}
|
||||
boolean shouldAdd = false;
|
||||
if (writer.listExists(listName)) {
|
||||
if (writer.getList(listName).isLocked() ) {
|
||||
boolean replace = KeywordSearchUtil.displayConfirmDialog("New Keyword List", "Keyword List <" + listName
|
||||
+ "> already exists as a read-only list. Do you want to replace it for the duration of the program (the change will not be persistent).", KeywordSearchUtil.DIALOG_MESSAGE_TYPE.WARN);
|
||||
boolean replace = KeywordSearchUtil.displayConfirmDialog(NbBundle.getMessage(this.getClass(), "KeywordSearch.newKeywordListMsg"),
|
||||
NbBundle.getMessage(this.getClass(), "KeywordSearch.keywordListAlreadyExistMsg", listName), KeywordSearchUtil.DIALOG_MESSAGE_TYPE.WARN);
|
||||
if (replace) {
|
||||
shouldAdd = true;
|
||||
}
|
||||
}
|
||||
else {
|
||||
boolean replace = KeywordSearchUtil.displayConfirmDialog("New Keyword List", "Keyword List <" + listName + "> already exists, do you want to replace it?", KeywordSearchUtil.DIALOG_MESSAGE_TYPE.WARN);
|
||||
boolean replace = KeywordSearchUtil.displayConfirmDialog(NbBundle.getMessage(this.getClass(), "KeywordSearch.newKwListTitle"),
|
||||
NbBundle.getMessage(this.getClass(), "KeywordSearch.kwListAlreadyExistMsg", listName), KeywordSearchUtil.DIALOG_MESSAGE_TYPE.WARN);
|
||||
if (replace) {
|
||||
shouldAdd = true;
|
||||
}
|
||||
@ -211,12 +213,10 @@ class KeywordSearchListsManagementPanel extends javax.swing.JPanel implements Op
|
||||
|
||||
private void importButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_importButtonActionPerformed
|
||||
|
||||
final String FEATURE_NAME = "Keyword List Import";
|
||||
|
||||
JFileChooser chooser = new JFileChooser();
|
||||
final String[] EXTENSION = new String[]{"xml", "txt"};
|
||||
FileNameExtensionFilter filter = new FileNameExtensionFilter(
|
||||
"Keyword List File", EXTENSION);
|
||||
NbBundle.getMessage(this.getClass(), "KeywordSearchListsManagementPanel.fileExtensionFilterLbl"), EXTENSION);
|
||||
chooser.setFileFilter(filter);
|
||||
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
|
||||
|
||||
@ -239,7 +239,8 @@ class KeywordSearchListsManagementPanel extends javax.swing.JPanel implements Op
|
||||
}
|
||||
|
||||
if (!reader.load()) {
|
||||
KeywordSearchUtil.displayDialog(FEATURE_NAME, "Error importing keyword list from file " + fileAbs, KeywordSearchUtil.DIALOG_MESSAGE_TYPE.ERROR);
|
||||
KeywordSearchUtil.displayDialog(
|
||||
NbBundle.getMessage(this.getClass(), "KeywordSearch.listImportFeatureTitle"), NbBundle.getMessage(this.getClass(), "KeywordSearch.importListFileDialogMsg", fileAbs), KeywordSearchUtil.DIALOG_MESSAGE_TYPE.ERROR);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -251,12 +252,12 @@ class KeywordSearchListsManagementPanel extends javax.swing.JPanel implements Op
|
||||
for (KeywordSearchListsAbstract.KeywordSearchList list : toImport) {
|
||||
//check name collisions
|
||||
if (writer.listExists(list.getName())) {
|
||||
Object[] options = {"Yes, overwrite",
|
||||
"No, skip",
|
||||
"Cancel import"};
|
||||
Object[] options = {NbBundle.getMessage(this.getClass(), "KeywordSearch.yesOwMsg"),
|
||||
NbBundle.getMessage(this.getClass(), "KeywordSearch.noSkipMsg"),
|
||||
NbBundle.getMessage(this.getClass(), "KeywordSearch.cancelImportMsg")};
|
||||
int choice = JOptionPane.showOptionDialog(this,
|
||||
"Keyword list <" + list.getName() + "> already exists locally, overwrite?",
|
||||
"Import list conflict",
|
||||
NbBundle.getMessage(this.getClass(), "KeywordSearch.overwriteListPrompt", list.getName()),
|
||||
NbBundle.getMessage(this.getClass(), "KeywordSearch.importOwConflict"),
|
||||
JOptionPane.YES_NO_CANCEL_OPTION,
|
||||
JOptionPane.QUESTION_MESSAGE,
|
||||
null,
|
||||
@ -280,7 +281,8 @@ class KeywordSearchListsManagementPanel extends javax.swing.JPanel implements Op
|
||||
}
|
||||
|
||||
if (!writer.writeLists(toImportConfirmed)) {
|
||||
KeywordSearchUtil.displayDialog(FEATURE_NAME, "Keyword list not imported", KeywordSearchUtil.DIALOG_MESSAGE_TYPE.INFO);
|
||||
KeywordSearchUtil.displayDialog(
|
||||
NbBundle.getMessage(this.getClass(), "KeywordSearch.listImportFeatureTitle"), NbBundle.getMessage(this.getClass(), "KeywordSearch.kwListFailImportMsg"), KeywordSearchUtil.DIALOG_MESSAGE_TYPE.INFO);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -36,7 +36,8 @@ import javax.swing.event.ListSelectionListener;
|
||||
import javax.swing.table.AbstractTableModel;
|
||||
import javax.swing.table.TableCellRenderer;
|
||||
import javax.swing.table.TableColumn;
|
||||
import org.apache.solr.client.solrj.SolrServerException;
|
||||
|
||||
import org.openide.util.NbBundle;
|
||||
import org.openide.util.actions.SystemAction;
|
||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||
import org.sleuthkit.autopsy.ingest.IngestManager;
|
||||
@ -162,16 +163,14 @@ class KeywordSearchListsViewerPanel extends AbstractKeywordSearchPerformer {
|
||||
private void initIngest(boolean running) {
|
||||
if (running) {
|
||||
ingestRunning = true;
|
||||
searchAddButton.setText("Add to Ingest");
|
||||
searchAddButton.setToolTipText("<html>You can select additional keyword lists"
|
||||
+ "<br />and enqueue them to the ongoing ingest."
|
||||
+ "<br />The selected lists will be searched next time the file index is rebuilt.</html>");
|
||||
searchAddButton.setText(NbBundle.getMessage(this.getClass(), "KeywordSearchListsViewerPanel.initIngest.addIngestTitle"));
|
||||
searchAddButton.setToolTipText(NbBundle.getMessage(this.getClass(), "KeywordSearchListsViewerPanel.initIngest.addIngestMsg" ));
|
||||
listsTableModel.resync();
|
||||
|
||||
} else {
|
||||
ingestRunning = false;
|
||||
searchAddButton.setText("Search");
|
||||
searchAddButton.setToolTipText("Search indexed files for keywords in selected lists");
|
||||
searchAddButton.setText(NbBundle.getMessage(this.getClass(), "KeywordSearchListsViewerPanel.initIngest.searchIngestTitle"));
|
||||
searchAddButton.setToolTipText(NbBundle.getMessage(this.getClass(), "KeywordSearchListsViewerPanel.initIngest.addIdxSearchMsg"));
|
||||
listsTableModel.resync();
|
||||
}
|
||||
updateIngestIndexLabel(running);
|
||||
@ -179,11 +178,10 @@ class KeywordSearchListsViewerPanel extends AbstractKeywordSearchPerformer {
|
||||
|
||||
private void updateIngestIndexLabel(boolean ingestRunning) {
|
||||
if (ingestRunning) {
|
||||
ingestIndexLabel.setText("Files Indexed: " + filesIndexed
|
||||
+ " (ingest is ongoing)");
|
||||
ingestIndexLabel.setText(NbBundle.getMessage(this.getClass(), "KeywordSearchListsViewerPanel.initIngest.ongoingIngestMsg", filesIndexed));
|
||||
}
|
||||
else {
|
||||
ingestIndexLabel.setText("Files Indexed: " + filesIndexed);
|
||||
ingestIndexLabel.setText(NbBundle.getMessage(this.getClass(), "KeywordSearchListsViewerPanel.initIngest.fileIndexCtMsg", filesIndexed));
|
||||
}
|
||||
}
|
||||
|
||||
@ -357,10 +355,10 @@ class KeywordSearchListsViewerPanel extends AbstractKeywordSearchPerformer {
|
||||
String ret = null;
|
||||
switch (column) {
|
||||
case 0:
|
||||
ret = "Selected";
|
||||
ret = NbBundle.getMessage(this.getClass(), "KeywordSearch.selectedColLbl");
|
||||
break;
|
||||
case 1:
|
||||
ret = "Name";
|
||||
ret = NbBundle.getMessage(this.getClass(), "KeywordSearch.nameColLbl");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@ -511,10 +509,10 @@ class KeywordSearchListsViewerPanel extends AbstractKeywordSearchPerformer {
|
||||
String ret = null;
|
||||
switch (column) {
|
||||
case 0:
|
||||
ret = "Name";
|
||||
ret = NbBundle.getMessage(this.getClass(), "KeywordSearch.nameColLbl");
|
||||
break;
|
||||
case 1:
|
||||
ret = "RegEx";
|
||||
ret = NbBundle.getMessage(this.getClass(), "KeywordSearch.regExColLbl");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
@ -19,7 +19,8 @@ iconBase = "org/sleuthkit/autopsy/keywordsearch/options-icon.png",
|
||||
position = 2,
|
||||
keywords = "#OptionsCategory_Keywords_KeywordSearchOptions",
|
||||
keywordsCategory = "KeywordSearchOptions")
|
||||
@org.openide.util.NbBundle.Messages({"OptionsCategory_Name_KeywordSearchOptions=Keyword Search", "OptionsCategory_Keywords_KeywordSearchOptions=Keyword Search"})
|
||||
// moved messages to Bundle.properties
|
||||
//@org.openide.util.NbBundle.Messages({"OptionsCategory_Keywords_KeywordSearchOptions=Keyword Search", "OptionsCategory_Keywords_KeywordSearchOptions=Keyword Search"})
|
||||
public final class KeywordSearchOptionsPanelController extends OptionsPanelController {
|
||||
|
||||
private KeywordSearchConfigurationPanel panel;
|
||||
|
@ -92,7 +92,9 @@ class KeywordSearchPanel extends AbstractKeywordSearchPerformer {
|
||||
|
||||
@Override
|
||||
public void focusGained(FocusEvent e) {
|
||||
if (searchBox.getText().equals("Search...")) {
|
||||
if (searchBox.getText()
|
||||
.equals(org.openide.util.NbBundle.getMessage(KeywordSearchPanel.class,
|
||||
"KeywordSearchPanel.searchBox.text"))) {
|
||||
searchBox.setText("");
|
||||
searchBox.setForeground(Color.BLACK);
|
||||
entered = true;
|
||||
@ -146,7 +148,9 @@ class KeywordSearchPanel extends AbstractKeywordSearchPerformer {
|
||||
} else if (jmi.equals(copyMenuItem)) {
|
||||
searchBox.copy();
|
||||
} else if (jmi.equals(pasteMenuItem)) {
|
||||
if (searchBox.getText().equals("Search...")) {
|
||||
if (searchBox.getText()
|
||||
.equals(org.openide.util.NbBundle.getMessage(KeywordSearchPanel.class,
|
||||
"KeywordSearchPanel.searchBox.text"))) {
|
||||
searchBox.setText("");
|
||||
searchBox.setForeground(Color.BLACK);
|
||||
entered = true;
|
||||
@ -166,7 +170,8 @@ class KeywordSearchPanel extends AbstractKeywordSearchPerformer {
|
||||
|
||||
private void resetSearchBox() {
|
||||
searchBox.setEditable(true);
|
||||
searchBox.setText("Search...");
|
||||
searchBox.setText(org.openide.util.NbBundle.getMessage(KeywordSearchPanel.class,
|
||||
"KeywordSearchPanel.searchBox.text"));
|
||||
searchBox.setForeground(Color.LIGHT_GRAY);
|
||||
regExCheckboxMenuItem.setEnabled(true);
|
||||
entered = false;
|
||||
|
@ -24,6 +24,8 @@ import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import org.openide.util.NbBundle;
|
||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||
import org.openide.nodes.AbstractNode;
|
||||
import org.openide.nodes.Children;
|
||||
@ -152,7 +154,7 @@ class KeywordSearchQueryManager {
|
||||
String queryConcatStr = queryConcat.toString();
|
||||
final int queryConcatStrLen = queryConcatStr.length();
|
||||
final String queryStrShort = queryConcatStrLen > 15 ? queryConcatStr.substring(0, 14) + "..." : queryConcatStr;
|
||||
final String windowTitle = "Keyword search " + (++resultWindowCount) + " - " + queryStrShort;
|
||||
final String windowTitle = NbBundle.getMessage(this.getClass(), "KeywordSearchQueryManager.execute.exeWinTitle", ++resultWindowCount, queryStrShort);
|
||||
DataResultTopComponent searchResultWin = DataResultTopComponent.createInstance(windowTitle);
|
||||
if (things.size() > 0) {
|
||||
Children childThingNodes =
|
||||
|
@ -80,6 +80,7 @@
|
||||
</if>
|
||||
|
||||
<property name="app.property.file" value="${zip-tmp}/${app.name}/etc/${app.name}.conf" />
|
||||
<!-- for Japanese localized version add option: -Duser.language=ja -->
|
||||
<property name="jvm.options" value=""--branding ${app.name} -J-Xms24m -J-XX:MaxPermSize=128M -J-Xverify:none -J-Xdock:name=${app.title}"" />
|
||||
<propertyfile file="${app.property.file}">
|
||||
<!-- Note: can be higher on 64 bit systems, should be in sync with project.properties -->
|
||||
|
@ -14,6 +14,7 @@ project.org.sleuthkit.autopsy.fileextmismatch=FileExtMismatch
|
||||
update_versions=false
|
||||
#custom JVM options
|
||||
#Note: can be higher on 64 bit systems, should be in sync with build.xml
|
||||
# for Japanese version add: -J-Duser.language=ja
|
||||
run.args.extra=-J-Xms24m -J-XX:MaxPermSize=128M -J-Xverify:none
|
||||
auxiliary.org-netbeans-modules-apisupport-installer.license-type=apache.v2
|
||||
auxiliary.org-netbeans-modules-apisupport-installer.os-linux=false
|
||||
|
Loading…
x
Reference in New Issue
Block a user