diff --git a/bindings/java/src/org/sleuthkit/datamodel/AccountFileInstance.java b/bindings/java/src/org/sleuthkit/datamodel/AccountFileInstance.java index 2c4ea7c078bed4726c2b57db09b86140fda7bcb7..6552269112f007d2faecc266167c68f362e77976 100644 --- a/bindings/java/src/org/sleuthkit/datamodel/AccountFileInstance.java +++ b/bindings/java/src/org/sleuthkit/datamodel/AccountFileInstance.java @@ -103,7 +103,7 @@ public Content getFile() throws TskCoreException { * * @return A Data Source Object ID */ - long getDataSourceObjectID() { + Long getDataSourceObjectID() { return artifact.getDataSourceObjectID(); } } diff --git a/bindings/java/src/org/sleuthkit/datamodel/AggregateScoresChangedEvent.java b/bindings/java/src/org/sleuthkit/datamodel/AggregateScoresChangedEvent.java index d60ac44a0e6cf3c0e5711244d36fe18cf52f750f..2165989c9d7a08b355394953d6777eddf34db3c9 100644 --- a/bindings/java/src/org/sleuthkit/datamodel/AggregateScoresChangedEvent.java +++ b/bindings/java/src/org/sleuthkit/datamodel/AggregateScoresChangedEvent.java @@ -34,7 +34,7 @@ final public class AggregateScoresChangedEvent implements TskDataSourceEvent, Ts // ensure that all score changes have the same data source as the one in the event. scoreChanges.stream() .forEach(chg -> { - if (chg.getDataSourceObjectId() != dataSourceId) { + if (!chg.getDataSourceObjectId().equals(dataSourceId)) { throw new IllegalArgumentException("ScoreChange datasource id does not match the datasource id of the event."); } }); diff --git a/bindings/java/src/org/sleuthkit/datamodel/BlackboardArtifact.java b/bindings/java/src/org/sleuthkit/datamodel/BlackboardArtifact.java index b1c0f10c05147111e039f91c467e3069460fcb66..88bdd806bb5b79b7cf733bed203a5b7c3d72fb21 100644 --- a/bindings/java/src/org/sleuthkit/datamodel/BlackboardArtifact.java +++ b/bindings/java/src/org/sleuthkit/datamodel/BlackboardArtifact.java @@ -54,7 +54,7 @@ public class BlackboardArtifact implements Content { private final long artifactId; private final long sourceObjId; // refers to objID of parent/source object private final long artifactObjId; // objId of the artifact in tsk_objects. TBD: replace artifactID with this - private final long dataSourceObjId; // objId of the data source in tsk_objects. + private final Long dataSourceObjId; // objId of the data source in tsk_objects. private final int artifactTypeId; private final String artifactTypeName; private final String displayName; @@ -856,7 +856,7 @@ public String getName() { @Override public Content getDataSource() throws TskCoreException { - return getSleuthkitCase().getContentById(dataSourceObjId); + return dataSourceObjId != null ? getSleuthkitCase().getContentById(dataSourceObjId) : null; } /** diff --git a/bindings/java/src/org/sleuthkit/datamodel/BlackboardAttribute.java b/bindings/java/src/org/sleuthkit/datamodel/BlackboardAttribute.java index 82033ba71a8b59c2f4c519118a684aaa8e22fb50..7f3ecbf56f5b12d8aa71745eb1f7a8e524c32c9f 100755 --- a/bindings/java/src/org/sleuthkit/datamodel/BlackboardAttribute.java +++ b/bindings/java/src/org/sleuthkit/datamodel/BlackboardAttribute.java @@ -1,7 +1,7 @@ /* * Sleuth Kit Data Model * - * Copyright 2011-2020 Basis Technology Corp. + * Copyright 2011-2021 Basis Technology Corp. * Contact: carrier <at> sleuthkit <dot> org * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -343,6 +343,7 @@ public String toString() { * * @return The value as a string. */ + @Override public String getDisplayString() { switch (getAttributeType().getValueType()) { case DATETIME: { @@ -351,7 +352,7 @@ public String getDisplayString() { BlackboardArtifact parent = getParentArtifact(); parentDataSourceID = parent.getDataSourceObjectID(); } - final Content dataSource = getCaseDatabase().getContentById(parentDataSourceID); + final Content dataSource = parentDataSourceID != null ? getCaseDatabase().getContentById(parentDataSourceID) : null; if ((dataSource != null) && (dataSource instanceof Image)) { // return the date/time string in the timezone associated with the datasource, Image image = (Image) dataSource; @@ -404,7 +405,7 @@ public String getDisplayString() { * * @param parentDataSourceID The parent data source id. */ - void setParentDataSourceID(long parentDataSourceID) { + void setParentDataSourceID(Long parentDataSourceID) { this.parentDataSourceID = parentDataSourceID; } diff --git a/bindings/java/src/org/sleuthkit/datamodel/CommunicationsManager.java b/bindings/java/src/org/sleuthkit/datamodel/CommunicationsManager.java index 476f823cf755b8d7d01d32490566c20ce7782d8b..2e54a3d48d45ff324d15ad536731b8d503564e06 100644 --- a/bindings/java/src/org/sleuthkit/datamodel/CommunicationsManager.java +++ b/bindings/java/src/org/sleuthkit/datamodel/CommunicationsManager.java @@ -355,6 +355,10 @@ public Account getAccount(org.sleuthkit.datamodel.Account.Type accountType, Stri public void addRelationships(AccountFileInstance sender, List<AccountFileInstance> recipients, BlackboardArtifact sourceArtifact, org.sleuthkit.datamodel.Relationship.Type relationshipType, long dateTime) throws TskCoreException, TskDataException { + if(sourceArtifact.getDataSourceObjectID() == null) { + throw new TskDataException("Source Artifact does not have a valid data source."); + } + if (relationshipType.isCreatableFrom(sourceArtifact) == false) { throw new TskDataException("Can not make a " + relationshipType.getDisplayName() + " relationship from a" + sourceArtifact.getDisplayName()); @@ -370,7 +374,7 @@ public void addRelationships(AccountFileInstance sender, List<AccountFileInstanc if (null != sender) { accountIDs.add(sender.getAccount().getAccountID()); - if (sender.getDataSourceObjectID() != sourceArtifact.getDataSourceObjectID()) { + if (!sender.getDataSourceObjectID().equals(sourceArtifact.getDataSourceObjectID())) { throw new TskDataException("Sender and relationship are from different data sources :" + "Sender source ID" + sender.getDataSourceObjectID() + " != relationship source ID" + sourceArtifact.getDataSourceObjectID()); } @@ -378,7 +382,7 @@ public void addRelationships(AccountFileInstance sender, List<AccountFileInstanc for (AccountFileInstance recipient : recipients) { accountIDs.add(recipient.getAccount().getAccountID()); - if (recipient.getDataSourceObjectID() != sourceArtifact.getDataSourceObjectID()) { + if (!recipient.getDataSourceObjectID().equals(sourceArtifact.getDataSourceObjectID())) { throw new TskDataException("Recipient and relationship are from different data sources :" + "Recipient source ID" + recipient.getDataSourceObjectID() + " != relationship source ID" + sourceArtifact.getDataSourceObjectID()); } diff --git a/bindings/java/src/org/sleuthkit/datamodel/ScoreChange.java b/bindings/java/src/org/sleuthkit/datamodel/ScoreChange.java index f22142a6d65f71edd3025436f0de5f8636597c48..cf051b71dd02b7fef7840e4864eb37c8addee96c 100644 --- a/bindings/java/src/org/sleuthkit/datamodel/ScoreChange.java +++ b/bindings/java/src/org/sleuthkit/datamodel/ScoreChange.java @@ -1,7 +1,7 @@ /* * Sleuth Kit Data Model * - * Copyright 2020 Basis Technology Corp. + * Copyright 2020-2021 Basis Technology Corp. * Contact: carrier <at> sleuthkit <dot> org * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -18,24 +18,26 @@ */ package org.sleuthkit.datamodel; +import java.util.Optional; + /** * This class encapsulates a score change. */ final public class ScoreChange { private final long objId; - private final long dataSourceObjectId; + private final Long dataSourceObjectId; private final Score oldScore; private final Score newScore; - ScoreChange(long objId, long dataSourceObjectId, Score oldScore, Score newScore) { + ScoreChange(long objId, Long dataSourceObjectId, Score oldScore, Score newScore) { this.objId = objId; this.dataSourceObjectId = dataSourceObjectId; this.oldScore = oldScore; this.newScore = newScore; } - public long getDataSourceObjectId() { + public Long getDataSourceObjectId() { return dataSourceObjectId; } diff --git a/bindings/java/src/org/sleuthkit/datamodel/TimelineManager.java b/bindings/java/src/org/sleuthkit/datamodel/TimelineManager.java index 57b05c05b03156459afd8da08af73facefd99fcf..0669e5ba890dc85b8d809bfbf4c798d84f90f658 100644 --- a/bindings/java/src/org/sleuthkit/datamodel/TimelineManager.java +++ b/bindings/java/src/org/sleuthkit/datamodel/TimelineManager.java @@ -814,7 +814,12 @@ private Optional<TimelineEvent> addArtifactEvent(TimelineEventDescriptionWithTim String shortDescription = eventPayload.getDescription(TimelineLevelOfDetail.LOW); long artifactID = artifact.getArtifactID(); long fileObjId = artifact.getObjectID(); - long dataSourceObjectID = artifact.getDataSourceObjectID(); + Long dataSourceObjectID = artifact.getDataSourceObjectID(); + + if(dataSourceObjectID == null) { + logger.log(Level.SEVERE, String.format("Failed to create timeline event for artifact (%d), artifact data source was null"), artifact.getId()); + return Optional.empty(); + } AbstractFile file = caseDB.getAbstractFileById(fileObjId); boolean hasHashHits = false;