From f6524b1c4a1167e38338e879f316847998a40b54 Mon Sep 17 00:00:00 2001 From: "Samuel H. Kenyon" Date: Fri, 18 Apr 2014 15:13:17 -0400 Subject: [PATCH 01/27] updated KeywordSearchIngestModule to keep track of ingest status per job, not all jobs combined together --- .../KeywordSearchIngestModule.java | 52 ++++++++++++------- 1 file changed, 32 insertions(+), 20 deletions(-) diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchIngestModule.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchIngestModule.java index dbb9c198e5..ad2a8a6c6f 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchIngestModule.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchIngestModule.java @@ -103,11 +103,22 @@ public final class KeywordSearchIngestModule extends IngestModuleAdapter impleme SKIPPED_ERROR_TEXTEXTRACT, ///< File was skipped because of text extraction issues SKIPPED_ERROR_IO ///< File was skipped because of IO issues reading it }; - private static final Map ingestStatus = new HashMap<>(); //guarded by itself + private static final Map> ingestStatus = new HashMap<>(); //guarded by itself - static void putIngestStatus(long id, IngestStatus status) { - synchronized(ingestStatus) { - ingestStatus.put(id, status); + private static void initIngestStatus(long ingestJobId) { + synchronized(ingestStatus) { + if (ingestStatus.get(ingestJobId) == null) { + Map ingestStatusForJob = new HashMap<>(); + ingestStatus.put(ingestJobId, ingestStatusForJob); + } + } + } + + private static void putIngestStatus(long ingestJobId, long fileId, IngestStatus status) { + synchronized(ingestStatus) { + Map ingestStatusForJob = ingestStatus.get(ingestJobId); + ingestStatusForJob.put(fileId, status); + ingestStatus.put(ingestJobId, ingestStatusForJob); } } @@ -201,7 +212,7 @@ public final class KeywordSearchIngestModule extends IngestModuleAdapter impleme if (initialized == false) //error initializing indexing/Solr { logger.log(Level.WARNING, "Skipping processing, module not initialized, file: {0}", abstractFile.getName()); - putIngestStatus(abstractFile.getId(), IngestStatus.SKIPPED_ERROR_INDEXING); + putIngestStatus(jobId, abstractFile.getId(), IngestStatus.SKIPPED_ERROR_INDEXING); return ProcessResult.OK; } try { @@ -314,16 +325,17 @@ public final class KeywordSearchIngestModule extends IngestModuleAdapter impleme int error_io = 0; synchronized(ingestStatus) { - for (IngestStatus s : ingestStatus.values()) { + Map ingestStatusForJob = ingestStatus.get(jobId); + for (IngestStatus s : ingestStatusForJob.values()) { switch (s) { case TEXT_INGESTED: - ++text_ingested; + text_ingested++; break; case METADATA_INGESTED: - ++metadata_ingested; + metadata_ingested++; break; case STRINGS_INGESTED: - ++strings_ingested; + strings_ingested++; break; case SKIPPED_ERROR_TEXTEXTRACT: error_text++; @@ -411,16 +423,16 @@ public final class KeywordSearchIngestModule extends IngestModuleAdapter impleme private boolean extractStringsAndIndex(AbstractFile aFile) { try { if (stringExtractor.index(aFile)) { - putIngestStatus(aFile.getId(), IngestStatus.STRINGS_INGESTED); + putIngestStatus(jobId, aFile.getId(), IngestStatus.STRINGS_INGESTED); return true; } else { logger.log(Level.WARNING, "Failed to extract strings and ingest, file ''{0}'' (id: {1}).", new Object[]{aFile.getName(), aFile.getId()}); - putIngestStatus(aFile.getId(), IngestStatus.SKIPPED_ERROR_TEXTEXTRACT); + putIngestStatus(jobId, aFile.getId(), IngestStatus.SKIPPED_ERROR_TEXTEXTRACT); return false; } } catch (IngesterException ex) { logger.log(Level.WARNING, "Failed to extract strings and ingest, file '" + aFile.getName() + "' (id: " + aFile.getId() + ").", ex); - putIngestStatus(aFile.getId(), IngestStatus.SKIPPED_ERROR_INDEXING); + putIngestStatus(jobId, aFile.getId(), IngestStatus.SKIPPED_ERROR_INDEXING); return false; } } @@ -466,9 +478,9 @@ public final class KeywordSearchIngestModule extends IngestModuleAdapter impleme if ((indexContent == false || aFile.isDir() || size == 0)) { try { ingester.ingest(aFile, false); //meta-data only - putIngestStatus(aFile.getId(), IngestStatus.METADATA_INGESTED); + putIngestStatus(jobId, aFile.getId(), IngestStatus.METADATA_INGESTED); } catch (IngesterException ex) { - putIngestStatus(aFile.getId(), IngestStatus.SKIPPED_ERROR_INDEXING); + putIngestStatus(jobId, aFile.getId(), IngestStatus.SKIPPED_ERROR_INDEXING); logger.log(Level.WARNING, "Unable to index meta-data for file: " + aFile.getId(), ex); } return; @@ -502,9 +514,9 @@ public final class KeywordSearchIngestModule extends IngestModuleAdapter impleme if (AbstractFileExtract.ARCHIVE_MIME_TYPES.contains(detectedFormat)) { try { ingester.ingest(aFile, false); //meta-data only - putIngestStatus(aFile.getId(), IngestStatus.METADATA_INGESTED); + putIngestStatus(jobId, aFile.getId(), IngestStatus.METADATA_INGESTED); } catch (IngesterException ex) { - putIngestStatus(aFile.getId(), IngestStatus.SKIPPED_ERROR_INDEXING); + putIngestStatus(jobId, aFile.getId(), IngestStatus.SKIPPED_ERROR_INDEXING); logger.log(Level.WARNING, "Unable to index meta-data for file: " + aFile.getId(), ex); } return; @@ -517,20 +529,20 @@ public final class KeywordSearchIngestModule extends IngestModuleAdapter impleme //logger.log(Level.INFO, "indexing: " + aFile.getName()); if (!extractTextAndIndex(aFile, detectedFormat)) { logger.log(Level.WARNING, "Failed to extract text and ingest, file ''{0}'' (id: {1}).", new Object[]{aFile.getName(), aFile.getId()}); - putIngestStatus(aFile.getId(), IngestStatus.SKIPPED_ERROR_TEXTEXTRACT); + putIngestStatus(jobId, aFile.getId(), IngestStatus.SKIPPED_ERROR_TEXTEXTRACT); } else { - putIngestStatus(aFile.getId(), IngestStatus.TEXT_INGESTED); + putIngestStatus(jobId, aFile.getId(), IngestStatus.TEXT_INGESTED); wasTextAdded = true; } } catch (IngesterException e) { logger.log(Level.INFO, "Could not extract text with Tika, " + aFile.getId() + ", " + aFile.getName(), e); - putIngestStatus(aFile.getId(), IngestStatus.SKIPPED_ERROR_INDEXING); + putIngestStatus(jobId, aFile.getId(), IngestStatus.SKIPPED_ERROR_INDEXING); } catch (Exception e) { logger.log(Level.WARNING, "Error extracting text with Tika, " + aFile.getId() + ", " + aFile.getName(), e); - putIngestStatus(aFile.getId(), IngestStatus.SKIPPED_ERROR_TEXTEXTRACT); + putIngestStatus(jobId, aFile.getId(), IngestStatus.SKIPPED_ERROR_TEXTEXTRACT); } } From f8e922928b3f63df91a4e0a6c4a846e7c8191db3 Mon Sep 17 00:00:00 2001 From: "Samuel H. Kenyon" Date: Fri, 18 Apr 2014 16:04:19 -0400 Subject: [PATCH 02/27] init ingest status --- .../autopsy/keywordsearch/KeywordSearchIngestModule.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchIngestModule.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchIngestModule.java index ad2a8a6c6f..9bafa43ec0 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchIngestModule.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchIngestModule.java @@ -136,7 +136,7 @@ public final class KeywordSearchIngestModule extends IngestModuleAdapter impleme public void startUp(IngestJobContext context) throws IngestModuleException { logger.log(Level.INFO, "Initializing instance {0}", instanceNum); initialized = false; - jobId = context.getJobId(); + jobId = context.getJobId(); caseHandle = Case.getCurrentCase().getSleuthkitCase(); tikaFormatDetector = new Tika(); ingester = Server.getIngester(); @@ -144,6 +144,7 @@ public final class KeywordSearchIngestModule extends IngestModuleAdapter impleme // increment the module reference count // if first instance of this module for this job then check the server and existence of keywords if (refCounter.incrementAndGet(jobId) == 1) { + initIngestStatus(jobId); final Server server = KeywordSearch.getServer(); try { if (!server.isRunning()) { From 2c7eeba6d5862123a58e5a7368cc61ef0cf6a3c6 Mon Sep 17 00:00:00 2001 From: "Samuel H. Kenyon" Date: Fri, 18 Apr 2014 16:30:15 -0400 Subject: [PATCH 03/27] cleanup() now only removes the ingest status for the current job. call cleanup() from shutDown(). --- .../autopsy/keywordsearch/KeywordSearchIngestModule.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchIngestModule.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchIngestModule.java index 9bafa43ec0..9491553c6b 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchIngestModule.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchIngestModule.java @@ -284,6 +284,8 @@ public final class KeywordSearchIngestModule extends IngestModuleAdapter impleme } catch (NoOpenCoreException | KeywordSearchModuleException ex) { logger.log(Level.WARNING, "Error executing Solr query to check number of indexed files/chunks: ", ex); } + + cleanup(); } /** @@ -302,7 +304,7 @@ public final class KeywordSearchIngestModule extends IngestModuleAdapter impleme */ private void cleanup() { synchronized(ingestStatus) { - ingestStatus.clear(); + ingestStatus.remove(jobId); } textExtractors.clear(); From 376f82d3a7848a7af29cbb8228c5eec26faef777 Mon Sep 17 00:00:00 2001 From: "Samuel H. Kenyon" Date: Fri, 18 Apr 2014 17:31:49 -0400 Subject: [PATCH 04/27] clean up ingestStatus only if this is the last module for that job --- .../autopsy/keywordsearch/KeywordSearchIngestModule.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchIngestModule.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchIngestModule.java index 9491553c6b..d4c20ef695 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchIngestModule.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchIngestModule.java @@ -272,6 +272,9 @@ public final class KeywordSearchIngestModule extends IngestModuleAdapter impleme // We only need to post the summary msg from the last module per job if (refCounter.decrementAndGet(jobId) == 0) { postIndexSummary(); + synchronized(ingestStatus) { + ingestStatus.remove(jobId); + } } //log number of files / chunks in index @@ -303,10 +306,6 @@ public final class KeywordSearchIngestModule extends IngestModuleAdapter impleme * Common cleanup code when module stops or final searcher completes */ private void cleanup() { - synchronized(ingestStatus) { - ingestStatus.remove(jobId); - } - textExtractors.clear(); textExtractors = null; stringExtractor = null; From 1646a5ef410e247d4f895f755402db0983ccbc0b Mon Sep 17 00:00:00 2001 From: "Samuel H. Kenyon" Date: Mon, 21 Apr 2014 15:25:24 -0400 Subject: [PATCH 05/27] updated HashDbIngestModule to keep track of totals for all modules per job, not all jobs combined together --- .../hashdatabase/HashDbIngestModule.java | 34 +++++++++++++------ 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbIngestModule.java b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbIngestModule.java index e623b4f561..6aaa7af0b8 100644 --- a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbIngestModule.java +++ b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbIngestModule.java @@ -21,6 +21,7 @@ package org.sleuthkit.autopsy.hashdatabase; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; import java.util.List; import java.util.concurrent.atomic.AtomicLong; import java.util.logging.Level; @@ -57,18 +58,27 @@ public class HashDbIngestModule extends IngestModuleAdapter implements FileInges private List knownBadHashSets = new ArrayList<>(); private List knownHashSets = new ArrayList<>(); private long jobId; - private static AtomicLong totalKnownBadCount = new AtomicLong(0); - private static AtomicLong totalCalctime = new AtomicLong(0); - private static AtomicLong totalLookuptime = new AtomicLong(0); + private static final HashMap totalsForIngestJobs = new HashMap<>(); private static final IngestModuleReferenceCounter refCounter = new IngestModuleReferenceCounter(); + private static class IngestJobTotals { + private AtomicLong totalKnownBadCount = new AtomicLong(0); + private AtomicLong totalCalctime = new AtomicLong(0); + private AtomicLong totalLookuptime = new AtomicLong(0); + } + + private static synchronized void initTotals(long ingestJobId) { + totalsForIngestJobs.put(ingestJobId, new HashDbIngestModule.IngestJobTotals()); + } + HashDbIngestModule(HashLookupModuleSettings settings) { this.settings = settings; } @Override public void startUp(org.sleuthkit.autopsy.ingest.IngestJobContext context) throws IngestModuleException { - jobId = context.getJobId(); + jobId = context.getJobId(); + initTotals(jobId); getEnabledHashSets(hashDbManager.getKnownBadFileHashSets(), knownBadHashSets); getEnabledHashSets(hashDbManager.getKnownFileHashSets(), knownHashSets); @@ -131,7 +141,7 @@ public class HashDbIngestModule extends IngestModuleAdapter implements FileInges long calcstart = System.currentTimeMillis(); md5Hash = hasher.calculateMd5(file); long delta = (System.currentTimeMillis() - calcstart); - totalCalctime.addAndGet(delta); + totalsForIngestJobs.get(jobId).totalCalctime.addAndGet(delta); } catch (IOException ex) { logger.log(Level.WARNING, "Error calculating hash of file " + name, ex); @@ -156,7 +166,7 @@ public class HashDbIngestModule extends IngestModuleAdapter implements FileInges HashInfo hashInfo = db.lookUp(file); if (null != hashInfo) { foundBad = true; - totalKnownBadCount.incrementAndGet(); + totalsForIngestJobs.get(jobId).totalKnownBadCount.incrementAndGet(); try { skCase.setKnown(file, TskData.FileKnown.BAD); @@ -191,7 +201,7 @@ public class HashDbIngestModule extends IngestModuleAdapter implements FileInges postHashSetHitToBlackboard(file, md5Hash, hashSetName, comment, db.getSendIngestMessages()); } long delta = (System.currentTimeMillis() - lookupstart); - totalLookuptime.addAndGet(delta); + totalsForIngestJobs.get(jobId).totalLookuptime.addAndGet(delta); } catch (TskException ex) { logger.log(Level.WARNING, "Couldn't lookup known bad hash for file " + name + " - see sleuthkit log for details", ex); @@ -224,7 +234,7 @@ public class HashDbIngestModule extends IngestModuleAdapter implements FileInges } } long delta = (System.currentTimeMillis() - lookupstart); - totalLookuptime.addAndGet(delta); + totalsForIngestJobs.get(jobId).totalLookuptime.addAndGet(delta); } catch (TskException ex) { logger.log(Level.WARNING, "Couldn't lookup known hash for file " + name + " - see sleuthkit log for details", ex); @@ -306,6 +316,8 @@ public class HashDbIngestModule extends IngestModuleAdapter implements FileInges @Override public void shutDown(boolean ingestJobCancelled) { if (refCounter.decrementAndGet(jobId) == 0) { + IngestJobTotals jobTotals = totalsForIngestJobs.remove(jobId); + if ((!knownBadHashSets.isEmpty()) || (!knownHashSets.isEmpty())) { StringBuilder detailsSb = new StringBuilder(); //details @@ -314,14 +326,14 @@ public class HashDbIngestModule extends IngestModuleAdapter implements FileInges detailsSb.append("") .append(NbBundle.getMessage(this.getClass(), "HashDbIngestModule.complete.knownBadsFound")) .append(""); - detailsSb.append("").append(totalKnownBadCount.get()).append(""); + detailsSb.append("").append(jobTotals.totalKnownBadCount.get()).append(""); detailsSb.append("") .append(NbBundle.getMessage(this.getClass(), "HashDbIngestModule.complete.totalCalcTime")) - .append("").append(totalCalctime.get()).append("\n"); + .append("").append(jobTotals.totalCalctime.get()).append("\n"); detailsSb.append("") .append(NbBundle.getMessage(this.getClass(), "HashDbIngestModule.complete.totalLookupTime")) - .append("").append(totalLookuptime.get()).append("\n"); + .append("").append(jobTotals.totalLookuptime.get()).append("\n"); detailsSb.append(""); detailsSb.append("

") From 4fb5b491bd7ac340f0acc770614b76f7f3a8e309 Mon Sep 17 00:00:00 2001 From: "Samuel H. Kenyon" Date: Mon, 21 Apr 2014 15:31:56 -0400 Subject: [PATCH 06/27] fixed init for changes in previous commit --- .../sleuthkit/autopsy/hashdatabase/HashDbIngestModule.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbIngestModule.java b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbIngestModule.java index 6aaa7af0b8..197bfde03a 100644 --- a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbIngestModule.java +++ b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbIngestModule.java @@ -78,11 +78,12 @@ public class HashDbIngestModule extends IngestModuleAdapter implements FileInges @Override public void startUp(org.sleuthkit.autopsy.ingest.IngestJobContext context) throws IngestModuleException { jobId = context.getJobId(); - initTotals(jobId); getEnabledHashSets(hashDbManager.getKnownBadFileHashSets(), knownBadHashSets); getEnabledHashSets(hashDbManager.getKnownFileHashSets(), knownHashSets); - if (refCounter.incrementAndGet(jobId) == 1) { + if (refCounter.incrementAndGet(jobId) == 1) { + initTotals(jobId); + // if first module for this job then post error msgs if needed if (knownBadHashSets.isEmpty()) { From 3b3ae6ee8e591c0f5af090034fd5cc5f6633f444 Mon Sep 17 00:00:00 2001 From: "Samuel H. Kenyon" Date: Mon, 21 Apr 2014 15:34:30 -0400 Subject: [PATCH 07/27] updated FileExtMismatchIngestModule to keep track of totals for all modules per job, not all jobs combined together --- .../FileExtMismatchIngestModule.java | 39 +++++++++++++++---- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/FileExtMismatchIngestModule.java b/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/FileExtMismatchIngestModule.java index 5745017a08..122a35e440 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/FileExtMismatchIngestModule.java +++ b/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/FileExtMismatchIngestModule.java @@ -52,10 +52,30 @@ public class FileExtMismatchIngestModule extends IngestModuleAdapter implements private final FileExtMismatchDetectorModuleSettings settings; private HashMap SigTypeToExtMap = new HashMap<>(); private long jobId; - private static AtomicLong processTime = new AtomicLong(0); - private static AtomicLong numFiles = new AtomicLong(0); + private static final HashMap totalsForIngestJobs = new HashMap<>(); private static final IngestModuleReferenceCounter refCounter = new IngestModuleReferenceCounter(); + private static class IngestJobTotals { + long processTime = 0; + long numFiles = 0; + } + + private static synchronized void initTotals(long ingestJobId) { + totalsForIngestJobs.put(ingestJobId, new IngestJobTotals()); + } + + /** + * Update the match time total and increment num of files for this job + * @param ingestJobId + * @param matchTimeInc amount of time to add + */ + private static synchronized void addToTotals(long ingestJobId, long processTimeInc) { + IngestJobTotals ingestJobTotals = totalsForIngestJobs.get(ingestJobId); + ingestJobTotals.processTime += processTimeInc; + ingestJobTotals.numFiles++; + totalsForIngestJobs.put(ingestJobId, ingestJobTotals); + } + FileExtMismatchIngestModule(FileExtMismatchDetectorModuleSettings settings) { this.settings = settings; } @@ -63,7 +83,9 @@ public class FileExtMismatchIngestModule extends IngestModuleAdapter implements @Override public void startUp(IngestJobContext context) throws IngestModuleException { jobId = context.getJobId(); - refCounter.incrementAndGet(jobId); + if (refCounter.incrementAndGet(jobId) == 1) { + initTotals(jobId); + } FileExtMismatchXML xmlLoader = FileExtMismatchXML.getDefault(); SigTypeToExtMap = xmlLoader.load(); } @@ -87,8 +109,7 @@ public class FileExtMismatchIngestModule extends IngestModuleAdapter implements boolean mismatchDetected = compareSigTypeToExt(abstractFile); - processTime.getAndAdd(System.currentTimeMillis() - startTime); - numFiles.getAndIncrement(); + addToTotals(jobId, System.currentTimeMillis() - startTime); if (mismatchDetected) { // add artifact @@ -155,16 +176,18 @@ public class FileExtMismatchIngestModule extends IngestModuleAdapter implements @Override public void shutDown(boolean ingestJobCancelled) { // We only need to post the summary msg from the last module per job - if (refCounter.decrementAndGet(jobId) == 0) { + if (refCounter.decrementAndGet(jobId) == 0) { + IngestJobTotals jobTotals = totalsForIngestJobs.remove(jobId); + StringBuilder detailsSb = new StringBuilder(); detailsSb.append(""); detailsSb.append(""); detailsSb.append("\n"); + .append("\n"); detailsSb.append("\n"); + .append("\n"); detailsSb.append("
").append(FileExtMismatchDetectorModuleFactory.getModuleName()).append("
").append( NbBundle.getMessage(this.getClass(), "FileExtMismatchIngestModule.complete.totalProcTime")) - .append("").append(processTime.get()).append("
").append(jobTotals.processTime).append("
").append( NbBundle.getMessage(this.getClass(), "FileExtMismatchIngestModule.complete.totalFiles")) - .append("").append(numFiles.get()).append("
").append(jobTotals.numFiles).append("
"); services.postMessage(IngestMessage.createMessage(IngestMessage.MessageType.INFO, FileExtMismatchDetectorModuleFactory.getModuleName(), NbBundle.getMessage(this.getClass(), From 7bd773f7c964843b9671fdd78bd791bf0357840a Mon Sep 17 00:00:00 2001 From: "Samuel H. Kenyon" Date: Tue, 22 Apr 2014 11:55:32 -0400 Subject: [PATCH 08/27] HashDbIngestModule: Thread-safety refinement of summary posting --- .../hashdatabase/HashDbIngestModule.java | 96 ++++++++++--------- 1 file changed, 51 insertions(+), 45 deletions(-) diff --git a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbIngestModule.java b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbIngestModule.java index 197bfde03a..d32d3d073c 100644 --- a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbIngestModule.java +++ b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbIngestModule.java @@ -67,10 +67,15 @@ public class HashDbIngestModule extends IngestModuleAdapter implements FileInges private AtomicLong totalLookuptime = new AtomicLong(0); } - private static synchronized void initTotals(long ingestJobId) { - totalsForIngestJobs.put(ingestJobId, new HashDbIngestModule.IngestJobTotals()); - } - + private static synchronized IngestJobTotals getTotalsForIngestJobs(long ingestJobId) { + IngestJobTotals totals = totalsForIngestJobs.get(ingestJobId); + if (totals == null) { + totals = new HashDbIngestModule.IngestJobTotals(); + totalsForIngestJobs.put(ingestJobId, totals); + } + return totals; + } + HashDbIngestModule(HashLookupModuleSettings settings) { this.settings = settings; } @@ -82,8 +87,6 @@ public class HashDbIngestModule extends IngestModuleAdapter implements FileInges getEnabledHashSets(hashDbManager.getKnownFileHashSets(), knownHashSets); if (refCounter.incrementAndGet(jobId) == 1) { - initTotals(jobId); - // if first module for this job then post error msgs if needed if (knownBadHashSets.isEmpty()) { @@ -142,7 +145,7 @@ public class HashDbIngestModule extends IngestModuleAdapter implements FileInges long calcstart = System.currentTimeMillis(); md5Hash = hasher.calculateMd5(file); long delta = (System.currentTimeMillis() - calcstart); - totalsForIngestJobs.get(jobId).totalCalctime.addAndGet(delta); + getTotalsForIngestJobs(jobId).totalCalctime.addAndGet(delta); } catch (IOException ex) { logger.log(Level.WARNING, "Error calculating hash of file " + name, ex); @@ -167,7 +170,7 @@ public class HashDbIngestModule extends IngestModuleAdapter implements FileInges HashInfo hashInfo = db.lookUp(file); if (null != hashInfo) { foundBad = true; - totalsForIngestJobs.get(jobId).totalKnownBadCount.incrementAndGet(); + getTotalsForIngestJobs(jobId).totalKnownBadCount.incrementAndGet(); try { skCase.setKnown(file, TskData.FileKnown.BAD); @@ -202,7 +205,7 @@ public class HashDbIngestModule extends IngestModuleAdapter implements FileInges postHashSetHitToBlackboard(file, md5Hash, hashSetName, comment, db.getSendIngestMessages()); } long delta = (System.currentTimeMillis() - lookupstart); - totalsForIngestJobs.get(jobId).totalLookuptime.addAndGet(delta); + getTotalsForIngestJobs(jobId).totalLookuptime.addAndGet(delta); } catch (TskException ex) { logger.log(Level.WARNING, "Couldn't lookup known bad hash for file " + name + " - see sleuthkit log for details", ex); @@ -235,7 +238,7 @@ public class HashDbIngestModule extends IngestModuleAdapter implements FileInges } } long delta = (System.currentTimeMillis() - lookupstart); - totalsForIngestJobs.get(jobId).totalLookuptime.addAndGet(delta); + getTotalsForIngestJobs(jobId).totalLookuptime.addAndGet(delta); } catch (TskException ex) { logger.log(Level.WARNING, "Couldn't lookup known hash for file " + name + " - see sleuthkit log for details", ex); @@ -313,45 +316,48 @@ public class HashDbIngestModule extends IngestModuleAdapter implements FileInges } } + private synchronized void postSummary() { + IngestJobTotals jobTotals = totalsForIngestJobs.remove(jobId); + + if ((!knownBadHashSets.isEmpty()) || (!knownHashSets.isEmpty())) { + StringBuilder detailsSb = new StringBuilder(); + //details + detailsSb.append(""); + + detailsSb.append(""); + detailsSb.append(""); + + detailsSb.append("\n"); + detailsSb.append("\n"); + detailsSb.append("
") + .append(NbBundle.getMessage(this.getClass(), "HashDbIngestModule.complete.knownBadsFound")) + .append("").append(jobTotals.totalKnownBadCount.get()).append("
") + .append(NbBundle.getMessage(this.getClass(), "HashDbIngestModule.complete.totalCalcTime")) + .append("").append(jobTotals.totalCalctime.get()).append("
") + .append(NbBundle.getMessage(this.getClass(), "HashDbIngestModule.complete.totalLookupTime")) + .append("").append(jobTotals.totalLookuptime.get()).append("
"); + + detailsSb.append("

") + .append(NbBundle.getMessage(this.getClass(), "HashDbIngestModule.complete.databasesUsed")) + .append("

\n
    "); + for (HashDb db : knownBadHashSets) { + detailsSb.append("
  • ").append(db.getHashSetName()).append("
  • \n"); + } + + detailsSb.append("
"); + services.postMessage(IngestMessage.createMessage( + IngestMessage.MessageType.INFO, + HashLookupModuleFactory.getModuleName(), + NbBundle.getMessage(this.getClass(), + "HashDbIngestModule.complete.hashLookupResults"), + detailsSb.toString())); + } + } @Override public void shutDown(boolean ingestJobCancelled) { if (refCounter.decrementAndGet(jobId) == 0) { - IngestJobTotals jobTotals = totalsForIngestJobs.remove(jobId); - - if ((!knownBadHashSets.isEmpty()) || (!knownHashSets.isEmpty())) { - StringBuilder detailsSb = new StringBuilder(); - //details - detailsSb.append(""); - - detailsSb.append(""); - detailsSb.append(""); - - detailsSb.append("\n"); - detailsSb.append("\n"); - detailsSb.append("
") - .append(NbBundle.getMessage(this.getClass(), "HashDbIngestModule.complete.knownBadsFound")) - .append("").append(jobTotals.totalKnownBadCount.get()).append("
") - .append(NbBundle.getMessage(this.getClass(), "HashDbIngestModule.complete.totalCalcTime")) - .append("").append(jobTotals.totalCalctime.get()).append("
") - .append(NbBundle.getMessage(this.getClass(), "HashDbIngestModule.complete.totalLookupTime")) - .append("").append(jobTotals.totalLookuptime.get()).append("
"); - - detailsSb.append("

") - .append(NbBundle.getMessage(this.getClass(), "HashDbIngestModule.complete.databasesUsed")) - .append("

\n
    "); - for (HashDb db : knownBadHashSets) { - detailsSb.append("
  • ").append(db.getHashSetName()).append("
  • \n"); - } - - detailsSb.append("
"); - services.postMessage(IngestMessage.createMessage( - IngestMessage.MessageType.INFO, - HashLookupModuleFactory.getModuleName(), - NbBundle.getMessage(this.getClass(), - "HashDbIngestModule.complete.hashLookupResults"), - detailsSb.toString())); - } + postSummary(); } } } From 87de6bc96850813364fe01058ad15803ca8c8169 Mon Sep 17 00:00:00 2001 From: "Samuel H. Kenyon" Date: Tue, 22 Apr 2014 12:01:40 -0400 Subject: [PATCH 09/27] KeywordSearchIngestModule: Added a null check to putIngestStatus() and removed the now-unnecessary init method for that --- .../KeywordSearchIngestModule.java | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchIngestModule.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchIngestModule.java index d4c20ef695..7a3104f57e 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchIngestModule.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchIngestModule.java @@ -104,19 +104,14 @@ public final class KeywordSearchIngestModule extends IngestModuleAdapter impleme SKIPPED_ERROR_IO ///< File was skipped because of IO issues reading it }; private static final Map> ingestStatus = new HashMap<>(); //guarded by itself - - private static void initIngestStatus(long ingestJobId) { - synchronized(ingestStatus) { - if (ingestStatus.get(ingestJobId) == null) { - Map ingestStatusForJob = new HashMap<>(); - ingestStatus.put(ingestJobId, ingestStatusForJob); - } - } - } - + private static void putIngestStatus(long ingestJobId, long fileId, IngestStatus status) { synchronized(ingestStatus) { - Map ingestStatusForJob = ingestStatus.get(ingestJobId); + Map ingestStatusForJob = ingestStatus.get(ingestJobId); + if (ingestStatusForJob == null) { + ingestStatusForJob = new HashMap<>(); + } + ingestStatusForJob.put(fileId, status); ingestStatus.put(ingestJobId, ingestStatusForJob); } @@ -144,7 +139,6 @@ public final class KeywordSearchIngestModule extends IngestModuleAdapter impleme // increment the module reference count // if first instance of this module for this job then check the server and existence of keywords if (refCounter.incrementAndGet(jobId) == 1) { - initIngestStatus(jobId); final Server server = KeywordSearch.getServer(); try { if (!server.isRunning()) { From 6473ffb5b31a8655d9b7341849aa12f07a96c9e8 Mon Sep 17 00:00:00 2001 From: "Samuel H. Kenyon" Date: Tue, 22 Apr 2014 14:13:20 -0400 Subject: [PATCH 10/27] Fixed spelling mistake. --- .../sleuthkit/autopsy/examples/SampleIngestModuleFactory.java | 4 ++-- .../sleuthkit/autopsy/ingest/IngestJobConfigurationPanel.java | 4 ++-- .../src/org/sleuthkit/autopsy/ingest/IngestModuleFactory.java | 2 +- .../sleuthkit/autopsy/ingest/IngestModuleFactoryAdapter.java | 2 +- ...tttingsPanel.java => IngestModuleGlobalSettingsPanel.java} | 2 +- .../org/sleuthkit/autopsy/ingest/IngestModuleTemplate.java | 2 +- .../fileextmismatch/FileExtMismatchDetectorModuleFactory.java | 4 ++-- .../modules/fileextmismatch/FileExtMismatchSettingsPanel.java | 4 ++-- .../autopsy/hashdatabase/HashLookupModuleFactory.java | 4 ++-- .../autopsy/hashdatabase/HashLookupSettingsPanel.java | 4 ++-- .../keywordsearch/KeywordSearchGlobalSettingsPanel.java | 4 ++-- .../autopsy/keywordsearch/KeywordSearchModuleFactory.java | 4 ++-- 12 files changed, 20 insertions(+), 20 deletions(-) rename Core/src/org/sleuthkit/autopsy/ingest/{IngestModuleGlobalSetttingsPanel.java => IngestModuleGlobalSettingsPanel.java} (92%) diff --git a/Core/src/org/sleuthkit/autopsy/examples/SampleIngestModuleFactory.java b/Core/src/org/sleuthkit/autopsy/examples/SampleIngestModuleFactory.java index 9e9fbba5fe..a1388ce15f 100755 --- a/Core/src/org/sleuthkit/autopsy/examples/SampleIngestModuleFactory.java +++ b/Core/src/org/sleuthkit/autopsy/examples/SampleIngestModuleFactory.java @@ -43,7 +43,7 @@ import org.openide.util.NbBundle; import org.sleuthkit.autopsy.ingest.IngestModuleFactory; import org.sleuthkit.autopsy.ingest.DataSourceIngestModule; import org.sleuthkit.autopsy.ingest.FileIngestModule; -import org.sleuthkit.autopsy.ingest.IngestModuleGlobalSetttingsPanel; +import org.sleuthkit.autopsy.ingest.IngestModuleGlobalSettingsPanel; import org.sleuthkit.autopsy.ingest.IngestModuleIngestJobSettings; import org.sleuthkit.autopsy.ingest.IngestModuleIngestJobSettingsPanel; @@ -167,7 +167,7 @@ public class SampleIngestModuleFactory implements IngestModuleFactory { * @return A global settings panel. */ @Override - public IngestModuleGlobalSetttingsPanel getGlobalSettingsPanel() { + public IngestModuleGlobalSettingsPanel getGlobalSettingsPanel() { throw new UnsupportedOperationException(); } diff --git a/Core/src/org/sleuthkit/autopsy/ingest/IngestJobConfigurationPanel.java b/Core/src/org/sleuthkit/autopsy/ingest/IngestJobConfigurationPanel.java index a0c617a4bd..117d8882e0 100644 --- a/Core/src/org/sleuthkit/autopsy/ingest/IngestJobConfigurationPanel.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/IngestJobConfigurationPanel.java @@ -325,7 +325,7 @@ class IngestJobConfigurationPanel extends javax.swing.JPanel { static private class IngestModuleModel { private final IngestModuleTemplate moduleTemplate; - private IngestModuleGlobalSetttingsPanel globalSettingsPanel = null; + private IngestModuleGlobalSettingsPanel globalSettingsPanel = null; private IngestModuleIngestJobSettingsPanel moduleSettingsPanel = null; IngestModuleModel(IngestModuleTemplate moduleTemplate) { @@ -370,7 +370,7 @@ class IngestJobConfigurationPanel extends javax.swing.JPanel { return moduleTemplate.hasGlobalSettingsPanel(); } - IngestModuleGlobalSetttingsPanel getGlobalSettingsPanel() { + IngestModuleGlobalSettingsPanel getGlobalSettingsPanel() { return globalSettingsPanel; } diff --git a/Core/src/org/sleuthkit/autopsy/ingest/IngestModuleFactory.java b/Core/src/org/sleuthkit/autopsy/ingest/IngestModuleFactory.java index d097ff557c..c59e3868c8 100755 --- a/Core/src/org/sleuthkit/autopsy/ingest/IngestModuleFactory.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/IngestModuleFactory.java @@ -113,7 +113,7 @@ public interface IngestModuleFactory { * * @return A global settings panel. */ - IngestModuleGlobalSetttingsPanel getGlobalSettingsPanel(); + IngestModuleGlobalSettingsPanel getGlobalSettingsPanel(); /** * Gets the default per ingest job settings for instances of the family of diff --git a/Core/src/org/sleuthkit/autopsy/ingest/IngestModuleFactoryAdapter.java b/Core/src/org/sleuthkit/autopsy/ingest/IngestModuleFactoryAdapter.java index 60bea92713..2c4831bb01 100755 --- a/Core/src/org/sleuthkit/autopsy/ingest/IngestModuleFactoryAdapter.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/IngestModuleFactoryAdapter.java @@ -39,7 +39,7 @@ public abstract class IngestModuleFactoryAdapter implements IngestModuleFactory } @Override - public IngestModuleGlobalSetttingsPanel getGlobalSettingsPanel() { + public IngestModuleGlobalSettingsPanel getGlobalSettingsPanel() { throw new UnsupportedOperationException(); } diff --git a/Core/src/org/sleuthkit/autopsy/ingest/IngestModuleGlobalSetttingsPanel.java b/Core/src/org/sleuthkit/autopsy/ingest/IngestModuleGlobalSettingsPanel.java similarity index 92% rename from Core/src/org/sleuthkit/autopsy/ingest/IngestModuleGlobalSetttingsPanel.java rename to Core/src/org/sleuthkit/autopsy/ingest/IngestModuleGlobalSettingsPanel.java index f6de631e9b..30724bfe8d 100755 --- a/Core/src/org/sleuthkit/autopsy/ingest/IngestModuleGlobalSetttingsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/IngestModuleGlobalSettingsPanel.java @@ -23,7 +23,7 @@ import javax.swing.JPanel; /** * Base class for ingest module global settings panels. */ -public abstract class IngestModuleGlobalSetttingsPanel extends JPanel { +public abstract class IngestModuleGlobalSettingsPanel extends JPanel { public abstract void saveSettings(); } \ No newline at end of file diff --git a/Core/src/org/sleuthkit/autopsy/ingest/IngestModuleTemplate.java b/Core/src/org/sleuthkit/autopsy/ingest/IngestModuleTemplate.java index f536b7916e..58dbc0004f 100755 --- a/Core/src/org/sleuthkit/autopsy/ingest/IngestModuleTemplate.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/IngestModuleTemplate.java @@ -61,7 +61,7 @@ final class IngestModuleTemplate { return moduleFactory.hasGlobalSettingsPanel(); } - IngestModuleGlobalSetttingsPanel getGlobalSettingsPanel() { + IngestModuleGlobalSettingsPanel getGlobalSettingsPanel() { return moduleFactory.getGlobalSettingsPanel(); } diff --git a/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/FileExtMismatchDetectorModuleFactory.java b/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/FileExtMismatchDetectorModuleFactory.java index 645de2ba48..5bffca30c2 100755 --- a/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/FileExtMismatchDetectorModuleFactory.java +++ b/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/FileExtMismatchDetectorModuleFactory.java @@ -26,7 +26,7 @@ import org.sleuthkit.autopsy.ingest.FileIngestModule; import org.sleuthkit.autopsy.ingest.IngestModuleFactory; import org.sleuthkit.autopsy.ingest.IngestModuleIngestJobSettings; import org.sleuthkit.autopsy.ingest.IngestModuleIngestJobSettingsPanel; -import org.sleuthkit.autopsy.ingest.IngestModuleGlobalSetttingsPanel; +import org.sleuthkit.autopsy.ingest.IngestModuleGlobalSettingsPanel; /** * An factory that creates file ingest modules that detect mismatches between @@ -82,7 +82,7 @@ public class FileExtMismatchDetectorModuleFactory extends IngestModuleFactoryAda } @Override - public IngestModuleGlobalSetttingsPanel getGlobalSettingsPanel() { + public IngestModuleGlobalSettingsPanel getGlobalSettingsPanel() { FileExtMismatchSettingsPanel globalOptionsPanel = new FileExtMismatchSettingsPanel(); globalOptionsPanel.load(); return globalOptionsPanel; diff --git a/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/FileExtMismatchSettingsPanel.java b/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/FileExtMismatchSettingsPanel.java index ee76aa4095..de8b1e30dd 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/FileExtMismatchSettingsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/FileExtMismatchSettingsPanel.java @@ -29,7 +29,7 @@ import javax.swing.ListSelectionModel; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import javax.swing.table.AbstractTableModel; -import org.sleuthkit.autopsy.ingest.IngestModuleGlobalSetttingsPanel; +import org.sleuthkit.autopsy.ingest.IngestModuleGlobalSettingsPanel; import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.modules.filetypeid.FileTypeIdIngestModule; @@ -39,7 +39,7 @@ import org.sleuthkit.autopsy.corecomponents.OptionsPanel; * Container panel for File Extension Mismatch Ingest Module advanced * configuration options */ -final class FileExtMismatchSettingsPanel extends IngestModuleGlobalSetttingsPanel implements OptionsPanel { +final class FileExtMismatchSettingsPanel extends IngestModuleGlobalSettingsPanel implements OptionsPanel { private static Logger logger = Logger.getLogger(FileExtMismatchSettingsPanel.class.getName()); private HashMap editableMap = new HashMap<>(); diff --git a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashLookupModuleFactory.java b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashLookupModuleFactory.java index 3e2934f323..b9fa7bebf5 100755 --- a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashLookupModuleFactory.java +++ b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashLookupModuleFactory.java @@ -28,7 +28,7 @@ import org.sleuthkit.autopsy.ingest.FileIngestModule; import org.sleuthkit.autopsy.ingest.IngestModuleFactory; import org.sleuthkit.autopsy.ingest.IngestModuleIngestJobSettings; import org.sleuthkit.autopsy.ingest.IngestModuleIngestJobSettingsPanel; -import org.sleuthkit.autopsy.ingest.IngestModuleGlobalSetttingsPanel; +import org.sleuthkit.autopsy.ingest.IngestModuleGlobalSettingsPanel; /** * A factory that creates file ingest modules that do hash database lookups. @@ -98,7 +98,7 @@ public class HashLookupModuleFactory extends IngestModuleFactoryAdapter { } @Override - public IngestModuleGlobalSetttingsPanel getGlobalSettingsPanel() { + public IngestModuleGlobalSettingsPanel getGlobalSettingsPanel() { HashLookupSettingsPanel globalSettingsPanel = new HashLookupSettingsPanel(); globalSettingsPanel.load(); return globalSettingsPanel; diff --git a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashLookupSettingsPanel.java b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashLookupSettingsPanel.java index 4e1e9ceb70..055a242cc3 100644 --- a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashLookupSettingsPanel.java +++ b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashLookupSettingsPanel.java @@ -45,13 +45,13 @@ import org.sleuthkit.autopsy.ingest.IngestManager; import org.sleuthkit.datamodel.TskCoreException; import org.sleuthkit.autopsy.hashdatabase.HashDbManager.HashDb; import org.sleuthkit.autopsy.hashdatabase.HashDbManager.HashDb.KnownFilesType; -import org.sleuthkit.autopsy.ingest.IngestModuleGlobalSetttingsPanel; +import org.sleuthkit.autopsy.ingest.IngestModuleGlobalSettingsPanel; /** * Instances of this class provide a comprehensive UI for managing the hash sets * configuration. */ -public final class HashLookupSettingsPanel extends IngestModuleGlobalSetttingsPanel implements OptionsPanel { +public final class HashLookupSettingsPanel extends IngestModuleGlobalSettingsPanel implements OptionsPanel { private static final String NO_SELECTION_TEXT = NbBundle .getMessage(HashLookupSettingsPanel.class, "HashDbConfigPanel.noSelectionText"); diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchGlobalSettingsPanel.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchGlobalSettingsPanel.java index d400abe80c..dc0fdf2912 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchGlobalSettingsPanel.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchGlobalSettingsPanel.java @@ -20,12 +20,12 @@ package org.sleuthkit.autopsy.keywordsearch; import org.openide.util.NbBundle; import org.sleuthkit.autopsy.corecomponents.OptionsPanel; -import org.sleuthkit.autopsy.ingest.IngestModuleGlobalSetttingsPanel; +import org.sleuthkit.autopsy.ingest.IngestModuleGlobalSettingsPanel; /** * Global options panel for keyword searching. */ -final class KeywordSearchGlobalSettingsPanel extends IngestModuleGlobalSetttingsPanel implements OptionsPanel { +final class KeywordSearchGlobalSettingsPanel extends IngestModuleGlobalSettingsPanel implements OptionsPanel { private KeywordSearchGlobalListSettingsPanel listsPanel; private KeywordSearchGlobalLanguageSettingsPanel languagesPanel; diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchModuleFactory.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchModuleFactory.java index d20d7c4c96..98e882ba2c 100755 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchModuleFactory.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchModuleFactory.java @@ -30,7 +30,7 @@ import org.sleuthkit.autopsy.ingest.FileIngestModule; import org.sleuthkit.autopsy.ingest.IngestModuleFactory; import org.sleuthkit.autopsy.ingest.IngestModuleIngestJobSettings; import org.sleuthkit.autopsy.ingest.IngestModuleIngestJobSettingsPanel; -import org.sleuthkit.autopsy.ingest.IngestModuleGlobalSetttingsPanel; +import org.sleuthkit.autopsy.ingest.IngestModuleGlobalSettingsPanel; /** * An ingest module factory that creates file ingest modules that do keyword @@ -100,7 +100,7 @@ public class KeywordSearchModuleFactory extends IngestModuleFactoryAdapter { } @Override - public IngestModuleGlobalSetttingsPanel getGlobalSettingsPanel() { + public IngestModuleGlobalSettingsPanel getGlobalSettingsPanel() { KeywordSearchGlobalSettingsPanel globalSettingsPanel = new KeywordSearchGlobalSettingsPanel(); globalSettingsPanel.load(); return globalSettingsPanel; From 840538d52c6cd27ca079ac4b6612e3c32f72bda2 Mon Sep 17 00:00:00 2001 From: "Samuel H. Kenyon" Date: Tue, 22 Apr 2014 14:22:31 -0400 Subject: [PATCH 11/27] Adjusted SampleFileIngestModule to use the null check / init idiom --- .../examples/SampleFileIngestModule.java | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/examples/SampleFileIngestModule.java b/Core/src/org/sleuthkit/autopsy/examples/SampleFileIngestModule.java index 988d834904..05bdb633da 100755 --- a/Core/src/org/sleuthkit/autopsy/examples/SampleFileIngestModule.java +++ b/Core/src/org/sleuthkit/autopsy/examples/SampleFileIngestModule.java @@ -97,10 +97,6 @@ class SampleFileIngestModule extends IngestModuleAdapter implements FileIngestMo } } } - - // This method is thread-safe with per ingest job reference counted - // management of shared data. - initBlackboardPostCount(context.getJobId()); } @Override @@ -168,15 +164,15 @@ class SampleFileIngestModule extends IngestModuleAdapter implements FileIngestMo reportBlackboardPostCount(context.getJobId()); } - synchronized static void initBlackboardPostCount(long ingestJobId) { - Long refCount = refCounter.incrementAndGet(ingestJobId); - if (refCount == 1) { - artifactCountsForIngestJobs.put(ingestJobId, 0L); - } - } - synchronized static void addToBlackboardPostCount(long ingestJobId, long countToAdd) { Long fileCount = artifactCountsForIngestJobs.get(ingestJobId); + + // Ensures that this job has an entry + if (fileCount == null) { + fileCount = 0L; + artifactCountsForIngestJobs.put(ingestJobId, fileCount); + } + fileCount += countToAdd; artifactCountsForIngestJobs.put(ingestJobId, fileCount); } From a553e4262cb9f537ca959ee743dd35831f1329d7 Mon Sep 17 00:00:00 2001 From: "Samuel H. Kenyon" Date: Tue, 22 Apr 2014 15:02:15 -0400 Subject: [PATCH 12/27] Adjusted FileExtMismatchIngestModule to use the null check / init idiom --- .../FileExtMismatchIngestModule.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/FileExtMismatchIngestModule.java b/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/FileExtMismatchIngestModule.java index 122a35e440..e6a45256a7 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/FileExtMismatchIngestModule.java +++ b/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/FileExtMismatchIngestModule.java @@ -56,8 +56,8 @@ public class FileExtMismatchIngestModule extends IngestModuleAdapter implements private static final IngestModuleReferenceCounter refCounter = new IngestModuleReferenceCounter(); private static class IngestJobTotals { - long processTime = 0; - long numFiles = 0; + private long processTime = 0; + private long numFiles = 0; } private static synchronized void initTotals(long ingestJobId) { @@ -71,6 +71,11 @@ public class FileExtMismatchIngestModule extends IngestModuleAdapter implements */ private static synchronized void addToTotals(long ingestJobId, long processTimeInc) { IngestJobTotals ingestJobTotals = totalsForIngestJobs.get(ingestJobId); + if (ingestJobTotals == null) { + ingestJobTotals = new IngestJobTotals(); + totalsForIngestJobs.put(ingestJobId, ingestJobTotals); + } + ingestJobTotals.processTime += processTimeInc; ingestJobTotals.numFiles++; totalsForIngestJobs.put(ingestJobId, ingestJobTotals); @@ -83,9 +88,8 @@ public class FileExtMismatchIngestModule extends IngestModuleAdapter implements @Override public void startUp(IngestJobContext context) throws IngestModuleException { jobId = context.getJobId(); - if (refCounter.incrementAndGet(jobId) == 1) { - initTotals(jobId); - } + refCounter.incrementAndGet(jobId); + FileExtMismatchXML xmlLoader = FileExtMismatchXML.getDefault(); SigTypeToExtMap = xmlLoader.load(); } From 56a2cabc34f31922d660a340cb04284e7efd9b91 Mon Sep 17 00:00:00 2001 From: Nick Davis Date: Tue, 22 Apr 2014 15:26:37 -0400 Subject: [PATCH 13/27] Pulled additional static strings. --- .../org/sleuthkit/autopsy/keywordsearch/Bundle.properties | 4 ++++ .../autopsy/keywordsearch/DropdownSearchPanel.java | 5 ++++- .../autopsy/keywordsearch/KeywordSearchModuleFactory.java | 6 ++++-- .../org/sleuthkit/autopsy/keywordsearch/SearchRunner.java | 4 +++- 4 files changed, 15 insertions(+), 4 deletions(-) diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Bundle.properties b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Bundle.properties index 22c95f3bd4..30513b4c21 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Bundle.properties +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Bundle.properties @@ -280,3 +280,7 @@ KeywordSearchListsAbstract.writeLists.errMsg2.msg=A module caused an error liste KeywordSearchListsAbstract.deleteList.errMsg1.msg=A module caused an error listening to KeywordSearchListsAbstract updates. See log to determine which module. Some data could be incomplete. KeywordSearchListsManagementPanel.newKeywordListDescription=Keyword List <{0}> already exists as a read-only list. Do you want to replace it for the duration of the program (the change will not be persistent). KeywordSearchListsManagementPanel.newKeywordListDescription2=Keyword List <{0}> already exists, do you want to replace it? +DropdownSearchPanelgetQueryList.exception.msg=No list for single-keyword search +KeywordSearchModuleFactory.getIngestJobSettingsPanel.exception.msg=Expected settings argument to be instanceof KeywordSearchJobSettings +KeywordSearchModuleFactory.createFileIngestModule.exception.msg=Expected settings argument to be instanceof KeywordSearchJobSettings +SearchRunner.Searcher.done.err.msg=Error performing keyword search diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/DropdownSearchPanel.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/DropdownSearchPanel.java index 96f48ad393..83e4108acf 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/DropdownSearchPanel.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/DropdownSearchPanel.java @@ -25,6 +25,8 @@ import java.awt.event.FocusListener; import java.util.List; import java.util.logging.Level; import javax.swing.JMenuItem; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.Logger; /** @@ -120,7 +122,8 @@ public class DropdownSearchPanel extends AbstractKeywordSearchPerformer { @Override public List getQueryList() { - throw new UnsupportedOperationException("No list for single-keyword search"); + throw new UnsupportedOperationException( + NbBundle.getMessage(this.getClass(), "DropdownSearchPanelgetQueryList.exception.msg")); } @Override diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchModuleFactory.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchModuleFactory.java index d20d7c4c96..e619812bab 100755 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchModuleFactory.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchModuleFactory.java @@ -83,7 +83,8 @@ public class KeywordSearchModuleFactory extends IngestModuleFactoryAdapter { public IngestModuleIngestJobSettingsPanel getIngestJobSettingsPanel(IngestModuleIngestJobSettings settings) { assert settings instanceof KeywordSearchJobSettings; if (!(settings instanceof KeywordSearchJobSettings)) { - throw new IllegalArgumentException("Expected settings argument to be instanceof KeywordSearchJobSettings"); + throw new IllegalArgumentException(NbBundle.getMessage(this.getClass(), + "KeywordSearchModuleFactory.getIngestJobSettingsPanel.exception.msg")); } if (jobSettingsPanel == null) { @@ -115,7 +116,8 @@ public class KeywordSearchModuleFactory extends IngestModuleFactoryAdapter { public FileIngestModule createFileIngestModule(IngestModuleIngestJobSettings settings) { assert settings instanceof KeywordSearchJobSettings; if (!(settings instanceof KeywordSearchJobSettings)) { - throw new IllegalArgumentException("Expected settings argument to be instanceof KeywordSearchJobSettings"); + throw new IllegalArgumentException(NbBundle.getMessage(this.getClass(), + "KeywordSearchModuleFactory.createFileIngestModule.exception.msg")); } return new KeywordSearchIngestModule((KeywordSearchJobSettings) settings); } diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/SearchRunner.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/SearchRunner.java index 71466b4482..40b203297b 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/SearchRunner.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/SearchRunner.java @@ -627,7 +627,9 @@ public final class SearchRunner { get(); } catch (InterruptedException | ExecutionException e) { logger.log(Level.SEVERE, "Error performing keyword search: " + e.getMessage()); - services.postMessage(IngestMessage.createErrorMessage(KeywordSearchModuleFactory.getModuleName(), "Error performing keyword search", e.getMessage())); + services.postMessage(IngestMessage.createErrorMessage(KeywordSearchModuleFactory.getModuleName(), + NbBundle.getMessage(this.getClass(), + "SearchRunner.Searcher.done.err.msg"), e.getMessage())); } // catch and ignore if we were cancelled catch (java.util.concurrent.CancellationException ex) { } From 2de09e19146f3b0ed8177f8070ded27d813b1c3f Mon Sep 17 00:00:00 2001 From: "Samuel H. Kenyon" Date: Tue, 22 Apr 2014 15:45:09 -0400 Subject: [PATCH 14/27] A few more thread-safety adjustments for summary posting --- .../FileExtMismatchIngestModule.java | 1 - .../modules/filetypeid/FileTypeIdIngestModule.java | 13 ++++++------- .../keywordsearch/KeywordSearchIngestModule.java | 1 + 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/FileExtMismatchIngestModule.java b/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/FileExtMismatchIngestModule.java index e6a45256a7..ca662deddf 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/FileExtMismatchIngestModule.java +++ b/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/FileExtMismatchIngestModule.java @@ -23,7 +23,6 @@ import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; -import java.util.concurrent.atomic.AtomicLong; import java.util.logging.Level; import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.Logger; diff --git a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdIngestModule.java b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdIngestModule.java index 9c328c6d82..ddbf765475 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdIngestModule.java +++ b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdIngestModule.java @@ -61,10 +61,6 @@ public class FileTypeIdIngestModule extends IngestModuleAdapter implements FileI long numFiles = 0; } - private static synchronized void initTotals(long ingestJobId) { - totalsForIngestJobs.put(ingestJobId, new IngestJobTotals()); - } - /** * Update the match time total and increment num of files for this job * @param ingestJobId @@ -72,6 +68,11 @@ public class FileTypeIdIngestModule extends IngestModuleAdapter implements FileI */ private static synchronized void addToTotals(long ingestJobId, long matchTimeInc) { IngestJobTotals ingestJobTotals = totalsForIngestJobs.get(ingestJobId); + if (ingestJobTotals == null) { + ingestJobTotals = new IngestJobTotals(); + totalsForIngestJobs.put(ingestJobId, ingestJobTotals); + } + ingestJobTotals.matchTime += matchTimeInc; ingestJobTotals.numFiles++; totalsForIngestJobs.put(ingestJobId, ingestJobTotals); @@ -84,9 +85,7 @@ public class FileTypeIdIngestModule extends IngestModuleAdapter implements FileI @Override public void startUp(IngestJobContext context) throws IngestModuleException { jobId = context.getJobId(); - if (refCounter.incrementAndGet(jobId) == 1) { - initTotals(jobId); - } + refCounter.incrementAndGet(jobId); } @Override diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchIngestModule.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchIngestModule.java index 7a3104f57e..dad59ee0cc 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchIngestModule.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchIngestModule.java @@ -110,6 +110,7 @@ public final class KeywordSearchIngestModule extends IngestModuleAdapter impleme Map ingestStatusForJob = ingestStatus.get(ingestJobId); if (ingestStatusForJob == null) { ingestStatusForJob = new HashMap<>(); + ingestStatus.put(ingestJobId, ingestStatusForJob); } ingestStatusForJob.put(fileId, status); From ea85cdcc162392d76c7c7d62af7b17a68a95b317 Mon Sep 17 00:00:00 2001 From: Kay Bassi Date: Tue, 22 Apr 2014 16:22:51 -0400 Subject: [PATCH 15/27] Translation complete. Checked for inconsistencies. --- .../keywordsearch/Bundle_ja.properties | 60 ++++++++++--------- 1 file changed, 32 insertions(+), 28 deletions(-) diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Bundle_ja.properties b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Bundle_ja.properties index 19cf99b2ac..419b184213 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Bundle_ja.properties +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Bundle_ja.properties @@ -31,13 +31,13 @@ KeywordSearchListsViewerPanel.manageListsButton.text=\u30EA\u30B9\u30C8\u3092\u7 KeywordSearchListsViewerPanel.ingestIndexLabel.text=\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\uFF1A ExtractedContentPanel.pageButtonsLabel.text=\u30DA\u30FC\u30B8 ExtractedContentPanel.pagesLabel.text=\u30DA\u30FC\u30B8\uFF1A -KeywordSearchEditListPanel.ingestMessagesCheckbox.text=\u51E6\u7406\u4E2D\u306B\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u30A4\u30F3\u30DC\u30C3\u30AF\u30B9\u306B\u9001\u4FE1 -KeywordSearchEditListPanel.ingestMessagesCheckbox.toolTipText=\u3053\u306E\u30EA\u30B9\u30C8\u306E\u30AD\u30FC\u30EF\u30FC\u30C9\u304C\u691C\u7D22\u306B\u30D2\u30C3\u30C8\u3057\u305F\u5834\u5408\u3001\u51E6\u7406\u4E2D\u306B\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u30A4\u30F3\u30DC\u30C3\u30AF\u30B9\u306B\u9001\u4FE1 +KeywordSearchEditListPanel.ingestMessagesCheckbox.text=\u30D2\u30C3\u30C8\u6BCE\u306B\u30A4\u30F3\u30B8\u30A7\u30B9\u30C8\u30A4\u30F3\u30DC\u30C3\u30AF\u30B9\u3078\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\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\u30A4\u30F3\u30B8\u30A7\u30B9\u30C8\u4E2D\u306B\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u30A4\u30F3\u30DC\u30C3\u30AF\u30B9\u306B\u9001\u4FE1 KeywordSearchEditListPanel.keywordOptionsLabel.text=\u30AD\u30FC\u30EF\u30FC\u30C9\u30AA\u30D7\u30B7\u30E7\u30F3 KeywordSearchEditListPanel.listOptionsLabel.text=\u30EA\u30B9\u30C8\u30AA\u30D7\u30B7\u30E7\u30F3 KeywordSearchListsManagementPanel.keywordListsLabel.text=\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8\uFF1A KeywordSearchEditListPanel.keywordsLabel.text=\u30AD\u30FC\u30EF\u30FC\u30C9\uFF1A -OpenIDE-Module-Short-Description=\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u51E6\u7406\u30E2\u30B8\u30E5\u30FC\u30EB\u3001\u62BD\u51FA\u3055\u308C\u305F\u30C6\u30AD\u30B9\u30C8\u30D3\u30E5\u30FC\u30A2\u3001\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u30C4\u30FC\u30EB +OpenIDE-Module-Short-Description=\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u30A4\u30F3\u30B8\u30A7\u30B9\u30C8\u30E2\u30B8\u30E5\u30FC\u30EB\u3001\u62BD\u51FA\u3055\u308C\u305F\u30C6\u30AD\u30B9\u30C8\u30D3\u30E5\u30FC\u30A2\u3001\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u30C4\u30FC\u30EB KeywordSearchListsViewerPanel.manageListsButton.toolTipText=\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8\u3001\u30EA\u30B9\u30C8\u306E\u8A2D\u5B9A\u3068\u95A2\u9023\u3059\u308B\u30AD\u30FC\u30EF\u30FC\u30C9\u306E\u7BA1\u7406\u3002\u3053\u306E\u8A2D\u5B9A\u306F\u5168\u3066\u306E\u30B1\u30FC\u30B9\u306B\u9069\u7528\u3055\u308C\u307E\u3059\u3002 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 @@ -46,13 +46,13 @@ AbstractKeywordSearchPerformer.search.ingestInProgressBody=\u30AD\u30FC\u3 AbstractKeywordSearchPerformer.search.emptyKeywordErrorBody=\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8\u304C\u7A7A\u767D\u3067\u3059\u3002\u6700\u4F4E\uFF11\u3064\u30AD\u30FC\u30EF\u30FC\u30C9\u3092\u8FFD\u52A0\u3057\u3066\u4E0B\u3055\u3044\u3002 AbstractKeywordSearchPerformer.search.pleaseEnterKeywordBody=\u691C\u7D22\u3059\u308B\u30AD\u30FC\u30EF\u30FC\u30C9\u3092\u5165\u529B\u3057\u3066\u4E0B\u3055\u3044 AbstractKeywordSearchPerformer.search.noFilesInIdxMsg=\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u306B\u307E\u3060\u30D5\u30A1\u30A4\u30EB\u304C\u3042\u308A\u307E\u305B\u3093\u3002
\u3057\u3070\u3089\u304F\u3057\u3066\u304B\u3089\u3001\u518D\u5EA6\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u306F\u3000{0}\u3000\u5206\u6BCE\u66F4\u65B0\u3055\u308C\u307E\u3059\u3002 -AbstractKeywordSearchPerformer.search.noFilesIdxdMsg=\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\u304C\u3042\u308A\u307E\u305B\u3093\u3002
\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u30E2\u30B8\u30E5\u30FC\u30EB\u3092\u6709\u52B9\u5316\u3057\u3066\u30A4\u30E1\u30FC\u30B8\u3092\u518D\u51E6\u7406\u3002 +AbstractKeywordSearchPerformer.search.noFilesIdxdMsg=\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\u304C\u3042\u308A\u307E\u305B\u3093\u3002
\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u30E2\u30B8\u30E5\u30FC\u30EB\u3092\u6709\u52B9\u5316\u3057\u3066\u30A4\u30E1\u30FC\u30B8\u3092\u518D\u5EA6\u30A4\u30F3\u30B8\u30A7\u30B9\u30C8\u3002 ExtractedContentPanel.setMarkup.panelTxt=\u30C6\u30AD\u30B9\u30C8\u30ED\u30FC\u30C9\u4E2D\u3002\u3057\u3070\u3089\u304F\u304A\u5F85\u3061\u304F\u3060\u3055\u3044... ExtractedContentViewer.toString=\u62BD\u51FA\u3055\u308C\u305F\u30C6\u30AD\u30B9\u30C8 -ExtractedContentViewer.toolTip=\u30D5\u30A1\u30A4\u30EB\u3084\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u7D50\u679C\u304B\u3089\u62BD\u51FA\u3055\u308C\u305F\u30C6\u30AD\u30B9\u30C8\u3092\u8868\u793A\u3002\u3053\u306E\u30D3\u30E5\u30FC\u30A2\u3092\u30A2\u30AF\u30C6\u30A3\u30D9\u30A4\u30C8\u3059\u308B\u306B\u306F\u3001\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u51E6\u7406\u3092\u30D5\u30A1\u30A4\u30EB\u4E0A\u3067\u5B9F\u884C\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002 +ExtractedContentViewer.toolTip=\u30D5\u30A1\u30A4\u30EB\u3084\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u7D50\u679C\u304B\u3089\u62BD\u51FA\u3055\u308C\u305F\u30C6\u30AD\u30B9\u30C8\u3092\u8868\u793A\u3002\u3053\u306E\u30D3\u30E5\u30FC\u30A2\u3092\u30A2\u30AF\u30C6\u30A3\u30D9\u30A4\u30C8\u3059\u308B\u306B\u306F\u3001\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u30A4\u30F3\u30B8\u30A7\u30B9\u30C8\u3092\u30D5\u30A1\u30A4\u30EB\u4E0A\u3067\u5B9F\u884C\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002 ExtractedContentViewer.getTitle=\u30C6\u30AD\u30B9\u30C8 ExtractedContentViewer.getSolrContent.knownFileMsg=

{0}\u306F\u65E2\u77E5\u30D5\u30A1\u30A4\u30EB\u3067\u3059\uFF08MDS\u30CF\u30C3\u30B7\u30E5\u306B\u57FA\u3065\u304F\u3068\uFF09\u3002\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u306B\u30C6\u30AD\u30B9\u30C8\u304C\u3042\u308A\u307E\u305B\u3093\u3002

-ExtractedContentViewer.getSolrContent.noTxtYetMsg=

{0}\u306E\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u306B\u30C6\u30AD\u30B9\u30C8\u304C\u3042\u308A\u307E\u305B\u3093\u3002
\u30C6\u30AD\u30B9\u30C8\u304C\u7121\u3044\u304B\u3001\u307E\u3060\u89E3\u6790\u3055\u308C\u3066\u3044\u306A\u3044\u304B\u3001\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u304C\u51E6\u7406\u4E2D\u306B\u6709\u52B9\u5316\u3055\u308C\u3066\u3044\u306A\u304B\u3063\u305F\u306E\u304B\u3082\u3057\u308C\u307E\u305B\u3093\u3002

+ExtractedContentViewer.getSolrContent.noTxtYetMsg=

{0}\u306E\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u306B\u30C6\u30AD\u30B9\u30C8\u304C\u3042\u308A\u307E\u305B\u3093\u3002
\u30C6\u30AD\u30B9\u30C8\u304C\u7121\u3044\u304B\u3001\u307E\u3060\u89E3\u6790\u3055\u308C\u3066\u3044\u306A\u3044\u304B\u3001\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u304C\u30A4\u30F3\u30B8\u30A7\u30B9\u30C8\u4E2D\u306B\u6709\u52B9\u5316\u3055\u308C\u3066\u3044\u306A\u304B\u3063\u305F\u306E\u304B\u3082\u3057\u308C\u307E\u305B\u3093\u3002

HighlightedMatchesSource.getMarkup.noMatchMsg=
\u3053\u306E\u30DA\u30FC\u30B8\u4E0A\u3067\u30AD\u30FC\u30EF\u30FC\u30C9\u304C\u30D2\u30C3\u30C8\u3057\u307E\u305B\u3093\u3067\u3057\u305F\u3002
\u30AD\u30FC\u30EF\u30FC\u30C9\u304C\u30D5\u30A1\u30A4\u30EB\u540D\u306B\u542B\u307E\u308C\u3066\u3044\u305F\u304B\u3082\u3057\u308C\u307E\u305B\u3093\u3002
\u5225\u306E\u30DA\u30FC\u30B8\u306B\u79FB\u52D5\u3059\u308B\u304B\u3001\u30AA\u30EA\u30B8\u30CA\u30EB\u30C6\u30AD\u30B9\u30C8\u3092\u8868\u793A\u3059\u308B\u306E\u306B\u3001\u300C\u62BD\u51FA\u3055\u308C\u305F\u30C6\u30AD\u30B9\u30C8\u300D\u3092\u9078\u629E\u3057\u3066\u4E0B\u3055\u3044\u3002
HighlightedMatchesSource.toString=\u691C\u7D22\u7D50\u679C Installer.reportPortError=\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u30B5\u30FC\u30D0\u30FC\u30DD\u30FC\u30C8 {0} \u306F\u5229\u7528\u3067\u304D\u307E\u305B\u3093\u3002\u4F7F\u7528\u3057\u3066\u3044\u308B\u30BB\u30AD\u30E5\u30EA\u30C6\u30A3\u30BD\u30D5\u30C8\u30A6\u30A7\u30A2\u304C {1} \u3092\u30D6\u30ED\u30C3\u30AF\u3057\u3066\u3044\u306A\u3044\u304B\u78BA\u8A8D\u3057\u3001\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u30E6\u30FC\u30B6\u30FC\u30D5\u30A9\u30EB\u30C0\u30FC\u5185\u306E {3} \u306E {2} \u306E\u30D7\u30ED\u30D1\u30C6\u30A3\u30D5\u30A1\u30A4\u30EB\u306E\u5909\u66F4\u3092\u691C\u8A0E\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u3082\u3057\u4ED6\u306E\u51E6\u7406\u304C\u554F\u984C\u306E\u539F\u56E0\u3067\u3042\u308C\u3070\u3001\u30B7\u30B9\u30C6\u30E0\u3092\u518D\u8D77\u52D5\u3057\u3066\u4E0B\u3055\u3044\u3002 @@ -64,7 +64,7 @@ KeywordSearchConfigurationPanel.customizeComponents.listTabTitle=\u30EA\u30B9\u3 KeywordSearchConfigurationPanel.customizeComponents.stringExtTitle=\u30B9\u30C8\u30EA\u30F3\u30B0\u62BD\u51FA KeywordSearchConfigurationPanel.customizeComponents.genTabTitle=\u4E00\u822C KeywordSearchConfigurationPanel.customizeComponents.listLabToolTip=\u30EA\u30B9\u30C8\u8A2D\u5B9A -KeywordSearchConfigurationPanel.customizeComponents.stringExtToolTip=\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u51E6\u7406\u306E\u30B9\u30C8\u30EA\u30F3\u30B0\u62BD\u51FA\u8A2D\u5B9A +KeywordSearchConfigurationPanel.customizeComponents.stringExtToolTip=\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u30A4\u30F3\u30B8\u30A7\u30B9\u30C8\u306E\u30B9\u30C8\u30EA\u30F3\u30B0\u62BD\u51FA\u8A2D\u5B9A KeywordSearchConfigurationPanel.customizeComponents.genTabToolTip=\u4E00\u822C\u8A2D\u5B9A KeywordSearchConfigurationPanel1.customizeComponents.title=\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8\u3092\u524A\u9664 KeywordSearchConfigurationPanel1.customizeComponents.body=\u5168\u3066\u306E\u30B1\u30FC\u30B9\u306B\u304A\u3051\u308B\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8\u3092\u524A\u9664\u3057\u307E\u3059\u3002\u3053\u306E\u524A\u9664\u3092\u5B9F\u884C\u3057\u307E\u3059\u304B\uFF1F @@ -92,10 +92,10 @@ KeywordSearchEditListPanel.exportButtonActionPerformed.regExColName=\u6B63\u898F KeywordSearchFilterNode.getFileActions.openExternViewActLbl=\u5916\u90E8\u30D3\u30E5\u30FC\u30A2\u3067\u958B\u304F KeywordSearchFilterNode.getFileActions.searchSameMd5=\u540C\u4E00\u306EMD5\u30CF\u30C3\u30B7\u30E5\u3092\u6301\u3064\u30D5\u30A1\u30A4\u30EB\u3092\u691C\u7D22 KeywordSearchFilterNode.getFileActions.viewInNewWinActionLbl=\u65B0\u3057\u3044\u30A6\u30A3\u30F3\u30C9\u30A6\u3067\u8868\u793A -KeywordSearchIngestModule.init.badInitMsg=\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u30B5\u30FC\u30D0\u30FC\u304C\u6B63\u3057\u304F\u8D77\u52D5\u3057\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u51E6\u7406\u3092\u5B9F\u884C\u3067\u304D\u307E\u305B\u3093\u3002 -KeywordSearchIngestModule.init.tryStopSolrMsg={0}
\u53E4\u3044java Solr\u51E6\u7406\u3092\u505C\u6B62\u3057\uFF08\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.badInitMsg=\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u30B5\u30FC\u30D0\u30FC\u304C\u6B63\u3057\u304F\u8D77\u52D5\u3057\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u30A4\u30F3\u30B8\u30A7\u30B9\u30C8\u3092\u5B9F\u884C\u3067\u304D\u307E\u305B\u3093\u3002 +KeywordSearchIngestModule.init.tryStopSolrMsg={0}
\u53E4\u3044java Solr\u51E6\u7406\u3092\uFF08\u5B58\u5728\u3059\u308C\u3070\uFF09\u505C\u6B62\u3057\u3001\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u3092\u518D\u8D77\u52D5\u3057\u3066\u304F\u3060\u3055\u3044\u3002 KeywordSearchIngestModule.init.noKwInLstMsg=\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8\u306B\u30AD\u30FC\u30EF\u30FC\u30C9\u304C\u3042\u308A\u307E\u305B\u3093\u3002 -KeywordSearchIngestModule.init.onlyIdxKwSkipMsg=\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3060\u3051\u5B9F\u884C\u3055\u308C\u3001\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u306F\u30B9\u30AD\u30C3\u30D7\u3055\u308C\u307E\u3059\uFF08\u300C\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8 - \u51E6\u7406\u306B\u8FFD\u52A0\u300D\u3092\u4F7F\u7528\u3057\u3001\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8\u3092\u8FFD\u52A0\u3059\u308B\u306E\u306F\u53EF\u80FD\u3067\u3059 +KeywordSearchIngestModule.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 - \u30A4\u30F3\u30B8\u30A7\u30B9\u30C8\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\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.mdOnlyLbl=\u30E1\u30BF\u30C7\u30FC\u30BF\u306E\u307F\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3055\u308C\u307E\u3057\u305F @@ -104,14 +104,14 @@ KeywordSearchIngestModule.postIndexSummary.errTxtLbl=\u30A8\u30E9\u30FC\uFF08\u3 KeywordSearchIngestModule.postIndexSummary.errIoLbl=\u30A8\u30E9\u30FC\uFF08I/O\uFF09 KeywordSearchIngestModule.postIndexSummary.kwIdxResultsLbl=\u30AD\u30FC\u30EF\u30FC\u30C9\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u7D50\u679C KeywordSearchIngestModule.postIndexSummary.kwIdxErrsTitle=\u30AD\u30FC\u30EF\u30FC\u30C9\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u30A8\u30E9\u30FC -KeywordSearchIngestModule.postIndexSummary.kwIdxErrMsgFiles=\u30AD\u30FC\u30EF\u30FC\u30C9\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u30B5\u30FC\u30D3\u30B9\u4E2D\u306B{0}\u30D5\u30A1\u30A4\u30EB\u306E\u51E6\u7406\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\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\u30A4\u30F3\u30B8\u30A7\u30B9\u30C8\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 KeywordSearchIngestModule.postIndexSummary.kwIdxWarnMsgTitle=\u30AD\u30FC\u30EF\u30FC\u30C9\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u8B66\u544A KeywordSearchIngestModule.postIndexSummary.idxErrReadFilesMsg=\u30AD\u30FC\u30EF\u30FC\u30C9\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u30B5\u30FC\u30D3\u30B9\u4E2D\u306B\u30D5\u30A1\u30A4\u30EB\u306E\u8AAD\u307F\u8FBC\u307F\u3084\u30C6\u30AD\u30B9\u30C8\u62BD\u51FA\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002\u539F\u56E0\u306F\u7834\u640D\u3057\u305F\u30E1\u30C7\u30A3\u30A2\u3084\u30D5\u30A1\u30A4\u30EB\u304B\u3082\u3057\u308C\u307E\u305B\u3093\u3002 -KeywordSearchListsViewerPanel.initIngest.addIngestTitle=\u51E6\u7406\u306B\u8FFD\u52A0 -KeywordSearchListsViewerPanel.initIngest.addIngestMsg=\u8FFD\u52A0\u306E\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8\u3092\u9078\u629E\u3067\u304D\u307E\u3059
\u305D\u3057\u3066\u5B9F\u884C\u4E2D\u306E\u51E6\u7406\u306B\u8FFD\u52A0\u3067\u304D\u307E\u3059
\u6B21\u56DE\u306E\u30D5\u30A1\u30A4\u30EB\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u518D\u69CB\u7BC9\u306E\u3068\u304D\u306B\u9078\u629E\u3055\u308C\u305F\u30EA\u30B9\u30C8\u3082\u691C\u7D22\u3055\u308C\u307E\u3059\u3002 +KeywordSearchListsViewerPanel.initIngest.addIngestTitle=\u30A4\u30F3\u30B8\u30A7\u30B9\u30C8\u306B\u8FFD\u52A0 +KeywordSearchListsViewerPanel.initIngest.addIngestMsg=\u8FFD\u52A0\u306E\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8\u3092\u9078\u629E\u3067\u304D\u307E\u3059
\u305D\u3057\u3066\u5B9F\u884C\u4E2D\u306E\u30A4\u30F3\u30B8\u30A7\u30B9\u30C8\u306B\u8FFD\u52A0\u3067\u304D\u307E\u3059
\u6B21\u56DE\u306E\u30D5\u30A1\u30A4\u30EB\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u518D\u69CB\u7BC9\u306E\u3068\u304D\u306B\u9078\u629E\u3055\u308C\u305F\u30EA\u30B9\u30C8\u3082\u691C\u7D22\u3055\u308C\u307E\u3059\u3002 KeywordSearchListsViewerPanel.initIngest.searchIngestTitle=\u691C\u7D22 KeywordSearchListsViewerPanel.initIngest.addIdxSearchMsg=\u9078\u629E\u3057\u305F\u30EA\u30B9\u30C8\u5185\u306E\u30AD\u30FC\u30EF\u30FC\u30C9\u3092\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\u5185\u3067\u691C\u7D22 -KeywordSearchListsViewerPanel.initIngest.ongoingIngestMsg=\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\uFF1A {0} \uFF08\u51E6\u7406\u306F\u5B9F\u884C\u4E2D\uFF09 +KeywordSearchListsViewerPanel.initIngest.ongoingIngestMsg=\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\uFF1A {0} \uFF08\u30A4\u30F3\u30B8\u30A7\u30B9\u30C8\u306F\u5B9F\u884C\u4E2D\uFF09 KeywordSearchListsViewerPanel.initIngest.fileIndexCtMsg=\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\uFF1A {0} KeywordSearch.selectedColLbl=\u9078\u629E\u6E08\u307F KeywordSearch.nameColLbl=\u540D\u524D @@ -139,7 +139,7 @@ ExtractedContentPanel.pagePreviousButton.actionCommand= ExtractedContentPanel.pageOfLabel.text=of ExtractedContentPanel.pageCurLabel.text=- ExtractedContentPanel.pageTotalLabel.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} +AbstractFileChunk.index.exception.msg=\u30D5\u30A1\u30A4\u30EB\u30B9\u30C8\u30EA\u30F3\u30B0\u30C1\u30E3\u30F3\u30AF\u306E\u30A4\u30F3\u30B8\u30A7\u30B9\u30C8\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} @@ -158,7 +158,7 @@ HighlightedMatchesSource.nextItem.exception.msg=\u6B21\u306E\u30A2\u30A4\u30C6\u 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.ingest.exception.err.msg=\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u306E\u30A4\u30F3\u30B8\u30A7\u30B9\u30C8\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}, \u540D\u524D\: {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\u524D\: {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 @@ -220,29 +220,29 @@ Keyword.toString.text=Keyword'{'query\={0}, isLiteral\={1}, keywordType\={2}'}' KeywordSearchJobSettingsPanel.keywordSearchEncodings.text=- KeywordSearchJobSettingsPanel.languagesValLabel.text=- KeywordSearchJobSettingsPanel.encodingsLabel.text=\u30A8\u30F3\u30B3\u30FC\u30C7\u30A3\u30F3\u30B0\uFF1A -KeywordSearchJobSettingsPanel.titleLabel.text=\u51E6\u7406\u4E2D\u306B\u6709\u52B9\u306A\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8\u3092\u9078\u629E\uFF1A +KeywordSearchJobSettingsPanel.titleLabel.text=\u30A4\u30F3\u30B8\u30A7\u30B9\u30C8\u4E2D\u306B\u6709\u52B9\u306A\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8\u3092\u9078\u629E\uFF1A KeywordSearchJobSettingsPanel.languagesLabel.toolTipText=\u4E0D\u660E\u306A\u30D5\u30A1\u30A4\u30EB\u30BF\u30A4\u30D7\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 KeywordSearchJobSettingsPanel.languagesLabel.text=\u4E0D\u660E\u306A\u30D5\u30A1\u30A4\u30EB\u30BF\u30A4\u30D7\u304B\u3089\u306E\u30B9\u30C8\u30EA\u30F3\u30B0\u62BD\u51FA\u3092\u6709\u52B9\u306B\u3057\u305F\u30B9\u30AF\u30EA\u30D7\u30C8\uFF1A KeywordSearchGlobalLanguageSettingsPanel.enableUTF8Checkbox.text=UTF8\u30C6\u30AD\u30B9\u30C8\u62BD\u51FA\u306E\u6709\u52B9\u5316 -KeywordSearchGlobalLanguageSettingsPanel.ingestSettingsLabel.text=\u4E0D\u660E\u306A\u30D5\u30A1\u30A4\u30EB\u30BF\u30A4\u30D7\u304B\u3089\u306E\u30B9\u30C8\u30EA\u30F3\u30B0\u62BD\u51FA\u306E\u51E6\u7406\u65B9\u6CD5\u306E\u8A2D\u5B9A\uFF08\u5909\u66F4\u306F\u6B21\u56DE\u306E\u51E6\u7406\u304B\u3089\u6709\u52B9\uFF09\uFF1A +KeywordSearchGlobalLanguageSettingsPanel.ingestSettingsLabel.text=\u4E0D\u660E\u306A\u30D5\u30A1\u30A4\u30EB\u30BF\u30A4\u30D7\u304B\u3089\u306E\u30B9\u30C8\u30EA\u30F3\u30B0\u62BD\u51FA\u306E\u30A4\u30F3\u30B8\u30A7\u30B9\u30C8\u8A2D\u5B9A\uFF08\u5909\u66F4\u306F\u6B21\u56DE\u306E\u30A4\u30F3\u30B8\u30A7\u30B9\u30C8\u304B\u3089\u6709\u52B9\uFF09\uFF1A KeywordSearchGlobalLanguageSettingsPanel.enableUTF16Checkbox.text=UTF16LE\u3068UTF16BE\u30B9\u30C8\u30EA\u30F3\u30B0\u62BD\u51FA\u306E\u6709\u52B9\u5316 KeywordSearchGlobalLanguageSettingsPanel.languagesLabel.text=\u6709\u52B9\u306A\u30B9\u30AF\u30EA\u30D7\u30C8\uFF08\u8A00\u8A9E\uFF09\uFF1A -KeywordSearchGlobalSearchSettingsPanel.timeRadioButton1.toolTipText=\uFF12\uFF10\u5206\uFF08\u6700\u77ED\u306E\u51E6\u7406\u6642\u9593\uFF09 -KeywordSearchGlobalSearchSettingsPanel.timeRadioButton1.text=\uFF12\uFF10\u5206\uFF08\u6700\u3082\u9045\u3044\u30D5\u30A3\u30FC\u30C9\u30D0\u30C3\u30AF\u3001\u6700\u77ED\u306E\u51E6\u7406\u6642\u9593\uFF09 -KeywordSearchGlobalSearchSettingsPanel.timeRadioButton2.toolTipText=\uFF11\uFF10\u5206\uFF08\u30C7\u30D5\u30A9\u30EB\u30C8\u3088\u308A\u5168\u4F53\u7684\u306B\u901F\u3044\u51E6\u7406\u6642\u9593\uFF09 -KeywordSearchGlobalSearchSettingsPanel.timeRadioButton2.text=\uFF11\uFF10\u5206\uFF08\u3088\u308A\u9045\u3044\u30D5\u30A3\u30FC\u30C9\u30D0\u30C3\u30AF\u3001\u3088\u308A\u901F\u3044\u51E6\u7406\u6642\u9593\uFF09 -KeywordSearchGlobalSearchSettingsPanel.frequencyLabel.text=\u51E6\u7406\u4E2D\u306E\u7D50\u679C\u66F4\u65B0\u306E\u983B\u5EA6\uFF1A -KeywordSearchGlobalSearchSettingsPanel.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 -KeywordSearchGlobalSearchSettingsPanel.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 +KeywordSearchGlobalSearchSettingsPanel.timeRadioButton1.toolTipText=\uFF12\uFF10\u5206\uFF08\u6700\u77ED\u306E\u30A4\u30F3\u30B8\u30A7\u30B9\u30C8\u6642\u9593\uFF09 +KeywordSearchGlobalSearchSettingsPanel.timeRadioButton1.text=\uFF12\uFF10\u5206\uFF08\u6700\u3082\u9045\u3044\u30D5\u30A3\u30FC\u30C9\u30D0\u30C3\u30AF\u3001\u6700\u77ED\u306E\u30A4\u30F3\u30B8\u30A7\u30B9\u30C8\u6642\u9593\uFF09 +KeywordSearchGlobalSearchSettingsPanel.timeRadioButton2.toolTipText=\uFF11\uFF10\u5206\uFF08\u30C7\u30D5\u30A9\u30EB\u30C8\u3088\u308A\u5168\u4F53\u7684\u306B\u901F\u3044\u30A4\u30F3\u30B8\u30A7\u30B9\u30C8\u6642\u9593\uFF09 +KeywordSearchGlobalSearchSettingsPanel.timeRadioButton2.text=\uFF11\uFF10\u5206\uFF08\u3088\u308A\u9045\u3044\u30D5\u30A3\u30FC\u30C9\u30D0\u30C3\u30AF\u3001\u3088\u308A\u901F\u3044\u30A4\u30F3\u30B8\u30A7\u30B9\u30C8\u6642\u9593\uFF09 +KeywordSearchGlobalSearchSettingsPanel.frequencyLabel.text=\u30A4\u30F3\u30B8\u30A7\u30B9\u30C8\u4E2D\u306E\u7D50\u679C\u66F4\u65B0\u306E\u983B\u5EA6\uFF1A +KeywordSearchGlobalSearchSettingsPanel.skipNSRLCheckBox.toolTipText=Hash DB\u30B5\u30FC\u30D3\u30B9\u3092\u4E8B\u524D\u306B\u5B9F\u884C\u3059\u308B\u304B\u3001\u6B21\u56DE\u306E\u30A4\u30F3\u30B8\u30A7\u30B9\u30C8\u306B\u9078\u629E\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002 +KeywordSearchGlobalSearchSettingsPanel.skipNSRLCheckBox.text=\u30A4\u30F3\u30B8\u30A7\u30B9\u30C8\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 KeywordSearchGlobalSearchSettingsPanel.informationLabel.text=\u60C5\u5831 KeywordSearchGlobalSearchSettingsPanel.settingsLabel.text=\u8A2D\u5B9A KeywordSearchGlobalSearchSettingsPanel.filesIndexedValue.text=- KeywordSearchGlobalSearchSettingsPanel.filesIndexedLabel.text=\u30AD\u30FC\u30EF\u30FC\u30C9\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5185\u306E\u30D5\u30A1\u30A4\u30EB\uFF1A KeywordSearchGlobalSearchSettingsPanel.chunksValLabel.text=- -KeywordSearchGlobalSearchSettingsPanel.timeRadioButton4.toolTipText=\uFF11\u5206\uFF08\u5168\u4F53\u7684\u306A\u51E6\u7406\u6642\u9593\u304C\u9577\u304F\u306A\u308A\u307E\u3059\uFF09 -KeywordSearchGlobalSearchSettingsPanel.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 +KeywordSearchGlobalSearchSettingsPanel.timeRadioButton4.toolTipText=\uFF11\u5206\uFF08\u5168\u4F53\u7684\u306A\u30A4\u30F3\u30B8\u30A7\u30B9\u30C8\u6642\u9593\u304C\u9577\u304F\u306A\u308A\u307E\u3059\uFF09 +KeywordSearchGlobalSearchSettingsPanel.timeRadioButton4.text_1=\uFF11\u5206\uFF08\u3088\u308A\u901F\u3044\u30D5\u30A3\u30FC\u30C9\u30D0\u30C3\u30AF\u3001\u6700\u3082\u9577\u3044\u30A4\u30F3\u30B8\u30A7\u30B9\u30C8\u6642\u9593\uFF09 KeywordSearchGlobalSearchSettingsPanel.chunksLabel.text=\u30AD\u30FC\u30EF\u30FC\u30C9\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5185\u306E\u30C1\u30E3\u30F3\u30AF\uFF1A -KeywordSearchGlobalSearchSettingsPanel.timeRadioButton3.toolTipText=\uFF15\u5206\uFF08\u5168\u4F53\u7684\u306A\u51E6\u7406\u6642\u9593\u304C\u9577\u304F\u306A\u308A\u307E\u3059\uFF09 +KeywordSearchGlobalSearchSettingsPanel.timeRadioButton3.toolTipText=\uFF15\u5206\uFF08\u5168\u4F53\u7684\u306A\u30A4\u30F3\u30B8\u30A7\u30B9\u30C8\u6642\u9593\u304C\u9577\u304F\u306A\u308A\u307E\u3059\uFF09 KeywordSearchGlobalSearchSettingsPanel.timeRadioButton3.text=\uFF15\u5206\uFF08\u30C7\u30D5\u30A9\u30EB\u30C8\uFF09 DropdownSearchPanel.substringRadioButton.text=\u30B5\u30D6\u30B9\u30C8\u30EA\u30F3\u30B0\u4E00\u81F4 AbstractFileTikaTextExtract.index.exception.tikaParse.msg=\u4F8B\u5916\uFF1A\u30D5\u30A1\u30A4\u30EB\uFF1A{0}, {1}\u306EApache Tika\u30D1\u30FC\u30B9\u30BF\u30B9\u30AF\u5B9F\u884C\u4E2D\u306E\u4E88\u671F\u305B\u306C\u4F8B\u5916 @@ -272,3 +272,7 @@ KeywordSearchListsAbstract.writeLists.errMsg1.msg=KeywordSearchListsAbstract\u30 KeywordSearchListsAbstract.writeLists.errMsg2.msg=KeywordSearchListsAbstract\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 KeywordSearchListsManagementPanel.newKeywordListDescription=\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8<{0}>\u306F\u8AAD\u307F\u53D6\u308A\u5C02\u7528\u30EA\u30B9\u30C8\u3068\u3057\u3066\u5B58\u5728\u3057\u307E\u3059\u3002\u30D7\u30ED\u30B0\u30E9\u30E0\u3092\u4F7F\u7528\u4E2D\u306E\u307F\u3053\u306E\u30EA\u30B9\u30C8\u3092\u7F6E\u304D\u63DB\u3048\u307E\u3059\u304B\uFF1F\uFF08\u3053\u306E\u5909\u66F4\u306F\u7D99\u7D9A\u3055\u308C\u307E\u305B\u3093\uFF09 KeywordSearchListsManagementPanel.newKeywordListDescription2=\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8<{0}>\u306F\u65E2\u306B\u5B58\u5728\u3057\u307E\u3059\u3002\u7F6E\u304D\u63DB\u3048\u307E\u3059\u304B\uFF1F +DropdownSearchPanelgetQueryList.exception.msg=\u30B7\u30F3\u30B0\u30EB\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u306E\u30EA\u30B9\u30C8\u306F\u5B58\u5728\u3057\u307E\u305B\u3093 +KeywordSearchModuleFactory.createFileIngestModule.exception.msg=\u8A2D\u5B9A\u3092\u884C\u3046\u70BA\u306E\u60F3\u5B9A\u3055\u308C\u308B\u5F15\u6570\u306Finstanceof KeywordSearchJobSettings +KeywordSearchModuleFactory.getIngestJobSettingsPanel.exception.msg=\u8A2D\u5B9A\u3092\u884C\u3046\u70BA\u306E\u60F3\u5B9A\u3055\u308C\u308B\u5F15\u6570\u306Finstanceof KeywordSearchJobSettings +SearchRunner.Searcher.done.err.msg=\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u3092\u5B9F\u884C\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F From f4bc376d217a436e27f090493dca0867e9540ce1 Mon Sep 17 00:00:00 2001 From: alexjacks92 Date: Wed, 23 Apr 2014 11:18:30 -0400 Subject: [PATCH 16/27] Close database connections before exiting methods. --- test/script/tskdbdiff.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test/script/tskdbdiff.py b/test/script/tskdbdiff.py index b3b7a986cb..26b4fc643e 100644 --- a/test/script/tskdbdiff.py +++ b/test/script/tskdbdiff.py @@ -213,6 +213,9 @@ class TskDbDiff(object): raise TskDbDiffException("Unexpected error while dumping blackboard database: " + str(e)) finally: database_log.close() + attribute_cursor.close() + artifact_cursor.close() + conn.close() # Now sort the file srtcmdlst = ["sort", unsorted_dump, "-o", bb_dump_file] @@ -242,6 +245,7 @@ class TskDbDiff(object): line = replace_id(line, id_path_table) db_log.write('%s\n' % line) + conn.close() # cleanup the backup os.remove(backup_db_file) From ef7a77f78cf0db40dc25323028c8e671d0327a2b Mon Sep 17 00:00:00 2001 From: "Samuel H. Kenyon" Date: Wed, 23 Apr 2014 11:27:02 -0400 Subject: [PATCH 17/27] Reinserted refCounter increment since it used to be a side effect of a method that was removed. --- .../org/sleuthkit/autopsy/examples/SampleFileIngestModule.java | 1 + 1 file changed, 1 insertion(+) diff --git a/Core/src/org/sleuthkit/autopsy/examples/SampleFileIngestModule.java b/Core/src/org/sleuthkit/autopsy/examples/SampleFileIngestModule.java index 05bdb633da..8a95750924 100755 --- a/Core/src/org/sleuthkit/autopsy/examples/SampleFileIngestModule.java +++ b/Core/src/org/sleuthkit/autopsy/examples/SampleFileIngestModule.java @@ -69,6 +69,7 @@ class SampleFileIngestModule extends IngestModuleAdapter implements FileIngestMo @Override public void startUp(IngestJobContext context) throws IngestModuleException { this.context = context; + refCounter.incrementAndGet(context.getJobId()); synchronized (SampleFileIngestModule.class) { if (attrId == -1) { From f300ca7ef02c0c944bce3cbc74ed03d68d132e5a Mon Sep 17 00:00:00 2001 From: "Samuel H. Kenyon" Date: Wed, 23 Apr 2014 11:48:50 -0400 Subject: [PATCH 18/27] synchronize access to the totals map --- .../FileExtMismatchIngestModule.java | 42 +++++++++---------- .../filetypeid/FileTypeIdIngestModule.java | 36 +++++++++------- 2 files changed, 41 insertions(+), 37 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/FileExtMismatchIngestModule.java b/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/FileExtMismatchIngestModule.java index 245ea7db3f..86e6a5e6b8 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/FileExtMismatchIngestModule.java +++ b/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/FileExtMismatchIngestModule.java @@ -58,11 +58,7 @@ public class FileExtMismatchIngestModule extends IngestModuleAdapter implements private long processTime = 0; private long numFiles = 0; } - - private static synchronized void initTotals(long ingestJobId) { - totalsForIngestJobs.put(ingestJobId, new IngestJobTotals()); - } - + /** * Update the match time total and increment num of files for this job * @param ingestJobId @@ -180,23 +176,27 @@ public class FileExtMismatchIngestModule extends IngestModuleAdapter implements public void shutDown(boolean ingestJobCancelled) { // We only need to post the summary msg from the last module per job if (refCounter.decrementAndGet(jobId) == 0) { - IngestJobTotals jobTotals = totalsForIngestJobs.remove(jobId); + IngestJobTotals jobTotals = null; + synchronized(this) { + jobTotals = totalsForIngestJobs.remove(jobId); + } + if (jobTotals != null) { + StringBuilder detailsSb = new StringBuilder(); + detailsSb.append(""); //NON-NLS + detailsSb.append(""); //NON-NLS + detailsSb.append("\n"); //NON-NLS + detailsSb.append("\n"); //NON-NLS + detailsSb.append("
").append(FileExtMismatchDetectorModuleFactory.getModuleName()).append("
").append( //NON-NLS + NbBundle.getMessage(this.getClass(), "FileExtMismatchIngestModule.complete.totalProcTime")) + .append("").append(jobTotals.processTime).append("
").append( //NON-NLS + NbBundle.getMessage(this.getClass(), "FileExtMismatchIngestModule.complete.totalFiles")) + .append("").append(jobTotals.numFiles).append("
"); //NON-NLS - StringBuilder detailsSb = new StringBuilder(); - detailsSb.append(""); //NON-NLS - detailsSb.append(""); //NON-NLS - detailsSb.append("\n"); //NON-NLS - detailsSb.append("\n"); //NON-NLS - detailsSb.append("
").append(FileExtMismatchDetectorModuleFactory.getModuleName()).append("
").append( //NON-NLS - NbBundle.getMessage(this.getClass(), "FileExtMismatchIngestModule.complete.totalProcTime")) - .append("").append(jobTotals.processTime).append("
").append( //NON-NLS - NbBundle.getMessage(this.getClass(), "FileExtMismatchIngestModule.complete.totalFiles")) - .append("").append(jobTotals.numFiles).append("
"); //NON-NLS - - services.postMessage(IngestMessage.createMessage(IngestMessage.MessageType.INFO, FileExtMismatchDetectorModuleFactory.getModuleName(), - NbBundle.getMessage(this.getClass(), - "FileExtMismatchIngestModule.complete.svcMsg.text"), - detailsSb.toString())); + services.postMessage(IngestMessage.createMessage(IngestMessage.MessageType.INFO, FileExtMismatchDetectorModuleFactory.getModuleName(), + NbBundle.getMessage(this.getClass(), + "FileExtMismatchIngestModule.complete.svcMsg.text"), + detailsSb.toString())); + } } } } diff --git a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdIngestModule.java b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdIngestModule.java index ae9247722f..c196f3037d 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdIngestModule.java +++ b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdIngestModule.java @@ -132,22 +132,26 @@ public class FileTypeIdIngestModule extends IngestModuleAdapter implements FileI public void shutDown(boolean ingestJobCancelled) { // We only need to post the summary msg from the last module per job if (refCounter.decrementAndGet(jobId) == 0) { - IngestJobTotals jobTotals = totalsForIngestJobs.remove(jobId); - - StringBuilder detailsSb = new StringBuilder(); - detailsSb.append(""); //NON-NLS - detailsSb.append(""); //NON-NLS - detailsSb.append("\n"); //NON-NLS - detailsSb.append("\n"); //NON-NLS - detailsSb.append("
").append(FileTypeIdModuleFactory.getModuleName()).append("
") //NON-NLS - .append(NbBundle.getMessage(this.getClass(), "FileTypeIdIngestModule.complete.totalProcTime")) - .append("").append(jobTotals.matchTime).append("
") //NON-NLS - .append(NbBundle.getMessage(this.getClass(), "FileTypeIdIngestModule.complete.totalFiles")) - .append("").append(jobTotals.numFiles).append("
"); //NON-NLS - IngestServices.getInstance().postMessage(IngestMessage.createMessage(IngestMessage.MessageType.INFO, FileTypeIdModuleFactory.getModuleName(), - NbBundle.getMessage(this.getClass(), - "FileTypeIdIngestModule.complete.srvMsg.text"), - detailsSb.toString())); + IngestJobTotals jobTotals = null; + synchronized(this) { + jobTotals = totalsForIngestJobs.remove(jobId); + } + if (jobTotals != null) { + StringBuilder detailsSb = new StringBuilder(); + detailsSb.append(""); //NON-NLS + detailsSb.append(""); //NON-NLS + detailsSb.append("\n"); //NON-NLS + detailsSb.append("\n"); //NON-NLS + detailsSb.append("
").append(FileTypeIdModuleFactory.getModuleName()).append("
") //NON-NLS + .append(NbBundle.getMessage(this.getClass(), "FileTypeIdIngestModule.complete.totalProcTime")) + .append("").append(jobTotals.matchTime).append("
") //NON-NLS + .append(NbBundle.getMessage(this.getClass(), "FileTypeIdIngestModule.complete.totalFiles")) + .append("").append(jobTotals.numFiles).append("
"); //NON-NLS + IngestServices.getInstance().postMessage(IngestMessage.createMessage(IngestMessage.MessageType.INFO, FileTypeIdModuleFactory.getModuleName(), + NbBundle.getMessage(this.getClass(), + "FileTypeIdIngestModule.complete.srvMsg.text"), + detailsSb.toString())); + } } } From d1861b77bab16152e9b1236e2c4635aabffa06da Mon Sep 17 00:00:00 2001 From: "Samuel H. Kenyon" Date: Wed, 23 Apr 2014 11:50:40 -0400 Subject: [PATCH 19/27] HashDbIngestModule: slight optimization for totals access (reduce number of lock acquisitions) --- .../autopsy/hashdatabase/HashDbIngestModule.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbIngestModule.java b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbIngestModule.java index 1eabb5948b..d8e67613dc 100644 --- a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbIngestModule.java +++ b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbIngestModule.java @@ -137,6 +137,9 @@ public class HashDbIngestModule extends IngestModuleAdapter implements FileInges return ProcessResult.OK; } + // Safely get a reference to the totalsForIngestJobs object + IngestJobTotals totals = getTotalsForIngestJobs(jobId); + // calc hash value String name = file.getName(); String md5Hash = file.getMd5Hash(); @@ -145,7 +148,7 @@ public class HashDbIngestModule extends IngestModuleAdapter implements FileInges long calcstart = System.currentTimeMillis(); md5Hash = hasher.calculateMd5(file); long delta = (System.currentTimeMillis() - calcstart); - getTotalsForIngestJobs(jobId).totalCalctime.addAndGet(delta); + totals.totalCalctime.addAndGet(delta); } catch (IOException ex) { logger.log(Level.WARNING, "Error calculating hash of file " + name, ex); //NON-NLS @@ -170,7 +173,7 @@ public class HashDbIngestModule extends IngestModuleAdapter implements FileInges HashInfo hashInfo = db.lookUp(file); if (null != hashInfo) { foundBad = true; - getTotalsForIngestJobs(jobId).totalKnownBadCount.incrementAndGet(); + totals.totalKnownBadCount.incrementAndGet(); try { skCase.setKnown(file, TskData.FileKnown.BAD); @@ -205,7 +208,7 @@ public class HashDbIngestModule extends IngestModuleAdapter implements FileInges postHashSetHitToBlackboard(file, md5Hash, hashSetName, comment, db.getSendIngestMessages()); } long delta = (System.currentTimeMillis() - lookupstart); - getTotalsForIngestJobs(jobId).totalLookuptime.addAndGet(delta); + totals.totalLookuptime.addAndGet(delta); } catch (TskException ex) { logger.log(Level.WARNING, "Couldn't lookup known bad hash for file " + name + " - see sleuthkit log for details", ex); //NON-NLS @@ -238,7 +241,7 @@ public class HashDbIngestModule extends IngestModuleAdapter implements FileInges } } long delta = (System.currentTimeMillis() - lookupstart); - getTotalsForIngestJobs(jobId).totalLookuptime.addAndGet(delta); + totals.totalLookuptime.addAndGet(delta); } catch (TskException ex) { logger.log(Level.WARNING, "Couldn't lookup known hash for file " + name + " - see sleuthkit log for details", ex); //NON-NLS From 9bbfaecece3d524779456895afa471d549d58a8d Mon Sep 17 00:00:00 2001 From: "Samuel H. Kenyon" Date: Wed, 23 Apr 2014 11:59:59 -0400 Subject: [PATCH 20/27] prevent netbeans assigned value is never used warning (although it's innocuous in this case) --- .../modules/fileextmismatch/FileExtMismatchIngestModule.java | 2 +- .../autopsy/modules/filetypeid/FileTypeIdIngestModule.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/FileExtMismatchIngestModule.java b/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/FileExtMismatchIngestModule.java index 86e6a5e6b8..6c0928619c 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/FileExtMismatchIngestModule.java +++ b/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/FileExtMismatchIngestModule.java @@ -176,7 +176,7 @@ public class FileExtMismatchIngestModule extends IngestModuleAdapter implements public void shutDown(boolean ingestJobCancelled) { // We only need to post the summary msg from the last module per job if (refCounter.decrementAndGet(jobId) == 0) { - IngestJobTotals jobTotals = null; + IngestJobTotals jobTotals; synchronized(this) { jobTotals = totalsForIngestJobs.remove(jobId); } diff --git a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdIngestModule.java b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdIngestModule.java index c196f3037d..2e89724e86 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdIngestModule.java +++ b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdIngestModule.java @@ -132,7 +132,7 @@ public class FileTypeIdIngestModule extends IngestModuleAdapter implements FileI public void shutDown(boolean ingestJobCancelled) { // We only need to post the summary msg from the last module per job if (refCounter.decrementAndGet(jobId) == 0) { - IngestJobTotals jobTotals = null; + IngestJobTotals jobTotals; synchronized(this) { jobTotals = totalsForIngestJobs.remove(jobId); } From 420eee58c68c42b4544edc75ce5db1395751386c Mon Sep 17 00:00:00 2001 From: "Samuel H. Kenyon" Date: Wed, 23 Apr 2014 15:13:40 -0400 Subject: [PATCH 21/27] Changed query for tags associated with this artifact to match the actual DB schema, and extracted that to a method --- .../autopsy/report/ReportGenerator.java | 35 ++++++++++--------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/report/ReportGenerator.java b/Core/src/org/sleuthkit/autopsy/report/ReportGenerator.java index 2400f38c88..6a3a7d82b0 100644 --- a/Core/src/org/sleuthkit/autopsy/report/ReportGenerator.java +++ b/Core/src/org/sleuthkit/autopsy/report/ReportGenerator.java @@ -47,6 +47,7 @@ import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.SwingWorker; import org.openide.filesystems.FileUtil; +import org.openide.util.Exceptions; import org.openide.util.NbBundle; import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.coreutils.EscapeUtil; @@ -909,16 +910,12 @@ import org.sleuthkit.datamodel.TskData; } } - // Get any tags that associated with this artifact and apply the tag filter. - HashSet uniqueTagNames = new HashSet<>(); - ResultSet tagNameRows = skCase.runQuery("SELECT display_name FROM tag_names WHERE artifact_id = " + rs.getLong("artifact_id")); //NON-NLS - while (tagNameRows.next()) { - uniqueTagNames.add(tagNameRows.getString("display_name")); //NON-NLS - } - if(failsTagFilter(uniqueTagNames, tagNamesFilter)) { - continue; - } - String tagsList = makeCommaSeparatedList(uniqueTagNames); + // Get any tags that associated with this artifact and apply the tag filter. + HashSet uniqueTagNames = getUniqueTagNames(rs.getLong("artifact_id")); + if(failsTagFilter(uniqueTagNames, tagNamesFilter)) { + continue; + } + String tagsList = makeCommaSeparatedList(uniqueTagNames); Long objId = rs.getLong("obj_id"); //NON-NLS String keyword = rs.getString("keyword"); //NON-NLS @@ -1050,11 +1047,7 @@ import org.sleuthkit.datamodel.TskData; } // Get any tags that associated with this artifact and apply the tag filter. - HashSet uniqueTagNames = new HashSet<>(); - ResultSet tagNameRows = skCase.runQuery("SELECT display_name FROM tag_names WHERE artifact_id = " + rs.getLong("artifact_id")); //NON-NLS - while (tagNameRows.next()) { - uniqueTagNames.add(tagNameRows.getString("display_name")); //NON-NLS - } + HashSet uniqueTagNames = getUniqueTagNames(rs.getLong("artifact_id")); if(failsTagFilter(uniqueTagNames, tagNamesFilter)) { continue; } @@ -1664,6 +1657,16 @@ import org.sleuthkit.datamodel.TskData; return ReportGenerator.this.getMappedAttributes(attributes); } } + + private HashSet getUniqueTagNames(long artifactId) throws SQLException { + HashSet uniqueTagNames = new HashSet<>(); + ResultSet tagNameRows = skCase.runQuery("SELECT display_name, artifact_id FROM tag_names AS tn, blackboard_artifact_tags AS bat " + //NON-NLS + "WHERE tn.tag_name_id = bat.tag_name_id AND bat.artifact_id = " + artifactId); //NON-NLS + while (tagNameRows.next()) { + uniqueTagNames.add(tagNameRows.getString("display_name")); //NON-NLS + } + return uniqueTagNames; + } + } - From d4afaefe92a7c27ca2369843560a44568627fdb6 Mon Sep 17 00:00:00 2001 From: "Samuel H. Kenyon" Date: Wed, 23 Apr 2014 15:17:49 -0400 Subject: [PATCH 22/27] added method comment --- Core/src/org/sleuthkit/autopsy/report/ReportGenerator.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Core/src/org/sleuthkit/autopsy/report/ReportGenerator.java b/Core/src/org/sleuthkit/autopsy/report/ReportGenerator.java index 6a3a7d82b0..cd48ed2764 100644 --- a/Core/src/org/sleuthkit/autopsy/report/ReportGenerator.java +++ b/Core/src/org/sleuthkit/autopsy/report/ReportGenerator.java @@ -1658,6 +1658,12 @@ import org.sleuthkit.datamodel.TskData; } } + /** + * Get any tags associated with an artifact + * @param artifactId + * @return hash set of tag display names + * @throws SQLException + */ private HashSet getUniqueTagNames(long artifactId) throws SQLException { HashSet uniqueTagNames = new HashSet<>(); ResultSet tagNameRows = skCase.runQuery("SELECT display_name, artifact_id FROM tag_names AS tn, blackboard_artifact_tags AS bat " + //NON-NLS From dcfd2f276d14892509fc3ec0539aeb9ec352cf0d Mon Sep 17 00:00:00 2001 From: "Samuel H. Kenyon" Date: Wed, 23 Apr 2014 16:10:49 -0400 Subject: [PATCH 23/27] ingestJobs now has its own lock (itself); ingestTasks still uses this for locking --- .../autopsy/ingest/IngestManager.java | 68 ++++++++++++------- 1 file changed, 42 insertions(+), 26 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/ingest/IngestManager.java b/Core/src/org/sleuthkit/autopsy/ingest/IngestManager.java index 76df43cae3..afee0367b0 100644 --- a/Core/src/org/sleuthkit/autopsy/ingest/IngestManager.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/IngestManager.java @@ -21,6 +21,7 @@ package org.sleuthkit.autopsy.ingest; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.concurrent.CancellationException; @@ -61,8 +62,8 @@ public class IngestManager { private final ExecutorService startIngestJobsExecutor = Executors.newSingleThreadExecutor(); private final ExecutorService dataSourceIngestTasksExecutor = Executors.newSingleThreadExecutor(); private final ExecutorService fileIngestTasksExecutor = Executors.newFixedThreadPool(MAX_NUMBER_OF_FILE_INGEST_THREADS); - private final HashMap ingestJobs = new HashMap<>(); // Maps job ids to jobs - private final HashMap> ingestTasks = new HashMap<>(); // Maps task ids to task cancellation handles + private final HashMap ingestJobs = new HashMap<>(); // Maps job ids to jobs. Guarded by ingestJobs. + private final HashMap> ingestTasks = new HashMap<>(); // Maps task ids to task cancellation handles. Guarded by this. private AtomicLong ingestJobId = new AtomicLong(0L); private AtomicLong ingestTaskId = new AtomicLong(0L); private volatile IngestUI ingestMessageBox; @@ -124,12 +125,17 @@ public class IngestManager { * * @return True if any ingest jobs are in progress, false otherwise */ - public synchronized boolean isIngestRunning() { - return (ingestJobs.isEmpty() == false); + public boolean isIngestRunning() { + synchronized(ingestJobs) { + return (ingestJobs.isEmpty() == false); + } } - synchronized void addFileToIngestJob(long ingestJobId, AbstractFile file) { - IngestJob job = ingestJobs.get(ingestJobId); + void addFileToIngestJob(long ingestJobId, AbstractFile file) { + IngestJob job; + synchronized(ingestJobs) { + job = ingestJobs.get(ingestJobId); + } if (job != null) { scheduler.getFileIngestScheduler().queueFile(job, file); } @@ -301,44 +307,54 @@ public class IngestManager { } } - private synchronized void stopIngestTasks() { + private void stopIngestTasks() { // First mark all of the ingest jobs as cancelled. This way the // ingest modules will know they are being shut down due to // cancellation when the cancelled run ingest module tasks release // their pipelines. - for (IngestJob job : ingestJobs.values()) { + Collection jobList; + synchronized(ingestJobs) { + jobList = ingestJobs.values(); + } + for (IngestJob job : jobList) { job.cancel(); } // Cancel the run ingest module tasks, setting the state of the threads // running them to interrupted. - for (Future task : ingestTasks.values()) { - task.cancel(true); + synchronized(this) { + for (Future task : ingestTasks.values()) { + task.cancel(true); + } } - + // Jettision the remaining data source and file ingest tasks. scheduler.getFileIngestScheduler().emptyQueues(); scheduler.getDataSourceIngestScheduler().emptyQueues(); } - synchronized void reportStartIngestJobsTaskDone(long taskId) { + private synchronized void reportStartIngestJobsTaskDone(long taskId) { ingestTasks.remove(taskId); } - synchronized void reportRunIngestModulesTaskDone(long taskId) { - ingestTasks.remove(taskId); - - List completedJobs = new ArrayList<>(); - for (IngestJob job : ingestJobs.values()) { - job.releaseIngestPipelinesForThread(taskId); - if (job.areIngestPipelinesShutDown() == true) { - completedJobs.add(job.getId()); - } + private void reportRunIngestModulesTaskDone(long taskId) { + synchronized(this) { + ingestTasks.remove(taskId); } - for (Long jobId : completedJobs) { - IngestJob job = ingestJobs.remove(jobId); - fireIngestJobEvent(job.isCancelled() ? IngestEvent.INGEST_JOB_CANCELLED.toString() : IngestEvent.INGEST_JOB_COMPLETED.toString(), jobId); + List completedJobs = new ArrayList<>(); + synchronized(ingestJobs) { + for (IngestJob job : ingestJobs.values()) { + job.releaseIngestPipelinesForThread(taskId); + if (job.areIngestPipelinesShutDown() == true) { + completedJobs.add(job.getId()); + } + } + + for (Long jobId : completedJobs) { + IngestJob job = ingestJobs.remove(jobId); + fireIngestJobEvent(job.isCancelled() ? IngestEvent.INGEST_JOB_CANCELLED.toString() : IngestEvent.INGEST_JOB_COMPLETED.toString(), jobId); + } } } @@ -384,7 +400,7 @@ public class IngestManager { // Create an ingest job. IngestJob ingestJob = new IngestJob(IngestManager.this.ingestJobId.incrementAndGet(), dataSource, moduleTemplates, processUnallocatedSpace); - synchronized (IngestManager.this) { + synchronized (ingestJobs) { ingestJobs.put(ingestJob.getId(), ingestJob); } @@ -420,7 +436,7 @@ public class IngestManager { "IngestManager.StartIngestJobsTask.run.startupErr.dlgTitle"), JOptionPane.ERROR_MESSAGE); // Jettison the ingest job and move on to the next one. - synchronized (IngestManager.this) { + synchronized (ingestJobs) { ingestJob.cancel(); ingestJobs.remove(ingestJob.getId()); } From fbe7eaf3640b7cd6a218888bc975474d20586e59 Mon Sep 17 00:00:00 2001 From: "Samuel H. Kenyon" Date: Wed, 23 Apr 2014 17:21:17 -0400 Subject: [PATCH 24/27] converted ingestJobs into a ConcurrentHashMap --- .../autopsy/ingest/IngestManager.java | 45 +++++++------------ 1 file changed, 16 insertions(+), 29 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/ingest/IngestManager.java b/Core/src/org/sleuthkit/autopsy/ingest/IngestManager.java index afee0367b0..92fd5f0f5a 100644 --- a/Core/src/org/sleuthkit/autopsy/ingest/IngestManager.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/IngestManager.java @@ -25,6 +25,7 @@ import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.concurrent.CancellationException; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; @@ -62,7 +63,7 @@ public class IngestManager { private final ExecutorService startIngestJobsExecutor = Executors.newSingleThreadExecutor(); private final ExecutorService dataSourceIngestTasksExecutor = Executors.newSingleThreadExecutor(); private final ExecutorService fileIngestTasksExecutor = Executors.newFixedThreadPool(MAX_NUMBER_OF_FILE_INGEST_THREADS); - private final HashMap ingestJobs = new HashMap<>(); // Maps job ids to jobs. Guarded by ingestJobs. + private final ConcurrentHashMap ingestJobs = new ConcurrentHashMap<>(1, 0.9f, 4); // Maps job ids to jobs. private final HashMap> ingestTasks = new HashMap<>(); // Maps task ids to task cancellation handles. Guarded by this. private AtomicLong ingestJobId = new AtomicLong(0L); private AtomicLong ingestTaskId = new AtomicLong(0L); @@ -126,16 +127,12 @@ public class IngestManager { * @return True if any ingest jobs are in progress, false otherwise */ public boolean isIngestRunning() { - synchronized(ingestJobs) { - return (ingestJobs.isEmpty() == false); - } + return (ingestJobs.isEmpty() == false); } void addFileToIngestJob(long ingestJobId, AbstractFile file) { IngestJob job; - synchronized(ingestJobs) { - job = ingestJobs.get(ingestJobId); - } + job = ingestJobs.get(ingestJobId); if (job != null) { scheduler.getFileIngestScheduler().queueFile(job, file); } @@ -312,11 +309,7 @@ public class IngestManager { // ingest modules will know they are being shut down due to // cancellation when the cancelled run ingest module tasks release // their pipelines. - Collection jobList; - synchronized(ingestJobs) { - jobList = ingestJobs.values(); - } - for (IngestJob job : jobList) { + for (IngestJob job : ingestJobs.values()) { job.cancel(); } @@ -343,18 +336,16 @@ public class IngestManager { } List completedJobs = new ArrayList<>(); - synchronized(ingestJobs) { - for (IngestJob job : ingestJobs.values()) { - job.releaseIngestPipelinesForThread(taskId); - if (job.areIngestPipelinesShutDown() == true) { - completedJobs.add(job.getId()); - } + for (IngestJob job : ingestJobs.values()) { + job.releaseIngestPipelinesForThread(taskId); + if (job.areIngestPipelinesShutDown() == true) { + completedJobs.add(job.getId()); } + } - for (Long jobId : completedJobs) { - IngestJob job = ingestJobs.remove(jobId); - fireIngestJobEvent(job.isCancelled() ? IngestEvent.INGEST_JOB_CANCELLED.toString() : IngestEvent.INGEST_JOB_COMPLETED.toString(), jobId); - } + for (Long jobId : completedJobs) { + IngestJob job = ingestJobs.remove(jobId); + fireIngestJobEvent(job.isCancelled() ? IngestEvent.INGEST_JOB_CANCELLED.toString() : IngestEvent.INGEST_JOB_COMPLETED.toString(), jobId); } } @@ -400,9 +391,7 @@ public class IngestManager { // Create an ingest job. IngestJob ingestJob = new IngestJob(IngestManager.this.ingestJobId.incrementAndGet(), dataSource, moduleTemplates, processUnallocatedSpace); - synchronized (ingestJobs) { - ingestJobs.put(ingestJob.getId(), ingestJob); - } + ingestJobs.put(ingestJob.getId(), ingestJob); // Start at least one instance of each kind of ingest // pipeline for this ingest job. This allows for an early out @@ -436,10 +425,8 @@ public class IngestManager { "IngestManager.StartIngestJobsTask.run.startupErr.dlgTitle"), JOptionPane.ERROR_MESSAGE); // Jettison the ingest job and move on to the next one. - synchronized (ingestJobs) { - ingestJob.cancel(); - ingestJobs.remove(ingestJob.getId()); - } + ingestJob.cancel(); + ingestJobs.remove(ingestJob.getId()); break; } From 008e4ddbe9b5ff6943273e6e74b43bc576d7a942 Mon Sep 17 00:00:00 2001 From: "Samuel H. Kenyon" Date: Wed, 23 Apr 2014 17:26:45 -0400 Subject: [PATCH 25/27] remove unnecessary declare/assignment break --- Core/src/org/sleuthkit/autopsy/ingest/IngestManager.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/ingest/IngestManager.java b/Core/src/org/sleuthkit/autopsy/ingest/IngestManager.java index 92fd5f0f5a..a0d2233622 100644 --- a/Core/src/org/sleuthkit/autopsy/ingest/IngestManager.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/IngestManager.java @@ -131,8 +131,7 @@ public class IngestManager { } void addFileToIngestJob(long ingestJobId, AbstractFile file) { - IngestJob job; - job = ingestJobs.get(ingestJobId); + IngestJob job = ingestJobs.get(ingestJobId); if (job != null) { scheduler.getFileIngestScheduler().queueFile(job, file); } From 2e826b8cffb322eee3bad3b6e61429afae4c8581 Mon Sep 17 00:00:00 2001 From: Brian Carrier Date: Thu, 24 Apr 2014 00:18:15 -0400 Subject: [PATCH 26/27] Added image extensions to each other --- .../autopsy/modules/fileextmismatch/mismatch_config.xml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/mismatch_config.xml b/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/mismatch_config.xml index 476c5e78b5..3294584539 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/mismatch_config.xml +++ b/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/mismatch_config.xml @@ -211,16 +211,24 @@ gif + jpeg + jpg + png + gif jfi jfif jif jpe jpeg jpg + png + gif + jpeg + jpg png From 460d92e67fad77ace7dcbd2dadc4581ced20abec Mon Sep 17 00:00:00 2001 From: Brian Carrier Date: Thu, 24 Apr 2014 00:19:03 -0400 Subject: [PATCH 27/27] Fixed file type panel, which was too wide --- .../modules/filetypeid/FileTypeIdModuleSettingsPanel.form | 2 +- .../modules/filetypeid/FileTypeIdModuleSettingsPanel.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdModuleSettingsPanel.form b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdModuleSettingsPanel.form index 6a81b507d5..9ffeb0b8d7 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdModuleSettingsPanel.form +++ b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdModuleSettingsPanel.form @@ -19,7 +19,7 @@ - + diff --git a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdModuleSettingsPanel.java b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdModuleSettingsPanel.java index b6f9b75c15..f21498e6f6 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdModuleSettingsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdModuleSettingsPanel.java @@ -72,7 +72,7 @@ final class FileTypeIdModuleSettingsPanel extends IngestModuleIngestJobSettingsP .addGroup(layout.createSequentialGroup() .addGap(10, 10, 10) .addComponent(skipKnownCheckBox) - .addContainerGap(608, Short.MAX_VALUE)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)