Merge branch 'release-4.5.0' of https://github.com/sleuthkit/autopsy into 3081-CorrelationEngineCorrectReset

This commit is contained in:
William Schaefer 2017-09-25 11:26:51 -04:00
commit 162c87b9a9
8 changed files with 65 additions and 109 deletions

View File

@ -570,7 +570,7 @@ public abstract class AbstractSqlEamDb implements EamDb {
preparedStatement.setString(2, eamInstance.getEamDataSource().getDeviceID());
preparedStatement.setString(3, eamArtifact.getCorrelationValue());
preparedStatement.setString(4, eamInstance.getFilePath());
preparedStatement.setString(5, eamInstance.getKnownStatus().name());
preparedStatement.setByte(5, eamInstance.getKnownStatus().getFileKnownValue());
if ("".equals(eamInstance.getComment())) {
preparedStatement.setNull(6, Types.INTEGER);
} else {
@ -957,7 +957,7 @@ public abstract class AbstractSqlEamDb implements EamDb {
bulkPs.setString(2, eamInstance.getEamDataSource().getDeviceID());
bulkPs.setString(3, eamArtifact.getCorrelationValue());
bulkPs.setString(4, eamInstance.getFilePath());
bulkPs.setString(5, eamInstance.getKnownStatus().name());
bulkPs.setByte(5, eamInstance.getKnownStatus().getFileKnownValue());
if ("".equals(eamInstance.getComment())) {
bulkPs.setNull(6, Types.INTEGER);
} else {
@ -1109,7 +1109,7 @@ public abstract class AbstractSqlEamDb implements EamDb {
int instance_id = resultSet.getInt("id");
preparedUpdate = conn.prepareStatement(sqlUpdate.toString());
preparedUpdate.setString(1, knownStatus.name());
preparedUpdate.setByte(1, knownStatus.getFileKnownValue());
// NOTE: if the user tags the same instance as BAD multiple times,
// the comment from the most recent tagging is the one that will
// prevail in the DB.
@ -1184,7 +1184,7 @@ public abstract class AbstractSqlEamDb implements EamDb {
try {
preparedStatement = conn.prepareStatement(sql.toString());
preparedStatement.setString(1, value);
preparedStatement.setString(2, TskData.FileKnown.BAD.name());
preparedStatement.setByte(2, TskData.FileKnown.BAD.getFileKnownValue());
resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
artifactInstance = getEamArtifactInstanceFromResultSet(resultSet);
@ -1226,7 +1226,7 @@ public abstract class AbstractSqlEamDb implements EamDb {
try {
preparedStatement = conn.prepareStatement(sql.toString());
preparedStatement.setString(1, value);
preparedStatement.setString(2, TskData.FileKnown.BAD.name());
preparedStatement.setByte(2, TskData.FileKnown.BAD.getFileKnownValue());
resultSet = preparedStatement.executeQuery();
resultSet.next();
badInstances = resultSet.getLong(1);
@ -1277,7 +1277,7 @@ public abstract class AbstractSqlEamDb implements EamDb {
try {
preparedStatement = conn.prepareStatement(sql.toString());
preparedStatement.setString(1, value);
preparedStatement.setString(2, TskData.FileKnown.BAD.name());
preparedStatement.setByte(2, TskData.FileKnown.BAD.getFileKnownValue());
resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
caseNames.add(resultSet.getString("case_name"));
@ -1319,7 +1319,7 @@ public abstract class AbstractSqlEamDb implements EamDb {
try {
preparedStatement = conn.prepareStatement(String.format(sql, EamDbUtil.correlationTypeToReferenceTableName(aType)));
preparedStatement.setString(1, value);
preparedStatement.setString(2, TskData.FileKnown.BAD.name());
preparedStatement.setByte(2, TskData.FileKnown.BAD.getFileKnownValue());
resultSet = preparedStatement.executeQuery();
resultSet.next();
badInstances = resultSet.getLong(1);
@ -1532,7 +1532,7 @@ public abstract class AbstractSqlEamDb implements EamDb {
preparedStatement = conn.prepareStatement(String.format(sql, EamDbUtil.correlationTypeToReferenceTableName(correlationType)));
preparedStatement.setInt(1, eamGlobalFileInstance.getGlobalSetID());
preparedStatement.setString(2, eamGlobalFileInstance.getMD5Hash());
preparedStatement.setString(3, eamGlobalFileInstance.getKnownStatus().name());
preparedStatement.setByte(3, eamGlobalFileInstance.getKnownStatus().getFileKnownValue());
preparedStatement.setString(4, eamGlobalFileInstance.getComment());
preparedStatement.executeUpdate();
} catch (SQLException ex) {
@ -1565,7 +1565,7 @@ public abstract class AbstractSqlEamDb implements EamDb {
for (EamGlobalFileInstance globalInstance : globalInstances) {
bulkPs.setInt(1, globalInstance.getGlobalSetID());
bulkPs.setString(2, globalInstance.getMD5Hash());
bulkPs.setString(3, globalInstance.getKnownStatus().name());
bulkPs.setByte(3, globalInstance.getKnownStatus().getFileKnownValue());
bulkPs.setString(4, globalInstance.getComment());
bulkPs.addBatch();
}
@ -1948,7 +1948,7 @@ public abstract class AbstractSqlEamDb implements EamDb {
new EamDataSource(resultSet.getString("device_id"), resultSet.getString("name")),
resultSet.getString("file_path"),
resultSet.getString("comment"),
TskData.FileKnown.valueOf(resultSet.getString("known_status")),
TskData.FileKnown.valueOf(resultSet.getByte("known_status")),
EamArtifactInstance.GlobalStatus.LOCAL
);
@ -1996,7 +1996,7 @@ public abstract class AbstractSqlEamDb implements EamDb {
resultSet.getInt("id"),
resultSet.getInt("reference_set_id"),
resultSet.getString("value"),
TskData.FileKnown.valueOf(resultSet.getString("known_status")),
TskData.FileKnown.valueOf(resultSet.getByte("known_status")),
resultSet.getString("comment")
);

View File

@ -1,7 +1,20 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
* Central Repository
*
* Copyright 2015-2017 Basis Technology Corp.
* Contact: carrier <at> sleuthkit <dot> org
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.sleuthkit.autopsy.centralrepository.datamodel;

View File

@ -380,7 +380,7 @@ public final class PostgresEamDbSettings {
createReferenceTypesTableTemplate.append("id SERIAL PRIMARY KEY,");
createReferenceTypesTableTemplate.append("reference_set_id integer,");
createReferenceTypesTableTemplate.append("value text NOT NULL,");
createReferenceTypesTableTemplate.append("known_status text NOT NULL,");
createReferenceTypesTableTemplate.append("known_status integer NOT NULL,");
createReferenceTypesTableTemplate.append("comment text,");
createReferenceTypesTableTemplate.append("CONSTRAINT %s_multi_unique UNIQUE (reference_set_id, value),");
createReferenceTypesTableTemplate.append("foreign key (reference_set_id) references reference_sets(id) ON UPDATE SET NULL ON DELETE SET NULL");
@ -408,7 +408,7 @@ public final class PostgresEamDbSettings {
createArtifactInstancesTableTemplate.append("data_source_id integer,");
createArtifactInstancesTableTemplate.append("value text NOT NULL,");
createArtifactInstancesTableTemplate.append("file_path text NOT NULL,");
createArtifactInstancesTableTemplate.append("known_status text NOT NULL,");
createArtifactInstancesTableTemplate.append("known_status integer NOT NULL,");
createArtifactInstancesTableTemplate.append("comment text,");
createArtifactInstancesTableTemplate.append("CONSTRAINT %s_multi_unique_ UNIQUE (case_id, data_source_id, value, file_path),");
createArtifactInstancesTableTemplate.append("foreign key (case_id) references cases(id) ON UPDATE SET NULL ON DELETE SET NULL,");

View File

@ -322,7 +322,7 @@ public final class SqliteEamDbSettings {
createReferenceTypesTableTemplate.append("id integer primary key autoincrement NOT NULL,");
createReferenceTypesTableTemplate.append("reference_set_id integer,");
createReferenceTypesTableTemplate.append("value text NOT NULL,");
createReferenceTypesTableTemplate.append("known_status text NOT NULL,");
createReferenceTypesTableTemplate.append("known_status integer NOT NULL,");
createReferenceTypesTableTemplate.append("comment text,");
createReferenceTypesTableTemplate.append("CONSTRAINT %s_multi_unique UNIQUE(reference_set_id, value) ON CONFLICT IGNORE,");
createReferenceTypesTableTemplate.append("foreign key (reference_set_id) references reference_sets(id) ON UPDATE SET NULL ON DELETE SET NULL");
@ -350,7 +350,7 @@ public final class SqliteEamDbSettings {
createArtifactInstancesTableTemplate.append("data_source_id integer,");
createArtifactInstancesTableTemplate.append("value text NOT NULL,");
createArtifactInstancesTableTemplate.append("file_path text NOT NULL,");
createArtifactInstancesTableTemplate.append("known_status text NOT NULL,");
createArtifactInstancesTableTemplate.append("known_status integer NOT NULL,");
createArtifactInstancesTableTemplate.append("comment text,");
createArtifactInstancesTableTemplate.append("CONSTRAINT %s_multi_unique UNIQUE(case_id, data_source_id, value, file_path) ON CONFLICT IGNORE,");
createArtifactInstancesTableTemplate.append("foreign key (case_id) references cases(id) ON UPDATE SET NULL ON DELETE SET NULL,");

View File

@ -1,7 +1,20 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
* Central Repository
*
* Copyright 2015-2017 Basis Technology Corp.
* Contact: carrier <at> sleuthkit <dot> org
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.sleuthkit.autopsy.centralrepository.optionspanel;

View File

@ -21,18 +21,19 @@ package org.sleuthkit.autopsy.corecomponents;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.sleuthkit.autopsy.corecomponentinterfaces.DataResult;
import java.util.logging.Level;
import javax.swing.JComponent;
import org.openide.explorer.ExplorerManager;
import org.openide.explorer.ExplorerUtils;
import org.openide.util.NbBundle;
import org.openide.windows.TopComponent;
import org.openide.nodes.Node;
import org.openide.util.NbBundle;
import org.openide.windows.Mode;
import org.openide.windows.RetainLocation;
import org.openide.windows.TopComponent;
import org.openide.windows.WindowManager;
import org.sleuthkit.autopsy.actions.AddBookmarkTagAction;
import org.sleuthkit.autopsy.casemodule.Case;
import org.sleuthkit.autopsy.corecomponentinterfaces.DataResult;
import org.sleuthkit.autopsy.corecomponentinterfaces.DataResultViewer;
import org.sleuthkit.autopsy.coreutils.Logger;
@ -55,11 +56,12 @@ import org.sleuthkit.autopsy.coreutils.Logger;
* Implements DataResult interface by delegating to the encapsulated
* DataResultPanel.
*/
@RetainLocation("editor")
public class DataResultTopComponent extends TopComponent implements DataResult, ExplorerManager.Provider {
private static final Logger logger = Logger.getLogger(DataResultTopComponent.class.getName());
private ExplorerManager explorerManager = new ExplorerManager();
private DataResultPanel dataResultPanel; //embedded component with all the logic
private final ExplorerManager explorerManager = new ExplorerManager();
private final DataResultPanel dataResultPanel; //embedded component with all the logic
private boolean isMain;
private String customModeName;
@ -86,7 +88,7 @@ public class DataResultTopComponent extends TopComponent implements DataResult,
*
* @param name unique name of the data result window, also
* used as title
* @param customModeName custom mode to dock into
* @param mode custom mode to dock into
* @param customContentViewer custom content viewer to send selection events
* to
*/
@ -255,16 +257,10 @@ public class DataResultTopComponent extends TopComponent implements DataResult,
if (customModeName != null) {
Mode mode = WindowManager.getDefault().findMode(customModeName);
if (mode != null) {
StringBuilder message = new StringBuilder("Found custom mode, setting: "); //NON-NLS
message.append(customModeName);
logger.log(Level.INFO, message.toString());
logger.log(Level.INFO, "Found custom mode, setting: {0}", customModeName);//NON-NLS
mode.dockInto(this);
} else {
StringBuilder message = new StringBuilder("Could not find mode: "); //NON-NLS
message.append(customModeName);
message.append(", will dock into the default one"); //NON-NLS
logger.log(Level.WARNING, message.toString());
logger.log(Level.WARNING, "Could not find mode: {0}, will dock into the default one", customModeName);//NON-NLS
}
}
}

View File

@ -148,37 +148,6 @@ public final class AutoIngestJob implements Comparable<AutoIngestJob>, Serializa
this.stageDetails = this.getProcessingStageDetails();
}
/**
* Copy constructs an automated ingest job.
*
* @param job The job to be copied.
*/
AutoIngestJob(AutoIngestJob job) {
/*
* Version 0 fields.
*/
this.manifest = job.getManifest(); // Manifest is immutable.
this.nodeName = job.getProcessingHostName();
this.caseDirectoryPath = job.getCaseDirectoryPath().toString();
this.priority = job.getPriority();
this.stage = job.getProcessingStage();
this.stageStartDate = job.getProcessingStageStartDate();
this.dataSourceProcessor = job.getDataSourceProcessor();
this.ingestJob = job.getIngestJob();
this.cancelled = job.isCanceled();
this.completed = job.isCompleted();
this.completedDate = new Date(job.getCompletedDate().getTime());
this.errorsOccurred = job.getErrorsOccurred();
/*
* Version 1 fields.
*/
this.version = job.getVersion();
this.processingStatus = job.getProcessingStatus();
this.numberOfCrashes = job.getNumberOfCrashes();
this.stageDetails = job.getProcessingStageDetails(); // StageDetails is immutable.
}
/**
* Gets the job manifest.
*
@ -323,13 +292,6 @@ public final class AutoIngestJob implements Comparable<AutoIngestJob>, Serializa
this.dataSourceProcessor = dataSourceProcessor;
}
/**
* Gets the data source processor for the job.
*/
private DataSourceProcessor getDataSourceProcessor() {
return this.dataSourceProcessor;
}
/**
* Sets the ingest job for the auto ingest job. Used for obtaining
* processing stage details, cancelling the currently running data source
@ -536,15 +498,6 @@ public final class AutoIngestJob implements Comparable<AutoIngestJob>, Serializa
return -this.getManifest().getDateFileCreated().compareTo(otherJob.getManifest().getDateFileCreated());
}
/**
* gest the version number of the job data.
*
* @return The version number.
*/
private int getVersion() {
return this.version;
}
/**
* Comparator that supports doing a descending sort of jobs based on job
* completion date.

View File

@ -142,7 +142,7 @@ public final class AutoIngestMonitor extends Observable implements PropertyChang
jobsSnapshot.removePendingJob(event.getJob());
jobsSnapshot.addOrReplaceRunningJob(event.getJob());
setChanged();
notifyObservers(jobsSnapshot.deepCopy());
notifyObservers(jobsSnapshot);
}
}
@ -160,7 +160,7 @@ public final class AutoIngestMonitor extends Observable implements PropertyChang
jobsSnapshot.removePendingJob(job);
jobsSnapshot.addOrReplaceRunningJob(job);
setChanged();
notifyObservers(jobsSnapshot.deepCopy());
notifyObservers(jobsSnapshot);
}
}
@ -176,7 +176,7 @@ public final class AutoIngestMonitor extends Observable implements PropertyChang
jobsSnapshot.removeRunningJob(job);
jobsSnapshot.addOrReplaceCompletedJob(job);
setChanged();
notifyObservers(jobsSnapshot.deepCopy());
notifyObservers(jobsSnapshot);
}
}
@ -207,7 +207,7 @@ public final class AutoIngestMonitor extends Observable implements PropertyChang
*/
JobsSnapshot getJobsSnapshot() {
synchronized (jobsLock) {
return jobsSnapshot.deepCopy();
return jobsSnapshot;
}
}
@ -221,7 +221,7 @@ public final class AutoIngestMonitor extends Observable implements PropertyChang
JobsSnapshot refreshJobsSnapshot() {
synchronized (jobsLock) {
jobsSnapshot = queryCoordinationService();
return jobsSnapshot.deepCopy();
return jobsSnapshot;
}
}
@ -323,7 +323,7 @@ public final class AutoIngestMonitor extends Observable implements PropertyChang
}).start();
}
return jobsSnapshot.deepCopy();
return jobsSnapshot;
}
}
@ -345,7 +345,7 @@ public final class AutoIngestMonitor extends Observable implements PropertyChang
synchronized (jobsLock) {
jobsSnapshot = queryCoordinationService();
setChanged();
notifyObservers(jobsSnapshot.deepCopy());
notifyObservers(jobsSnapshot);
}
}
}
@ -468,27 +468,8 @@ public final class AutoIngestMonitor extends Observable implements PropertyChang
jobSet.add(job);
}
/**
* Creates a deep copy of a jobs snapshot.
*
* @return The deep copy.
*/
private JobsSnapshot deepCopy() {
JobsSnapshot copy = new JobsSnapshot();
this.pendingJobs.forEach((job) -> {
this.addOrReplacePendingJob(new AutoIngestJob(job));
});
this.runningJobs.forEach((job) -> {
this.addOrReplacePendingJob(new AutoIngestJob(job));
});
this.completedJobs.forEach((job) -> {
this.addOrReplacePendingJob(new AutoIngestJob(job));
});
return copy;
}
}
/**
* Exception type thrown when there is an error completing an auto ingest
* monitor operation.