19 package org.sleuthkit.autopsy.centralrepository.datamodel;
22 import java.sql.Connection;
23 import java.sql.SQLException;
24 import java.sql.Statement;
25 import java.util.List;
27 import java.util.concurrent.locks.ReentrantReadWriteLock;
28 import java.util.logging.Level;
29 import org.apache.commons.dbcp2.BasicDataSource;
51 private final ReentrantReadWriteLock
rwLock =
new ReentrantReadWriteLock(
true);
61 if (instance == null) {
82 if (null != connectionPool) {
83 connectionPool.close();
84 connectionPool = null;
87 }
catch (SQLException ex) {
88 throw new EamDbException(
"Failed to close existing database connections.", ex);
102 synchronized (
this) {
116 Statement dropContent = conn.createStatement();
117 dropContent.executeUpdate(
"DELETE FROM organizations");
118 dropContent.executeUpdate(
"DELETE FROM cases");
119 dropContent.executeUpdate(
"DELETE FROM data_sources");
120 dropContent.executeUpdate(
"DELETE FROM reference_sets");
121 dropContent.executeUpdate(
"DELETE FROM artifact_types");
122 dropContent.executeUpdate(
"DELETE FROM db_info");
124 String instancesTemplate =
"DELETE FROM %s_instances";
125 String referencesTemplate =
"DELETE FROM global_files";
127 dropContent.executeUpdate(String.format(instancesTemplate, type.getDbTableName()));
130 dropContent.executeUpdate(String.format(referencesTemplate, type.getDbTableName()));
134 dropContent.executeUpdate(
"VACUUM");
135 }
catch (SQLException ex) {
136 LOGGER.log(Level.WARNING,
"Failed to reset database.", ex);
152 connectionPool =
new BasicDataSource();
153 connectionPool.setDriverClassName(dbSettings.
getDriver());
155 StringBuilder connectionURL =
new StringBuilder();
158 connectionURL.append(File.separator);
159 connectionURL.append(dbSettings.
getDbName());
161 connectionPool.setUrl(connectionURL.toString());
164 connectionPool.setInitialSize(50);
165 connectionPool.setMaxTotal(-1);
166 connectionPool.setMaxIdle(-1);
167 connectionPool.setMaxWaitMillis(1000);
180 synchronized (
this) {
182 throw new EamDbException(
"Central Repository module is not enabled");
185 if (connectionPool == null) {
190 return connectionPool.getConnection();
191 }
catch (SQLException ex) {
192 throw new EamDbException(
"Error getting connection from connection pool.", ex);
225 super.newDbInfo(name, value);
244 return super.getDbInfo(name);
262 super.updateDbInfo(name, value);
277 return super.newCase(autopsyCase);
294 super.newCase(eamCase);
309 super.updateCase(eamCase);
326 return super.getCaseByUUID(caseUUID);
341 return super.getCases();
356 super.newDataSource(eamDataSource);
388 return super.getDataSourceDetails(dataSourceDeviceId);
403 return super.getDataSources();
419 super.addArtifact(eamArtifact);
437 return super.getArtifactInstancesByTypeValue(aType, value);
458 return super.getArtifactInstancesByPath(aType, filePath);
478 return super.getCountArtifactInstancesByTypeValue(aType, value);
488 return super.getFrequencyPercentage(corAttr);
508 return super.getCountUniqueCaseDataSourceTuplesHavingTypeValue(aType, value);
519 return super.getCountUniqueDataSources();
540 return super.getCountArtifactInstancesByCaseDataSource(caseUUID, dataSourceID);
554 super.bulkInsertArtifacts();
567 super.bulkInsertCases(cases);
583 super.setArtifactInstanceKnownStatus(eamArtifact, knownStatus);
602 return super.getArtifactInstancesKnownBad(aType, value);
620 return super.getCountArtifactInstancesKnownBad(aType, value);
642 return super.getListCasesHavingArtifactInstancesKnownBad(aType, value);
660 return super.isArtifactlKnownBadByReference(aType, value);
677 super.newOrganization(eamOrg);
694 return super.getOrganizations();
713 return super.getOrganizationByID(orgID);
732 return super.newReferencelSet(eamGlobalSet);
751 return super.getReferenceSetByID(referenceSetID);
770 super.addReferenceInstance(eamGlobalFileInstance, correlationType);
785 super.bulkInsertReferenceTypeEntries(globalInstances, contentType);
805 return super.getReferenceInstancesByTypeValue(aType, aValue);
824 return super.newCorrelationType(newType);
843 return super.getDefinedCorrelationTypes();
862 return super.getEnabledCorrelationTypes();
881 return super.getSupportedCorrelationTypes();
898 super.updateCorrelationType(aType);
917 return super.getCorrelationTypeById(typeId);
929 rwLock.writeLock().lock();
938 rwLock.writeLock().unlock();
947 rwLock.readLock().lock();
956 rwLock.readLock().unlock();
List< CorrelationAttribute.Type > getSupportedCorrelationTypes()
final List< String > badTags
boolean insertDefaultDatabaseContent()
Long getCountUniqueCaseDataSourceTuplesHavingTypeValue(CorrelationAttribute.Type aType, String value)
String getDbInfo(String name)
List< String > getBadTags()
Long getCountUniqueDataSources()
void updateCorrelationType(CorrelationAttribute.Type aType)
List< EamOrganization > getOrganizations()
int getFrequencyPercentage(CorrelationAttribute corAttr)
CorrelationCase getCaseByUUID(String caseUUID)
static final int FILES_TYPE_ID
CorrelationAttribute.Type getCorrelationTypeById(int typeId)
Long getCountArtifactInstancesByCaseDataSource(String caseUUID, String dataSourceID)
CorrelationDataSource getDataSourceDetails(String dataSourceDeviceId)
void bulkInsertCases(List< CorrelationCase > cases)
Long getCountArtifactInstancesByTypeValue(CorrelationAttribute.Type aType, String value)
List< CorrelationAttributeInstance > getArtifactInstancesKnownBad(CorrelationAttribute.Type aType, String value)
int bulkArtifactsThreshold
void acquireExclusiveLock()
void setArtifactInstanceKnownStatus(CorrelationAttribute eamArtifact, TskData.FileKnown knownStatus)
String getValidationQuery()
final List< CorrelationAttribute.Type > DEFAULT_CORRELATION_TYPES
void addReferenceInstance(EamGlobalFileInstance eamGlobalFileInstance, CorrelationAttribute.Type correlationType)
EamGlobalSet getReferenceSetByID(int referenceSetID)
EamOrganization getOrganizationByID(int orgID)
void releaseExclusiveLock()
List< CorrelationAttributeInstance > getArtifactInstancesByTypeValue(CorrelationAttribute.Type aType, String value)
void updateCase(CorrelationCase eamCase)
static final Logger LOGGER
List< EamGlobalFileInstance > getReferenceInstancesByTypeValue(CorrelationAttribute.Type aType, String aValue)
void setupConnectionPool()
void addArtifact(CorrelationAttribute eamArtifact)
void newCase(CorrelationCase eamCase)
final SqliteEamDbSettings dbSettings
static void closeConnection(Connection conn)
static SqliteEamDb instance
List< String > getBadTags()
BasicDataSource connectionPool
void newDataSource(CorrelationDataSource eamDataSource)
final ReentrantReadWriteLock rwLock
int newReferencelSet(EamGlobalSet eamGlobalSet)
void bulkInsertArtifacts()
List< CorrelationAttribute.Type > getEnabledCorrelationTypes()
void shutdownConnections()
static boolean isEnabled()
void bulkInsertReferenceTypeEntries(Set< EamGlobalFileInstance > globalInstances, CorrelationAttribute.Type contentType)
boolean isArtifactlKnownBadByReference(CorrelationAttribute.Type aType, String value)
void updateDbInfo(String name, String value)
List< String > getListCasesHavingArtifactInstancesKnownBad(CorrelationAttribute.Type aType, String value)
void newDbInfo(String name, String value)
Long getCountArtifactInstancesKnownBad(CorrelationAttribute.Type aType, String value)
List< CorrelationAttributeInstance > getArtifactInstancesByPath(CorrelationAttribute.Type aType, String filePath)
void newOrganization(EamOrganization eamOrg)
synchronized static Logger getLogger(String name)
List< CorrelationAttribute.Type > getDefinedCorrelationTypes()
void setBadTags(List< String > badTags)
static synchronized SqliteEamDb getInstance()
List< CorrelationCase > getCases()
String getConflictClause()
int newCorrelationType(CorrelationAttribute.Type newType)
List< CorrelationDataSource > getDataSources()
CorrelationCase newCase(Case autopsyCase)
void setBadTags(List< String > badTags)