diff --git a/Core/src/org/sleuthkit/autopsy/ingest/Bundle.properties b/Core/src/org/sleuthkit/autopsy/ingest/Bundle.properties index 0674b59bf7..da2453df41 100644 --- a/Core/src/org/sleuthkit/autopsy/ingest/Bundle.properties +++ b/Core/src/org/sleuthkit/autopsy/ingest/Bundle.properties @@ -1,21 +1,6 @@ OpenIDE-Module-Name=Ingest -CTL_IngestAction=Ingest -CTL_IngestMessagesAction=Ingest Messages CTL_IngestMessageTopComponent=Messages -CTL_IngestTopComponent=Ingest HINT_IngestMessageTopComponent=Messages windows -HINT_IngestTopComponent=Ingest window -IngestTopComponent.messageFrame.title=Messages -IngestTopComponent.ingestProgressLabel.text=File Ingest Progress -IngestControlPanel.topLable.text=Image ingest modules -IngestControlPanel.startButton.text=Start -IngestDialogPanel.ingestServicesLabel.text=Image Ingest Modules -IngestDialogForm2.okButton.text=OK -IngestDialogForm2.cancelButton.text=Cancel -IngestDialogForm.cancelButton.text=Cancel -IngestDialogForm.startButton.text=Start -IngestDialogForm.jLabel1.text=Ingest Modules -IngestTopComponent.refreshFreqLabel.text=Refresh frequency IngestMessageDetailsPanel.backButton.text= IngestMessageDetailsPanel.viewArtifactButton.text=Go to Result IngestMessageDetailsPanel.viewContentButton.text=Go to Directory @@ -34,3 +19,86 @@ IngestMessagePanel.totalUniqueMessagesNameLabel.text=Unique: IngestMessagePanel.totalUniqueMessagesNameVal.text=- IngestDialogPanel.processUnallocCheckbox.text=Process Unallocated Space IngestDialogPanel.processUnallocCheckbox.toolTipText=Processes unallocated space, such as deleted files. Produces more complete results, but it may take longer to process on large images. +DataSourceTask.toString.text=ScheduledTask'{'input\={0}, modules\={1}'}' +GeneralIngestConfigurator.modName.tbirdParser.text=Thunderbird Parser +GeneralIngestConfigurator.modName.mboxParser.text=MBox Parser +GeneralIngestConfigurator.modName.emailParser.text=Email Parser +GeneralIngestConfigurator.enabledMods.notFound.msg={0} was previously enabled, but could not be found +IngestDataSourceThread.displayName.text={0} dataSource id\:{1} +IngestDataSourceThread.progress.pending={0} (Pending...) +IngestDataSourceThread.progress.cancelling={0} (Cancelling...) +IngestDialog.title.text=Ingest Modules +IngestDialog.startButton.title=Start +IngestDialog.closeButton.title=Close +IngestManager.moduleProperties.text=ingest +IngestManager.moduleErr=Module Error +IngestManager.moduleErr.errListenToUpdates.msg=A module caused an error listening to Ingest Manager updates. See log to determine which module. Some data could be incomplete. +IngestManager.displayInitError.failedToLoad.msg=Failed to load {0} ingest module.\ +\ +No ingest modules will be run. Please disable the module or fix the error and restart ingest by right clicking on the data source and selecting Run Ingest Modules.\ +\ +Error\: {1} +IngestManager.getFileModStats.moduleInfo.text={0} took\: {1} secs. to process()\ +IngestManager.toString.startTime.text=Start time\: {0}{1} +IngestManager.toString.endTime.text=End time\: {0}{1} +IngestManager.toString.totalIngestTime.text=Total ingest time\: {0}{1} +IngestManager.toString.totalErrs.text=Total errors\: {0}{1} +IngestManager.toString.errsPerMod.text=Errors per module\: +IngestManager.toHtmlStr.ingestTime.text=Ingest time\: {0} +IngestManager.toHtmlStr.totalErrs.text=Total errors\: {0} +IngestManager.toHtmlStr.module.text=Module +IngestManager.toHtmlStr.time.text=Time +IngestManager.toHtmlStr.errors.text=Errors +IngestManager.IngestAbstractFileProcessor.displayName=File Ingest +IngestManager.IngestAbstractFileProcessor.process.cancelling={0} (Cancelling...) +IngestManager.EnqueueWorker.displayName.text=Queueing Ingest +IngestManager.EnqueueWorker.process.cancelling={0} (Cancelling...) +IngestManager.datatSourceIngest.progress.text=DataSource Ingest {0} +IngestManager.fileIngest.progress.text=File Ingest {0} +IngestMessage.toString.type.text=type\: {0} +IngestMessage.toString.source.text=\ source\: {0} +IngestMessage.toString.date.text=\ date\: {0} +IngestMessage.toString.subject.text=\ subject\: {0} +IngestMessage.toString.details.text=\ details\: {0} +IngestMessage.toString.data.text=\ data\: {0} +IngestMessage.exception.typeSrcSubjNotNull.msg=message type, source and subject cannot be null +IngestMessage.exception.srcSubjNotNull.msg=source and subject cannot be null +IngestMessage.exception.srcSubjDetailsDataNotNull.msg=source, subject, details and data cannot be null +IngestMessagePanel.moduleErr=Module Error +IngestMessagePanel.moduleErr.errListenUpdates.text=A module caused an error listening to IngestMessagePanel updates. See log to determine which module. Some data could be incomplete. +IngestMessagePanel.MsgTableMod.colNames.module=Module +IngestMessagePanel.MsgTableMod.colNames.num=Num +IngestMessagePanel.MsgTableMod.colNames.new=New? +IngestMessagePanel.MsgTableMod.colNames.subject=Subject +IngestMessagePanel.MsgTableMod.colNames.timestamp=Timestamp +IngestMessagePanel.BooleanRenderer.exception.nonBoolVal.msg=Tried to use BooleanRenderer on non-boolean value. +IngestMessagePanel.DateRenderer.exception.nonDateVal.text=Tried to use DateRenderer on non-Date value. +IngestMessageTopComponent.displayReport.option.OK=OK +IngestMessageTopComponent.displayReport.option.GenRpt=Generate Report +IngestMessageTopComponent.msgDlg.ingestRpt.text=Ingest Report +IngestModuleLoader.moduleErr=Module Error +IngestModuleLoader.moduleErr.errListenUpdates.msg=A module caused an error listening to IngestModuleLoader updates. See log to determine which module. Some data could be incomplete. +IngestModuleLoader.exception.notImplemented.msg=Not yet implemented +IngestModuleLoader.exception.cantFindPipeline.msg=Could not find expected pipeline of type\: {0}, cannot add autodiscovered module\: {1} +IngestModuleLoader.save.comment.text=Saved by\: {0} on\: {1} +IngestModuleLoader.loadRawPipeline.exception.cantLoadXML.msg=Could not load pipeline config XML\: {0} +IngestModuleLoader.loadRawPipeline.exception.invalidFileFormat.msg=Error loading pipeline configuration\: invalid file format. +IngestModuleLoader.loadRawPipeline.exception.noPipelinesInConf.msg=No pipelines found in the pipeline configuration\: {0} +IngestModuleLoader.exception.noPipelineTypeForStr.msg=No PIPELINE_TYPE for string\: {0} +IngestMonitor.mgrErrMsg.lowDiskSpace.title=Ingest stopped - low disk space on {0} +IngestMonitor.mgrErrMsg.lowDiskSpace.msg=Stopping ingest due to low disk space on disk {0}. \ +Ensure the Case drive has at least 1GB free space and restart ingest. +IngestScheduler.FileSched.toString.rootDirs.text=\ +RootDirs(sorted), size\: {0} +IngestScheduler.FileSched.toString.curDirs.text=\ +CurDirs(stack), size\: {0} +IngestScheduler.FileSched.toString.curFiles.text=\ +CurFiles, size\: {0} +IngestScheduler.fileTask.toString.long=ProcessTask'{'file\={0}\: {1}'}' +IngestScheduler.fileTask.toString.short=ProcessTask'{'file\={0}\: {1}'}' +IngestScheduler.FileTask.next.exception.msg=No next ProcessTask, check hasNext() first\! +IngestScheduler.remove.exception.notSupported.msg=Not supported. +IngestScheduler.DataSourceScheduler.exception.next.msg=There is no data source tasks in the queue, check hasNext() +IngestScheduler.DataSourceScheduler.exception.remove.msg=Removing of scheduled data source ingest tasks is not supported. +IngestScheduler.DataSourceScheduler.toString.size=DataSourceQueue, size\: {0} +PipelineContext.toString.text=pipelineContext'{'task\={0}'}' diff --git a/Core/src/org/sleuthkit/autopsy/ingest/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/ingest/Bundle_ja.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/Core/src/org/sleuthkit/autopsy/ingest/DataSourceTask.java b/Core/src/org/sleuthkit/autopsy/ingest/DataSourceTask.java index 01bac09f19..7877057d80 100644 --- a/Core/src/org/sleuthkit/autopsy/ingest/DataSourceTask.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/DataSourceTask.java @@ -20,6 +20,8 @@ package org.sleuthkit.autopsy.ingest; import java.util.List; + +import org.openide.util.NbBundle; import org.sleuthkit.datamodel.Content; /** @@ -72,7 +74,7 @@ class DataSourceTask { @Override public String toString() { - return "ScheduledTask{" + "input=" + input + ", modules=" + modules + '}'; + return NbBundle.getMessage(this.getClass(), "DataSourceTask.toString.text", input, modules); } /** diff --git a/Core/src/org/sleuthkit/autopsy/ingest/GeneralIngestConfigurator.java b/Core/src/org/sleuthkit/autopsy/ingest/GeneralIngestConfigurator.java index 203e98cbe8..b96ad9cd49 100644 --- a/Core/src/org/sleuthkit/autopsy/ingest/GeneralIngestConfigurator.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/GeneralIngestConfigurator.java @@ -22,6 +22,8 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import javax.swing.JPanel; + +import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; import org.sleuthkit.autopsy.coreutils.ModuleSettings; import org.sleuthkit.datamodel.Content; @@ -104,9 +106,11 @@ public class GeneralIngestConfigurator implements IngestConfigurator { // the UI component. List enabledModules = new ArrayList<>(); for (String moduleName : enabledList) { - if (moduleName.equals("Thunderbird Parser") - || moduleName.equals("MBox Parser")) { - moduleName = "Email Parser"; + if (moduleName.equals( + NbBundle.getMessage(this.getClass(), "GeneralIngestConfigurator.modName.tbirdParser.text")) + || moduleName.equals( + NbBundle.getMessage(this.getClass(), "GeneralIngestConfigurator.modName.mboxParser.text"))) { + moduleName = NbBundle.getMessage(this.getClass(), "GeneralIngestConfigurator.modName.emailParser.text"); } IngestModuleAbstract moduleFound = null; @@ -120,7 +124,8 @@ public class GeneralIngestConfigurator implements IngestConfigurator { enabledModules.add(moduleFound); } else { - messages.add(moduleName + " was previously enabled, but could not be found"); + messages.add(NbBundle.getMessage(this.getClass(), "GeneralIngestConfigurator.enabledMods.notFound.msg", + moduleName)); } } ingestDialogPanel.setEnabledIngestModules(enabledModules); diff --git a/Core/src/org/sleuthkit/autopsy/ingest/IngestDataSourceThread.java b/Core/src/org/sleuthkit/autopsy/ingest/IngestDataSourceThread.java index 8c427eeff1..217a568344 100644 --- a/Core/src/org/sleuthkit/autopsy/ingest/IngestDataSourceThread.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/IngestDataSourceThread.java @@ -23,6 +23,8 @@ import java.awt.EventQueue; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantReadWriteLock; import java.util.logging.Level; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.Logger; import javax.swing.SwingWorker; import org.netbeans.api.progress.ProgressHandle; @@ -95,13 +97,17 @@ import org.sleuthkit.datamodel.Content; logger.log(Level.INFO, "Pending module: " + module.getName()); - final String displayName = module.getName() + " dataSource id:" + dataSource.getId(); - progress = ProgressHandleFactory.createHandle(displayName + " (Pending...)", new Cancellable() { + final String displayName = NbBundle.getMessage(this.getClass(), "IngestDataSourceThread.displayName.text", + module.getName(), + dataSource.getId()); + progress = ProgressHandleFactory.createHandle( + NbBundle.getMessage(this.getClass(), "IngestDataSourceThread.progress.pending", displayName), new Cancellable() { @Override public boolean cancel() { logger.log(Level.INFO, "DataSource ingest module " + module.getName() + " cancelled by user."); if (progress != null) { - progress.setDisplayName(displayName + " (Cancelling...)"); + progress.setDisplayName( + NbBundle.getMessage(this.getClass(), "IngestDataSourceThread.progress.cancelling", displayName)); } return IngestDataSourceThread.this.cancel(true); } diff --git a/Core/src/org/sleuthkit/autopsy/ingest/IngestDialog.java b/Core/src/org/sleuthkit/autopsy/ingest/IngestDialog.java index fb68c15a5e..b6cedc099f 100644 --- a/Core/src/org/sleuthkit/autopsy/ingest/IngestDialog.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/IngestDialog.java @@ -32,6 +32,8 @@ import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; + +import org.openide.util.NbBundle; import org.sleuthkit.datamodel.Content; /** @@ -40,7 +42,7 @@ import org.sleuthkit.datamodel.Content; */ public class IngestDialog extends JDialog { - private static final String TITLE = "Ingest Modules"; + private static final String TITLE = NbBundle.getMessage(IngestDialog.class, "IngestDialog.title.text"); private static Dimension DIMENSIONS = new Dimension(500, 300); private IngestConfigurator ingestConfigurator; @@ -77,8 +79,8 @@ public class IngestDialog extends JDialog { setLocation((screenDimension.width - w) / 2, (screenDimension.height - h) / 2); add(ingestConfigurator.getIngestConfigPanel(), BorderLayout.PAGE_START); - JButton startButton = new JButton("Start"); - JButton closeButton = new JButton("Close"); + JButton startButton = new JButton(NbBundle.getMessage(this.getClass(), "IngestDialog.startButton.title")); + JButton closeButton = new JButton(NbBundle.getMessage(this.getClass(), "IngestDialog.closeButton.title")); startButton.addActionListener(new ActionListener() { @Override diff --git a/Core/src/org/sleuthkit/autopsy/ingest/IngestManager.java b/Core/src/org/sleuthkit/autopsy/ingest/IngestManager.java index 6ccd1b89dd..2ec75440d2 100644 --- a/Core/src/org/sleuthkit/autopsy/ingest/IngestManager.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/IngestManager.java @@ -32,6 +32,8 @@ import java.util.concurrent.CancellationException; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.logging.Level; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.Logger; import javax.swing.SwingWorker; import org.netbeans.api.progress.ProgressHandle; @@ -77,7 +79,8 @@ public class IngestManager { //module loader private IngestModuleLoader moduleLoader = null; //property file name id for the module - public final static String MODULE_PROPERTIES = "ingest"; + public final static String MODULE_PROPERTIES = NbBundle.getMessage(IngestManager.class, + "IngestManager.moduleProperties.text"); private volatile int messageID = 0; /** @@ -212,7 +215,9 @@ public class IngestManager { } catch (Exception e) { logger.log(Level.SEVERE, "Ingest manager listener threw exception", e); - MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to Ingest Manager updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); + MessageNotifyUtil.Notify.show(NbBundle.getMessage(IngestManager.class, "IngestManager.moduleErr"), + NbBundle.getMessage(IngestManager.class, "IngestManager.moduleErr.errListenToUpdates.msg"), + MessageNotifyUtil.MessageType.ERROR); } } @@ -227,7 +232,9 @@ public class IngestManager { } catch (Exception e) { logger.log(Level.SEVERE, "Ingest manager listener threw exception", e); - MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to Ingest Manager updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); + MessageNotifyUtil.Notify.show(NbBundle.getMessage(IngestManager.class, "IngestManager.moduleErr"), + NbBundle.getMessage(IngestManager.class, "IngestManager.moduleErr.errListenToUpdates.msg"), + MessageNotifyUtil.MessageType.ERROR); } } @@ -242,7 +249,9 @@ public class IngestManager { } catch (Exception e) { logger.log(Level.SEVERE, "Ingest manager listener threw exception", e); - MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to Ingest Manager updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); + MessageNotifyUtil.Notify.show(NbBundle.getMessage(IngestManager.class, "IngestManager.moduleErr"), + NbBundle.getMessage(IngestManager.class, "IngestManager.moduleErr.errListenToUpdates.msg"), + MessageNotifyUtil.MessageType.ERROR); } } @@ -256,7 +265,9 @@ public class IngestManager { } catch (Exception e) { logger.log(Level.SEVERE, "Ingest manager listener threw exception", e); - MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to Ingest Manager updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); + MessageNotifyUtil.Notify.show(NbBundle.getMessage(IngestManager.class, "IngestManager.moduleErr"), + NbBundle.getMessage(IngestManager.class, "IngestManager.moduleErr.errListenToUpdates.msg"), + MessageNotifyUtil.MessageType.ERROR); } } @@ -495,11 +506,8 @@ public class IngestManager { */ private void displayInitError(String moduleName, String errorMessage) { MessageNotifyUtil.Message.error( - "Failed to load " + moduleName + " ingest module.\n\n" - + "No ingest modules will be run. Please disable the module " - + "or fix the error and restart ingest by right clicking on " - + "the data source and selecting Run Ingest Modules.\n\n" - + "Error: " + errorMessage); + NbBundle.getMessage(this.getClass(), "IngestManager.displayInitError.failedToLoad.msg", moduleName, + errorMessage)); } /** @@ -856,9 +864,9 @@ public class IngestManager { String getFileModuleStats() { StringBuilder sb = new StringBuilder(); for (final String moduleName : fileModuleTimers.keySet()) { - sb.append(moduleName).append(" took: ") - .append(fileModuleTimers.get(moduleName) / 1000) - .append(" secs. to process()").append('\n'); + sb.append(NbBundle.getMessage(this.getClass(), + "IngestManager.getFileModStats.moduleInfo.text", + moduleName, fileModuleTimers.get(moduleName) / 1000)); } return sb.toString(); } @@ -868,15 +876,18 @@ public class IngestManager { final String EOL = System.getProperty("line.separator"); StringBuilder sb = new StringBuilder(); if (startTime != null) { - sb.append("Start time: ").append(dateFormatter.format(startTime)).append(EOL); + sb.append(NbBundle.getMessage(this.getClass(), "IngestManager.toString.startTime.text", + dateFormatter.format(startTime), EOL)); } if (endTime != null) { - sb.append("End time: ").append(dateFormatter.format(endTime)).append(EOL); + sb.append(NbBundle.getMessage(this.getClass(), "IngestManager.toString.endTime.text", + dateFormatter.format(endTime), EOL)); } - sb.append("Total ingest time: ").append(getTotalTimeString()).append(EOL); - sb.append("Total errors: ").append(errorsTotal).append(EOL); + sb.append(NbBundle.getMessage(this.getClass(), "IngestManager.toString.totalIngestTime.text", + getTotalTimeString(), EOL)); + sb.append(NbBundle.getMessage(this.getClass(), "IngestManager.toString.totalErrs.text", errorsTotal, EOL)); if (errorsTotal > 0) { - sb.append("Errors per module:"); + sb.append(NbBundle.getMessage(this.getClass(), "IngestManager.toString.errsPerMod.text")); for (String moduleName : errors.keySet()) { sb.append("\t").append(moduleName).append(": ").append(errors.get(moduleName)).append(EOL); } @@ -887,9 +898,18 @@ public class IngestManager { public String toHtmlString() { StringBuilder sb = new StringBuilder(); sb.append(""); - sb.append("Ingest time: ").append(getTotalTimeString()).append("
"); - sb.append("Total errors: ").append(errorsTotal).append("
"); - sb.append("\n"); + sb.append(NbBundle.getMessage(this.getClass(), "IngestManager.toHtmlStr.ingestTime.text", + getTotalTimeString())) + .append("
"); + sb.append(NbBundle.getMessage(this.getClass(), "IngestManager.toHtmlStr.totalErrs.text", errorsTotal)) + .append("
"); + sb.append("
ModuleTimeErrors
\n"); for (final String moduleName : fileModuleTimers.keySet()) { sb.append("
") + .append(NbBundle.getMessage(this.getClass(), "IngestManager.toHtmlStr.module.text")) + .append("") + .append(NbBundle.getMessage(this.getClass(), "IngestManager.toHtmlStr.time.text")) + .append("") + .append(NbBundle.getMessage(this.getClass(), "IngestManager.toHtmlStr.errors.text")) + .append("
").append(moduleName).append(""); @@ -993,13 +1013,16 @@ public class IngestManager { IngestManager.fireModuleEvent(IngestModuleEvent.STARTED.toString(), s.getName()); } - final String displayName = "File Ingest"; + final String displayName = NbBundle + .getMessage(this.getClass(), "IngestManager.IngestAbstractFileProcessor.displayName"); progress = ProgressHandleFactory.createHandle(displayName, new Cancellable() { @Override public boolean cancel() { logger.log(Level.INFO, "Filed ingest cancelled by user."); if (progress != null) { - progress.setDisplayName(displayName + " (Cancelling...)"); + progress.setDisplayName(NbBundle.getMessage(this.getClass(), + "IngestManager.IngestAbstractFileProcessor.process.cancelling", + displayName)); } return IngestAbstractFileProcessor.this.cancel(true); } @@ -1169,13 +1192,16 @@ public class IngestManager { @Override protected Object doInBackground() throws Exception { - final String displayName = "Queueing Ingest"; + final String displayName = NbBundle + .getMessage(this.getClass(), "IngestManager.EnqueueWorker.displayName.text"); progress = ProgressHandleFactory.createHandle(displayName, new Cancellable() { @Override public boolean cancel() { logger.log(Level.INFO, "Queueing ingest cancelled by user."); if (progress != null) { - progress.setDisplayName(displayName + " (Cancelling...)"); + progress.setDisplayName( + NbBundle.getMessage(this.getClass(), "IngestManager.EnqueueWorker.process.cancelling", + displayName)); } return EnqueueWorker.this.cancel(true); } @@ -1274,10 +1300,12 @@ public class IngestManager { logger.log(Level.INFO, "Queing data source ingest task: " + dataSourceTask); - progress.progress("DataSource Ingest" + " " + inputName, processed); + progress.progress(NbBundle.getMessage(this.getClass(), "IngestManager.datatSourceIngest.progress.text", + inputName), processed); final IngestScheduler.DataSourceScheduler dataSourceScheduler = scheduler.getDataSourceScheduler(); dataSourceScheduler.schedule(dataSourceTask); - progress.progress("DataSource Ingest" + " " + inputName, ++processed); + progress.progress(NbBundle.getMessage(this.getClass(), "IngestManager.datatSourceIngest.progress.text", + inputName), ++processed); /* Schedule the file-level ingest modules for the children of the data source */ @@ -1285,10 +1313,12 @@ public class IngestManager { new DataSourceTask(input, fileMods, getProcessUnallocSpace()); logger.log(Level.INFO, "Queing file ingest task: " + fTask); - progress.progress("File Ingest" + " " + inputName, processed); + progress.progress( + NbBundle.getMessage(this.getClass(), "IngestManager.fileIngest.progress.text", inputName), processed); final IngestScheduler.FileScheduler fileScheduler = scheduler.getFileScheduler(); fileScheduler.schedule(fTask); - progress.progress("File Ingest" + " " + inputName, ++processed); + progress.progress( + NbBundle.getMessage(this.getClass(), "IngestManager.fileIngest.progress.text", inputName), ++processed); } //for data sources } diff --git a/Core/src/org/sleuthkit/autopsy/ingest/IngestMessage.java b/Core/src/org/sleuthkit/autopsy/ingest/IngestMessage.java index de0da0cae3..77e22204e1 100644 --- a/Core/src/org/sleuthkit/autopsy/ingest/IngestMessage.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/IngestMessage.java @@ -20,7 +20,8 @@ package org.sleuthkit.autopsy.ingest; import java.text.SimpleDateFormat; import java.util.Date; -import org.sleuthkit.autopsy.datamodel.KeyValue; + +import org.openide.util.NbBundle; import org.sleuthkit.datamodel.BlackboardArtifact; /** @@ -101,18 +102,19 @@ public class IngestMessage { public String toString() { StringBuilder sb = new StringBuilder(); sb.append(Long.toString(ID)).append(": "); - sb.append("type: ").append(messageType.name()); + sb.append(NbBundle.getMessage(this.getClass(), "IngestMessage.toString.type.text", messageType.name())); if (source != null) //can be null for manager messages { - sb.append(" source: ").append(source.getName()); + sb.append(NbBundle.getMessage(this.getClass(), "IngestMessage.toString.source.text", source.getName())); } - sb.append(" date: ").append(dateFormat.format(datePosted)); - sb.append(" subject: ").append(subject); + sb.append( + NbBundle.getMessage(this.getClass(), "IngestMessage.toString.date.text", dateFormat.format(datePosted))); + sb.append(NbBundle.getMessage(this.getClass(), "IngestMessage.toString.subject.text", subject)); if (detailsHtml != null) { - sb.append(" details: ").append(detailsHtml); + sb.append(NbBundle.getMessage(this.getClass(), "IngestMessage.toString.details.text", detailsHtml)); } if (data != null) { - sb.append(" data: ").append(data.toString()).append(' '); + sb.append(NbBundle.getMessage(this.getClass(), "IngestMessage.toString.data.text", data.toString())); } return sb.toString(); } @@ -176,7 +178,8 @@ public class IngestMessage { */ public static IngestMessage createMessage(long ID, MessageType messageType, IngestModuleAbstract source, String subject, String detailsHtml) { if (messageType == null || source == null || subject == null) { - throw new IllegalArgumentException("message type, source and subject cannot be null"); + throw new IllegalArgumentException( + NbBundle.getMessage(IngestMessage.class, "IngestMessage.exception.typeSrcSubjNotNull.msg")); } return new IngestMessage(ID, messageType, source, subject, detailsHtml, null); } @@ -204,7 +207,8 @@ public class IngestMessage { */ public static IngestMessage createErrorMessage(long ID, IngestModuleAbstract source, String subject, String detailsHtml) { if (source == null || subject == null) { - throw new IllegalArgumentException("source and subject cannot be null"); + throw new IllegalArgumentException( + NbBundle.getMessage(IngestMessage.class, "IngestMessage.exception.srcSubjNotNull.msg")); } return new IngestMessage(ID, MessageType.ERROR, source, subject, detailsHtml, null); } @@ -219,7 +223,8 @@ public class IngestMessage { */ public static IngestMessage createWarningMessage(long ID, IngestModuleAbstract source, String subject, String detailsHtml) { if (source == null || subject == null) { - throw new IllegalArgumentException("source and subject cannot be null"); + throw new IllegalArgumentException( + NbBundle.getMessage(IngestMessage.class, "IngestMessage.exception.srcSubjNotNull.msg")); } return new IngestMessage(ID, MessageType.WARNING, source, subject, detailsHtml, null); } @@ -236,7 +241,8 @@ public class IngestMessage { */ public static IngestMessage createDataMessage(long ID, IngestModuleAbstract source, String subject, String detailsHtml, String uniqueKey, BlackboardArtifact data) { if (source == null || subject == null || detailsHtml == null || data == null) { - throw new IllegalArgumentException("source, subject, details and data cannot be null"); + throw new IllegalArgumentException( + NbBundle.getMessage(IngestMessage.class, "IngestMessage.exception.srcSubjDetailsDataNotNull.msg")); } IngestMessage im = new IngestMessage(ID, MessageType.DATA, source, subject, detailsHtml, uniqueKey); diff --git a/Core/src/org/sleuthkit/autopsy/ingest/IngestMessagePanel.java b/Core/src/org/sleuthkit/autopsy/ingest/IngestMessagePanel.java index 782737bb15..0a2eed57c0 100644 --- a/Core/src/org/sleuthkit/autopsy/ingest/IngestMessagePanel.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/IngestMessagePanel.java @@ -38,6 +38,8 @@ import java.util.Map; import java.util.logging.Level; import javax.swing.JLabel; import javax.swing.JPanel; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.Logger; import javax.swing.JTable; import javax.swing.ListSelectionModel; @@ -52,8 +54,6 @@ import javax.swing.table.TableCellRenderer; import org.sleuthkit.autopsy.ingest.IngestMessage.*; import org.sleuthkit.datamodel.BlackboardArtifact; import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; -import java.util.logging.Level; -import org.sleuthkit.autopsy.coreutils.Logger; /** * Notification window showing messages from modules to user @@ -300,7 +300,10 @@ class IngestMessagePanel extends JPanel implements TableModelListener { } catch (Exception e) { logger.log(Level.SEVERE, "IngestMessagePanel listener threw exception", e); - MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to IngestMessagePanel updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); + MessageNotifyUtil.Notify.show(NbBundle.getMessage(this.getClass(), "IngestMessagePanel.moduleErr"), + NbBundle.getMessage(this.getClass(), + "IngestMessagePanel.moduleErr.errListenUpdates.text"), + MessageNotifyUtil.MessageType.ERROR); } //update labels @@ -325,7 +328,10 @@ class IngestMessagePanel extends JPanel implements TableModelListener { } catch (Exception e) { logger.log(Level.SEVERE, "IngestMessagePanel listener threw exception", e); - MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to IngestMessagePanel updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); + MessageNotifyUtil.Notify.show(NbBundle.getMessage(this.getClass(), "IngestMessagePanel.moduleErr"), + NbBundle.getMessage(this.getClass(), + "IngestMessagePanel.moduleErr.errListenUpdates.text"), + MessageNotifyUtil.MessageType.ERROR); } } @@ -344,7 +350,10 @@ class IngestMessagePanel extends JPanel implements TableModelListener { } catch (Exception e) { logger.log(Level.SEVERE, "IngestMessagePanel listener threw exception", e); - MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to IngestMessagePanel updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); + MessageNotifyUtil.Notify.show(NbBundle.getMessage(this.getClass(), "IngestMessagePanel.moduleErr"), + NbBundle.getMessage(this.getClass(), + "IngestMessagePanel.moduleErr.errListenUpdates.text"), + MessageNotifyUtil.MessageType.ERROR); } } @@ -357,13 +366,21 @@ class IngestMessagePanel extends JPanel implements TableModelListener { } catch (Exception ee) { logger.log(Level.SEVERE, "IngestMessagePanel listener threw exception", ee); - MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to IngestMessagePanel updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); + MessageNotifyUtil.Notify.show(NbBundle.getMessage(this.getClass(), "IngestMessagePanel.moduleErr"), + NbBundle.getMessage(this.getClass(), + "IngestMessagePanel.moduleErr.errListenUpdates.text"), + MessageNotifyUtil.MessageType.ERROR); } } private class MessageTableModel extends AbstractTableModel { - private String[] columnNames = new String[]{"Module", "Num", "New?", "Subject", "Timestamp"}; + private String[] columnNames = new String[]{ + NbBundle.getMessage(this.getClass(), "IngestMessagePanel.MsgTableMod.colNames.module"), + NbBundle.getMessage(this.getClass(), "IngestMessagePanel.MsgTableMod.colNames.num"), + NbBundle.getMessage(this.getClass(), "IngestMessagePanel.MsgTableMod.colNames.new"), + NbBundle.getMessage(this.getClass(), "IngestMessagePanel.MsgTableMod.colNames.subject"), + NbBundle.getMessage(this.getClass(), "IngestMessagePanel.MsgTableMod.colNames.timestamp")}; private List messageData = new ArrayList(); //for keeping track of messages to group, per module, by uniqness private Map>> groupings = new HashMap>>(); @@ -845,7 +862,8 @@ class IngestMessagePanel extends JPanel implements TableModelListener { if (value instanceof Boolean) { boolVal = ((Boolean)value).booleanValue(); } else { - throw new RuntimeException("Tried to use BooleanRenderer on non-boolean value."); + throw new RuntimeException(NbBundle.getMessage(this.getClass(), + "IngestMessagePanel.BooleanRenderer.exception.nonBoolVal.msg")); } String aValue = boolVal ? bulletChar : ""; @@ -928,7 +946,8 @@ class IngestMessagePanel extends JPanel implements TableModelListener { DateFormat df = new SimpleDateFormat("HH:mm:ss"); aValue = df.format(date); } else { - throw new RuntimeException("Tried to use DateRenderer on non-Date value."); + throw new RuntimeException(NbBundle.getMessage(this.getClass(), + "IngestMessagePanel.DateRenderer.exception.nonDateVal.text")); } Component cell = super.getTableCellRendererComponent(table, aValue, isSelected, hasFocus, row, column); diff --git a/Core/src/org/sleuthkit/autopsy/ingest/IngestMessageTopComponent.java b/Core/src/org/sleuthkit/autopsy/ingest/IngestMessageTopComponent.java index c37ef96c28..13acce0d2d 100644 --- a/Core/src/org/sleuthkit/autopsy/ingest/IngestMessageTopComponent.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/IngestMessageTopComponent.java @@ -249,11 +249,12 @@ import org.sleuthkit.datamodel.Content; @Override public void displayReport(String ingestReport) { - Object[] options = {"OK", - "Generate Report"}; + Object[] options = {NbBundle.getMessage(this.getClass(), "IngestMessageTopComponent.displayReport.option.OK"), + NbBundle.getMessage(this.getClass(), + "IngestMessageTopComponent.displayReport.option.GenRpt")}; final int choice = JOptionPane.showOptionDialog(null, ingestReport, - "Ingest Report", + NbBundle.getMessage(this.getClass(), "IngestMessageTopComponent.msgDlg.ingestRpt.text"), JOptionPane.YES_NO_OPTION, JOptionPane.INFORMATION_MESSAGE, null, diff --git a/Core/src/org/sleuthkit/autopsy/ingest/IngestModuleLoader.java b/Core/src/org/sleuthkit/autopsy/ingest/IngestModuleLoader.java index c3f406c89e..d5ba207771 100644 --- a/Core/src/org/sleuthkit/autopsy/ingest/IngestModuleLoader.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/IngestModuleLoader.java @@ -48,10 +48,7 @@ import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.openide.modules.ModuleInfo; -import org.openide.util.Exceptions; -import org.openide.util.Lookup; -import org.openide.util.LookupEvent; -import org.openide.util.LookupListener; +import org.openide.util.*; import org.reflections.Reflections; import org.reflections.scanners.ResourcesScanner; import org.reflections.scanners.SubTypesScanner; @@ -611,7 +608,10 @@ import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; } catch (Exception e) { logger.log(Level.SEVERE, "IngestModuleLoader listener threw exception", e); - MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to IngestModuleLoader updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); + MessageNotifyUtil.Notify.show(NbBundle.getMessage(this.getClass(), "IngestModuleLoader.moduleErr"), + NbBundle.getMessage(this.getClass(), + "IngestModuleLoader.moduleErr.errListenUpdates.msg"), + MessageNotifyUtil.MessageType.ERROR); } } @@ -633,7 +633,8 @@ import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; * @param newOrder new order to set */ void setModuleOrder(IngestModuleLoader.XmlPipelineRaw.PIPELINE_TYPE pipeLineType, String moduleLocation, int newOrder) throws IngestModuleLoaderException { - throw new IngestModuleLoaderException("Not yet implemented"); + throw new IngestModuleLoaderException( + NbBundle.getMessage(this.getClass(), "IngestModuleLoader.exception.notImplemented.msg")); } /** @@ -665,7 +666,9 @@ import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; } } if (pipeline == null) { - throw new IngestModuleLoaderException("Could not find expected pipeline of type: " + pipelineType.toString() + ", cannot add autodiscovered module: " + moduleLocation); + throw new IngestModuleLoaderException( + NbBundle.getMessage(this.getClass(), "IngestModuleLoader.exception.cantFindPipeline.msg", + pipelineType.toString(), moduleLocation)); } else { pipeline.modules.add(modRaw); logger.log(Level.INFO, "Added a new module " + moduleClass.getName() + " to pipeline " + pipelineType.toString()); @@ -706,8 +709,9 @@ import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; Document doc = docBuilder.newDocument(); - Comment comment = doc.createComment("Saved by: " + getClass().getName() - + " on: " + dateFormatter.format(System.currentTimeMillis())); + Comment comment = doc.createComment( + NbBundle.getMessage(this.getClass(), "IngestModuleLoader.save.comment.text", getClass().getName(), + dateFormatter.format(System.currentTimeMillis()))); doc.appendChild(comment); Element rootEl = doc.createElement(IngestModuleLoader.XmlPipelineRaw.XML_PIPELINE_ROOT); doc.appendChild(rootEl); @@ -885,18 +889,23 @@ import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; private void loadRawPipeline() throws IngestModuleLoaderException { final Document doc = XMLUtil.loadDoc(IngestModuleLoader.class, absFilePath, XSDFILE); if (doc == null) { - throw new IngestModuleLoaderException("Could not load pipeline config XML: " + this.absFilePath); + throw new IngestModuleLoaderException( + NbBundle.getMessage(this.getClass(), "IngestModuleLoader.loadRawPipeline.exception.cantLoadXML.msg", + this.absFilePath)); } Element root = doc.getDocumentElement(); if (root == null) { - String msg = "Error loading pipeline configuration: invalid file format."; + String msg = NbBundle + .getMessage(this.getClass(), "IngestModuleLoader.loadRawPipeline.exception.invalidFileFormat.msg"); logger.log(Level.SEVERE, msg); throw new IngestModuleLoaderException(msg); } NodeList pipelineNodes = root.getElementsByTagName(IngestModuleLoader.XmlPipelineRaw.XML_PIPELINE_EL); int numPipelines = pipelineNodes.getLength(); if (numPipelines == 0) { - throw new IngestModuleLoaderException("No pipelines found in the pipeline configuration: " + absFilePath); + throw new IngestModuleLoaderException(NbBundle.getMessage(this.getClass(), + "IngestModuleLoader.loadRawPipeline.exception.noPipelinesInConf.msg", + absFilePath)); } for (int pipelineNum = 0; pipelineNum < numPipelines; ++pipelineNum) { //process pipelines @@ -1026,7 +1035,8 @@ import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; return types[i]; } } - throw new IllegalArgumentException("No PIPELINE_TYPE for string: " + s); + throw new IllegalArgumentException( + NbBundle.getMessage(IngestModuleLoader.class, "IngestModuleLoader.exception.noPipelineTypeForStr.msg", s)); } private static final String XML_PIPELINE_ROOT = "PIPELINE_CONFIG"; private static final String XML_PIPELINE_EL = "PIPELINE"; diff --git a/Core/src/org/sleuthkit/autopsy/ingest/IngestMonitor.java b/Core/src/org/sleuthkit/autopsy/ingest/IngestMonitor.java index 1eee1baf25..c97875d69d 100644 --- a/Core/src/org/sleuthkit/autopsy/ingest/IngestMonitor.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/IngestMonitor.java @@ -27,6 +27,8 @@ import java.io.IOException; import java.util.logging.FileHandler; import java.util.logging.Level; import java.util.logging.SimpleFormatter; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.Logger; import javax.swing.Timer; import org.openide.util.Exceptions; @@ -164,9 +166,9 @@ import org.sleuthkit.autopsy.coreutils.PlatformUtil; MONITOR_LOGGER.log(Level.SEVERE, "Stopping ingest due to low disk space on disk " + diskPath); logger.log(Level.SEVERE, "Stopping ingest due to low disk space on disk " + diskPath); manager.stopAll(); - manager.postMessage(IngestMessage.createManagerErrorMessage("Ingest stopped - low disk space on " + diskPath, - "Stopping ingest due to low disk space on disk " + diskPath - + ". \nEnsure the Case drive has at least 1GB free space and restart ingest.")); + manager.postMessage(IngestMessage.createManagerErrorMessage( + NbBundle.getMessage(this.getClass(), "IngestMonitor.mgrErrMsg.lowDiskSpace.title", diskPath), + NbBundle.getMessage(this.getClass(), "IngestMonitor.mgrErrMsg.lowDiskSpace.msg", diskPath))); } } diff --git a/Core/src/org/sleuthkit/autopsy/ingest/IngestScheduler.java b/Core/src/org/sleuthkit/autopsy/ingest/IngestScheduler.java index 3b9836bf68..b663b2ac28 100644 --- a/Core/src/org/sleuthkit/autopsy/ingest/IngestScheduler.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/IngestScheduler.java @@ -31,8 +31,9 @@ import java.util.logging.Level; import java.util.logging.Logger; import java.util.regex.Matcher; import java.util.regex.Pattern; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.casemodule.Case; -import org.sleuthkit.autopsy.ingest.IngestScheduler.FileScheduler.FileTask; import org.sleuthkit.datamodel.AbstractFile; import org.sleuthkit.datamodel.Content; import org.sleuthkit.datamodel.ContentVisitor; @@ -134,15 +135,18 @@ class IngestScheduler { @Override public synchronized String toString() { StringBuilder sb = new StringBuilder(); - sb.append("\nRootDirs(sorted), size: ").append(rootProcessTasks.size()); + sb.append(NbBundle.getMessage(this.getClass(), "IngestScheduler.FileSched.toString.rootDirs.text", + rootProcessTasks.size())); for (FileTask task : rootProcessTasks) { sb.append(task.toString()).append(" "); } - sb.append("\nCurDirs(stack), size: ").append(curDirProcessTasks.size()); + sb.append(NbBundle.getMessage(this.getClass(), "IngestScheduler.FileSched.toString.curDirs.text", + curDirProcessTasks.size())); for (FileTask task : curDirProcessTasks) { sb.append(task.toString()).append(" "); } - sb.append("\nCurFiles, size: ").append(curFileProcessTasks.size()); + sb.append(NbBundle.getMessage(this.getClass(), "IngestScheduler.FileSched.toString.curFiles.text", + curFileProcessTasks.size())); for (FileTask task : curFileProcessTasks) { sb.append(task.toString()).append(" "); } @@ -224,13 +228,13 @@ class IngestScheduler { @Override public String toString() { try { - return "ProcessTask{" + "file=" + file.getId() + ": " - + file.getUniquePath() + "}"; // + ", dataSourceTask=" + dataSourceTask + '}'; + return NbBundle.getMessage(this.getClass(), "IngestScheduler.fileTask.toString.long", file.getId(), + file.getUniquePath()); // + ", dataSourceTask=" + dataSourceTask + '}'; } catch (TskCoreException ex) { logger.log(Level.SEVERE, "Cound not get unique path of file in queue, ", ex); } - return "ProcessTask{" + "file=" + file.getId() + ": " - + file.getName() + '}'; + return NbBundle.getMessage(this.getClass(), "IngestScheduler.fileTask.toString.short", file.getId(), + file.getName()); } /** @@ -432,7 +436,8 @@ class IngestScheduler { @Override public synchronized FileTask next() { if (!hasNext()) { - throw new IllegalStateException("No next ProcessTask, check hasNext() first!"); + throw new IllegalStateException( + NbBundle.getMessage(this.getClass(), "IngestScheduler.FileTask.next.exception.msg")); } //dequeue the last in the list @@ -502,7 +507,8 @@ class IngestScheduler { @Override public void remove() { - throw new UnsupportedOperationException("Not supported."); + throw new UnsupportedOperationException( + NbBundle.getMessage(this.getClass(), "IngestScheduler.remove.exception.notSupported.msg")); } /** @@ -933,7 +939,8 @@ class IngestScheduler { @Override public synchronized DataSourceTask next() throws IllegalStateException { if (!hasNext()) { - throw new IllegalStateException("There is no data source tasks in the queue, check hasNext()"); + throw new IllegalStateException( + NbBundle.getMessage(this.getClass(), "IngestScheduler.DataSourceScheduler.exception.next.msg")); } final DataSourceTask ret = tasks.pollFirst(); @@ -960,7 +967,8 @@ class IngestScheduler { @Override public void remove() { - throw new UnsupportedOperationException("Removing of scheduled data source ingest tasks is not supported. "); + throw new UnsupportedOperationException( + NbBundle.getMessage(this.getClass(), "IngestScheduler.DataSourceScheduler.exception.remove.msg")); } synchronized void empty() { @@ -974,7 +982,8 @@ class IngestScheduler { @Override public String toString() { StringBuilder sb = new StringBuilder(); - sb.append("DataSourceQueue, size: ").append(getCount()); + sb.append(NbBundle.getMessage(this.getClass(), "IngestScheduler.DataSourceScheduler.toString.size", + getCount())); for (DataSourceTask task : tasks) { sb.append(task.toString()).append(" "); } diff --git a/Core/src/org/sleuthkit/autopsy/ingest/PipelineContext.java b/Core/src/org/sleuthkit/autopsy/ingest/PipelineContext.java index 1e2b69e981..1ea7de6033 100644 --- a/Core/src/org/sleuthkit/autopsy/ingest/PipelineContext.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/PipelineContext.java @@ -18,6 +18,8 @@ */ package org.sleuthkit.autopsy.ingest; +import org.openide.util.NbBundle; + import java.util.Objects; /** @@ -45,7 +47,7 @@ public class PipelineContext { @Override public String toString() { - return "pipelineContext{" + "task=" + task + '}'; + return NbBundle.getMessage(this.getClass(), "PipelineContext.toString.text", task); } @Override