mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-12 07:56:16 +00:00
Merge remote-tracking branch 'upstream/develop' into serialize_ingest_module_settings
This commit is contained in:
commit
56f5d0cf9f
@ -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) {
|
||||
@ -97,10 +98,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 +165,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);
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -21,9 +21,11 @@ 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;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.Future;
|
||||
@ -61,8 +63,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<Long, IngestJob> ingestJobs = new HashMap<>(); // Maps job ids to jobs
|
||||
private final HashMap<Long, Future<?>> ingestTasks = new HashMap<>(); // Maps task ids to task cancellation handles
|
||||
private final ConcurrentHashMap<Long, IngestJob> ingestJobs = new ConcurrentHashMap<>(1, 0.9f, 4); // Maps job ids to jobs.
|
||||
private final HashMap<Long, Future<?>> 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,11 +126,11 @@ public class IngestManager {
|
||||
*
|
||||
* @return True if any ingest jobs are in progress, false otherwise
|
||||
*/
|
||||
public synchronized boolean isIngestRunning() {
|
||||
public boolean isIngestRunning() {
|
||||
return (ingestJobs.isEmpty() == false);
|
||||
}
|
||||
|
||||
synchronized void addFileToIngestJob(long ingestJobId, AbstractFile file) {
|
||||
void addFileToIngestJob(long ingestJobId, AbstractFile file) {
|
||||
IngestJob job = ingestJobs.get(ingestJobId);
|
||||
if (job != null) {
|
||||
scheduler.getFileIngestScheduler().queueFile(job, file);
|
||||
@ -301,7 +303,7 @@ 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
|
||||
@ -312,21 +314,25 @@ public class IngestManager {
|
||||
|
||||
// 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);
|
||||
private void reportRunIngestModulesTaskDone(long taskId) {
|
||||
synchronized(this) {
|
||||
ingestTasks.remove(taskId);
|
||||
}
|
||||
|
||||
List<Long> completedJobs = new ArrayList<>();
|
||||
for (IngestJob job : ingestJobs.values()) {
|
||||
@ -384,9 +390,7 @@ public class IngestManager {
|
||||
|
||||
// Create an ingest job.
|
||||
IngestJob ingestJob = new IngestJob(IngestManager.this.ingestJobId.incrementAndGet(), dataSource, moduleTemplates, processUnallocatedSpace);
|
||||
synchronized (IngestManager.this) {
|
||||
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
|
||||
@ -420,10 +424,8 @@ 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) {
|
||||
ingestJob.cancel();
|
||||
ingestJobs.remove(ingestJob.getId());
|
||||
}
|
||||
ingestJob.cancel();
|
||||
ingestJobs.remove(ingestJob.getId());
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
@ -39,7 +39,7 @@ public abstract class IngestModuleFactoryAdapter implements IngestModuleFactory
|
||||
}
|
||||
|
||||
@Override
|
||||
public IngestModuleGlobalSetttingsPanel getGlobalSettingsPanel() {
|
||||
public IngestModuleGlobalSettingsPanel getGlobalSettingsPanel() {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
|
@ -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();
|
||||
}
|
@ -65,7 +65,7 @@ final class IngestModuleTemplate {
|
||||
return moduleFactory.hasGlobalSettingsPanel();
|
||||
}
|
||||
|
||||
IngestModuleGlobalSetttingsPanel getGlobalSettingsPanel() {
|
||||
IngestModuleGlobalSettingsPanel getGlobalSettingsPanel() {
|
||||
return moduleFactory.getGlobalSettingsPanel();
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
@ -83,7 +83,7 @@ public class FileExtMismatchDetectorModuleFactory extends IngestModuleFactoryAda
|
||||
}
|
||||
|
||||
@Override
|
||||
public IngestModuleGlobalSetttingsPanel getGlobalSettingsPanel() {
|
||||
public IngestModuleGlobalSettingsPanel getGlobalSettingsPanel() {
|
||||
FileExtMismatchSettingsPanel globalOptionsPanel = new FileExtMismatchSettingsPanel();
|
||||
globalOptionsPanel.load();
|
||||
return globalOptionsPanel;
|
||||
|
@ -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;
|
||||
@ -52,10 +51,31 @@ public class FileExtMismatchIngestModule extends IngestModuleAdapter implements
|
||||
private final FileExtMismatchDetectorModuleSettings settings;
|
||||
private HashMap<String, String[]> SigTypeToExtMap = new HashMap<>();
|
||||
private long jobId;
|
||||
private static AtomicLong processTime = new AtomicLong(0);
|
||||
private static AtomicLong numFiles = new AtomicLong(0);
|
||||
private static final HashMap<Long, IngestJobTotals> totalsForIngestJobs = new HashMap<>();
|
||||
private static final IngestModuleReferenceCounter refCounter = new IngestModuleReferenceCounter();
|
||||
|
||||
private static class IngestJobTotals {
|
||||
private long processTime = 0;
|
||||
private long numFiles = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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);
|
||||
if (ingestJobTotals == null) {
|
||||
ingestJobTotals = new IngestJobTotals();
|
||||
totalsForIngestJobs.put(ingestJobId, ingestJobTotals);
|
||||
}
|
||||
|
||||
ingestJobTotals.processTime += processTimeInc;
|
||||
ingestJobTotals.numFiles++;
|
||||
totalsForIngestJobs.put(ingestJobId, ingestJobTotals);
|
||||
}
|
||||
|
||||
FileExtMismatchIngestModule(FileExtMismatchDetectorModuleSettings settings) {
|
||||
this.settings = settings;
|
||||
}
|
||||
@ -64,6 +84,7 @@ public class FileExtMismatchIngestModule extends IngestModuleAdapter implements
|
||||
public void startUp(IngestJobContext context) throws IngestModuleException {
|
||||
jobId = context.getJobId();
|
||||
refCounter.incrementAndGet(jobId);
|
||||
|
||||
FileExtMismatchXML xmlLoader = FileExtMismatchXML.getDefault();
|
||||
SigTypeToExtMap = xmlLoader.load();
|
||||
}
|
||||
@ -87,8 +108,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,21 +175,28 @@ 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) {
|
||||
StringBuilder detailsSb = new StringBuilder();
|
||||
detailsSb.append("<table border='0' cellpadding='4' width='280'>"); //NON-NLS
|
||||
detailsSb.append("<tr><td>").append(FileExtMismatchDetectorModuleFactory.getModuleName()).append("</td></tr>"); //NON-NLS
|
||||
detailsSb.append("<tr><td>").append( //NON-NLS
|
||||
NbBundle.getMessage(this.getClass(), "FileExtMismatchIngestModule.complete.totalProcTime"))
|
||||
.append("</td><td>").append(processTime.get()).append("</td></tr>\n"); //NON-NLS
|
||||
detailsSb.append("<tr><td>").append( //NON-NLS
|
||||
NbBundle.getMessage(this.getClass(), "FileExtMismatchIngestModule.complete.totalFiles"))
|
||||
.append("</td><td>").append(numFiles.get()).append("</td></tr>\n"); //NON-NLS
|
||||
detailsSb.append("</table>"); //NON-NLS
|
||||
services.postMessage(IngestMessage.createMessage(IngestMessage.MessageType.INFO, FileExtMismatchDetectorModuleFactory.getModuleName(),
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"FileExtMismatchIngestModule.complete.svcMsg.text"),
|
||||
detailsSb.toString()));
|
||||
if (refCounter.decrementAndGet(jobId) == 0) {
|
||||
IngestJobTotals jobTotals;
|
||||
synchronized(this) {
|
||||
jobTotals = totalsForIngestJobs.remove(jobId);
|
||||
}
|
||||
if (jobTotals != null) {
|
||||
StringBuilder detailsSb = new StringBuilder();
|
||||
detailsSb.append("<table border='0' cellpadding='4' width='280'>"); //NON-NLS
|
||||
detailsSb.append("<tr><td>").append(FileExtMismatchDetectorModuleFactory.getModuleName()).append("</td></tr>"); //NON-NLS
|
||||
detailsSb.append("<tr><td>").append( //NON-NLS
|
||||
NbBundle.getMessage(this.getClass(), "FileExtMismatchIngestModule.complete.totalProcTime"))
|
||||
.append("</td><td>").append(jobTotals.processTime).append("</td></tr>\n"); //NON-NLS
|
||||
detailsSb.append("<tr><td>").append( //NON-NLS
|
||||
NbBundle.getMessage(this.getClass(), "FileExtMismatchIngestModule.complete.totalFiles"))
|
||||
.append("</td><td>").append(jobTotals.numFiles).append("</td></tr>\n"); //NON-NLS
|
||||
detailsSb.append("</table>"); //NON-NLS
|
||||
|
||||
services.postMessage(IngestMessage.createMessage(IngestMessage.MessageType.INFO, FileExtMismatchDetectorModuleFactory.getModuleName(),
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"FileExtMismatchIngestModule.complete.svcMsg.text"),
|
||||
detailsSb.toString()));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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<String, String[]> editableMap = new HashMap<>();
|
||||
|
@ -211,16 +211,24 @@
|
||||
</signature>
|
||||
<signature mimetype="image/gif">
|
||||
<ext>gif</ext>
|
||||
<ext>jpeg</ext>
|
||||
<ext>jpg</ext>
|
||||
<ext>png</ext>
|
||||
</signature>
|
||||
<signature mimetype="image/jpeg">
|
||||
<ext>gif</ext>
|
||||
<ext>jfi</ext>
|
||||
<ext>jfif</ext>
|
||||
<ext>jif</ext>
|
||||
<ext>jpe</ext>
|
||||
<ext>jpeg</ext>
|
||||
<ext>jpg</ext>
|
||||
<ext>png</ext>
|
||||
</signature>
|
||||
<signature mimetype="image/png">
|
||||
<ext>gif</ext>
|
||||
<ext>jpeg</ext>
|
||||
<ext>jpg</ext>
|
||||
<ext>png</ext>
|
||||
</signature>
|
||||
<signature mimetype="image/tiff">
|
||||
|
@ -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
|
||||
@ -133,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("<table border='0' cellpadding='4' width='280'>"); //NON-NLS
|
||||
detailsSb.append("<tr><td>").append(FileTypeIdModuleFactory.getModuleName()).append("</td></tr>"); //NON-NLS
|
||||
detailsSb.append("<tr><td>") //NON-NLS
|
||||
.append(NbBundle.getMessage(this.getClass(), "FileTypeIdIngestModule.complete.totalProcTime"))
|
||||
.append("</td><td>").append(jobTotals.matchTime).append("</td></tr>\n"); //NON-NLS
|
||||
detailsSb.append("<tr><td>") //NON-NLS
|
||||
.append(NbBundle.getMessage(this.getClass(), "FileTypeIdIngestModule.complete.totalFiles"))
|
||||
.append("</td><td>").append(jobTotals.numFiles).append("</td></tr>\n"); //NON-NLS
|
||||
detailsSb.append("</table>"); //NON-NLS
|
||||
IngestServices.getInstance().postMessage(IngestMessage.createMessage(IngestMessage.MessageType.INFO, FileTypeIdModuleFactory.getModuleName(),
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"FileTypeIdIngestModule.complete.srvMsg.text"),
|
||||
detailsSb.toString()));
|
||||
IngestJobTotals jobTotals;
|
||||
synchronized(this) {
|
||||
jobTotals = totalsForIngestJobs.remove(jobId);
|
||||
}
|
||||
if (jobTotals != null) {
|
||||
StringBuilder detailsSb = new StringBuilder();
|
||||
detailsSb.append("<table border='0' cellpadding='4' width='280'>"); //NON-NLS
|
||||
detailsSb.append("<tr><td>").append(FileTypeIdModuleFactory.getModuleName()).append("</td></tr>"); //NON-NLS
|
||||
detailsSb.append("<tr><td>") //NON-NLS
|
||||
.append(NbBundle.getMessage(this.getClass(), "FileTypeIdIngestModule.complete.totalProcTime"))
|
||||
.append("</td><td>").append(jobTotals.matchTime).append("</td></tr>\n"); //NON-NLS
|
||||
detailsSb.append("<tr><td>") //NON-NLS
|
||||
.append(NbBundle.getMessage(this.getClass(), "FileTypeIdIngestModule.complete.totalFiles"))
|
||||
.append("</td><td>").append(jobTotals.numFiles).append("</td></tr>\n"); //NON-NLS
|
||||
detailsSb.append("</table>"); //NON-NLS
|
||||
IngestServices.getInstance().postMessage(IngestMessage.createMessage(IngestMessage.MessageType.INFO, FileTypeIdModuleFactory.getModuleName(),
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"FileTypeIdIngestModule.complete.srvMsg.text"),
|
||||
detailsSb.toString()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -19,7 +19,7 @@
|
||||
<Group type="102" alignment="0" attributes="0">
|
||||
<EmptySpace min="-2" pref="10" max="-2" attributes="0"/>
|
||||
<Component id="skipKnownCheckBox" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace pref="608" max="32767" attributes="0"/>
|
||||
<EmptySpace max="32767" attributes="0"/>
|
||||
</Group>
|
||||
</Group>
|
||||
</DimensionLayout>
|
||||
|
@ -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)
|
||||
|
@ -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<String> 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<String> 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<String> 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<String> uniqueTagNames = getUniqueTagNames(rs.getLong("artifact_id"));
|
||||
if(failsTagFilter(uniqueTagNames, tagNamesFilter)) {
|
||||
continue;
|
||||
}
|
||||
@ -1664,6 +1657,22 @@ import org.sleuthkit.datamodel.TskData;
|
||||
return ReportGenerator.this.getMappedAttributes(attributes);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get any tags associated with an artifact
|
||||
* @param artifactId
|
||||
* @return hash set of tag display names
|
||||
* @throws SQLException
|
||||
*/
|
||||
private HashSet<String> getUniqueTagNames(long artifactId) throws SQLException {
|
||||
HashSet<String> 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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -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,22 +58,35 @@ public class HashDbIngestModule extends IngestModuleAdapter implements FileInges
|
||||
private List<HashDb> knownBadHashSets = new ArrayList<>();
|
||||
private List<HashDb> 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<Long, IngestJobTotals> 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 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;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startUp(org.sleuthkit.autopsy.ingest.IngestJobContext context) throws IngestModuleException {
|
||||
jobId = context.getJobId();
|
||||
jobId = context.getJobId();
|
||||
getEnabledHashSets(hashDbManager.getKnownBadFileHashSets(), knownBadHashSets);
|
||||
getEnabledHashSets(hashDbManager.getKnownFileHashSets(), knownHashSets);
|
||||
|
||||
if (refCounter.incrementAndGet(jobId) == 1) {
|
||||
if (refCounter.incrementAndGet(jobId) == 1) {
|
||||
// if first module for this job then post error msgs if needed
|
||||
|
||||
if (knownBadHashSets.isEmpty()) {
|
||||
@ -123,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();
|
||||
@ -131,7 +148,7 @@ public class HashDbIngestModule extends IngestModuleAdapter implements FileInges
|
||||
long calcstart = System.currentTimeMillis();
|
||||
md5Hash = hasher.calculateMd5(file);
|
||||
long delta = (System.currentTimeMillis() - calcstart);
|
||||
totalCalctime.addAndGet(delta);
|
||||
totals.totalCalctime.addAndGet(delta);
|
||||
|
||||
} catch (IOException ex) {
|
||||
logger.log(Level.WARNING, "Error calculating hash of file " + name, ex); //NON-NLS
|
||||
@ -156,7 +173,7 @@ public class HashDbIngestModule extends IngestModuleAdapter implements FileInges
|
||||
HashInfo hashInfo = db.lookUp(file);
|
||||
if (null != hashInfo) {
|
||||
foundBad = true;
|
||||
totalKnownBadCount.incrementAndGet();
|
||||
totals.totalKnownBadCount.incrementAndGet();
|
||||
|
||||
try {
|
||||
skCase.setKnown(file, TskData.FileKnown.BAD);
|
||||
@ -191,7 +208,7 @@ public class HashDbIngestModule extends IngestModuleAdapter implements FileInges
|
||||
postHashSetHitToBlackboard(file, md5Hash, hashSetName, comment, db.getSendIngestMessages());
|
||||
}
|
||||
long delta = (System.currentTimeMillis() - lookupstart);
|
||||
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
|
||||
@ -224,7 +241,7 @@ public class HashDbIngestModule extends IngestModuleAdapter implements FileInges
|
||||
}
|
||||
}
|
||||
long delta = (System.currentTimeMillis() - lookupstart);
|
||||
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
|
||||
@ -302,43 +319,49 @@ 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("<table border='0' cellpadding='4' width='280'>"); //NON-NLS
|
||||
|
||||
detailsSb.append("<tr><td>") //NON-NLS
|
||||
.append(NbBundle.getMessage(this.getClass(), "HashDbIngestModule.complete.knownBadsFound"))
|
||||
.append("</td>"); //NON-NLS
|
||||
detailsSb.append("<td>").append(jobTotals.totalKnownBadCount.get()).append("</td></tr>"); //NON-NLS
|
||||
|
||||
detailsSb.append("<tr><td>") //NON-NLS
|
||||
.append(NbBundle.getMessage(this.getClass(), "HashDbIngestModule.complete.totalCalcTime"))
|
||||
.append("</td><td>").append(jobTotals.totalCalctime.get()).append("</td></tr>\n"); //NON-NLS
|
||||
detailsSb.append("<tr><td>") //NON-NLS
|
||||
.append(NbBundle.getMessage(this.getClass(), "HashDbIngestModule.complete.totalLookupTime"))
|
||||
.append("</td><td>").append(jobTotals.totalLookuptime.get()).append("</td></tr>\n"); //NON-NLS
|
||||
detailsSb.append("</table>"); //NON-NLS
|
||||
|
||||
detailsSb.append("<p>") //NON-NLS
|
||||
.append(NbBundle.getMessage(this.getClass(), "HashDbIngestModule.complete.databasesUsed"))
|
||||
.append("</p>\n<ul>"); //NON-NLS
|
||||
for (HashDb db : knownBadHashSets) {
|
||||
detailsSb.append("<li>").append(db.getHashSetName()).append("</li>\n"); //NON-NLS
|
||||
}
|
||||
|
||||
detailsSb.append("</ul>"); //NON-NLS
|
||||
|
||||
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) {
|
||||
if ((!knownBadHashSets.isEmpty()) || (!knownHashSets.isEmpty())) {
|
||||
StringBuilder detailsSb = new StringBuilder();
|
||||
//details
|
||||
detailsSb.append("<table border='0' cellpadding='4' width='280'>"); //NON-NLS
|
||||
|
||||
detailsSb.append("<tr><td>") //NON-NLS
|
||||
.append(NbBundle.getMessage(this.getClass(), "HashDbIngestModule.complete.knownBadsFound"))
|
||||
.append("</td>"); //NON-NLS
|
||||
detailsSb.append("<td>").append(totalKnownBadCount.get()).append("</td></tr>"); //NON-NLS
|
||||
|
||||
detailsSb.append("<tr><td>") //NON-NLS
|
||||
.append(NbBundle.getMessage(this.getClass(), "HashDbIngestModule.complete.totalCalcTime"))
|
||||
.append("</td><td>").append(totalCalctime.get()).append("</td></tr>\n"); //NON-NLS
|
||||
detailsSb.append("<tr><td>") //NON-NLS
|
||||
.append(NbBundle.getMessage(this.getClass(), "HashDbIngestModule.complete.totalLookupTime"))
|
||||
.append("</td><td>").append(totalLookuptime.get()).append("</td></tr>\n"); //NON-NLS
|
||||
detailsSb.append("</table>"); //NON-NLS
|
||||
|
||||
detailsSb.append("<p>") //NON-NLS
|
||||
.append(NbBundle.getMessage(this.getClass(), "HashDbIngestModule.complete.databasesUsed"))
|
||||
.append("</p>\n<ul>"); //NON-NLS
|
||||
for (HashDb db : knownBadHashSets) {
|
||||
detailsSb.append("<li>").append(db.getHashSetName()).append("</li>\n"); //NON-NLS
|
||||
}
|
||||
|
||||
detailsSb.append("</ul>"); //NON-NLS
|
||||
services.postMessage(IngestMessage.createMessage(
|
||||
IngestMessage.MessageType.INFO,
|
||||
HashLookupModuleFactory.getModuleName(),
|
||||
NbBundle.getMessage(this.getClass(),
|
||||
"HashDbIngestModule.complete.hashLookupResults"),
|
||||
detailsSb.toString()));
|
||||
}
|
||||
postSummary();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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.
|
||||
@ -99,7 +99,7 @@ public class HashLookupModuleFactory extends IngestModuleFactoryAdapter {
|
||||
}
|
||||
|
||||
@Override
|
||||
public IngestModuleGlobalSetttingsPanel getGlobalSettingsPanel() {
|
||||
public IngestModuleGlobalSettingsPanel getGlobalSettingsPanel() {
|
||||
HashLookupSettingsPanel globalSettingsPanel = new HashLookupSettingsPanel();
|
||||
globalSettingsPanel.load();
|
||||
return globalSettingsPanel;
|
||||
|
@ -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");
|
||||
|
@ -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
|
||||
|
@ -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=<html>\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=<html>\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u306B\u307E\u3060\u30D5\u30A1\u30A4\u30EB\u304C\u3042\u308A\u307E\u305B\u3093\u3002<br />\u3057\u3070\u3089\u304F\u3057\u3066\u304B\u3089\u3001\u518D\u5EA6\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u306F\u3000{0}\u3000\u5206\u6BCE\u66F4\u65B0\u3055\u308C\u307E\u3059\u3002</html>
|
||||
AbstractKeywordSearchPerformer.search.noFilesIdxdMsg=<html>\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\u304C\u3042\u308A\u307E\u305B\u3093\u3002<br />\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u30E2\u30B8\u30E5\u30FC\u30EB\u3092\u6709\u52B9\u5316\u3057\u3066\u30A4\u30E1\u30FC\u30B8\u3092\u518D\u51E6\u7406\u3002</html>
|
||||
AbstractKeywordSearchPerformer.search.noFilesIdxdMsg=<html>\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\u304C\u3042\u308A\u307E\u305B\u3093\u3002<br />\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u30E2\u30B8\u30E5\u30FC\u30EB\u3092\u6709\u52B9\u5316\u3057\u3066\u30A4\u30E1\u30FC\u30B8\u3092\u518D\u5EA6\u30A4\u30F3\u30B8\u30A7\u30B9\u30C8\u3002</html>
|
||||
ExtractedContentPanel.setMarkup.panelTxt=<span style\='font-style\:italic'>\u30C6\u30AD\u30B9\u30C8\u30ED\u30FC\u30C9\u4E2D\u3002\u3057\u3070\u3089\u304F\u304A\u5F85\u3061\u304F\u3060\u3055\u3044...</span>
|
||||
ExtractedContentViewer.toString=\u62BD\u51FA\u3055\u308C\u305F\u30C6\u30AD\u30B9\u30C8
|
||||
ExtractedContentViewer.toolTip=\u30D5\u30A1\u30A4\u30EB\u3084\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u7D50\u679C\u304B\u3089\u62BD\u51FA\u3055\u308C\u305F\u30C6\u30AD\u30B9\u30C8\u3092\u8868\u793A\u3002\u3053\u306E\u30D3\u30E5\u30FC\u30A2\u3092\u30A2\u30AF\u30C6\u30A3\u30D9\u30A4\u30C8\u3059\u308B\u306B\u306F\u3001\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u51E6\u7406\u3092\u30D5\u30A1\u30A4\u30EB\u4E0A\u3067\u5B9F\u884C\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002
|
||||
ExtractedContentViewer.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=<p style\=''font-style\:italic''>{0}\u306F\u65E2\u77E5\u30D5\u30A1\u30A4\u30EB\u3067\u3059\uFF08MDS\u30CF\u30C3\u30B7\u30E5\u306B\u57FA\u3065\u304F\u3068\uFF09\u3002\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u306B\u30C6\u30AD\u30B9\u30C8\u304C\u3042\u308A\u307E\u305B\u3093\u3002</p>
|
||||
ExtractedContentViewer.getSolrContent.noTxtYetMsg=<p style\=''font-style\:italic''>{0}\u306E\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u306B\u30C6\u30AD\u30B9\u30C8\u304C\u3042\u308A\u307E\u305B\u3093\u3002<br/>\u30C6\u30AD\u30B9\u30C8\u304C\u7121\u3044\u304B\u3001\u307E\u3060\u89E3\u6790\u3055\u308C\u3066\u3044\u306A\u3044\u304B\u3001\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u304C\u51E6\u7406\u4E2D\u306B\u6709\u52B9\u5316\u3055\u308C\u3066\u3044\u306A\u304B\u3063\u305F\u306E\u304B\u3082\u3057\u308C\u307E\u305B\u3093\u3002</p>
|
||||
ExtractedContentViewer.getSolrContent.noTxtYetMsg=<p style\=''font-style\:italic''>{0}\u306E\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u306B\u30C6\u30AD\u30B9\u30C8\u304C\u3042\u308A\u307E\u305B\u3093\u3002<br/>\u30C6\u30AD\u30B9\u30C8\u304C\u7121\u3044\u304B\u3001\u307E\u3060\u89E3\u6790\u3055\u308C\u3066\u3044\u306A\u3044\u304B\u3001\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u304C\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</p>
|
||||
HighlightedMatchesSource.getMarkup.noMatchMsg=<html><pre><span style\\\\\='background\\\\\:yellow'>\u3053\u306E\u30DA\u30FC\u30B8\u4E0A\u3067\u30AD\u30FC\u30EF\u30FC\u30C9\u304C\u30D2\u30C3\u30C8\u3057\u307E\u305B\u3093\u3067\u3057\u305F\u3002<br />\u30AD\u30FC\u30EF\u30FC\u30C9\u304C\u30D5\u30A1\u30A4\u30EB\u540D\u306B\u542B\u307E\u308C\u3066\u3044\u305F\u304B\u3082\u3057\u308C\u307E\u305B\u3093\u3002 <br />\u5225\u306E\u30DA\u30FC\u30B8\u306B\u79FB\u52D5\u3059\u308B\u304B\u3001\u30AA\u30EA\u30B8\u30CA\u30EB\u30C6\u30AD\u30B9\u30C8\u3092\u8868\u793A\u3059\u308B\u306E\u306B\u3001\u300C\u62BD\u51FA\u3055\u308C\u305F\u30C6\u30AD\u30B9\u30C8\u300D\u3092\u9078\u629E\u3057\u3066\u4E0B\u3055\u3044\u3002</span></pre></html>
|
||||
HighlightedMatchesSource.toString=\u691C\u7D22\u7D50\u679C
|
||||
Installer.reportPortError=\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u30B5\u30FC\u30D0\u30FC\u30DD\u30FC\u30C8 {0} \u306F\u5229\u7528\u3067\u304D\u307E\u305B\u3093\u3002\u4F7F\u7528\u3057\u3066\u3044\u308B\u30BB\u30AD\u30E5\u30EA\u30C6\u30A3\u30BD\u30D5\u30C8\u30A6\u30A7\u30A2\u304C {1} \u3092\u30D6\u30ED\u30C3\u30AF\u3057\u3066\u3044\u306A\u3044\u304B\u78BA\u8A8D\u3057\u3001\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u30E6\u30FC\u30B6\u30FC\u30D5\u30A9\u30EB\u30C0\u30FC\u5185\u306E {3} \u306E {2} \u306E\u30D7\u30ED\u30D1\u30C6\u30A3\u30D5\u30A1\u30A4\u30EB\u306E\u5909\u66F4\u3092\u691C\u8A0E\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u3082\u3057\u4ED6\u306E\u51E6\u7406\u304C\u554F\u984C\u306E\u539F\u56E0\u3067\u3042\u308C\u3070\u3001\u30B7\u30B9\u30C6\u30E0\u3092\u518D\u8D77\u52D5\u3057\u3066\u4E0B\u3055\u3044\u3002
|
||||
@ -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}<br />\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}<br />\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=<html>\u8FFD\u52A0\u306E\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8\u3092\u9078\u629E\u3067\u304D\u307E\u3059<br />\u305D\u3057\u3066\u5B9F\u884C\u4E2D\u306E\u51E6\u7406\u306B\u8FFD\u52A0\u3067\u304D\u307E\u3059<br />\u6B21\u56DE\u306E\u30D5\u30A1\u30A4\u30EB\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u518D\u69CB\u7BC9\u306E\u3068\u304D\u306B\u9078\u629E\u3055\u308C\u305F\u30EA\u30B9\u30C8\u3082\u691C\u7D22\u3055\u308C\u307E\u3059\u3002</html>
|
||||
KeywordSearchListsViewerPanel.initIngest.addIngestTitle=\u30A4\u30F3\u30B8\u30A7\u30B9\u30C8\u306B\u8FFD\u52A0
|
||||
KeywordSearchListsViewerPanel.initIngest.addIngestMsg=<html>\u8FFD\u52A0\u306E\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8\u3092\u9078\u629E\u3067\u304D\u307E\u3059<br />\u305D\u3057\u3066\u5B9F\u884C\u4E2D\u306E\u30A4\u30F3\u30B8\u30A7\u30B9\u30C8\u306B\u8FFD\u52A0\u3067\u304D\u307E\u3059<br />\u6B21\u56DE\u306E\u30D5\u30A1\u30A4\u30EB\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u518D\u69CB\u7BC9\u306E\u3068\u304D\u306B\u9078\u629E\u3055\u308C\u305F\u30EA\u30B9\u30C8\u3082\u691C\u7D22\u3055\u308C\u307E\u3059\u3002</html>
|
||||
KeywordSearchListsViewerPanel.initIngest.searchIngestTitle=\u691C\u7D22
|
||||
KeywordSearchListsViewerPanel.initIngest.addIdxSearchMsg=\u9078\u629E\u3057\u305F\u30EA\u30B9\u30C8\u5185\u306E\u30AD\u30FC\u30EF\u30FC\u30C9\u3092\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\u5185\u3067\u691C\u7D22
|
||||
KeywordSearchListsViewerPanel.initIngest.ongoingIngestMsg=\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\uFF1A {0} \uFF08\u51E6\u7406\u306F\u5B9F\u884C\u4E2D\uFF09
|
||||
KeywordSearchListsViewerPanel.initIngest.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
|
||||
|
@ -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<Keyword> getQueryList() {
|
||||
throw new UnsupportedOperationException("No list for single-keyword search");
|
||||
throw new UnsupportedOperationException(
|
||||
NbBundle.getMessage(this.getClass(), "DropdownSearchPanelgetQueryList.exception.msg"));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -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;
|
||||
|
@ -103,11 +103,18 @@ 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<Long, IngestStatus> ingestStatus = new HashMap<>(); //guarded by itself
|
||||
|
||||
static void putIngestStatus(long id, IngestStatus status) {
|
||||
synchronized(ingestStatus) {
|
||||
ingestStatus.put(id, status);
|
||||
private static final Map<Long, Map<Long, IngestStatus>> ingestStatus = new HashMap<>(); //guarded by itself
|
||||
|
||||
private static void putIngestStatus(long ingestJobId, long fileId, IngestStatus status) {
|
||||
synchronized(ingestStatus) {
|
||||
Map<Long, IngestStatus> ingestStatusForJob = ingestStatus.get(ingestJobId);
|
||||
if (ingestStatusForJob == null) {
|
||||
ingestStatusForJob = new HashMap<>();
|
||||
ingestStatus.put(ingestJobId, ingestStatusForJob);
|
||||
}
|
||||
|
||||
ingestStatusForJob.put(fileId, status);
|
||||
ingestStatus.put(ingestJobId, ingestStatusForJob);
|
||||
}
|
||||
}
|
||||
|
||||
@ -125,7 +132,7 @@ public final class KeywordSearchIngestModule extends IngestModuleAdapter impleme
|
||||
public void startUp(IngestJobContext context) throws IngestModuleException {
|
||||
logger.log(Level.INFO, "Initializing instance {0}", instanceNum); //NON-NLS
|
||||
initialized = false;
|
||||
jobId = context.getJobId();
|
||||
jobId = context.getJobId();
|
||||
caseHandle = Case.getCurrentCase().getSleuthkitCase();
|
||||
tikaFormatDetector = new Tika();
|
||||
ingester = Server.getIngester();
|
||||
@ -200,8 +207,8 @@ public final class KeywordSearchIngestModule extends IngestModuleAdapter impleme
|
||||
public ProcessResult process(AbstractFile abstractFile) {
|
||||
if (initialized == false) //error initializing indexing/Solr
|
||||
{
|
||||
logger.log(Level.WARNING, "Skipping processing, module not initialized, file: {0}", abstractFile.getName()); //NON-NLS
|
||||
putIngestStatus(abstractFile.getId(), IngestStatus.SKIPPED_ERROR_INDEXING);
|
||||
logger.log(Level.WARNING, "Skipping processing, module not initialized, file: {0}", abstractFile.getName()); //NON-NLS
|
||||
putIngestStatus(jobId, abstractFile.getId(), IngestStatus.SKIPPED_ERROR_INDEXING);
|
||||
return ProcessResult.OK;
|
||||
}
|
||||
try {
|
||||
@ -260,6 +267,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
|
||||
@ -272,6 +282,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); //NON-NLS
|
||||
}
|
||||
|
||||
cleanup();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -289,10 +301,6 @@ public final class KeywordSearchIngestModule extends IngestModuleAdapter impleme
|
||||
* Common cleanup code when module stops or final searcher completes
|
||||
*/
|
||||
private void cleanup() {
|
||||
synchronized(ingestStatus) {
|
||||
ingestStatus.clear();
|
||||
}
|
||||
|
||||
textExtractors.clear();
|
||||
textExtractors = null;
|
||||
stringExtractor = null;
|
||||
@ -314,16 +322,17 @@ public final class KeywordSearchIngestModule extends IngestModuleAdapter impleme
|
||||
int error_io = 0;
|
||||
|
||||
synchronized(ingestStatus) {
|
||||
for (IngestStatus s : ingestStatus.values()) {
|
||||
Map<Long, IngestStatus> 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 +420,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()}); //NON-NLS
|
||||
putIngestStatus(aFile.getId(), IngestStatus.SKIPPED_ERROR_TEXTEXTRACT);
|
||||
logger.log(Level.WARNING, "Failed to extract strings and ingest, file ''{0}'' (id: {1}).", new Object[]{aFile.getName(), aFile.getId()}); //NON-NLS
|
||||
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); //NON-NLS
|
||||
putIngestStatus(aFile.getId(), IngestStatus.SKIPPED_ERROR_INDEXING);
|
||||
logger.log(Level.WARNING, "Failed to extract strings and ingest, file '" + aFile.getName() + "' (id: " + aFile.getId() + ").", ex); //NON-NLS
|
||||
putIngestStatus(jobId, aFile.getId(), IngestStatus.SKIPPED_ERROR_INDEXING);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -466,9 +475,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); //NON-NLS
|
||||
}
|
||||
return;
|
||||
@ -502,9 +511,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); //NON-NLS
|
||||
}
|
||||
return;
|
||||
@ -517,20 +526,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()}); //NON-NLS
|
||||
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() + ", " //NON-NLS
|
||||
+ 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() + ", " //NON-NLS
|
||||
+ aFile.getName(), e);
|
||||
putIngestStatus(aFile.getId(), IngestStatus.SKIPPED_ERROR_TEXTEXTRACT);
|
||||
putIngestStatus(jobId, aFile.getId(), IngestStatus.SKIPPED_ERROR_TEXTEXTRACT);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
@ -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) {
|
||||
@ -100,7 +101,7 @@ public class KeywordSearchModuleFactory extends IngestModuleFactoryAdapter {
|
||||
}
|
||||
|
||||
@Override
|
||||
public IngestModuleGlobalSetttingsPanel getGlobalSettingsPanel() {
|
||||
public IngestModuleGlobalSettingsPanel getGlobalSettingsPanel() {
|
||||
KeywordSearchGlobalSettingsPanel globalSettingsPanel = new KeywordSearchGlobalSettingsPanel();
|
||||
globalSettingsPanel.load();
|
||||
return globalSettingsPanel;
|
||||
@ -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);
|
||||
}
|
||||
|
@ -627,7 +627,9 @@ public final class SearchRunner {
|
||||
get();
|
||||
} catch (InterruptedException | ExecutionException e) {
|
||||
logger.log(Level.SEVERE, "Error performing keyword search: " + e.getMessage()); //NON-NLS
|
||||
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) {
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
#Updated by build script
|
||||
#Thu, 13 Mar 2014 18:09:42 -0400
|
||||
#Tue, 22 Apr 2014 16:06:14 -0400
|
||||
LBL_splash_window_title=Starting Autopsy
|
||||
SPLASH_HEIGHT=288
|
||||
SPLASH_WIDTH=538
|
||||
@ -8,4 +8,4 @@ SplashRunningTextBounds=5,266,530,17
|
||||
SplashRunningTextColor=0x0
|
||||
SplashRunningTextFontSize=18
|
||||
|
||||
currentVersion=Autopsy 3.0.9
|
||||
currentVersion=Autopsy 3.1.0_Beta
|
||||
|
@ -1,5 +1,5 @@
|
||||
#Updated by build script
|
||||
#Thu, 13 Mar 2014 18:09:42 -0400
|
||||
#Tue, 22 Apr 2014 16:06:14 -0400
|
||||
|
||||
CTL_MainWindow_Title=Autopsy 3.0.9
|
||||
CTL_MainWindow_Title_No_Project=Autopsy 3.0.9
|
||||
CTL_MainWindow_Title=Autopsy 3.1.0_Beta
|
||||
CTL_MainWindow_Title_No_Project=Autopsy 3.1.0_Beta
|
||||
|
@ -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)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user