Merge branch 'develop' of https://github.com/sleuthkit/autopsy into core-corecomponents

This commit is contained in:
Nick Davis 2014-03-07 14:42:29 -05:00
commit 607f96ef29
47 changed files with 615 additions and 181 deletions

View File

@ -14,9 +14,7 @@ GetTagNameAndCommentDialog.commentLabel.text=Comment:
GetTagNameAndCommentDialog.cancelButton.text=Cancel GetTagNameAndCommentDialog.cancelButton.text=Cancel
GetTagNameAndCommentDialog.tagCombo.toolTipText=Select tag to use GetTagNameAndCommentDialog.tagCombo.toolTipText=Select tag to use
GetTagNameAndCommentDialog.tagLabel.text=Tag: GetTagNameAndCommentDialog.tagLabel.text=Tag:
#todo this means to tag a result? not result of a tag?
AddBlackboardArtifactTagAction.singularTagResult=Tag Result AddBlackboardArtifactTagAction.singularTagResult=Tag Result
#todo check meaning
AddBlackboardArtifactTagAction.pluralTagResult=Tag Results AddBlackboardArtifactTagAction.pluralTagResult=Tag Results
AddBlackboardArtifactTagAction.unableToTag.msg=Unable to tag {0}. AddBlackboardArtifactTagAction.unableToTag.msg=Unable to tag {0}.
AddBlackboardArtifactTagAction.taggingErr=Tagging Error AddBlackboardArtifactTagAction.taggingErr=Tagging Error

View File

@ -10,8 +10,8 @@ GetTagNameAndCommentDialog.commentLabel.text=\u30B3\u30E1\u30F3\u30C8\uFF1A
GetTagNameAndCommentDialog.cancelButton.text=\u30AD\u30E3\u30F3\u30BB\u30EB GetTagNameAndCommentDialog.cancelButton.text=\u30AD\u30E3\u30F3\u30BB\u30EB
GetTagNameAndCommentDialog.tagCombo.toolTipText=\u4F7F\u7528\u3059\u308B\u30BF\u30B0\u3092\u9078\u629E GetTagNameAndCommentDialog.tagCombo.toolTipText=\u4F7F\u7528\u3059\u308B\u30BF\u30B0\u3092\u9078\u629E
GetTagNameAndCommentDialog.tagLabel.text=\u30BF\u30B0\uFF1A GetTagNameAndCommentDialog.tagLabel.text=\u30BF\u30B0\uFF1A
AddBlackboardArtifactTagAction.singularTagResult=\u30BF\u30B0\u306E\u7D50\u679C AddBlackboardArtifactTagAction.singularTagResult=\u7D50\u679C\u306B\u30BF\u30B0\u3092\u8FFD\u52A0
AddBlackboardArtifactTagAction.pluralTagResult=\u30BF\u30B0\u306E\u7D50\u679C AddBlackboardArtifactTagAction.pluralTagResult=\u7D50\u679C\u306B\u30BF\u30B0\u3092\u8FFD\u52A0
AddBlackboardArtifactTagAction.unableToTag.msg={0}\u306B\u30BF\u30B0\u3092\u8FFD\u52A0\u3067\u304D\u307E\u305B\u3093\u3002 AddBlackboardArtifactTagAction.unableToTag.msg={0}\u306B\u30BF\u30B0\u3092\u8FFD\u52A0\u3067\u304D\u307E\u305B\u3093\u3002
AddBlackboardArtifactTagAction.taggingErr=\u30BF\u30B0\u4ED8\u3051\u30A8\u30E9\u30FC AddBlackboardArtifactTagAction.taggingErr=\u30BF\u30B0\u4ED8\u3051\u30A8\u30E9\u30FC
AddContentTagAction.singularTagFile=\u30D5\u30A1\u30A4\u30EB\u306B\u30BF\u30B0\u3092\u8FFD\u52A0 AddContentTagAction.singularTagFile=\u30D5\u30A1\u30A4\u30EB\u306B\u30BF\u30B0\u3092\u8FFD\u52A0

View File

@ -18,6 +18,7 @@
*/ */
package org.sleuthkit.autopsy.casemodule; package org.sleuthkit.autopsy.casemodule;
import org.sleuthkit.autopsy.coreutils.LocalDisk;
import java.awt.BorderLayout; import java.awt.BorderLayout;
import java.awt.Color; import java.awt.Color;
import java.awt.Component; import java.awt.Component;

View File

@ -10,3 +10,5 @@ OpenIDE-Module-Name=Autopsy-Core
OpenIDE-Module-Short-Description=Autopsy Core Module OpenIDE-Module-Short-Description=Autopsy Core Module
org_sleuthkit_autopsy_core_update_center=http://sleuthkit.org/autopsy/updates.xml org_sleuthkit_autopsy_core_update_center=http://sleuthkit.org/autopsy/updates.xml
Services/AutoupdateType/org_sleuthkit_autopsy_core_update_center.settings=Autopsy Update Center Services/AutoupdateType/org_sleuthkit_autopsy_core_update_center.settings=Autopsy Update Center
Installer.errorInitJavafx.msg=Error initializing JavaFX.
Installer.errorInitJavafx.details=\ Some features will not be available. Check that you have the right JRE installed (Oracle JRE > 1.7.10).

View File

@ -0,0 +1,14 @@
OpenIDE-Module-Display-Category=\u57FA\u76E4
OpenIDE-Module-Long-Description=\
Autopsy\u30E2\u30B8\u30E5\u30FC\u30EB\u306E\u30B3\u30A2\u3067\u3059\u3002\n\n\
\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u306E\u307F\u3067\u5B9F\u884C\u3059\u308B\u306E\u306B\u5FC5\u8981\u306A\u4E3B\u8981\u306A\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u304C\u542B\u307E\u308C\u3066\u3044\u307E\u3059\uFF1ARCP\u30D7\u30E9\u30C3\u30C8\u30D5\u30A9\u30FC\u30E0\u3001\u30A6\u30A3\u30F3\u30C9\u30A6\u30A4\u30F3\u30B0GUI\u3001Sleuth Kit\u30D0\u30A4\u30F3\u30C7\u30A3\u30F3\u30B0\u3001\u30C7\u30FC\u30BF\u30E2\u30C7\u30EB\uFF0F\u30B9\u30C8\u30EC\u30FC\u30B8\u3001\u30A8\u30AF\u30B9\u30D7\u30ED\u30FC\u30E9\u3001\u7D50\u679C\u30D3\u30E5\u30FC\u30A2\u30FC\u3001\u30B3\u30F3\u30C6\u30F3\u30C4\u30D3\u30E5\u30FC\u30A2\u30FC\u3001\u30A4\u30F3\u30B8\u30A7\u30B9\u30C8\u7528\u30D5\u30EC\u30FC\u30E0\u30EF\u30FC\u30AF\u3001\u30EC\u30DD\u30FC\u30C8\u751F\u6210\u3001\u30D5\u30A1\u30A4\u30EB\u691C\u7D22\u7B49\u306E\u4E3B\u8981\u30C4\u30FC\u30EB\u3002\n\n\
\u30E2\u30B8\u30E5\u30FC\u30EB\u5185\u306E\u30D5\u30EC\u30FC\u30E0\u30EF\u30FC\u30AF\u306B\u306F\u30A4\u30F3\u30B8\u30A7\u30B9\u30C8\u3001\u30D3\u30E5\u30FC\u30A2\u30FC\u3001\u30EC\u30DD\u30FC\u30C8\u751F\u6210\u306E\u30E2\u30B8\u30E5\u30FC\u30EB\u958B\u767A\u7528\u306EAPI\u304C\u542B\u307E\u308C\u307E\u3059\u3002\
\u30E2\u30B8\u30E5\u30FC\u30EB\u306FAutopsy\u30D7\u30E9\u30B0\u30A4\u30F3\u30A4\u30F3\u30B9\u30C8\u30FC\u30E9\u30FC\u3092\u4F7F\u7528\u3057\u3001\u30D7\u30E9\u30B0\u30A4\u30F3\u3068\u3057\u3066\u5B9F\u88C5\u3067\u304D\u307E\u3059\u3002\n\
\u3053\u306E\u30E2\u30B8\u30E5\u30FC\u30EB\u306F\u30A2\u30F3\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3057\u3066\u306F\u3044\u3051\u307E\u305B\u3093\u3002\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3055\u308C\u3066\u3044\u306A\u3051\u308C\u3070\u3001Autopsy\u306F\u4F7F\u7528\u3067\u304D\u307E\u305B\u3093\u3002\n\n\
\u8A73\u7D30\u306F\u4E0B\u8A18\u3092\u3054\u89A7\u4E0B\u3055\u3044\u3002http\://www.sleuthkit.org/autopsy/
OpenIDE-Module-Name=Autopsy-\u30B3\u30A2
OpenIDE-Module-Short-Description=Autopsy\u30B3\u30A2\u30E2\u30B8\u30E5\u30FC\u30EB
org_sleuthkit_autopsy_core_update_center=http\://sleuthkit.org/autopsy/updates.xml
Services/AutoupdateType/org_sleuthkit_autopsy_core_update_center.settings=Autopsy\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u30BB\u30F3\u30BF\u30FC
Installer.errorInitJavafx.msg=JavaFX\u521D\u671F\u5316\u30A8\u30E9\u30FC
Installer.errorInitJavafx.details=\u4E00\u90E8\u306E\u6A5F\u80FD\u304C\u4F7F\u7528\u3067\u304D\u307E\u305B\u3093\u3002\u6B63\u3057\u3044JRE\u304C\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3055\u308C\u3066\u3044\u308B\u306E\u3092\u78BA\u8A8D\u3057\u3066\u4E0B\u3055\u3044\u3002\uFF08Oracle JRE > 1.7.10\uFF09

View File

@ -23,6 +23,7 @@ import java.util.List;
import java.util.logging.Level; import java.util.logging.Level;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.embed.swing.JFXPanel; import javafx.embed.swing.JFXPanel;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.Logger;
import org.openide.modules.ModuleInstall; import org.openide.modules.ModuleInstall;
import org.openide.windows.WindowManager; import org.openide.windows.WindowManager;
@ -113,9 +114,8 @@ public class Installer extends ModuleInstall {
javaFxInit = true; javaFxInit = true;
} catch (UnsatisfiedLinkError | NoClassDefFoundError | Exception e) { } catch (UnsatisfiedLinkError | NoClassDefFoundError | Exception e) {
//in case javafx not present //in case javafx not present
final String msg = "Error initializing JavaFX. "; final String msg = NbBundle.getMessage(Installer.class, "Installer.errorInitJavafx.msg");
final String details = " Some features will not be available. " final String details = NbBundle.getMessage(Installer.class, "Installer.errorInitJavafx.details");
+ " Check that you have the right JRE installed (Oracle JRE > 1.7.10). ";
logger.log(Level.SEVERE, msg logger.log(Level.SEVERE, msg
+ details, e); + details, e);

View File

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

View File

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

View File

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

View File

@ -37,7 +37,6 @@ import org.hyperic.sigar.Sigar;
import org.hyperic.sigar.ptql.ProcessFinder; import org.hyperic.sigar.ptql.ProcessFinder;
import org.openide.modules.InstalledFileLocator; import org.openide.modules.InstalledFileLocator;
import org.openide.modules.Places; import org.openide.modules.Places;
import org.sleuthkit.autopsy.casemodule.LocalDisk;
import org.sleuthkit.datamodel.SleuthkitJNI; import org.sleuthkit.datamodel.SleuthkitJNI;
import org.sleuthkit.datamodel.TskCoreException; import org.sleuthkit.datamodel.TskCoreException;

View File

@ -162,7 +162,13 @@ public abstract class AbstractAbstractFileNode<T extends AbstractFile> extends A
public String toString() { public String toString() {
return "MD5 Hash"; return "MD5 Hash";
} }
},
ObjectID {
@Override
public String toString() {
return "Object ID";
} }
},
} }
@ -201,6 +207,7 @@ public abstract class AbstractAbstractFileNode<T extends AbstractFile> extends A
map.put(AbstractFilePropertyType.KNOWN.toString(), content.getKnown().getName()); map.put(AbstractFilePropertyType.KNOWN.toString(), content.getKnown().getName());
map.put(AbstractFilePropertyType.HASHSETS.toString(), getHashSetHitsForFile(content)); map.put(AbstractFilePropertyType.HASHSETS.toString(), getHashSetHitsForFile(content));
map.put(AbstractFilePropertyType.MD5HASH.toString(), content.getMd5Hash() == null ? "" : content.getMd5Hash()); map.put(AbstractFilePropertyType.MD5HASH.toString(), content.getMd5Hash() == null ? "" : content.getMd5Hash());
map.put(AbstractFilePropertyType.ObjectID.toString(), content.getId());
} }

View File

@ -50,7 +50,7 @@ public final class ContentUtils {
private final static Logger logger = Logger.getLogger(ContentUtils.class.getName()); private final static Logger logger = Logger.getLogger(ContentUtils.class.getName());
private static final SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z"); private static final SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
private static final SimpleDateFormat dateFormatterISO8601 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); private static final SimpleDateFormat dateFormatterISO8601 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
private static boolean displayInLocalTime;
// don't instantiate // don't instantiate
private ContentUtils() { private ContentUtils() {
throw new AssertionError(); throw new AssertionError();
@ -106,10 +106,9 @@ public final class ContentUtils {
} }
public static TimeZone getTimeZone(Content c) { public static TimeZone getTimeZone(Content c) {
Preferences generalPanelPrefs = NbPreferences.root().node("/org/sleuthkit/autopsy/core");
boolean useLocalTime = generalPanelPrefs.getBoolean("useLocalTime", true);
try { try {
if (!useLocalTime) { if (!getDisplayInLocalTime()) {
return TimeZone.getTimeZone("GMT"); return TimeZone.getTimeZone("GMT");
} }
else { else {
@ -360,4 +359,18 @@ public final class ContentUtils {
+ cntnt.getClass().getSimpleName()); + cntnt.getClass().getSimpleName());
} }
} }
/**sets displayInlocalTime value based on button in GeneralPanel.java
*
* @param flag
*/
public static void setDisplayInLocalTime(boolean flag) {
displayInLocalTime = flag;
}
/** get global timezone setting for displaying time values
*
* @return
*/
public static boolean getDisplayInLocalTime(){
return displayInLocalTime;
}
} }

View File

@ -20,6 +20,8 @@
package org.sleuthkit.autopsy.keywordsearch; package org.sleuthkit.autopsy.keywordsearch;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.keywordsearch.Ingester.IngesterException; import org.sleuthkit.autopsy.keywordsearch.Ingester.IngesterException;
/** /**
@ -59,7 +61,8 @@ class AbstractFileChunk {
//logger.log(Level.INFO, "Ingesting string chunk: " + this.getName() + ": " + chunkID); //logger.log(Level.INFO, "Ingesting string chunk: " + this.getName() + ": " + chunkID);
} catch (Exception ingEx) { } catch (Exception ingEx) {
success = false; success = false;
throw new IngesterException("Problem ingesting file string chunk: " + parent.getSourceFile().getId() + ", chunk: " + chunkID, ingEx); throw new IngesterException(NbBundle.getMessage(this.getClass(), "AbstractFileChunk.index.exception.msg",
parent.getSourceFile().getId(), chunkID), ingEx);
} }
return success; return success;
} }

View File

@ -23,6 +23,8 @@ import java.io.InputStream;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.io.Reader; import java.io.Reader;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.Logger;
import org.apache.solr.common.util.ContentStream; import org.apache.solr.common.util.ContentStream;
import org.sleuthkit.datamodel.AbstractContent; import org.sleuthkit.datamodel.AbstractContent;
@ -69,12 +71,13 @@ import org.sleuthkit.datamodel.AbstractFile;
@Override @Override
public Long getSize() { public Long getSize() {
//return convertedLength; //return convertedLength;
throw new UnsupportedOperationException("Cannot tell how many chars in converted string, until entire string is converted"); throw new UnsupportedOperationException(
NbBundle.getMessage(this.getClass(), "AbstractFileStringContentStream.getSize.exception.msg"));
} }
@Override @Override
public String getSourceInfo() { public String getSourceInfo() {
return "File:" + content.getId(); return NbBundle.getMessage(this.getClass(), "AbstractFileStringContentStream.getSrcInfo.text", content.getId());
} }
@Override @Override

View File

@ -90,7 +90,6 @@ KeywordSearchListsViewerPanel.manageListsButton.toolTipText=Manage keyword lists
KeywordSearchConfigurationPanel2.frequencyLabel.text=Results update frequency during ingest: KeywordSearchConfigurationPanel2.frequencyLabel.text=Results update frequency during ingest:
KeywordSearchConfigurationPanel2.timeRadioButton4.text_1=1 minute (faster feedback, longest ingest) KeywordSearchConfigurationPanel2.timeRadioButton4.text_1=1 minute (faster feedback, longest ingest)
KeywordSearchConfigurationPanel2.timeRadioButton4.toolTipText=1 minute (overall ingest time will be longest) 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.dialogErrorHeader=Keyword Search Error
AbstractKeywordSearchPerformer.search.invalidSyntaxHeader=Invalid query syntax. AbstractKeywordSearchPerformer.search.invalidSyntaxHeader=Invalid query syntax.
AbstractKeywordSearchPerformer.search.searchIngestInProgressTitle=Keyword Search Ingest in Progress AbstractKeywordSearchPerformer.search.searchIngestInProgressTitle=Keyword Search Ingest in Progress
@ -149,6 +148,9 @@ KeywordSearchIngestModule.init.badInitMsg=Keyword search server was not properly
KeywordSearchIngestModule.init.tryStopSolrMsg={0}<br />Please try stopping old java Solr process (if it exists) and restart the application. 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.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.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.doInBackGround.displayName=Keyword Search
KeywordSearchIngestModule.doInBackGround.finalizeMsg=Finalizing...
KeywordSearchIngestModule.doInBackGround.pendingMsg=Working on Keyword Search...
KeywordSearchIngestModule.postIndexSummary.knowFileHeaderLbl=Files with known types KeywordSearchIngestModule.postIndexSummary.knowFileHeaderLbl=Files with known types
KeywordSearchIngestModule.postIndexSummary.fileGenStringsHead=Files with general strings extracted KeywordSearchIngestModule.postIndexSummary.fileGenStringsHead=Files with general strings extracted
KeywordSearchIngestModule.postIndexSummary.mdOnlyLbl=Metadata only was indexed KeywordSearchIngestModule.postIndexSummary.mdOnlyLbl=Metadata only was indexed
@ -183,4 +185,83 @@ KeywordSearch.listImportFeatureTitle=Keyword List Import
KeywordSearchIngestModule.hashDbModuleName=Hash Lookup KeywordSearchIngestModule.hashDbModuleName=Hash Lookup
KeywordSearchIngestModule.moduleName=Keyword Search KeywordSearchIngestModule.moduleName=Keyword Search
KeywordSearchIngestModule.moduleDescription=Performs file indexing and periodic search using keywords and regular expressions in lists. KeywordSearchIngestModule.moduleDescription=Performs file indexing and periodic search using keywords and regular expressions in lists.
AbstractFileChunk.index.exception.msg=Problem ingesting file string chunk\: {0}, chunk\: {1}
AbstractFileStringContentStream.getSize.exception.msg=Cannot tell how many chars in converted string, until entire string is converted
AbstractFileStringContentStream.getSrcInfo.text=File\:{0}
ByteContentStream.getSrcInfo.text=File\:{0}
ExtractedContentPanel.SetMarkup.progress.loading=Loading text
ExtractedContentPanel.SetMarkup.progress.displayName=Loading text
ExtractedContentViewer.nextPage.exception.msg=No next page.
ExtractedContentViewer.previousPage.exception.msg=No previous page.
ExtractedContentViewer.hasNextItem.exception.msg=Not supported, not a searchable source.
ExtractedContentViewer.hasPreviousItem.exception.msg=Not supported, not a searchable source.
ExtractedContentViewer.nextItem.exception.msg=Not supported, not a searchable source.
ExtractedContentViewer.previousItem.exception.msg=Not supported, not a searchable source.
ExtractedContentViewer.currentItem.exception.msg=Not supported, not a searchable source.
HighlightedMatchesSource.nextPage.exception.msg=No next page.
HighlightedMatchesSource.previousPage.exception.msg=No previous page.
HighlightedMatchesSource.nextItem.exception.msg=No next item.
HighlightedMatchesSource.previousItem.exception.msg=No previous item.
Ingester.ingest.exception.unknownImgId.msg=Skipping indexing the file, unknown image id, for file\: {0}
Ingester.ingest.exception.cantReadStream.msg=Could not read content stream\: {0}
Ingester.ingest.exception.err.msg=Error ingesting document\: {0}
Ingester.ingestExtract.exception.solrTimeout.msg=Solr index request time out for id\: {0}, name\: {1}
Ingester.ingestExtract.exception.probPostToSolr.msg=Problem posting content to Solr, id\: {0}, name\: {1}
Ingester.UpReqestTask.run.exception.sorlNotAvail.msg=No Solr core available, cannot index the content
Ingester.UpRequestTask.run.exception.probReadFile.msg=Problem reading file.
Ingester.UpRequestTask.run.exception.solrProb.msg=Problem with Solr
Ingester.UpRequestTask.run.exception.probPostToSolr.msg=Problem posting file contents to Solr. SolrException error code\: {0}
Ingester.FscContentStream.getSrcInfo=File\:{0}
Ingester.FscContentStream.getReader=Not supported yet.
Ingester.NullContentStream.getSrcInfo.text=File\:{0}
Ingester.NullContentStream.getReader=Not supported yet.
Keyword.toString.text=Keyword'{'query\={0}, isLiteral\={1}, keywordType\={2}'}'
KeywordSearch.moduleErr=Module Error
KeywordSearch.fireNumIdxFileChg.moduleErr.msg=A module caused an error listening to KeywordSearch updates. See log to determine which module. Some data could be incomplete.
KeywordSearchIngestModule.init.exception.errConnToSolr.msg=Error connecting to SOLR server\: {0}
KeywordSearchListsEncase.save.exception.msg=Not supported yet.
KeywordSearchListsEncase.save2.exception.msg=Not supported yet.
KeywordSearchListsEncase.encaseMetaType.exception.msg=Unsupported EncaseMetaType\: {0}
KeywordSearchListsManagementPanel.getColName.text=Name
KeywordSearchListsManagementPanel.setValueAt.exception.msg=Editing of cells is not supported
KeywordSearchListsViewerPanel.isLuceneQuerySel.exception.msg=Not supported for multi-word queries.
KeywordSearchListsViewerPanel.getQueryText.exception.msg=Not supported for multi-word queries.
KeywordSearchOptionsPanelController.moduleErr=Module Error
KeywordSearchOptionsPanelController.moduleErr.msg1=A module caused an error listening to KeywordSearchOptionsPanelController updates. See log to determine which module. Some data could be incomplete.
KeywordSearchOptionsPanelController.moduleErr.msg2=A module caused an error listening to KeywordSearchOptionsPanelController updates. See log to determine which module. Some data could be incomplete.
KeywordSearchPanel.getQueryList.exception.msg=No list for single-keyword search
KeywordSearchQueryManager.pathText.text=Keyword search
KeywordSearchResultFactory.progress.saving=Saving results\: {0}
KeywordSearchSettings.moduleName.text=KeywordSearch
KeywordSearchSettings.properties_options.text={0}_Options
KeywordSearchSettings.propertiesNSRL.text={0}_NSRL
KeywordSearchSettings.propertiesScripts.text={0}_Scripts
NoOpenCoreException.err.noOpenSorlCore.msg=No currently open Solr core.
Server.start.exception.cantStartSolr.msg=Could not start Solr server process
Server.start.exception.cantStartSolr.msg2=Could not start Solr server process
Server.isRunning.exception.errCheckSolrRunning.msg=Error checking if Solr server is running
Server.isRunning.exception.errCheckSolrRunning.msg2=Error checking if Solr server is running
Server.openCore.exception.alreadyOpen.msg=Already an open Core\! Explicitely close Core first.
Server.queryNumIdxFiles.exception.msg=Error querying number of indexed files,
Server.queryNumIdxChunks.exception.msg=Error querying number of indexed chunks,
Server.queryNumIdxDocs.exception.msg=Error querying number of indexed documents,
Server.queryIsIdxd.exception.msg=Error checkign if content is indexed,
Server.queryNumFileChunks.exception.msg=Error getting number of file chunks,
Server.query.exception.msg=Error running query\: {0}
Server.query2.exception.msg=Error running query\: {0}
Server.queryTerms.exception.msg=Error running terms query\: {0}
Server.openCore.exception.msg=Core open requested, but server not yet running
Server.openCore.exception.cantOpen.msg=Could not open Core
Server.openCore.exception.cantOpen.msg2=Could not open Core
Server.request.exception.exception.msg=Could not issue Solr request
Server.commit.exception.msg=Could not commit index
Server.addDoc.exception.msg=Could not add document to index via update handler\: {0}
Server.addDoc.exception.msg2=Could not add document to index via update handler\: {0}
Server.close.exception.msg=Cannot close Core
Server.close.exception.msg2=Cannot close Core
Server.solrServerNoPortException.msg=Indexing server could not bind to port {0}, port is not available, consider change the default {1} port.
KeywordSearchIngestModule.doInBackGround.displayName=Keyword Search
KeywordSearchIngestModule.doInBackGround.finalizeMsg= - Finalizing
KeywordSearchIngestModule.doInBackGround.pendingMsg= (Pending)
KeywordSearchIngestModule.doInBackGround.cancelMsg= (Cancelling...)

View File

@ -8,16 +8,16 @@ ListBundleName=\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8
ListBundleConfig=\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8\u8A2D\u5B9A ListBundleConfig=\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8\u8A2D\u5B9A
IndexProgressPanel.statusText.text=\u30B9\u30C6\u30FC\u30BF\u30B9\u30C6\u30AD\u30B9\u30C8 IndexProgressPanel.statusText.text=\u30B9\u30C6\u30FC\u30BF\u30B9\u30C6\u30AD\u30B9\u30C8
IndexProgressPanel.cancelButton.text=\u30AD\u30E3\u30F3\u30BB\u30EB IndexProgressPanel.cancelButton.text=\u30AD\u30E3\u30F3\u30BB\u30EB
ExtractedContentPanel.hitLabel.text=\u30DA\u30FC\u30B8\u4E0A\u306E\u4E00\u81F4 ExtractedContentPanel.hitLabel.text=\u30DA\u30FC\u30B8\u5185\u306E\u4E00\u81F4\uFF1A
ExtractedContentPanel.hitCountLabel.text= ExtractedContentPanel.hitCountLabel.text=-
ExtractedContentPanel.hitOfLabel.text= ExtractedContentPanel.hitOfLabel.text=of
ExtractedContentPanel.hitTotalLabel.text= ExtractedContentPanel.hitTotalLabel.text=-
ExtractedContentPanel.hitButtonsLabel.text=\u4E00\u81F4 ExtractedContentPanel.hitButtonsLabel.text=\u4E00\u81F4
ExtractedContentPanel.copyMenuItem.text=\u30B3\u30D4\u30FC ExtractedContentPanel.copyMenuItem.text=\u30B3\u30D4\u30FC
ExtractedContentPanel.selectAllMenuItem.text=\u3059\u3079\u3066\u9078\u629E ExtractedContentPanel.selectAllMenuItem.text=\u3059\u3079\u3066\u9078\u629E
KeywordSearchEditListPanel.saveListButton.text=\u30EA\u30B9\u30C8\u3092\u30B3\u30D4\u30FC KeywordSearchEditListPanel.saveListButton.text=\u30EA\u30B9\u30C8\u3092\u30B3\u30D4\u30FC
KeywordSearchEditListPanel.addWordButton.text=\u8FFD\u52A0 KeywordSearchEditListPanel.addWordButton.text=\u8FFD\u52A0
KeywordSearchEditListPanel.chRegex.text=\u4E00\u822C\u7684\u306A\u8868\u73FE KeywordSearchEditListPanel.chRegex.text=\u6B63\u898F\u8868\u73FE
KeywordSearchEditListPanel.deleteWordButton.text=\u9078\u629E\u3057\u305F\u3082\u306E\u3092\u524A\u9664 KeywordSearchEditListPanel.deleteWordButton.text=\u9078\u629E\u3057\u305F\u3082\u306E\u3092\u524A\u9664
KeywordSearchEditListPanel.cutMenuItem.text=\u30AB\u30C3\u30C8 KeywordSearchEditListPanel.cutMenuItem.text=\u30AB\u30C3\u30C8
KeywordSearchEditListPanel.selectAllMenuItem.text=\u3059\u3079\u3066\u9078\u629E KeywordSearchEditListPanel.selectAllMenuItem.text=\u3059\u3079\u3066\u9078\u629E
@ -28,8 +28,8 @@ KeywordSearchEditListPanel.deleteListButton.text=\u30EA\u30B9\u30C8\u3092\u524A\
KeywordSearchListsManagementPanel.newListButton.text=\u65B0\u898F\u30EA\u30B9\u30C8 KeywordSearchListsManagementPanel.newListButton.text=\u65B0\u898F\u30EA\u30B9\u30C8
KeywordSearchEditListPanel.useForIngestCheckbox.text=\u51E6\u7406\u4E2D\u306B\u4F7F\u7528 KeywordSearchEditListPanel.useForIngestCheckbox.text=\u51E6\u7406\u4E2D\u306B\u4F7F\u7528
KeywordSearchListsManagementPanel.importButton.text=\u30EA\u30B9\u30C8\u3092\u30A4\u30F3\u30DD\u30FC\u30C8 KeywordSearchListsManagementPanel.importButton.text=\u30EA\u30B9\u30C8\u3092\u30A4\u30F3\u30DD\u30FC\u30C8
KeywordSearchPanel.searchBox.text=\u691C\u7D22... KeywordSearchPanel.searchBox.text=\u691C\u7D22\u2026
KeywordSearchPanel.regExCheckboxMenuItem.text=\u4E00\u822C\u7684\u306A\u8868\u73FE\u3092\u4F7F\u7528 KeywordSearchPanel.regExCheckboxMenuItem.text=\u6B63\u898F\u8868\u73FE\u3092\u4F7F\u7528
KeywordSearchListsViewerPanel.searchAddButton.text=\u691C\u7D22 KeywordSearchListsViewerPanel.searchAddButton.text=\u691C\u7D22
KeywordSearchListsViewerPanel.manageListsButton.text=\u30EA\u30B9\u30C8\u3092\u7BA1\u7406 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 KeywordSearchListsViewerPanel.ingestIndexLabel.text=\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\uFF1A
@ -42,10 +42,10 @@ 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.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 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.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.skipNSRLCheckBox.toolTipText=Hash DB\u30B5\u30FC\u30D3\u30B9\u3092\u4E8B\u524D\u306B\u5B9F\u884C\u3059\u308B\u304B\u3001\u6B21\u56DE\u306E\u51E6\u7406\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 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.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 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\u304B\u3089\u5909\u66F4\u304C\u53EF\u80FD\u3067\u3059\u3002
KeywordSearchConfigurationPanel3.languagesLabel.text=\u6709\u52B9\u306A\u30B9\u30AF\u30EA\u30D7\u30C8\uFF08\u8A00\u8A9E\uFF09\uFF1A 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 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.enableUTF8Checkbox.text=UTF8\u30C6\u30AD\u30B9\u30C8\u62BD\u51FA\u306E\u6709\u52B9\u5316
@ -70,7 +70,6 @@ KeywordSearchListsViewerPanel.manageListsButton.toolTipText=\u30AD\u30FC\u30EF\u
KeywordSearchConfigurationPanel2.frequencyLabel.text=\u51E6\u7406\u4E2D\u306E\u7D50\u679C\u66F4\u65B0\u306E\u983B\u5EA6\uFF1A 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.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.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.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.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.searchIngestInProgressTitle=\u30AD\u30FC\u30EF\u30FC\u30C9\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3092\u5B9F\u884C\u4E2D
@ -105,22 +104,22 @@ KeywordSearch.newKwListTitle=\u65B0\u898F\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u3
KeywordSearchConfigurationPanel1.customizeComponents.noOwDefaultMsg=\u30C7\u30D5\u30A9\u30EB\u30C8\u30EA\u30B9\u30C8\u306F\u4E0A\u66F8\u304D\u3067\u304D\u307E\u305B\u3093 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.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 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.kwReToolTip=\u30AD\u30FC\u30EF\u30FC\u30C9\u306F\u6B63\u7FA9\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.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.enterNewWordToolTip=\u65B0\u898F\u5358\u8A9E\u3084\u4E00\u6B63\u898F\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.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.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.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.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.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.invalidKwMsg=\u7121\u52B9\u306A\u30AD\u30FC\u30EF\u30FC\u30C9\u30D1\u30BF\u30FC\u30F3\u3002\u5358\u8A9E\u3082\u3057\u304F\u306F\u6B63\u3057\u3044\u6B63\u898F\u8868\u73FE\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002
KeywordSearchEditListPanel.removeKwMsg=\u30AD\u30FC\u30EF\u30FC\u30C9\u3092\u524A\u9664 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.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.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.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.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.kwColName=\u30AD\u30FC\u30EF\u30FC\u30C9
KeywordSearchEditListPanel.exportButtonActionPerformed.regExColName=\u4E00\u822C\u7684\u306A\u8868\u73FE KeywordSearchEditListPanel.exportButtonActionPerformed.regExColName=\u6B63\u898F\u8868\u73FE
KeywordSearchFilterNode.getFileActions.openExternViewActLbl=\u5916\u90E8\u30D3\u30E5\u30FC\u30A2\u3067\u958B\u304F 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.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 KeywordSearchFilterNode.getFileActions.viewInNewWinActionLbl=\u65B0\u3057\u3044\u30A6\u30A3\u30F3\u30C9\u30A6\u3067\u8868\u793A
@ -128,7 +127,7 @@ KeywordSearchIngestModule.init.badInitMsg=\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u
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.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.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.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.knowFileHeaderLbl=\u65E2\u77E5\u30BF\u30A4\u30D7\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.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.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.idxErrLbl=\u30A8\u30E9\u30FC\uFF08\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u30A8\u30E9\u30FC\uFF09
@ -136,7 +135,7 @@ KeywordSearchIngestModule.postIndexSummary.errTxtLbl=\u30A8\u30E9\u30FC\uFF08\u3
KeywordSearchIngestModule.postIndexSummary.errIoLbl=\u30A8\u30E9\u30FC\uFF08I/O\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.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.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.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.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 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.addIngestTitle=\u51E6\u7406\u306B\u8FFD\u52A0
@ -146,11 +145,11 @@ KeywordSearchListsViewerPanel.initIngest.addIdxSearchMsg=\u9078\u629E\u3057\u305
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.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} 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.selectedColLbl=\u9078\u629E\u6E08\u307F
KeywordSearch.nameColLbl=\u540D\u524D KeywordSearch.nameColLbl=\u540D\u79F0
KeywordSearch.regExColLbl=\u4E00\u822C\u7684\u306A\u8868\u73FE KeywordSearch.regExColLbl=\u6B63\u898F\u8868\u73FE
KeywordSearchQueryManager.execute.exeWinTitle=\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22 {0} - {1} 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.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.importListFileDialogMsg={0}\u30D5\u30A1\u30A4\u30EB\u304B\u3089\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8\u3092\u30A4\u30F3\u30DD\u30FC\u30C8\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u3042\u308A\u307E\u3057\u305F
KeywordSearch.yesOwMsg=\u306F\u3044\u3001\u4E0A\u66F8\u304D\u3057\u307E\u3059 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.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.cancelImportMsg=\u30A4\u30F3\u30DD\u30FC\u30C8\u3092\u30AD\u30E3\u30F3\u30BB\u30EB
@ -161,6 +160,94 @@ KeywordSearchListsManagementPanel.fileExtensionFilterLbl=\u30AD\u30FC\u30EF\u30F
KeywordSearch.listImportFeatureTitle=\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8\u30A4\u30F3\u30DD\u30FC\u30C8 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.hashDbModuleName=\u30CF\u30C3\u30B7\u30E5\u30EB\u30C3\u30AF\u30A2\u30C3\u30D7
KeywordSearchIngestModule.moduleName=\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22 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 KeywordSearchIngestModule.moduleDescription=\u30EA\u30B9\u30C8\u5185\u306E\u30AD\u30FC\u30EF\u30FC\u30C9\u304A\u3088\u3073\u6B63\u898F\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_Name_KeywordSearchOptions=\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22
OptionsCategory_Keywords_KeywordSearchOptions=\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22 OptionsCategory_Keywords_KeywordSearchOptions=\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22
ExtractedContentPanel.pagePreviousButton.actionCommand=
ExtractedContentPanel.pageOfLabel.text=of
ExtractedContentPanel.pageCurLabel.text=-
ExtractedContentPanel.pageTotalLabel.text=-
KeywordSearchConfigurationPanel2.filesIndexedValue.text=-
KeywordSearchIngestSimplePanel.languagesValLabel.text=-
KeywordSearchConfigurationPanel2.chunksValLabel.text=-
KeywordSearchIngestSimplePanel.keywordSearchEncodings.text=-
AbstractFileChunk.index.exception.msg=\u30D5\u30A1\u30A4\u30EB\u30B9\u30C8\u30EA\u30F3\u30B0\u30C1\u30E3\u30F3\u30AF\u306E\u51E6\u7406\u4E2D\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\uFF1A {0}, \u30C1\u30E3\u30F3\u30AF\: {1}
AbstractFileStringContentStream.getSize.exception.msg=\u30B9\u30C8\u30EA\u30F3\u30B0\u5168\u4F53\u304C\u5909\u63DB\u3055\u308C\u306A\u3051\u308C\u3070\u3001\u5909\u63DB\u3055\u308C\u305F\u30B9\u30C8\u30EA\u30F3\u30B0\u5185\u306E\u30AD\u30E3\u30E9\u30AF\u30BF\u30FC\u6570\u306F\u4E0D\u660E\u3067\u3059\u3002
AbstractFileStringContentStream.getSrcInfo.text=\u30D5\u30A1\u30A4\u30EB\uFF1A{0}
ByteContentStream.getSrcInfo.text=\u30D5\u30A1\u30A4\u30EB\uFF1A{0}
ExtractedContentPanel.SetMarkup.progress.loading=\u30C6\u30AD\u30B9\u30C8\u3092\u8AAD\u307F\u8FBC\u307F\u4E2D
ExtractedContentPanel.SetMarkup.progress.displayName=\u30C6\u30AD\u30B9\u30C8\u3092\u8AAD\u307F\u8FBC\u307F\u4E2D
ExtractedContentViewer.nextPage.exception.msg=\u6B21\u306E\u30DA\u30FC\u30B8\u304C\u3042\u308A\u307E\u305B\u3093\u3002
ExtractedContentViewer.previousPage.exception.msg=\u524D\u306E\u30DA\u30FC\u30B8\u304C\u3042\u308A\u307E\u305B\u3093\u3002
ExtractedContentViewer.hasNextItem.exception.msg=\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u691C\u7D22\u53EF\u80FD\u306A\u30BD\u30FC\u30B9\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002
ExtractedContentViewer.hasPreviousItem.exception.msg=\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u691C\u7D22\u53EF\u80FD\u306A\u30BD\u30FC\u30B9\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002
ExtractedContentViewer.nextItem.exception.msg=\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u691C\u7D22\u53EF\u80FD\u306A\u30BD\u30FC\u30B9\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002
ExtractedContentViewer.previousItem.exception.msg=\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u691C\u7D22\u53EF\u80FD\u306A\u30BD\u30FC\u30B9\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002
ExtractedContentViewer.currentItem.exception.msg=\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u691C\u7D22\u53EF\u80FD\u306A\u30BD\u30FC\u30B9\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002
HighlightedMatchesSource.nextPage.exception.msg=\u6B21\u306E\u30DA\u30FC\u30B8\u304C\u3042\u308A\u307E\u305B\u3093\u3002
HighlightedMatchesSource.previousPage.exception.msg=\u524D\u306E\u30DA\u30FC\u30B8\u304C\u3042\u308A\u307E\u305B\u3093\u3002
HighlightedMatchesSource.nextItem.exception.msg=\u6B21\u306E\u30A2\u30A4\u30C6\u30E0\u304C\u3042\u308A\u307E\u305B\u3093\u3002
HighlightedMatchesSource.previousItem.exception.msg=\u524D\u306E\u30A2\u30A4\u30C6\u30E0\u304C\u3042\u308A\u307E\u305B\u3093\u3002
Ingester.ingest.exception.unknownImgId.msg=\u4E0B\u8A18\u306E\u30D5\u30A1\u30A4\u30EB\u306E\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3092\u30B9\u30AD\u30C3\u30D7\u3057\u3066\u3044\u307E\u3059\u3002\u4E0D\u660E\u306A\u30A4\u30E1\u30FC\u30B8ID\uFF1A{0}
Ingester.ingest.exception.cantReadStream.msg=\u30B3\u30F3\u30C6\u30F3\u30C4\u30B9\u30C8\u30EA\u30FC\u30E0\u3092\u8AAD\u307F\u53D6\u308C\u307E\u305B\u3093\u3067\u3057\u305F\uFF1A{0}
Ingester.ingest.exception.err.msg=\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u51E6\u7406\u4E2D\u306E\u30A8\u30E9\u30FC\uFF1A{0}
Ingester.ingestExtract.exception.solrTimeout.msg=\u4E0B\u8A18\u306EID\u306B\u5BFE\u3059\u308B\u3001Solr\u306E\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u30EA\u30AF\u30A8\u30B9\u30C8\u306F\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8\u3057\u307E\u3057\u305F\uFF1A{0}, name\: {1}
Ingester.ingestExtract.exception.probPostToSolr.msg=Solr\u306B\u30B3\u30F3\u30C6\u30F3\u30C4\u3092\u30DD\u30B9\u30C8\u3059\u308B\u306E\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002ID\uFF1A{0}, \u540D\u79F0\: {1}
Ingester.UpReqestTask.run.exception.sorlNotAvail.msg=Solr\u30B3\u30A2\u304C\u5229\u7528\u4E0D\u53EF\u3067\u3059\u3002\u30B3\u30F3\u30C6\u30F3\u30C4\u3092\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3067\u304D\u307E\u305B\u3093\u3002
Ingester.UpRequestTask.run.exception.probReadFile.msg=\u30D5\u30A1\u30A4\u30EB\u306E\u8AAD\u307F\u53D6\u308A\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002
Ingester.UpRequestTask.run.exception.solrProb.msg=Solr\u306B\u306F\u554F\u984C\u304C\u3042\u308A\u307E\u3059
Ingester.UpRequestTask.run.exception.probPostToSolr.msg=\u30D5\u30A1\u30A4\u30EB\u30B3\u30F3\u30C6\u30F3\u30C4\u3092Solr\u306B\u30DD\u30B9\u30C8\u3059\u308B\u306E\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002SolrException\u30A8\u30E9\u30FC\u30B3\u30FC\u30C9\uFF1A{0}
Ingester.FscContentStream.getSrcInfo=\u30D5\u30A1\u30A4\u30EB\uFF1A{0}
Ingester.FscContentStream.getReader=\u307E\u3060\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002
Ingester.NullContentStream.getSrcInfo.text=\u30D5\u30A1\u30A4\u30EB\uFF1A{0}
Ingester.NullContentStream.getReader=\u307E\u3060\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002
KeywordSearch.moduleErr=\u30E2\u30B8\u30E5\u30FC\u30EB\u30A8\u30E9\u30FC
KeywordSearch.fireNumIdxFileChg.moduleErr.msg=KeywordSearch\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u3092\u78BA\u8A8D\u4E2D\u306B\u30E2\u30B8\u30E5\u30FC\u30EB\u304C\u30A8\u30E9\u30FC\u3092\u8D77\u3053\u3057\u307E\u3057\u305F\u3002\u3069\u306E\u30E2\u30B8\u30E5\u30FC\u30EB\u304B\u30ED\u30B0\u3067\u78BA\u8A8D\u3057\u3066\u4E0B\u3055\u3044\u3002\u4E00\u90E8\u306E\u30C7\u30FC\u30BF\u304C\u4E0D\u5B8C\u5168\u304B\u3082\u3057\u308C\u307E\u305B\u3093\u3002
KeywordSearchIngestModule.init.exception.errConnToSolr.msg=Solr\u30B5\u30FC\u30D0\u3078\u63A5\u7D9A\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\uFF1A{0}
KeywordSearchListsEncase.save.exception.msg=\u307E\u3060\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002
KeywordSearchListsEncase.save2.exception.msg=\u307E\u3060\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002
KeywordSearchListsEncase.encaseMetaType.exception.msg=\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u306A\u3044EncaseMetaType\uFF1A{0}
KeywordSearchListsManagementPanel.getColName.text=\u540D\u79F0
KeywordSearchListsManagementPanel.setValueAt.exception.msg=\u30BB\u30EB\u306E\u7DE8\u96C6\u306F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093
KeywordSearchListsViewerPanel.isLuceneQuerySel.exception.msg=\u30DE\u30EB\u30C1\u30EF\u30FC\u30C9\u30AF\u30A8\u30EA\u3067\u306F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002
KeywordSearchListsViewerPanel.getQueryText.exception.msg=\u30DE\u30EB\u30C1\u30EF\u30FC\u30C9\u30AF\u30A8\u30EA\u3067\u306F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002
KeywordSearchOptionsPanelController.moduleErr=\u30E2\u30B8\u30E5\u30FC\u30EB\u30A8\u30E9\u30FC
KeywordSearchOptionsPanelController.moduleErr.msg1=KeywordSearchOptionsPanelController\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u3092\u78BA\u8A8D\u4E2D\u306B\u30E2\u30B8\u30E5\u30FC\u30EB\u304C\u30A8\u30E9\u30FC\u3092\u8D77\u3053\u3057\u307E\u3057\u305F\u3002\u3069\u306E\u30E2\u30B8\u30E5\u30FC\u30EB\u304B\u30ED\u30B0\u3067\u78BA\u8A8D\u3057\u3066\u4E0B\u3055\u3044\u3002\u4E00\u90E8\u306E\u30C7\u30FC\u30BF\u304C\u4E0D\u5B8C\u5168\u304B\u3082\u3057\u308C\u307E\u305B\u3093\u3002
KeywordSearchOptionsPanelController.moduleErr.msg2=KeywordSearchOptionsPanelController\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u3092\u78BA\u8A8D\u4E2D\u306B\u30E2\u30B8\u30E5\u30FC\u30EB\u304C\u30A8\u30E9\u30FC\u3092\u8D77\u3053\u3057\u307E\u3057\u305F\u3002\u3069\u306E\u30E2\u30B8\u30E5\u30FC\u30EB\u304B\u30ED\u30B0\u3067\u78BA\u8A8D\u3057\u3066\u4E0B\u3055\u3044\u3002\u4E00\u90E8\u306E\u30C7\u30FC\u30BF\u304C\u4E0D\u5B8C\u5168\u304B\u3082\u3057\u308C\u307E\u305B\u3093\u3002
KeywordSearchPanel.getQueryList.exception.msg=\u30B7\u30F3\u30B0\u30EB\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u306E\u30EA\u30B9\u30C8\u304C\u3042\u308A\u307E\u305B\u3093
KeywordSearchQueryManager.pathText.text=\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22
KeywordSearchResultFactory.progress.saving=\u7D50\u679C\u3092\u4FDD\u5B58\u4E2D\uFF1A{0}
KeywordSearchSettings.moduleName.text=\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22
KeywordSearchSettings.properties_options.text={0}_\u30AA\u30D7\u30B7\u30E7\u30F3
KeywordSearchSettings.propertiesNSRL.text={0}_NSRL
KeywordSearchSettings.propertiesScripts.text={0}_\u30B9\u30AF\u30EA\u30D7\u30C8
NoOpenCoreException.err.noOpenSorlCore.msg=\u73FE\u5728\u958B\u3044\u3066\u3044\u308BSolr\u30B3\u30A2\u306F\u3042\u308A\u307E\u305B\u3093\u3002
Server.start.exception.cantStartSolr.msg=Solr\u30B5\u30FC\u30D0\u30D7\u30ED\u30BB\u30B9\u3092\u958B\u59CB\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F
Server.start.exception.cantStartSolr.msg2=Solr\u30B5\u30FC\u30D0\u30D7\u30ED\u30BB\u30B9\u3092\u958B\u59CB\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F
Server.isRunning.exception.errCheckSolrRunning.msg=Solr\u30B5\u30FC\u30D0\u304C\u7A3C\u50CD\u3057\u3066\u3044\u308B\u304B\u78BA\u8A8D\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F
Server.isRunning.exception.errCheckSolrRunning.msg2=Solr\u30B5\u30FC\u30D0\u304C\u7A3C\u50CD\u3057\u3066\u3044\u308B\u304B\u78BA\u8A8D\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F
Server.openCore.exception.alreadyOpen.msg=\u3059\u3067\u306B\u958B\u3044\u3066\u3044\u308B\u30B3\u30A2\u3067\u3059\uFF01\u307E\u305A\u660E\u793A\u7684\u306B\u30B3\u30A2\u3092\u9589\u3058\u3066\u4E0B\u3055\u3044\u3002
Server.queryNumIdxFiles.exception.msg=\u8907\u6570\u306E\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\u306B\u5BFE\u3057\u3066\u306E\u30AF\u30A8\u30EA\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002
Server.queryNumIdxChunks.exception.msg=\u8907\u6570\u306E\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3055\u308C\u305F\u30C1\u30E3\u30F3\u30AF\u306B\u5BFE\u3057\u3066\u306E\u30AF\u30A8\u30EA\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002
Server.queryNumIdxDocs.exception.msg=\u8907\u6570\u306E\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3055\u308C\u305F\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u306B\u5BFE\u3057\u3066\u306E\u30AF\u30A8\u30EA\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002
Server.queryIsIdxd.exception.msg=\u30B3\u30F3\u30C6\u30F3\u30C4\u304C\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3055\u308C\u305F\u304B\u78BA\u8A8D\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002
Server.queryNumFileChunks.exception.msg=\u30D5\u30A1\u30A4\u30EB\u30C1\u30E3\u30F3\u30AF\u306E\u6570\u3092\u78BA\u8A8D\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002
Server.query.exception.msg=\u30AF\u30A8\u30EA\u306E\u5B9F\u884C\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\uFF1A{0}
Server.query2.exception.msg=\u30AF\u30A8\u30EA\u306E\u5B9F\u884C\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\uFF1A{0}
Server.queryTerms.exception.msg=Terms\u30AF\u30A8\u30EA\u306E\u5B9F\u884C\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F
Server.openCore.exception.msg=\u30B3\u30A2\u3092\u958B\u304F\u30EA\u30AF\u30A8\u30B9\u30C8\u3092\u3057\u307E\u3057\u305F\u304C\u3001\u30B5\u30FC\u30D0\u304C\u307E\u3060\u7A3C\u50CD\u3057\u3066\u3044\u307E\u305B\u3093\u3002
Server.openCore.exception.cantOpen.msg=\u30B3\u30A2\u3092\u958B\u3051\u307E\u305B\u3093\u3067\u3057\u305F
Server.openCore.exception.cantOpen.msg2=\u30B3\u30A2\u3092\u958B\u3051\u307E\u305B\u3093\u3067\u3057\u305F
Server.request.exception.exception.msg=Solr\u30EA\u30AF\u30A8\u30B9\u30C8\u3092\u767A\u884C\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F
Server.commit.exception.msg=\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u3092\u30B3\u30DF\u30C3\u30C8\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F
Server.addDoc.exception.msg=\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u30CF\u30F3\u30C9\u30E9\u30FC\u3092\u4F7F\u7528\u3057\u307E\u3057\u305F\u304C\u3001\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u306B\u4E0B\u8A18\u306E\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u3092\u8FFD\u52A0\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF1A{0}
Server.close.exception.msg=\u30B3\u30A2\u3092\u9589\u3058\u308C\u307E\u305B\u3093
Server.close.exception.msg2=\u30B3\u30A2\u3092\u9589\u3058\u308C\u307E\u305B\u3093
Server.solrServerNoPortException.msg=\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u306B\u4F7F\u7528\u3057\u3066\u3044\u308B\u30B5\u30FC\u30D0\u306F\u30DD\u30FC\u30C8{0}\u306B\u30D0\u30A4\u30F3\u30C9\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u30DD\u30FC\u30C8\u306F\u4F7F\u7528\u4E0D\u53EF\u3067\u3059\u3002\u30C7\u30D5\u30A9\u30EB\u30C8{1}\u30DD\u30FC\u30C8\u306E\u5909\u66F4\u3092\u691C\u8A0E\u3057\u3066\u4E0B\u3055\u3044\u3002
KeywordSearchIngestModule.doInBackGround.displayName=\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22
KeywordSearchIngestModule.doInBackGround.finalizeMsg=-\u3000\u6700\u7D42\u51E6\u7406\u4E2D
KeywordSearchIngestModule.doInBackGround.pendingMsg=\uFF08\u30DA\u30F3\u30C7\u30A3\u30F3\u30B0\uFF09
KeywordSearchIngestModule.doInBackGround.cancelMsg=\uFF08\u30AD\u30E3\u30F3\u30BB\u30EB\u4E2D\u2026\uFF09
Server.addDoc.exception.msg2=\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u30CF\u30F3\u30C9\u30E9\u30FC\u3092\u4F7F\u7528\u3057\u307E\u3057\u305F\u304C\u3001\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u306B\u4E0B\u8A18\u306E\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u3092\u8FFD\u52A0\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF1A{0}
ExtractedContentViewer.getSolrContent.txtBodyItal=<span style\=''font-style\:italic''>{0}</span>
Keyword.toString.text=Keyword'{'query\={0}, isLiteral\={1}, keywordType\={2}'}'

View File

@ -24,6 +24,8 @@ import java.io.InputStream;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.io.Reader; import java.io.Reader;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.Logger;
import org.apache.solr.common.util.ContentStream; import org.apache.solr.common.util.ContentStream;
import org.sleuthkit.datamodel.AbstractContent; import org.sleuthkit.datamodel.AbstractContent;
@ -84,7 +86,7 @@ class ByteContentStream implements ContentStream {
@Override @Override
public String getSourceInfo() { public String getSourceInfo() {
return "File:" + aContent.getId(); return NbBundle.getMessage(this.getClass(), "ByteContentStream.getSrcInfo.text", aContent.getId());
} }
@Override @Override

View File

@ -685,8 +685,10 @@ class ExtractedContentPanel extends javax.swing.JPanel {
@Override @Override
protected Object doInBackground() throws Exception { protected Object doInBackground() throws Exception {
progress = ProgressHandleFactory.createHandle("Loading text"); progress = ProgressHandleFactory.createHandle(
progress.setDisplayName("Loading text"); NbBundle.getMessage(this.getClass(), "ExtractedContentPanel.SetMarkup.progress.loading"));
progress.setDisplayName(
NbBundle.getMessage(this.getClass(), "ExtractedContentPanel.SetMarkup.progress.displayName"));
progress.start(); progress.start();
progress.switchToIndeterminate(); progress.switchToIndeterminate();

View File

@ -134,7 +134,8 @@ public class ExtractedContentViewer implements DataContentViewer {
@Override @Override
public int nextPage() { public int nextPage() {
if (!hasNextPage()) { if (!hasNextPage()) {
throw new IllegalStateException("No next page."); throw new IllegalStateException(
NbBundle.getMessage(this.getClass(), "ExtractedContentViewer.nextPage.exception.msg"));
} }
++currentPage; ++currentPage;
return currentPage; return currentPage;
@ -143,7 +144,8 @@ public class ExtractedContentViewer implements DataContentViewer {
@Override @Override
public int previousPage() { public int previousPage() {
if (!hasPreviousPage()) { if (!hasPreviousPage()) {
throw new IllegalStateException("No previous page."); throw new IllegalStateException(
NbBundle.getMessage(this.getClass(), "ExtractedContentViewer.previousPage.exception.msg"));
} }
--currentPage; --currentPage;
return currentPage; return currentPage;
@ -151,27 +153,32 @@ public class ExtractedContentViewer implements DataContentViewer {
@Override @Override
public boolean hasNextItem() { public boolean hasNextItem() {
throw new UnsupportedOperationException("Not supported, not a searchable source."); throw new UnsupportedOperationException(
NbBundle.getMessage(this.getClass(), "ExtractedContentViewer.hasNextItem.exception.msg"));
} }
@Override @Override
public boolean hasPreviousItem() { public boolean hasPreviousItem() {
throw new UnsupportedOperationException("Not supported, not a searchable source."); throw new UnsupportedOperationException(
NbBundle.getMessage(this.getClass(), "ExtractedContentViewer.hasPreviousItem.exception.msg"));
} }
@Override @Override
public int nextItem() { public int nextItem() {
throw new UnsupportedOperationException("Not supported, not a searchable source."); throw new UnsupportedOperationException(
NbBundle.getMessage(this.getClass(), "ExtractedContentViewer.nextItem.exception.msg"));
} }
@Override @Override
public int previousItem() { public int previousItem() {
throw new UnsupportedOperationException("Not supported, not a searchable source."); throw new UnsupportedOperationException(
NbBundle.getMessage(this.getClass(), "ExtractedContentViewer.previousItem.exception.msg"));
} }
@Override @Override
public int currentItem() { public int currentItem() {
throw new UnsupportedOperationException("Not supported, not a searchable source."); throw new UnsupportedOperationException(
NbBundle.getMessage(this.getClass(), "ExtractedContentViewer.currentItem.exception.msg"));
} }
@Override @Override

View File

@ -223,7 +223,8 @@ class HighlightedMatchesSource implements MarkupSource, HighlightLookup {
@Override @Override
public int nextPage() { public int nextPage() {
if (!hasNextPage()) { if (!hasNextPage()) {
throw new IllegalStateException("No next page."); throw new IllegalStateException(
NbBundle.getMessage(this.getClass(), "HighlightedMatchesSource.nextPage.exception.msg"));
} }
int idx = pages.indexOf(this.currentPage); int idx = pages.indexOf(this.currentPage);
currentPage = pages.get(idx + 1); currentPage = pages.get(idx + 1);
@ -233,7 +234,8 @@ class HighlightedMatchesSource implements MarkupSource, HighlightLookup {
@Override @Override
public int previousPage() { public int previousPage() {
if (!hasPreviousPage()) { if (!hasPreviousPage()) {
throw new IllegalStateException("No previous page."); throw new IllegalStateException(
NbBundle.getMessage(this.getClass(), "HighlightedMatchesSource.previousPage.exception.msg"));
} }
int idx = pages.indexOf(this.currentPage); int idx = pages.indexOf(this.currentPage);
currentPage = pages.get(idx - 1); currentPage = pages.get(idx - 1);
@ -259,7 +261,8 @@ class HighlightedMatchesSource implements MarkupSource, HighlightLookup {
@Override @Override
public int nextItem() { public int nextItem() {
if (!hasNextItem()) { if (!hasNextItem()) {
throw new IllegalStateException("No next item."); throw new IllegalStateException(
NbBundle.getMessage(this.getClass(), "HighlightedMatchesSource.nextItem.exception.msg"));
} }
int cur = pagesToHits.get(currentPage) + 1; int cur = pagesToHits.get(currentPage) + 1;
pagesToHits.put(currentPage, cur); pagesToHits.put(currentPage, cur);
@ -269,7 +272,8 @@ class HighlightedMatchesSource implements MarkupSource, HighlightLookup {
@Override @Override
public int previousItem() { public int previousItem() {
if (!hasPreviousItem()) { if (!hasPreviousItem()) {
throw new IllegalStateException("No previous item."); throw new IllegalStateException(
NbBundle.getMessage(this.getClass(), "HighlightedMatchesSource.previousItem.exception.msg"));
} }
int cur = pagesToHits.get(currentPage) - 1; int cur = pagesToHits.get(currentPage) - 1;
pagesToHits.put(currentPage, cur); pagesToHits.put(currentPage, cur);

View File

@ -41,6 +41,7 @@ import org.apache.solr.common.SolrException.ErrorCode;
import org.apache.solr.common.util.ContentStream; import org.apache.solr.common.util.ContentStream;
import org.apache.solr.common.SolrInputDocument; import org.apache.solr.common.SolrInputDocument;
import org.openide.util.Exceptions; import org.openide.util.Exceptions;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.casemodule.Case;
import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.autopsy.datamodel.ContentUtils; import org.sleuthkit.autopsy.datamodel.ContentUtils;
@ -279,7 +280,8 @@ class Ingester {
if (fields.get(Server.Schema.IMAGE_ID.toString()) == null) { if (fields.get(Server.Schema.IMAGE_ID.toString()) == null) {
//skip the file, image id unknown //skip the file, image id unknown
String msg = "Skipping indexing the file, unknown image id, for file: " + cs.getName(); String msg = NbBundle.getMessage(this.getClass(),
"Ingester.ingest.exception.unknownImgId.msg", cs.getName());
logger.log(Level.SEVERE, msg); logger.log(Level.SEVERE, msg);
throw new IngesterException(msg); throw new IngesterException(msg);
} }
@ -301,7 +303,9 @@ class Ingester {
is = cs.getStream(); is = cs.getStream();
read = is.read(docChunkContentBuf); read = is.read(docChunkContentBuf);
} catch (IOException ex) { } catch (IOException ex) {
throw new IngesterException("Could not read content stream: " + cs.getName()); throw new IngesterException(
NbBundle.getMessage(this.getClass(), "Ingester.ingest.exception.cantReadStream.msg",
cs.getName()));
} finally { } finally {
try { try {
is.close(); is.close();
@ -333,7 +337,8 @@ class Ingester {
solrServer.addDocument(updateDoc); solrServer.addDocument(updateDoc);
uncommitedIngests = true; uncommitedIngests = true;
} catch (KeywordSearchModuleException ex) { } catch (KeywordSearchModuleException ex) {
throw new IngesterException("Error ingestint document: " + cs.getName(), ex); throw new IngesterException(
NbBundle.getMessage(this.getClass(), "Ingester.ingest.exception.err.msg", cs.getName()), ex);
} }
@ -373,9 +378,13 @@ class Ingester {
logger.log(Level.WARNING, "Solr timeout encountered, trying to restart Solr"); logger.log(Level.WARNING, "Solr timeout encountered, trying to restart Solr");
//restart may be needed to recover from some error conditions //restart may be needed to recover from some error conditions
hardSolrRestart(); hardSolrRestart();
throw new IngesterException("Solr index request time out for id: " + fields.get("id") + ", name: " + fields.get("file_name")); throw new IngesterException(
NbBundle.getMessage(this.getClass(), "Ingester.ingestExtract.exception.solrTimeout.msg",
fields.get("id"), fields.get("file_name")));
} catch (Exception e) { } catch (Exception e) {
throw new IngesterException("Problem posting content to Solr, id: " + fields.get("id") + ", name: " + fields.get("file_name"), e); throw new IngesterException(
NbBundle.getMessage(this.getClass(), "Ingester.ingestExtract.exception.probPostToSolr.msg",
fields.get("id"), fields.get("file_name")), e);
} }
uncommitedIngests = true; uncommitedIngests = true;
} }
@ -443,14 +452,17 @@ class Ingester {
up.setMethod(METHOD.POST); up.setMethod(METHOD.POST);
solrServer.request(up); solrServer.request(up);
} catch (NoOpenCoreException ex) { } catch (NoOpenCoreException ex) {
throw new RuntimeException("No Solr core available, cannot index the content", ex); throw new RuntimeException(
NbBundle.getMessage(this.getClass(), "Ingester.UpReqestTask.run.exception.sorlNotAvail.msg"), ex);
} catch (IllegalStateException ex) { } catch (IllegalStateException ex) {
// problems with content // problems with content
throw new RuntimeException("Problem reading file.", ex); throw new RuntimeException(
NbBundle.getMessage(this.getClass(), "Ingester.UpRequestTask.run.exception.probReadFile.msg"), ex);
} catch (SolrServerException ex) { } catch (SolrServerException ex) {
// If there's a problem talking to Solr, something is fundamentally // If there's a problem talking to Solr, something is fundamentally
// wrong with ingest // wrong with ingest
throw new RuntimeException("Problem with Solr", ex); throw new RuntimeException(
NbBundle.getMessage(this.getClass(), "Ingester.UpRequestTask.run.exception.solrProb.msg"), ex);
} catch (SolrException ex) { } catch (SolrException ex) {
// Tika problems result in an unchecked SolrException // Tika problems result in an unchecked SolrException
ErrorCode ec = ErrorCode.getErrorCode(ex.code()); ErrorCode ec = ErrorCode.getErrorCode(ex.code());
@ -458,7 +470,10 @@ class Ingester {
// When Tika has problems with a document, it throws a server error // When Tika has problems with a document, it throws a server error
// but it's okay to continue with other documents // but it's okay to continue with other documents
if (ec.equals(ErrorCode.SERVER_ERROR)) { if (ec.equals(ErrorCode.SERVER_ERROR)) {
throw new RuntimeException("Problem posting file contents to Solr. SolrException error code: " + ec, ex); throw new RuntimeException(NbBundle.getMessage(this.getClass(),
"Ingester.UpRequestTask.run.exception.probPostToSolr.msg",
ec),
ex);
} else { } else {
// shouldn't get any other error codes // shouldn't get any other error codes
throw ex; throw ex;
@ -513,7 +528,7 @@ class Ingester {
@Override @Override
public String getSourceInfo() { public String getSourceInfo() {
return "File:" + f.getId(); return NbBundle.getMessage(this.getClass(), "Ingester.FscContentStream.getSrcInfo", f.getId());
} }
@Override @Override
@ -533,7 +548,8 @@ class Ingester {
@Override @Override
public Reader getReader() throws IOException { public Reader getReader() throws IOException {
throw new UnsupportedOperationException("Not supported yet."); throw new UnsupportedOperationException(
NbBundle.getMessage(this.getClass(), "Ingester.FscContentStream.getReader"));
} }
} }
@ -555,7 +571,7 @@ class Ingester {
@Override @Override
public String getSourceInfo() { public String getSourceInfo() {
return "File:" + aContent.getId(); return NbBundle.getMessage(this.getClass(), "Ingester.NullContentStream.getSrcInfo.text", aContent.getId());
} }
@Override @Override
@ -575,7 +591,8 @@ class Ingester {
@Override @Override
public Reader getReader() throws IOException { public Reader getReader() throws IOException {
throw new UnsupportedOperationException("Not supported yet."); throw new UnsupportedOperationException(
NbBundle.getMessage(this.getClass(), "Ingester.NullContentStream.getReader"));
} }
} }

View File

@ -19,6 +19,7 @@
package org.sleuthkit.autopsy.keywordsearch; package org.sleuthkit.autopsy.keywordsearch;
import org.openide.util.NbBundle;
import org.sleuthkit.datamodel.BlackboardAttribute; import org.sleuthkit.datamodel.BlackboardAttribute;
/** /**
@ -72,7 +73,7 @@ class Keyword {
@Override @Override
public String toString() { public String toString() {
return "Keyword{" + "query=" + keywordString + ", isLiteral=" + isLiteral + ", keywordType=" + keywordType + '}'; return NbBundle.getMessage(this.getClass(), "Keyword.toString.text", keywordString, isLiteral, keywordType);
} }

View File

@ -28,6 +28,7 @@ import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import java.util.logging.SimpleFormatter; import java.util.logging.SimpleFormatter;
import org.openide.util.Exceptions; import org.openide.util.Exceptions;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.casemodule.Case;
import org.sleuthkit.autopsy.coreutils.PlatformUtil; import org.sleuthkit.autopsy.coreutils.PlatformUtil;
import org.sleuthkit.autopsy.keywordsearch.KeywordSearchResultFactory.ResultWriter; import org.sleuthkit.autopsy.keywordsearch.KeywordSearchResultFactory.ResultWriter;
@ -107,7 +108,10 @@ public class KeywordSearch {
} }
catch (Exception e) { catch (Exception e) {
logger.log(Level.SEVERE, "KeywordSearch listener threw exception", e); logger.log(Level.SEVERE, "KeywordSearch listener threw exception", e);
MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to KeywordSearch updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); MessageNotifyUtil.Notify.show(NbBundle.getMessage(KeywordSearch.class, "KeywordSearch.moduleErr"),
NbBundle.getMessage(KeywordSearch.class,
"KeywordSearch.fireNumIdxFileChg.moduleErr.msg"),
MessageNotifyUtil.MessageType.ERROR);
} }
} }

View File

@ -377,7 +377,9 @@ public final class KeywordSearchIngestModule extends IngestModuleAbstractFile {
// we had cases where getStatus was OK, but the connection resulted in a 404 // we had cases where getStatus was OK, but the connection resulted in a 404
server.queryNumIndexedDocuments(); server.queryNumIndexedDocuments();
} catch (KeywordSearchModuleException | NoOpenCoreException ex) { } catch (KeywordSearchModuleException | NoOpenCoreException ex) {
throw new IngestModuleException("Error connecting to SOLR server: " + ex.getMessage()); throw new IngestModuleException(
NbBundle.getMessage(this.getClass(), "KeywordSearchIngestModule.init.exception.errConnToSolr.msg",
ex.getMessage()));
} }
//initialize extractors //initialize extractors

View File

@ -18,6 +18,8 @@
*/ */
package org.sleuthkit.autopsy.keywordsearch; package org.sleuthkit.autopsy.keywordsearch;
import org.openide.util.NbBundle;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
@ -115,12 +117,14 @@ class KeywordSearchListsEncase extends KeywordSearchListsAbstract{
@Override @Override
public boolean save() { public boolean save() {
throw new UnsupportedOperationException("Not supported yet."); throw new UnsupportedOperationException(
NbBundle.getMessage(this.getClass(), "KeywordSearchListsEncase.save.exception.msg"));
} }
@Override @Override
public boolean save(boolean isExport) { public boolean save(boolean isExport) {
throw new UnsupportedOperationException("Not supported yet."); throw new UnsupportedOperationException(
NbBundle.getMessage(this.getClass(), "KeywordSearchListsEncase.save2.exception.msg"));
} }
@Override @Override
@ -173,7 +177,10 @@ class KeywordSearchListsEncase extends KeywordSearchListsAbstract{
} else if(type.equals("")) { } else if(type.equals("")) {
return Expression; return Expression;
} else { } else {
throw new IllegalArgumentException("Unsupported EncaseMetaType: " + type); throw new IllegalArgumentException(
NbBundle.getMessage(KeywordSearchListsEncase.class,
"KeywordSearchListsEncase.encaseMetaType.exception.msg",
type));
} }
} }
} }

View File

@ -342,7 +342,7 @@ class KeywordSearchListsManagementPanel extends javax.swing.JPanel implements Op
@Override @Override
public String getColumnName(int column) { public String getColumnName(int column) {
return "Name"; return NbBundle.getMessage(this.getClass(), "KeywordSearchListsManagementPanel.getColName.text");
} }
@Override @Override
@ -357,7 +357,8 @@ class KeywordSearchListsManagementPanel extends javax.swing.JPanel implements Op
@Override @Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) { 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(), "KeywordSearchListsManagementPanel.setValueAt.exception.msg"));
} }
@Override @Override

View File

@ -322,12 +322,14 @@ class KeywordSearchListsViewerPanel extends AbstractKeywordSearchPerformer {
@Override @Override
public boolean isLuceneQuerySelected() { public boolean isLuceneQuerySelected() {
throw new UnsupportedOperationException("Not supported for multi-word queries."); throw new UnsupportedOperationException(
NbBundle.getMessage(this.getClass(), "KeywordSearchListsViewerPanel.isLuceneQuerySel.exception.msg"));
} }
@Override @Override
public String getQueryText() { public String getQueryText() {
throw new UnsupportedOperationException("Not supported for multi-word queries."); throw new UnsupportedOperationException(
NbBundle.getMessage(this.getClass(), "KeywordSearchListsViewerPanel.getQueryText.exception.msg"));
} }
void addSearchButtonActionListener(ActionListener al) { void addSearchButtonActionListener(ActionListener al) {

View File

@ -10,6 +10,7 @@ import javax.swing.JComponent;
import org.netbeans.spi.options.OptionsPanelController; import org.netbeans.spi.options.OptionsPanelController;
import org.openide.util.HelpCtx; import org.openide.util.HelpCtx;
import org.openide.util.Lookup; import org.openide.util.Lookup;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil;
import java.util.logging.Level; import java.util.logging.Level;
import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.Logger;
@ -82,7 +83,10 @@ public final class KeywordSearchOptionsPanelController extends OptionsPanelContr
} }
catch (Exception e) { catch (Exception e) {
logger.log(Level.SEVERE, "KeywordSearchOptionsPanelController listener threw exception", e); logger.log(Level.SEVERE, "KeywordSearchOptionsPanelController listener threw exception", e);
MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to KeywordSearchOptionsPanelController updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); MessageNotifyUtil.Notify.show(
NbBundle.getMessage(this.getClass(), "KeywordSearchOptionsPanelController.moduleErr"),
NbBundle.getMessage(this.getClass(), "KeywordSearchOptionsPanelController.moduleErr.msg1"),
MessageNotifyUtil.MessageType.ERROR);
} }
} }
try { try {
@ -90,7 +94,10 @@ public final class KeywordSearchOptionsPanelController extends OptionsPanelContr
} }
catch (Exception e) { catch (Exception e) {
logger.log(Level.SEVERE, "KeywordSearchOptionsPanelController listener threw exception", e); logger.log(Level.SEVERE, "KeywordSearchOptionsPanelController listener threw exception", e);
MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to KeywordSearchOptionsPanelController updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); MessageNotifyUtil.Notify.show(
NbBundle.getMessage(this.getClass(), "KeywordSearchOptionsPanelController.moduleErr"),
NbBundle.getMessage(this.getClass(), "KeywordSearchOptionsPanelController.moduleErr.msg2"),
MessageNotifyUtil.MessageType.ERROR);
} }
} }

View File

@ -34,12 +34,14 @@ import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener; import java.beans.PropertyChangeListener;
import java.util.List; import java.util.List;
import java.util.logging.Level; import java.util.logging.Level;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.Logger;
import javax.swing.JMenuItem; import javax.swing.JMenuItem;
import javax.swing.SwingUtilities; import javax.swing.SwingUtilities;
import javax.swing.event.PopupMenuEvent; import javax.swing.event.PopupMenuEvent;
import javax.swing.event.PopupMenuListener; import javax.swing.event.PopupMenuListener;
import org.apache.solr.client.solrj.SolrServerException;
import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.casemodule.Case;
/** /**
@ -384,7 +386,8 @@ class KeywordSearchPanel extends AbstractKeywordSearchPerformer {
@Override @Override
public List<Keyword> getQueryList() { public List<Keyword> getQueryList() {
throw new UnsupportedOperationException("No list for single-keyword search"); throw new UnsupportedOperationException(
NbBundle.getMessage(this.getClass(), "KeywordSearchPanel.getQueryList.exception.msg"));
} }
private class KeywordPropertyChangeListener implements PropertyChangeListener { private class KeywordPropertyChangeListener implements PropertyChangeListener {

View File

@ -165,7 +165,7 @@ class KeywordSearchQueryManager {
rootNode = Node.EMPTY; rootNode = Node.EMPTY;
} }
final String pathText = "Keyword search"; final String pathText = NbBundle.getMessage(this.getClass(), "KeywordSearchQueryManager.pathText.text");
DataResultTopComponent.initInstance(pathText, rootNode, things.size(), searchResultWin); DataResultTopComponent.initInstance(pathText, rootNode, things.size(), searchResultWin);

View File

@ -28,6 +28,8 @@ import java.util.Map;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
import java.util.concurrent.locks.ReentrantReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock;
import java.util.logging.Level; import java.util.logging.Level;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.Logger;
import javax.swing.SwingUtilities; import javax.swing.SwingUtilities;
import javax.swing.SwingWorker; import javax.swing.SwingWorker;
@ -571,7 +573,8 @@ class KeywordSearchResultFactory extends ChildFactory<KeyValueQuery> {
try { try {
final String queryStr = query.getQueryString(); final String queryStr = query.getQueryString();
final String queryDisp = queryStr.length() > QUERY_DISPLAY_LEN ? queryStr.substring(0, QUERY_DISPLAY_LEN - 1) + " ..." : queryStr; final String queryDisp = queryStr.length() > QUERY_DISPLAY_LEN ? queryStr.substring(0, QUERY_DISPLAY_LEN - 1) + " ..." : queryStr;
progress = ProgressHandleFactory.createHandle("Saving results: " + queryDisp, new Cancellable() { progress = ProgressHandleFactory.createHandle(
NbBundle.getMessage(this.getClass(), "KeywordSearchResultFactory.progress.saving", queryDisp), new Cancellable() {
@Override @Override
public boolean cancel() { public boolean cancel() {

View File

@ -25,6 +25,8 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.logging.Level; import java.util.logging.Level;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.autopsy.coreutils.ModuleSettings; import org.sleuthkit.autopsy.coreutils.ModuleSettings;
import org.sleuthkit.autopsy.coreutils.StringExtract; import org.sleuthkit.autopsy.coreutils.StringExtract;
@ -34,10 +36,10 @@ import org.sleuthkit.autopsy.keywordsearch.KeywordSearchIngestModule.UpdateFrequ
//This file contains constants and settings for KeywordSearch //This file contains constants and settings for KeywordSearch
class KeywordSearchSettings { class KeywordSearchSettings {
public static final String MODULE_NAME = "KeywordSearch"; public static final String MODULE_NAME = NbBundle.getMessage(KeywordSearchSettings.class, "KeywordSearchSettings.moduleName.text");
static final String PROPERTIES_OPTIONS = MODULE_NAME+"_Options"; static final String PROPERTIES_OPTIONS = NbBundle.getMessage(KeywordSearchSettings.class, "KeywordSearchSettings.properties_options.text", MODULE_NAME);
static final String PROPERTIES_NSRL = MODULE_NAME+"_NSRL"; static final String PROPERTIES_NSRL = NbBundle.getMessage(KeywordSearchSettings.class, "KeywordSearchSettings.propertiesNSRL.text", MODULE_NAME);
static final String PROPERTIES_SCRIPTS = MODULE_NAME+"_Scripts"; static final String PROPERTIES_SCRIPTS = NbBundle.getMessage(KeywordSearchSettings.class, "KeywordSearchSettings.propertiesScripts.text", MODULE_NAME);
private static boolean skipKnown = true; private static boolean skipKnown = true;
private static final Logger logger = Logger.getLogger(KeywordSearchSettings.class.getName()); private static final Logger logger = Logger.getLogger(KeywordSearchSettings.class.getName());
private static UpdateFrequency UpdateFreq = UpdateFrequency.DEFAULT; private static UpdateFrequency UpdateFreq = UpdateFrequency.DEFAULT;

View File

@ -18,6 +18,8 @@
*/ */
package org.sleuthkit.autopsy.keywordsearch; package org.sleuthkit.autopsy.keywordsearch;
import org.openide.util.NbBundle;
/** /**
* *
* Exception thrown when no core is open * Exception thrown when no core is open
@ -25,7 +27,7 @@ package org.sleuthkit.autopsy.keywordsearch;
public class NoOpenCoreException extends Exception { public class NoOpenCoreException extends Exception {
NoOpenCoreException() { NoOpenCoreException() {
super("No currently open Solr core."); super(NbBundle.getMessage(NoOpenCoreException.class, "NoOpenCoreException.err.noOpenSorlCore.msg"));
} }

View File

@ -30,7 +30,6 @@ import java.io.InputStreamReader;
import java.io.OutputStream; import java.io.OutputStream;
import java.io.OutputStreamWriter; import java.io.OutputStreamWriter;
import java.lang.Long; import java.lang.Long;
import java.lang.Long;
import java.net.ConnectException; import java.net.ConnectException;
import java.net.ServerSocket; import java.net.ServerSocket;
import java.net.SocketException; import java.net.SocketException;
@ -38,9 +37,10 @@ import java.nio.charset.Charset;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.logging.Level; import java.util.logging.Level;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.Logger;
import javax.swing.AbstractAction; import javax.swing.AbstractAction;
import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.SolrQuery;
@ -57,7 +57,6 @@ import org.openide.modules.Places;
import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.casemodule.Case;
import org.sleuthkit.autopsy.coreutils.ModuleSettings; import org.sleuthkit.autopsy.coreutils.ModuleSettings;
import org.sleuthkit.autopsy.coreutils.PlatformUtil; import org.sleuthkit.autopsy.coreutils.PlatformUtil;
import org.sleuthkit.autopsy.coreutils.Version;
import org.sleuthkit.datamodel.Content; import org.sleuthkit.datamodel.Content;
import org.apache.solr.common.SolrInputDocument; import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.client.solrj.impl.XMLResponseParser; import org.apache.solr.client.solrj.impl.XMLResponseParser;
@ -403,10 +402,12 @@ public class Server {
} catch (SecurityException ex) { } catch (SecurityException ex) {
logger.log(Level.WARNING, "Could not start Solr process!", ex); logger.log(Level.WARNING, "Could not start Solr process!", ex);
throw new KeywordSearchModuleException("Could not start Solr server process", ex); throw new KeywordSearchModuleException(
NbBundle.getMessage(this.getClass(), "Server.start.exception.cantStartSolr.msg"), ex);
} catch (IOException ex) { } catch (IOException ex) {
logger.log(Level.WARNING, "Could not start Solr server process!", ex); logger.log(Level.WARNING, "Could not start Solr server process!", ex);
throw new KeywordSearchModuleException("Could not start Solr server process", ex); throw new KeywordSearchModuleException(
NbBundle.getMessage(this.getClass(), "Server.start.exception.cantStartSolr.msg2"), ex);
} }
} else { } else {
logger.log(Level.WARNING, "Could not start Solr server process, port [" + currentSolrServerPort + "] not available!"); logger.log(Level.WARNING, "Could not start Solr server process, port [" + currentSolrServerPort + "] not available!");
@ -537,10 +538,12 @@ public class Server {
logger.log(Level.INFO, "Solr server is not running, cause: " + cause.getMessage()); logger.log(Level.INFO, "Solr server is not running, cause: " + cause.getMessage());
return false; return false;
} else { } else {
throw new KeywordSearchModuleException("Error checking if Solr server is running", ex); throw new KeywordSearchModuleException(
NbBundle.getMessage(this.getClass(), "Server.isRunning.exception.errCheckSolrRunning.msg"), ex);
} }
} catch (IOException ex) { } catch (IOException ex) {
throw new KeywordSearchModuleException("Error checking if Solr server is running", ex); throw new KeywordSearchModuleException(
NbBundle.getMessage(this.getClass(), "Server.isRunning.exception.errCheckSolrRunning.msg2"), ex);
} }
return true; return true;
@ -552,7 +555,8 @@ public class Server {
synchronized void openCore() throws KeywordSearchModuleException { synchronized void openCore() throws KeywordSearchModuleException {
if (currentCore != null) { if (currentCore != null) {
throw new KeywordSearchModuleException("Already an open Core! Explicitely close Core first. "); throw new KeywordSearchModuleException(
NbBundle.getMessage(this.getClass(), "Server.openCore.exception.alreadyOpen.msg"));
} }
Case currentCase = Case.getCurrentCase(); Case currentCase = Case.getCurrentCase();
@ -665,7 +669,8 @@ public class Server {
try { try {
return currentCore.queryNumIndexedFiles(); return currentCore.queryNumIndexedFiles();
} catch (SolrServerException ex) { } catch (SolrServerException ex) {
throw new KeywordSearchModuleException("Error querying number of indexed files, ", ex); throw new KeywordSearchModuleException(
NbBundle.getMessage(this.getClass(), "Server.queryNumIdxFiles.exception.msg"), ex);
} }
@ -686,7 +691,8 @@ public class Server {
try { try {
return currentCore.queryNumIndexedChunks(); return currentCore.queryNumIndexedChunks();
} catch (SolrServerException ex) { } catch (SolrServerException ex) {
throw new KeywordSearchModuleException("Error querying number of indexed chunks, ", ex); throw new KeywordSearchModuleException(
NbBundle.getMessage(this.getClass(), "Server.queryNumIdxChunks.exception.msg"), ex);
} }
} }
@ -705,7 +711,8 @@ public class Server {
try { try {
return currentCore.queryNumIndexedDocuments(); return currentCore.queryNumIndexedDocuments();
} catch (SolrServerException ex) { } catch (SolrServerException ex) {
throw new KeywordSearchModuleException("Error querying number of indexed documents, ", ex); throw new KeywordSearchModuleException(
NbBundle.getMessage(this.getClass(), "Server.queryNumIdxDocs.exception.msg"), ex);
} }
} }
@ -724,7 +731,8 @@ public class Server {
try { try {
return currentCore.queryIsIndexed(contentID); return currentCore.queryIsIndexed(contentID);
} catch (SolrServerException ex) { } catch (SolrServerException ex) {
throw new KeywordSearchModuleException("Error checkign if content is indexed, ", ex); throw new KeywordSearchModuleException(
NbBundle.getMessage(this.getClass(), "Server.queryIsIdxd.exception.msg"), ex);
} }
} }
@ -744,7 +752,8 @@ public class Server {
try { try {
return currentCore.queryNumFileChunks(fileID); return currentCore.queryNumFileChunks(fileID);
} catch (SolrServerException ex) { } catch (SolrServerException ex) {
throw new KeywordSearchModuleException("Error getting number of file chunks, ", ex); throw new KeywordSearchModuleException(
NbBundle.getMessage(this.getClass(), "Server.queryNumFileChunks.exception.msg"), ex);
} }
} }
@ -763,7 +772,8 @@ public class Server {
try { try {
return currentCore.query(sq); return currentCore.query(sq);
} catch (SolrServerException ex) { } catch (SolrServerException ex) {
throw new KeywordSearchModuleException("Error running query: " + sq.getQuery(), ex); throw new KeywordSearchModuleException(
NbBundle.getMessage(this.getClass(), "Server.query.exception.msg", sq.getQuery()), ex);
} }
} }
@ -783,7 +793,8 @@ public class Server {
try { try {
return currentCore.query(sq, method); return currentCore.query(sq, method);
} catch (SolrServerException ex) { } catch (SolrServerException ex) {
throw new KeywordSearchModuleException("Error running query: " + sq.getQuery(), ex); throw new KeywordSearchModuleException(
NbBundle.getMessage(this.getClass(), "Server.query2.exception.msg", sq.getQuery()), ex);
} }
} }
@ -802,7 +813,8 @@ public class Server {
try { try {
return currentCore.queryTerms(sq); return currentCore.queryTerms(sq);
} catch (SolrServerException ex) { } catch (SolrServerException ex) {
throw new KeywordSearchModuleException("Error running terms query: " + sq.getQuery(), ex); throw new KeywordSearchModuleException(
NbBundle.getMessage(this.getClass(), "Server.queryTerms.exception.msg", sq.getQuery()), ex);
} }
} }
@ -873,7 +885,8 @@ public class Server {
//handle a possible scenario when server process might not be fully started //handle a possible scenario when server process might not be fully started
if (!this.isRunning()) { if (!this.isRunning()) {
logger.log(Level.WARNING, "Core open requested, but server not yet running"); logger.log(Level.WARNING, "Core open requested, but server not yet running");
throw new KeywordSearchModuleException("Core open requested, but server not yet running"); throw new KeywordSearchModuleException(
NbBundle.getMessage(this.getClass(), "Server.openCore.exception.msg"));
} }
CoreAdminRequest.Create createCore = new CoreAdminRequest.Create(); CoreAdminRequest.Create createCore = new CoreAdminRequest.Create();
@ -888,9 +901,11 @@ public class Server {
return newCore; return newCore;
} catch (SolrServerException ex) { } catch (SolrServerException ex) {
throw new KeywordSearchModuleException("Could not open Core", ex); throw new KeywordSearchModuleException(
NbBundle.getMessage(this.getClass(), "Server.openCore.exception.cantOpen.msg"), ex);
} catch (IOException ex) { } catch (IOException ex) {
throw new KeywordSearchModuleException("Could not open Core", ex); throw new KeywordSearchModuleException(
NbBundle.getMessage(this.getClass(), "Server.openCore.exception.cantOpen.msg2"), ex);
} }
} }
@ -931,7 +946,8 @@ public class Server {
return solrCore.request(request); return solrCore.request(request);
} catch (IOException e) { } catch (IOException e) {
logger.log(Level.WARNING, "Could not issue Solr request. ", e); logger.log(Level.WARNING, "Could not issue Solr request. ", e);
throw new SolrServerException("Could not issue Solr request", e); throw new SolrServerException(
NbBundle.getMessage(this.getClass(), "Server.request.exception.exception.msg"), e);
} }
} }
@ -951,7 +967,7 @@ public class Server {
solrCore.commit(true, true); solrCore.commit(true, true);
} catch (IOException e) { } catch (IOException e) {
logger.log(Level.WARNING, "Could not commit index. ", e); logger.log(Level.WARNING, "Could not commit index. ", e);
throw new SolrServerException("Could not commit index", e); throw new SolrServerException(NbBundle.getMessage(this.getClass(), "Server.commit.exception.msg"), e);
} }
} }
@ -960,10 +976,12 @@ public class Server {
solrCore.add(doc); solrCore.add(doc);
} catch (SolrServerException ex) { } catch (SolrServerException ex) {
logger.log(Level.SEVERE, "Could not add document to index via update handler: " + doc.getField("id"), ex); logger.log(Level.SEVERE, "Could not add document to index via update handler: " + doc.getField("id"), ex);
throw new KeywordSearchModuleException("Could not add document to index via update handler: " + doc.getField("id"), ex); throw new KeywordSearchModuleException(
NbBundle.getMessage(this.getClass(), "Server.addDoc.exception.msg", doc.getField("id")), ex);
} catch (IOException ex) { } catch (IOException ex) {
logger.log(Level.SEVERE, "Could not add document to index via update handler: " + doc.getField("id"), ex); logger.log(Level.SEVERE, "Could not add document to index via update handler: " + doc.getField("id"), ex);
throw new KeywordSearchModuleException("Could not add document to index via update handler: " + doc.getField("id"), ex); throw new KeywordSearchModuleException(
NbBundle.getMessage(this.getClass(), "Server.addDoc.exception.msg2", doc.getField("id")), ex);
} }
} }
@ -994,9 +1012,11 @@ public class Server {
try { try {
CoreAdminRequest.unloadCore(this.name, solrServer); CoreAdminRequest.unloadCore(this.name, solrServer);
} catch (SolrServerException ex) { } catch (SolrServerException ex) {
throw new KeywordSearchModuleException("Cannot close Core", ex); throw new KeywordSearchModuleException(
NbBundle.getMessage(this.getClass(), "Server.close.exception.msg"), ex);
} catch (IOException ex) { } catch (IOException ex) {
throw new KeywordSearchModuleException("Cannot close Core", ex); throw new KeywordSearchModuleException(
NbBundle.getMessage(this.getClass(), "Server.close.exception.msg2"), ex);
} }
} }
@ -1092,9 +1112,8 @@ public class Server {
private int port; private int port;
SolrServerNoPortException(int port) { SolrServerNoPortException(int port) {
super("Indexing server could not bind to port " + port super(NbBundle.getMessage(Server.class, "Server.solrServerNoPortException.msg", port,
+ ", port is not available, consider change the default " Server.PROPERTIES_CURRENT_SERVER_PORT));
+ Server.PROPERTIES_CURRENT_SERVER_PORT + " port.");
this.port = port; this.port = port;
} }

View File

@ -30,7 +30,6 @@ import java.util.logging.Level;
import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.casemodule.Case;
import org.sleuthkit.autopsy.ingest.IngestModuleDataSource; import org.sleuthkit.autopsy.ingest.IngestModuleDataSource;
import org.sleuthkit.autopsy.report.SQLiteDBConnect;
import org.sleuthkit.datamodel.*; import org.sleuthkit.datamodel.*;
abstract class Extract extends IngestModuleDataSource{ abstract class Extract extends IngestModuleDataSource{

View File

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

View File

@ -41,7 +41,6 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.casemodule.Case;
import org.sleuthkit.autopsy.casemodule.services.FileManager; import org.sleuthkit.autopsy.casemodule.services.FileManager;
import org.sleuthkit.autopsy.report.SQLiteDBConnect;
import org.sleuthkit.datamodel.AbstractFile; import org.sleuthkit.datamodel.AbstractFile;
import org.sleuthkit.datamodel.Content; import org.sleuthkit.datamodel.Content;
import org.sleuthkit.datamodel.TskCoreException; import org.sleuthkit.datamodel.TskCoreException;

View File

@ -56,6 +56,7 @@ import org.netbeans.jemmy.operators.JLabelOperator;
import org.netbeans.jemmy.operators.JTabbedPaneOperator; import org.netbeans.jemmy.operators.JTabbedPaneOperator;
import org.netbeans.jemmy.operators.JTableOperator; import org.netbeans.jemmy.operators.JTableOperator;
import org.netbeans.jemmy.operators.JTextFieldOperator; import org.netbeans.jemmy.operators.JTextFieldOperator;
import org.netbeans.jemmy.operators.JListOperator;
import org.netbeans.junit.NbModuleSuite; import org.netbeans.junit.NbModuleSuite;
import org.openide.util.Exceptions; import org.openide.util.Exceptions;
import org.sleuthkit.autopsy.ingest.IngestManager; import org.sleuthkit.autopsy.ingest.IngestManager;
@ -265,14 +266,13 @@ public class RegressionTest extends TestCase {
} }
logger.info("Enqueue took " + (System.currentTimeMillis() - start) + "ms"); logger.info("Enqueue took " + (System.currentTimeMillis() - start) + "ms");
while (man.isIngestRunning()) { while (man.isIngestRunning()) {
new Timeout("pausing", 1000).sleep(); // give it a second (or five) to process new Timeout("pausing", 1000).sleep(); // give it a second (or five) to process
} }
new Timeout("pausing", 15000).sleep(); // give it a second (or fifteen) to process new Timeout("pausing", 15000).sleep(); // give it a second (or fifteen) to process
boolean sleep = true;
while (man.areModulesRunning()) { while (man.areModulesRunning()) {
new Timeout("pausing", 5000).sleep(); // give it a second (or five) to process new Timeout("pausing", 5000).sleep(); // give it a second (or five) to process
} }
logger.info("Ingest (including enqueue) took " + (System.currentTimeMillis() - start) + "ms"); logger.info("Ingest (including enqueue) took " + (System.currentTimeMillis() - start) + "ms");
// allow keyword search to finish saving artifacts, just in case // allow keyword search to finish saving artifacts, just in case
// but randomize the timing so that we don't always get the same error // but randomize the timing so that we don't always get the same error
@ -299,10 +299,13 @@ public class RegressionTest extends TestCase {
logger.info("Generate Report Button"); logger.info("Generate Report Button");
JDialog reportDialog = JDialogOperator.waitJDialog("Generate Report", false, false); JDialog reportDialog = JDialogOperator.waitJDialog("Generate Report", false, false);
JDialogOperator reportDialogOperator = new JDialogOperator(reportDialog); JDialogOperator reportDialogOperator = new JDialogOperator(reportDialog);
JListOperator listOperator = new JListOperator(reportDialogOperator);
JButtonOperator jbo0 = new JButtonOperator(reportDialogOperator, "Next"); JButtonOperator jbo0 = new JButtonOperator(reportDialogOperator, "Next");
DateFormat dateFormat = new SimpleDateFormat("MM-dd-yyyy-HH-mm-ss"); DateFormat dateFormat = new SimpleDateFormat("MM-dd-yyyy-HH-mm-ss");
Date date = new Date(); Date date = new Date();
String datenotime = dateFormat.format(date); String datenotime = dateFormat.format(date);
listOperator.clickOnItem(1, 1);
new Timeout("pausing", 1000).sleep();
jbo0.pushNoBlock(); jbo0.pushNoBlock();
new Timeout("pausing", 1000).sleep(); new Timeout("pausing", 1000).sleep();
JButtonOperator jbo1 = new JButtonOperator(reportDialogOperator, "Finish"); JButtonOperator jbo1 = new JButtonOperator(reportDialogOperator, "Finish");

View File

@ -4,6 +4,29 @@ OpenIDE-Module-Long-Description=\
Events for a selected day are viewable in the built-in result and content viewers. Events for a selected day are viewable in the built-in result and content viewers.
OpenIDE-Module-Name=Timeline OpenIDE-Module-Name=Timeline
CTL_MakeTimeline="Make Timeline (Beta)" CTL_MakeTimeline="Make Timeline (Beta)"
CTL_TimelineView=Generate Timeline
OpenIDE-Module-Short-Description=Displays user activity timeline OpenIDE-Module-Short-Description=Displays user activity timeline
TimelineProgressDialog.jLabel1.text=Creating timeline . . . TimelineProgressDialog.jLabel1.text=Creating timeline . . .
TimelineFrame.title=Timeline TimelineFrame.title=Timeline
Timeline.frameName.text={0} - Autopsy Timeline (Beta)
Timeline.resultsPanel.title=Timeline Results
Timeline.getName=Make Timeline (Beta)
Timeline.runJavaFxThread.progress.creating=Creating timeline . . .
Timeline.runJavaFxThread.progress.genBodyFile=Generating Bodyfile
Timeline.runJavaFxThread.progress.genMacTime=Generating Mactime
Timeline.runJavaFxThread.progress.parseMacTime=Parsing Mactime
Timeline.zoomOutButton.text=Zoom Out
Timeline.goToButton.text=Go To\:
Timeline.yearBarChart.x.years=Years
Timeline.yearBarChart.y.numEvents=Number of Events
Timeline.MonthsBarChart.x.monthYY=Month ({0})
Timeline.MonthsBarChart.y.numEvents=Number of Events
Timeline.eventsByMoBarChart.x.dayOfMo=Day of Month
Timeline.eventsByMoBarChart.y.numEvents=Number of Events
Timeline.node.emptyRoot=Empty Root
Timeline.resultPanel.loading=Loading...
Timeline.node.root=Root
Timeline.propChg.confDlg.timelineOOD.msg=Timeline is out of date. Would you like to regenerate it?
Timeline.propChg.confDlg.timelineOOD.details=Select an option
Timeline.initTimeline.confDlg.genBeforeIngest.msg=You are trying to generate a timeline before ingest has been completed. The timeline may be incomplete. Do you want to continue?
Timeline.initTimeline.confDlg.genBeforeIngest.deails=Timeline

View File

@ -41,7 +41,9 @@ import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Scanner; import java.util.Scanner;
import java.util.Stack; import java.util.Stack;
import java.util.TimeZone;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.prefs.Preferences;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.beans.value.ChangeListener; import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue; import javafx.beans.value.ObservableValue;
@ -75,11 +77,11 @@ import org.openide.awt.ActionReference;
import org.openide.awt.ActionReferences; import org.openide.awt.ActionReferences;
import org.openide.awt.ActionRegistration; import org.openide.awt.ActionRegistration;
import org.openide.modules.InstalledFileLocator; import org.openide.modules.InstalledFileLocator;
import org.openide.modules.ModuleInstall;
import org.openide.nodes.Children; import org.openide.nodes.Children;
import org.openide.nodes.Node; import org.openide.nodes.Node;
import org.openide.util.HelpCtx; import org.openide.util.HelpCtx;
import org.openide.util.NbBundle; import org.openide.util.NbBundle;
import org.openide.util.NbPreferences;
import org.openide.util.actions.CallableSystemAction; import org.openide.util.actions.CallableSystemAction;
import org.openide.util.actions.Presenter; import org.openide.util.actions.Presenter;
import org.openide.util.lookup.Lookups; import org.openide.util.lookup.Lookups;
@ -97,6 +99,7 @@ import org.sleuthkit.autopsy.datamodel.DisplayableItemNodeVisitor;
import org.sleuthkit.autopsy.datamodel.FileNode; import org.sleuthkit.autopsy.datamodel.FileNode;
import org.sleuthkit.autopsy.ingest.IngestManager; import org.sleuthkit.autopsy.ingest.IngestManager;
import org.sleuthkit.autopsy.coreutils.ExecUtil; import org.sleuthkit.autopsy.coreutils.ExecUtil;
import org.sleuthkit.autopsy.datamodel.ContentUtils;
import org.sleuthkit.datamodel.AbstractFile; import org.sleuthkit.datamodel.AbstractFile;
import org.sleuthkit.datamodel.SleuthkitCase; import org.sleuthkit.datamodel.SleuthkitCase;
import org.sleuthkit.datamodel.TskCoreException; import org.sleuthkit.datamodel.TskCoreException;
@ -105,7 +108,7 @@ import org.sleuthkit.datamodel.TskCoreException;
@ActionRegistration(displayName = "#CTL_MakeTimeline", lazy = false) @ActionRegistration(displayName = "#CTL_MakeTimeline", lazy = false)
@ActionReferences(value = { @ActionReferences(value = {
@ActionReference(path = "Menu/Tools", position = 100)}) @ActionReference(path = "Menu/Tools", position = 100)})
@NbBundle.Messages(value = "CTL_TimelineView=Generate Timeline") //@NbBundle.Messages(value = "CTL_TimelineView=Generate Timeline")
/** /**
* The Timeline Action entry point. Collects data and pushes data to javafx * The Timeline Action entry point. Collects data and pushes data to javafx
* widgets * widgets
@ -129,6 +132,7 @@ public class Timeline extends CallableSystemAction implements Presenter.Toolbar,
private ComboBox<String> fxDropdownSelectYears; //Dropdown box for selecting years. Useful when the charts' scale means some years are unclickable, despite having events. private ComboBox<String> fxDropdownSelectYears; //Dropdown box for selecting years. Useful when the charts' scale means some years are unclickable, despite having events.
private final Stack<BarChart<String, Number>> fxStackPrevCharts = new Stack<BarChart<String, Number>>(); //Stack for storing drill-up information. private final Stack<BarChart<String, Number>> fxStackPrevCharts = new Stack<BarChart<String, Number>>(); //Stack for storing drill-up information.
private BarChart<String, Number> fxChartTopLevel; //the topmost chart, used for resetting to default view. private BarChart<String, Number> fxChartTopLevel; //the topmost chart, used for resetting to default view.
private BarChart<String, Number> fxMonthView; //the month chart
private DataResultPanel dataResultPanel; private DataResultPanel dataResultPanel;
private DataContentPanel dataContentPanel; private DataContentPanel dataContentPanel;
private ProgressHandle progress; private ProgressHandle progress;
@ -142,12 +146,13 @@ public class Timeline extends CallableSystemAction implements Presenter.Toolbar,
private EventHandler<MouseEvent> fxMouseExitedListener; private EventHandler<MouseEvent> fxMouseExitedListener;
private SleuthkitCase skCase; private SleuthkitCase skCase;
private boolean fxInited = false; private boolean fxInited = false;
private int monthCounter = 0;
public Timeline() { public Timeline() {
super(); super();
fxInited = Installer.isJavaFxInited(); fxInited = Installer.isJavaFxInited();
// TimeZone.setDefault(TimeZone.getTimeZone("UTC")); //sets the default timezone to UTC unless otherwise stated
} }
//Swing components and JavafX components don't play super well together //Swing components and JavafX components don't play super well together
@ -175,7 +180,8 @@ public class Timeline extends CallableSystemAction implements Presenter.Toolbar,
//Making the main frame * //Making the main frame *
mainFrame = new TimelineFrame(); mainFrame = new TimelineFrame();
mainFrame.setFrameName(Case.getCurrentCase().getName() + " - Autopsy Timeline (Beta)"); mainFrame.setFrameName(
NbBundle.getMessage(this.getClass(), "Timeline.frameName.text", Case.getCurrentCase().getName()));
//use the same icon on jframe as main application //use the same icon on jframe as main application
mainFrame.setIconImage(WindowManager.getDefault().getMainWindow().getIconImage()); mainFrame.setIconImage(WindowManager.getDefault().getMainWindow().getIconImage());
@ -186,7 +192,9 @@ public class Timeline extends CallableSystemAction implements Presenter.Toolbar,
//dataContentPanel.setAlignmentX(Component.RIGHT_ALIGNMENT); //dataContentPanel.setAlignmentX(Component.RIGHT_ALIGNMENT);
//dataContentPanel.setPreferredSize(new Dimension(FRAME_WIDTH, (int) (FRAME_HEIGHT * 0.4))); //dataContentPanel.setPreferredSize(new Dimension(FRAME_WIDTH, (int) (FRAME_HEIGHT * 0.4)));
dataResultPanel = DataResultPanel.createInstance("Timeline Results", "", Node.EMPTY, 0, dataContentPanel); dataResultPanel = DataResultPanel.createInstance(
NbBundle.getMessage(this.getClass(), "Timeline.resultsPanel.title"),
"", Node.EMPTY, 0, dataContentPanel);
dataResultPanel.setContentViewer(dataContentPanel); dataResultPanel.setContentViewer(dataContentPanel);
//dataResultPanel.setAlignmentX(Component.LEFT_ALIGNMENT); //dataResultPanel.setAlignmentX(Component.LEFT_ALIGNMENT);
//dataResultPanel.setPreferredSize(new Dimension((int)(FRAME_WIDTH * 0.5), (int) (FRAME_HEIGHT * 0.5))); //dataResultPanel.setPreferredSize(new Dimension((int)(FRAME_WIDTH * 0.5), (int) (FRAME_HEIGHT * 0.5)));
@ -211,7 +219,8 @@ public class Timeline extends CallableSystemAction implements Presenter.Toolbar,
public void run() { public void run() {
try { try {
// start the progress bar // start the progress bar
progress = ProgressHandleFactory.createHandle("Creating timeline . . ."); progress = ProgressHandleFactory.createHandle(
NbBundle.getMessage(this.getClass(), "Timeline.runJavaFxThread.progress.creating"));
progress.start(); progress.start();
fxChartEvents = null; //important to reset old data fxChartEvents = null; //important to reset old data
@ -239,11 +248,13 @@ public class Timeline extends CallableSystemAction implements Presenter.Toolbar,
if (!mactimeFile.exists()) { if (!mactimeFile.exists()) {
progressDialog.setProgressTotal(3); //total 3 units progressDialog.setProgressTotal(3); //total 3 units
logger.log(Level.INFO, "Creating body file"); logger.log(Level.INFO, "Creating body file");
progressDialog.updateProgressBar("Generating Bodyfile"); progressDialog.updateProgressBar(
NbBundle.getMessage(this.getClass(), "Timeline.runJavaFxThread.progress.genBodyFile"));
String bodyFilePath = makeBodyFile(); String bodyFilePath = makeBodyFile();
progressDialog.updateProgressBar(++currentProgress); progressDialog.updateProgressBar(++currentProgress);
logger.log(Level.INFO, "Creating mactime file: " + mactimeFile.getAbsolutePath()); logger.log(Level.INFO, "Creating mactime file: " + mactimeFile.getAbsolutePath());
progressDialog.updateProgressBar("Generating Mactime"); progressDialog.updateProgressBar(
NbBundle.getMessage(this.getClass(), "Timeline.runJavaFxThread.progress.genMacTime"));
makeMacTime(bodyFilePath); makeMacTime(bodyFilePath);
progressDialog.updateProgressBar(++currentProgress); progressDialog.updateProgressBar(++currentProgress);
data = null; data = null;
@ -253,7 +264,8 @@ public class Timeline extends CallableSystemAction implements Presenter.Toolbar,
} }
progressDialog.updateProgressBar("Parsing Mactime"); progressDialog.updateProgressBar(
NbBundle.getMessage(this.getClass(), "Timeline.runJavaFxThread.progress.parseMacTime"));
if (data == null) { if (data == null) {
logger.log(Level.INFO, "Parsing mactime file: " + mactimeFile.getAbsolutePath()); logger.log(Level.INFO, "Parsing mactime file: " + mactimeFile.getAbsolutePath());
data = parseMacTime(mactimeFile); //The sum total of the mactime parsing. YearEpochs contain everything you need to make a timeline. data = parseMacTime(mactimeFile); //The sum total of the mactime parsing. YearEpochs contain everything you need to make a timeline.
@ -269,7 +281,7 @@ public class Timeline extends CallableSystemAction implements Presenter.Toolbar,
fxDropdownSelectYears = new ComboBox<String>(listSelect); fxDropdownSelectYears = new ComboBox<String>(listSelect);
//Buttons for navigating up and down the timeline //Buttons for navigating up and down the timeline
fxZoomOutButton = new Button("Zoom Out"); fxZoomOutButton = new Button(NbBundle.getMessage(this.getClass(), "Timeline.zoomOutButton.text"));
fxZoomOutButton.setOnAction(new EventHandler<ActionEvent>() { fxZoomOutButton.setOnAction(new EventHandler<ActionEvent>() {
@Override @Override
public void handle(ActionEvent e) { public void handle(ActionEvent e) {
@ -301,7 +313,8 @@ public class Timeline extends CallableSystemAction implements Presenter.Toolbar,
//Adding things to the V and H boxes. //Adding things to the V and H boxes.
//hBox_Charts stores the pseudo menu bar at the top of the timeline. |Zoom Out|View Year: [Select Year]|| //hBox_Charts stores the pseudo menu bar at the top of the timeline. |Zoom Out|View Year: [Select Year]||
fxHBoxCharts.getChildren().addAll(fxZoomOutButton, new Label("Go To:"), fxDropdownSelectYears); fxHBoxCharts.getChildren().addAll(fxZoomOutButton, new Label(
NbBundle.getMessage(this.getClass(), "Timeline.goToButton.text")), fxDropdownSelectYears);
fxVBox.getChildren().addAll(fxHBoxCharts, fxScrollEvents); //FxBox_V holds things in a visual stack. fxVBox.getChildren().addAll(fxHBoxCharts, fxScrollEvents); //FxBox_V holds things in a visual stack.
fxGroupCharts.getChildren().add(fxVBox); //Adding the FxBox to the group. Groups make things easier to manipulate without having to update a hundred things every change. fxGroupCharts.getChildren().add(fxVBox); //Adding the FxBox to the group. Groups make things easier to manipulate without having to update a hundred things every change.
fxPanelCharts.setScene(fxSceneCharts); fxPanelCharts.setScene(fxSceneCharts);
@ -346,8 +359,8 @@ public class Timeline extends CallableSystemAction implements Presenter.Toolbar,
final Label l = new Label(""); final Label l = new Label("");
l.setStyle("-fx-font: 24 arial;"); l.setStyle("-fx-font: 24 arial;");
l.setTextFill(Color.AZURE); l.setTextFill(Color.AZURE);
xAxis.setLabel("Years"); xAxis.setLabel(NbBundle.getMessage(this.getClass(), "Timeline.yearBarChart.x.years"));
yAxis.setLabel("Number of Events"); yAxis.setLabel(NbBundle.getMessage(this.getClass(), "Timeline.yearBarChart.y.numEvents"));
//Charts are made up of individual pieces of Chart.Data. In this case, a piece of barData is a single bar on the graph. //Charts are made up of individual pieces of Chart.Data. In this case, a piece of barData is a single bar on the graph.
//Data is packaged into a series, which can be assigned custom colors or styling //Data is packaged into a series, which can be assigned custom colors or styling
//After the series are created, 1 or more series are packaged into a single chart. //After the series are created, 1 or more series are packaged into a single chart.
@ -410,11 +423,10 @@ public class Timeline extends CallableSystemAction implements Presenter.Toolbar,
* Always 12 per year, empty months are represented by no bar. * Always 12 per year, empty months are represented by no bar.
*/ */
private BarChart<String, Number> createMonthsWithDrill(final YearEpoch ye) { private BarChart<String, Number> createMonthsWithDrill(final YearEpoch ye) {
final CategoryAxis xAxis = new CategoryAxis(); final CategoryAxis xAxis = new CategoryAxis();
final NumberAxis yAxis = new NumberAxis(); final NumberAxis yAxis = new NumberAxis();
xAxis.setLabel("Month (" + ye.year + ")"); xAxis.setLabel(NbBundle.getMessage(this.getClass(), "Timeline.MonthsBarChart.x.monthYY", ye.year));
yAxis.setLabel("Number of Events"); yAxis.setLabel(NbBundle.getMessage(this.getClass(), "Timeline.MonthsBarChart.y.numEvents"));
ObservableList<BarChart.Series<String, Number>> bcData = FXCollections.observableArrayList(); ObservableList<BarChart.Series<String, Number>> bcData = FXCollections.observableArrayList();
BarChart.Series<String, Number> se = new BarChart.Series<String, Number>(); BarChart.Series<String, Number> se = new BarChart.Series<String, Number>();
@ -465,7 +477,7 @@ public class Timeline extends CallableSystemAction implements Presenter.Toolbar,
bc.autosize(); bc.autosize();
bc.setPrefWidth(FRAME_WIDTH); bc.setPrefWidth(FRAME_WIDTH);
bc.setLegendVisible(false); bc.setLegendVisible(false);
fxStackPrevCharts.push(bc); fxMonthView= bc;
return bc; return bc;
} }
@ -477,8 +489,8 @@ public class Timeline extends CallableSystemAction implements Presenter.Toolbar,
private BarChart<String, Number> createEventsByMonth(final MonthEpoch me, final YearEpoch ye) { private BarChart<String, Number> createEventsByMonth(final MonthEpoch me, final YearEpoch ye) {
final CategoryAxis xAxis = new CategoryAxis(); final CategoryAxis xAxis = new CategoryAxis();
final NumberAxis yAxis = new NumberAxis(); final NumberAxis yAxis = new NumberAxis();
xAxis.setLabel("Day of Month"); xAxis.setLabel(NbBundle.getMessage(this.getClass(), "Timeline.eventsByMoBarChart.x.dayOfMo"));
yAxis.setLabel("Number of Events"); yAxis.setLabel(NbBundle.getMessage(this.getClass(), "Timeline.eventsByMoBarChart.y.numEvents"));
ObservableList<BarChart.Data<String, Number>> bcData = makeObservableListByMonthAllDays(me, ye.getYear()); ObservableList<BarChart.Data<String, Number>> bcData = makeObservableListByMonthAllDays(me, ye.getYear());
BarChart.Series<String, Number> series = new BarChart.Series<String, Number>(bcData); BarChart.Series<String, Number> series = new BarChart.Series<String, Number>(bcData);
series.setName(me.getMonthName() + " " + ye.getYear()); series.setName(me.getMonthName() + " " + ye.getYear());
@ -507,9 +519,10 @@ public class Timeline extends CallableSystemAction implements Presenter.Toolbar,
@Override @Override
public void run() { public void run() {
//reset the view and free the current nodes before loading new ones //reset the view and free the current nodes before loading new ones
final FileRootNode d = new FileRootNode("Empty Root", new ArrayList<Long>()); final FileRootNode d = new FileRootNode(
NbBundle.getMessage(this.getClass(), "Timeline.node.emptyRoot"), new ArrayList<Long>());
dataResultPanel.setNode(d); dataResultPanel.setNode(d);
dataResultPanel.setPath("Loading..."); dataResultPanel.setPath(NbBundle.getMessage(this.getClass(), "Timeline.resultPanel.loading"));
} }
}); });
final int day = (Integer.valueOf((barData.getXValue()).split("-")[1])); final int day = (Integer.valueOf((barData.getXValue()).split("-")[1]));
@ -525,7 +538,8 @@ public class Timeline extends CallableSystemAction implements Presenter.Toolbar,
SwingUtilities.invokeLater(new Runnable() { SwingUtilities.invokeLater(new Runnable() {
@Override @Override
public void run() { public void run() {
final FileRootNode d = new FileRootNode("Root", afs); final FileRootNode d = new FileRootNode(
NbBundle.getMessage(this.getClass(), "Timeline.node.root"), afs);
dataResultPanel.setNode(d); dataResultPanel.setNode(d);
//set result viewer title path with the current date //set result viewer title path with the current date
String dateString = ye.getYear() + "-" + (1 + me.getMonthInt()) + "-" + +de.dayNum; String dateString = ye.getYear() + "-" + (1 + me.getMonthInt()) + "-" + +de.dayNum;
@ -539,6 +553,12 @@ public class Timeline extends CallableSystemAction implements Presenter.Toolbar,
} }
bc.autosize(); bc.autosize();
bc.setPrefWidth(FRAME_WIDTH); bc.setPrefWidth(FRAME_WIDTH);
monthCounter++;
if (monthCounter==12)
{
fxStackPrevCharts.push(fxMonthView);
monthCounter=0;
}
return bc; return bc;
} }
@ -620,7 +640,12 @@ public class Timeline extends CallableSystemAction implements Presenter.Toolbar,
return; return;
} }
int answer = JOptionPane.showConfirmDialog(mainFrame, "Timeline is out of date. Would you like to regenerate it?", "Select an option", JOptionPane.YES_NO_OPTION); int answer = JOptionPane.showConfirmDialog(mainFrame,
NbBundle.getMessage(this.getClass(),
"Timeline.propChg.confDlg.timelineOOD.msg"),
NbBundle.getMessage(this.getClass(),
"Timeline.propChg.confDlg.timelineOOD.details"),
JOptionPane.YES_NO_OPTION);
if (answer != JOptionPane.YES_OPTION) { if (answer != JOptionPane.YES_OPTION) {
return; return;
} }
@ -914,17 +939,35 @@ public class Timeline extends CallableSystemAction implements Presenter.Toolbar,
int prevYear = -1; int prevYear = -1;
YearEpoch ye = null; YearEpoch ye = null;
while (scan.hasNextLine()) { while (scan.hasNextLine()) {
String[] s = scan.nextLine().split(","); //1999-02-08T11:08:08Z, 78706, m..b, rrwxrwxrwx, 0, 0, 8355, /img... String[] s = scan.nextLine().split(","); //1999-02-08T11:08:08Z, 78706, m..b, rrwxrwxrwx, 0, 0, 8355, /img...
// break the date into mon, day and year: Note that the ISO times are in GMT // break the date into year,month,day,hour,minute, and second: Note that the ISO times are in GMT
String[] datetime = s[0].split("T"); //{1999-02-08, 11:08:08Z} String delims = "[T:Z\\-]+"; //split by the delimiters
String[] date = datetime[0].split("-"); // {1999, 02, 08} String[] date = s[0].split(delims); //{1999,02,08,11,08,08,...}
int year = Integer.valueOf(date[0]); int year = Integer.valueOf(date[0]);
int month = Integer.valueOf(date[1]) - 1; //Months are zero indexed: 1 = February, 6 = July, 11 = December int month = Integer.valueOf(date[1]) - 1; //Months are zero indexed: 1 = February, 6 = July, 11 = December
int day = Integer.valueOf(date[2]); //Days are 1 indexed int day = Integer.valueOf(date[2]); //Days are 1 indexed
int hour=Integer.valueOf(date[3]);
int minute=Integer.valueOf(date[4]);
int second=Integer.valueOf(date[5]);
// get the object id out of the modified outpu Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT")); //set calendar to GMT due to ISO format
calendar.set(year, month, day, hour, minute, second);
day=calendar.get(Calendar.DAY_OF_MONTH); // this is needed or else timezone change wont work. probably incorrect optimization by compiler
//conversion to GMT
if (!ContentUtils.getDisplayInLocalTime()) {
calendar.setTimeZone(TimeZone.getTimeZone("GMT"));
}
else{
calendar.setTimeZone(TimeZone.getDefault());// local timezone OF the user. should be what the user SETS at startup
}
day=calendar.get(Calendar.DAY_OF_MONTH);//get the day which may be affected by timezone change
long ObjId = Long.valueOf(s[4]); long ObjId = Long.valueOf(s[4]);
// when the year changes, create and add a new YearEpoch object to the list // when the year changes, create and add a new YearEpoch object to the list
@ -961,7 +1004,6 @@ public class Timeline extends CallableSystemAction implements Presenter.Toolbar,
// Get report path // Get report path
String bodyFilePath = moduleDir.getAbsolutePath() String bodyFilePath = moduleDir.getAbsolutePath()
+ java.io.File.separator + currentCase.getName() + "-" + datenotime + ".txt"; + java.io.File.separator + currentCase.getName() + "-" + datenotime + ".txt";
// Run query to get all files // Run query to get all files
final String filesAndDirs = "name != '.' " final String filesAndDirs = "name != '.' "
+ "AND name != '..'"; + "AND name != '..'";
@ -1123,9 +1165,10 @@ public class Timeline extends CallableSystemAction implements Presenter.Toolbar,
if (IngestManager.getDefault().isIngestRunning()) { if (IngestManager.getDefault().isIngestRunning()) {
int answer = JOptionPane.showConfirmDialog(new JFrame(), int answer = JOptionPane.showConfirmDialog(new JFrame(),
"You are trying to generate a timeline before " NbBundle.getMessage(this.getClass(),
+ "ingest has been completed. The timeline may be " "Timeline.initTimeline.confDlg.genBeforeIngest.msg"),
+ "incomplete. Do you want to continue?", "Timeline", NbBundle.getMessage(this.getClass(),
"Timeline.initTimeline.confDlg.genBeforeIngest.deails"),
JOptionPane.YES_NO_OPTION); JOptionPane.YES_NO_OPTION);
if (answer != JOptionPane.YES_OPTION) { if (answer != JOptionPane.YES_OPTION) {
return; return;
@ -1177,7 +1220,7 @@ public class Timeline extends CallableSystemAction implements Presenter.Toolbar,
@Override @Override
public String getName() { public String getName() {
return "Make Timeline (Beta)"; return NbBundle.getMessage(this.getClass(), "Timeline.getName");
} }
@Override @Override

View File

@ -6,6 +6,14 @@
<code-name-base>org.sleuthkit.autopsy.thunderbirdparser</code-name-base> <code-name-base>org.sleuthkit.autopsy.thunderbirdparser</code-name-base>
<suite-component/> <suite-component/>
<module-dependencies> <module-dependencies>
<dependency>
<code-name-base>org.openide.util</code-name-base>
<build-prerequisite/>
<compile-dependency/>
<run-dependency>
<specification-version>8.25.1</specification-version>
</run-dependency>
</dependency>
<dependency> <dependency>
<code-name-base>org.sleuthkit.autopsy.core</code-name-base> <code-name-base>org.sleuthkit.autopsy.core</code-name-base>
<build-prerequisite/> <build-prerequisite/>

View File

@ -4,3 +4,24 @@ OpenIDE-Module-Long-Description=\
The module extracts Thunderbird e-mail folder hierarchy from the ingested disk image and posts the folder hierarchy and e-mail messages found as results. The module extracts Thunderbird e-mail folder hierarchy from the ingested disk image and posts the folder hierarchy and e-mail messages found as results.
OpenIDE-Module-Name=ThunderbirdParser OpenIDE-Module-Name=ThunderbirdParser
OpenIDE-Module-Short-Description=Thunderbird Parser e-mail extractor ingest module OpenIDE-Module-Short-Description=Thunderbird Parser e-mail extractor ingest module
MboxParser.parse.errMsg.failedToReadFile=Failed to read mbox file from disk.
MboxParser.parse.errMsg.couldntFindCharset=Couldn't find appropriate charset encoder.
MboxParser.parse.errMsg.failedToParseNMsgs=Failed to extract {0} email messages.
MboxParser.handleAttch.errMsg.failedToCreateOnDisk=Failed to extract attachment to disk\: {0}
MboxParser.handleAttch.failedWriteToDisk=Failed to extract attachment to disk\: {0}
PstParser.parse.errMsg.failedToParseNMsgs=Failed to extract {0} email messages.
PstParser.extractAttch.errMsg.failedToExtractToDisk=Failed to extract attachment to disk\: {0}
ThunderbirdMboxFileIngestModule.moduleName=Email Parser
ThunderbirdMboxFileIngestModule.hashDbModuleName=Hash Lookup
ThunderbirdMboxFileIngestModule.processPst.errMsg.outOfDiskSpace=Out of disk space. Can''t copy {0} to parse.
ThunderbirdMboxFileIngestModule.encryptionFileLevel=File-level Encryption
ThunderbirdMboxFileIngestModule.processPst.errProcFile.msg=Error while processing {0}
ThunderbirdMboxFileIngestModule.processPst.errProcFile.details=Only files from Outlook 2003 and later are supported.
ThunderbirdMboxFileIngestModule.processPst.errProcFile.msg2=Error while processing {0}
ThunderbirdMboxFileIngestModule.processMBox.errProcFile.msg=Error while processing {0}
ThunderbirdMboxFileIngestModule.processMBox.errProfFile.details=Out of disk space. Can't copy file to parse.
ThunderbirdMboxFileIngestModule.processMBox.errProcFile.msg2=Error while processing {0}
ThunderbirdMboxFileIngestModule.getDesc.text=This module detects and parses mbox and pst/ost files and populates email artifacts in the blackboard.
ThunderbirdMboxFileIngestModule.handleAttch.errMsg=Error processing {0}
ThunderbirdMboxFileIngestModule.handleAttch.errMsg.details=Failed to add attachment named {0} to the case.
ThunderbirdMboxFileIngestModule.notAvail=Not available

View File

@ -54,6 +54,7 @@ import org.apache.james.mime4j.message.DefaultMessageBuilder;
import org.apache.james.mime4j.stream.MimeConfig; import org.apache.james.mime4j.stream.MimeConfig;
import org.apache.tika.parser.txt.CharsetDetector; import org.apache.tika.parser.txt.CharsetDetector;
import org.apache.tika.parser.txt.CharsetMatch; import org.apache.tika.parser.txt.CharsetMatch;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.ingest.IngestServices; import org.sleuthkit.autopsy.ingest.IngestServices;
/** /**
@ -116,14 +117,14 @@ import org.sleuthkit.autopsy.ingest.IngestServices;
// Not the right encoder // Not the right encoder
} catch (IOException ex) { } catch (IOException ex) {
logger.log(Level.WARNING, "couldn't find mbox file.", ex); logger.log(Level.WARNING, "couldn't find mbox file.", ex);
addErrorMessage("Failed to read mbox file from disk."); addErrorMessage(NbBundle.getMessage(this.getClass(), "MboxParser.parse.errMsg.failedToReadFile"));
return Collections.EMPTY_LIST; return Collections.EMPTY_LIST;
} }
} }
// If no encoders work, post an error message and return. // If no encoders work, post an error message and return.
if (mboxIterator == null || theEncoder == null) { if (mboxIterator == null || theEncoder == null) {
addErrorMessage("Couldn't find appropriate charset encoder."); addErrorMessage(NbBundle.getMessage(this.getClass(), "MboxParser.parse.errMsg.couldntFindCharset"));
return Collections.EMPTY_LIST; return Collections.EMPTY_LIST;
} }
@ -142,7 +143,8 @@ import org.sleuthkit.autopsy.ingest.IngestServices;
} }
if (failCount > 0) { if (failCount > 0) {
addErrorMessage("Failed to extract " + failCount + " email messages."); addErrorMessage(
NbBundle.getMessage(this.getClass(), "MboxParser.parse.errMsg.failedToParseNMsgs", failCount));
} }
return emails; return emails;
} }
@ -255,7 +257,9 @@ import org.sleuthkit.autopsy.ingest.IngestServices;
try { try {
fos = new FileOutputStream(outPath); fos = new FileOutputStream(outPath);
} catch (FileNotFoundException ex) { } catch (FileNotFoundException ex) {
addErrorMessage("Failed to extract attachment to disk: " + filename); addErrorMessage(
NbBundle.getMessage(this.getClass(),
"MboxParser.handleAttch.errMsg.failedToCreateOnDisk", filename));
logger.log(Level.INFO, "Failed to create file output stream for: " + outPath, ex); logger.log(Level.INFO, "Failed to create file output stream for: " + outPath, ex);
return; return;
} }
@ -270,7 +274,7 @@ import org.sleuthkit.autopsy.ingest.IngestServices;
} }
} catch (IOException ex) { } catch (IOException ex) {
logger.log(Level.INFO, "Failed to write mbox email attachment to disk.", ex); logger.log(Level.INFO, "Failed to write mbox email attachment to disk.", ex);
addErrorMessage("Failed to extract attachment to disk: " + filename); addErrorMessage(NbBundle.getMessage(this.getClass(), "MboxParser.handleAttch.failedWriteToDisk", filename));
return; return;
} finally { } finally {
try { try {

View File

@ -33,6 +33,8 @@ import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.ingest.IngestServices; import org.sleuthkit.autopsy.ingest.IngestServices;
import static org.sleuthkit.autopsy.thunderbirdparser.ThunderbirdMboxFileIngestModule.getRelModuleOutputPath; import static org.sleuthkit.autopsy.thunderbirdparser.ThunderbirdMboxFileIngestModule.getRelModuleOutputPath;
import org.sleuthkit.datamodel.AbstractFile; import org.sleuthkit.datamodel.AbstractFile;
@ -80,7 +82,8 @@ class PstParser {
pstFile = new PSTFile(file); pstFile = new PSTFile(file);
failures = processFolder(pstFile.getRootFolder(), "\\", true); failures = processFolder(pstFile.getRootFolder(), "\\", true);
if (failures > 0) { if (failures > 0) {
addErrorMessage("Failed to extract " + failures + " email messages."); addErrorMessage(
NbBundle.getMessage(this.getClass(), "PstParser.parse.errMsg.failedToParseNMsgs", failures));
} }
return ParseResult.OK; return ParseResult.OK;
} catch (PSTException | IOException ex) { } catch (PSTException | IOException ex) {
@ -219,7 +222,9 @@ class PstParser {
attachment.setSize(attach.getFilesize()); attachment.setSize(attach.getFilesize());
email.addAttachment(attachment); email.addAttachment(attachment);
} catch (PSTException | IOException ex) { } catch (PSTException | IOException ex) {
addErrorMessage("Failed to extract attachment to disk: " + filename); addErrorMessage(
NbBundle.getMessage(this.getClass(), "PstParser.extractAttch.errMsg.failedToExtractToDisk",
filename));
logger.log(Level.WARNING, "Failed to extract attachment from pst file.", ex); logger.log(Level.WARNING, "Failed to extract attachment from pst file.", ex);
} }
} }

View File

@ -23,6 +23,8 @@ import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.logging.Level; import java.util.logging.Level;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.casemodule.Case;
import org.sleuthkit.autopsy.casemodule.services.FileManager; import org.sleuthkit.autopsy.casemodule.services.FileManager;
import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.Logger;
@ -53,8 +55,10 @@ public class ThunderbirdMboxFileIngestModule extends IngestModuleAbstractFile {
private static final Logger logger = Logger.getLogger(ThunderbirdMboxFileIngestModule.class.getName()); private static final Logger logger = Logger.getLogger(ThunderbirdMboxFileIngestModule.class.getName());
private static ThunderbirdMboxFileIngestModule instance = null; private static ThunderbirdMboxFileIngestModule instance = null;
private IngestServices services; private IngestServices services;
private static final String MODULE_NAME = "Email Parser"; private static final String MODULE_NAME = NbBundle.getMessage(ThunderbirdMboxFileIngestModule.class,
private final String hashDBModuleName = "Hash Lookup"; "ThunderbirdMboxFileIngestModule.moduleName");
private final String hashDBModuleName = NbBundle.getMessage(ThunderbirdMboxFileIngestModule.class,
"ThunderbirdMboxFileIngestModule.hashDbModuleName");
final public static String MODULE_VERSION = Version.getVersion(); final public static String MODULE_VERSION = Version.getVersion();
private int messageId = 0; private int messageId = 0;
private FileManager fileManager; private FileManager fileManager;
@ -132,7 +136,10 @@ public class ThunderbirdMboxFileIngestModule extends IngestModuleAbstractFile {
if (abstractFile.getSize() >= services.getFreeDiskSpace()) { if (abstractFile.getSize() >= services.getFreeDiskSpace()) {
logger.log(Level.WARNING, "Not enough disk space to write file to disk."); logger.log(Level.WARNING, "Not enough disk space to write file to disk.");
IngestMessage msg = IngestMessage.createErrorMessage(messageId++, this, getName(), "Out of disk space. Can't copy " + abstractFile.getName() + " to parse."); IngestMessage msg = IngestMessage.createErrorMessage(messageId++, this, getName(),
NbBundle.getMessage(this.getClass(),
"ThunderbirdMboxFileIngestModule.processPst.errMsg.outOfDiskSpace",
abstractFile.getName()));
services.postMessage(msg); services.postMessage(msg);
return ProcessResult.OK; return ProcessResult.OK;
} }
@ -155,14 +162,18 @@ public class ThunderbirdMboxFileIngestModule extends IngestModuleAbstractFile {
try { try {
BlackboardArtifact generalInfo = abstractFile.getGenInfoArtifact(); BlackboardArtifact generalInfo = abstractFile.getGenInfoArtifact();
generalInfo.addAttribute(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_ENCRYPTION_DETECTED.getTypeID(), generalInfo.addAttribute(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_ENCRYPTION_DETECTED.getTypeID(),
MODULE_NAME, "File-level Encryption")); MODULE_NAME,
NbBundle.getMessage(this.getClass(), "ThunderbirdMboxFileIngestModule.encryptionFileLevel")));
} catch (TskCoreException ex) { } catch (TskCoreException ex) {
logger.log(Level.INFO, "Failed to add encryption attribute to file: " + abstractFile.getName()); logger.log(Level.INFO, "Failed to add encryption attribute to file: " + abstractFile.getName());
} }
} else { } else {
// parsing error: log message // parsing error: log message
postErrorMessage("Error while processing " + abstractFile.getName(), postErrorMessage(
"Only files from Outlook 2003 and later are supported."); NbBundle.getMessage(this.getClass(), "ThunderbirdMboxFileIngestModule.processPst.errProcFile.msg",
abstractFile.getName()),
NbBundle.getMessage(this.getClass(),
"ThunderbirdMboxFileIngestModule.processPst.errProcFile.details"));
logger.log(Level.INFO, "PSTParser failed to parse " + abstractFile.getName()); logger.log(Level.INFO, "PSTParser failed to parse " + abstractFile.getName());
return ProcessResult.ERROR; return ProcessResult.ERROR;
} }
@ -173,7 +184,9 @@ public class ThunderbirdMboxFileIngestModule extends IngestModuleAbstractFile {
String errors = parser.getErrors(); String errors = parser.getErrors();
if (errors.isEmpty() == false) { if (errors.isEmpty() == false) {
postErrorMessage("Error while processing " + abstractFile.getName(), errors); postErrorMessage(
NbBundle.getMessage(this.getClass(), "ThunderbirdMboxFileIngestModule.processPst.errProcFile.msg2",
abstractFile.getName()), errors);
} }
return ProcessResult.OK; return ProcessResult.OK;
@ -206,8 +219,11 @@ public class ThunderbirdMboxFileIngestModule extends IngestModuleAbstractFile {
if (abstractFile.getSize() >= services.getFreeDiskSpace()) { if (abstractFile.getSize() >= services.getFreeDiskSpace()) {
logger.log(Level.WARNING, "Not enough disk space to write file to disk."); logger.log(Level.WARNING, "Not enough disk space to write file to disk.");
postErrorMessage("Error while processing " + abstractFile.getName(), postErrorMessage(
"Out of disk space. Can't copy file to parse."); NbBundle.getMessage(this.getClass(), "ThunderbirdMboxFileIngestModule.processMBox.errProcFile.msg",
abstractFile.getName()),
NbBundle.getMessage(this.getClass(),
"ThunderbirdMboxFileIngestModule.processMBox.errProfFile.details"));
return ProcessResult.OK; return ProcessResult.OK;
} }
@ -229,7 +245,9 @@ public class ThunderbirdMboxFileIngestModule extends IngestModuleAbstractFile {
String errors = parser.getErrors(); String errors = parser.getErrors();
if (errors.isEmpty() == false) { if (errors.isEmpty() == false) {
postErrorMessage("Error while processing " + abstractFile.getName(), errors); postErrorMessage(
NbBundle.getMessage(this.getClass(), "ThunderbirdMboxFileIngestModule.processMBox.errProcFile.msg2",
abstractFile.getName()), errors);
} }
return ProcessResult.OK; return ProcessResult.OK;
@ -275,7 +293,7 @@ public class ThunderbirdMboxFileIngestModule extends IngestModuleAbstractFile {
@Override @Override
public String getDescription() { public String getDescription() {
return "This module detects and parses mbox and pst/ost files and populates email artifacts in the blackboard."; return NbBundle.getMessage(this.getClass(), "ThunderbirdMboxFileIngestModule.getDesc.text");
} }
@Override @Override
@ -347,8 +365,11 @@ public class ThunderbirdMboxFileIngestModule extends IngestModuleAbstractFile {
MODULE_NAME, MODULE_VERSION, ""); MODULE_NAME, MODULE_VERSION, "");
files.add(df); files.add(df);
} catch (TskCoreException ex) { } catch (TskCoreException ex) {
postErrorMessage("Error processing " + abstractFile.getName(), postErrorMessage(
"Failed to add attachment named " + filename + " to the case."); NbBundle.getMessage(this.getClass(), "ThunderbirdMboxFileIngestModule.handleAttch.errMsg",
abstractFile.getName()),
NbBundle.getMessage(this.getClass(),
"ThunderbirdMboxFileIngestModule.handleAttch.errMsg.details", filename));
logger.log(Level.INFO, "", ex); logger.log(Level.INFO, "", ex);
} }
} }
@ -399,7 +420,8 @@ public class ThunderbirdMboxFileIngestModule extends IngestModuleAbstractFile {
if (rtf.isEmpty() == false) { if (rtf.isEmpty() == false) {
bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_EMAIL_CONTENT_RTF.getTypeID(), MODULE_NAME, rtf)); bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_EMAIL_CONTENT_RTF.getTypeID(), MODULE_NAME, rtf));
} }
bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_MSG_ID.getTypeID(), MODULE_NAME, ((id < 0L) ? "Not available" : String.valueOf(id)))); bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_MSG_ID.getTypeID(), MODULE_NAME, ((id < 0L) ? NbBundle
.getMessage(this.getClass(), "ThunderbirdMboxFileIngestModule.notAvail") : String.valueOf(id))));
if (subject.isEmpty() == false) { if (subject.isEmpty() == false) {
bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_SUBJECT.getTypeID(), MODULE_NAME, subject)); bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_SUBJECT.getTypeID(), MODULE_NAME, subject));
} }