diff --git a/bindings/java/src/org/sleuthkit/datamodel/SleuthkitCase.java b/bindings/java/src/org/sleuthkit/datamodel/SleuthkitCase.java index 3f7ad417bcd6bc9908b30d81c26768222ce78565..69d98bd4400ac9a83b721616b506a1d96f34440f 100644 --- a/bindings/java/src/org/sleuthkit/datamodel/SleuthkitCase.java +++ b/bindings/java/src/org/sleuthkit/datamodel/SleuthkitCase.java @@ -9593,7 +9593,7 @@ public List<TagName> getAllTagNames() throws TskCoreException { resultSet = connection.executeQuery(statement); ArrayList<TagName> tagNames = new ArrayList<>(); while (resultSet.next()) { - tagNames.add(new TagName(this, resultSet.getLong("tag_name_id"), resultSet.getString("display_name"), + tagNames.add(new TagName(resultSet.getLong("tag_name_id"), resultSet.getString("display_name"), resultSet.getString("description"), TagName.HTML_COLOR.getColorByName(resultSet.getString("color")), TskData.FileKnown.valueOf(resultSet.getByte("knownStatus")), resultSet.getLong("tag_set_id"), resultSet.getInt("rank"))); //NON-NLS } @@ -9627,7 +9627,7 @@ public List<TagName> getTagNamesInUse() throws TskCoreException { resultSet = connection.executeQuery(statement); ArrayList<TagName> tagNames = new ArrayList<>(); while (resultSet.next()) { - tagNames.add(new TagName(this, resultSet.getLong("tag_name_id"), resultSet.getString("display_name"), + tagNames.add(new TagName(resultSet.getLong("tag_name_id"), resultSet.getString("display_name"), resultSet.getString("description"), TagName.HTML_COLOR.getColorByName(resultSet.getString("color")), TskData.FileKnown.valueOf(resultSet.getByte("knownStatus")), resultSet.getLong("tag_set_id"), resultSet.getInt("rank"))); //NON-NLS } @@ -9671,7 +9671,7 @@ public List<TagName> getTagNamesInUse(long dsObjId) throws TskCoreException { statement.setLong(2, dsObjId); resultSet = connection.executeQuery(statement); //NON-NLS while (resultSet.next()) { - tagNames.add(new TagName(this, resultSet.getLong("tag_name_id"), resultSet.getString("display_name"), + tagNames.add(new TagName(resultSet.getLong("tag_name_id"), resultSet.getString("display_name"), resultSet.getString("description"), TagName.HTML_COLOR.getColorByName(resultSet.getString("color")), TskData.FileKnown.valueOf(resultSet.getByte("knownStatus")), resultSet.getLong("tag_set_id"), resultSet.getInt("rank"))); //NON-NLS } @@ -9746,8 +9746,8 @@ public TagName addOrUpdateTagName(String displayName, String description, TagNam resultSet = connection.executeQuery(statement); resultSet.next(); - return new TagName(this, tagId, - displayName, description, color, knownStatus, resultSet.getLong("tag_set_id"), resultSet.getInt("rank")); + return new TagName(tagId, displayName, description, color, knownStatus, resultSet.getLong("tag_set_id"), resultSet.getInt("rank")); + } catch (SQLException ex) { throw new TskCoreException("Error adding row for " + displayName + " tag name to tag_names table", ex); } finally { @@ -9819,7 +9819,7 @@ public List<ContentTag> getAllContentTags() throws TskCoreException { resultSet = connection.executeQuery(statement); ArrayList<ContentTag> tags = new ArrayList<ContentTag>(); while (resultSet.next()) { - TagName tagName = new TagName(this, resultSet.getLong("tag_name_id"), resultSet.getString("display_name"), + TagName tagName = new TagName(resultSet.getLong("tag_name_id"), resultSet.getString("display_name"), resultSet.getString("description"), TagName.HTML_COLOR.getColorByName(resultSet.getString("color")), TskData.FileKnown.valueOf(resultSet.getByte("knownStatus")), resultSet.getLong("tag_set_id"), resultSet.getInt("rank")); //NON-NLS Content content = getContentById(resultSet.getLong("obj_id")); //NON-NLS @@ -9949,7 +9949,7 @@ public ContentTag getContentTagByID(long contentTagID) throws TskCoreException { resultSet = connection.executeQuery(statement); while (resultSet.next()) { - TagName tagName = new TagName(this, resultSet.getLong("tag_name_id"), resultSet.getString("display_name"), + TagName tagName = new TagName(resultSet.getLong("tag_name_id"), resultSet.getString("display_name"), resultSet.getString("description"), TagName.HTML_COLOR.getColorByName(resultSet.getString("color")), TskData.FileKnown.valueOf(resultSet.getByte("knownStatus")), resultSet.getLong("tag_set_id"), resultSet.getInt("rank")); tag = new ContentTag(resultSet.getLong("tag_id"), getContentById(resultSet.getLong("obj_id")), tagName, @@ -10085,7 +10085,7 @@ public List<ContentTag> getContentTagsByContent(Content content) throws TskCoreE resultSet = connection.executeQuery(statement); ArrayList<ContentTag> tags = new ArrayList<ContentTag>(); while (resultSet.next()) { - TagName tagName = new TagName(this, resultSet.getLong("tag_name_id"), resultSet.getString("display_name"), + TagName tagName = new TagName(resultSet.getLong("tag_name_id"), resultSet.getString("display_name"), resultSet.getString("description"), TagName.HTML_COLOR.getColorByName(resultSet.getString("color")), TskData.FileKnown.valueOf(resultSet.getByte("knownStatus")), resultSet.getLong("tag_set_id"), resultSet.getInt("rank")); //NON-NLS ContentTag tag = new ContentTag(resultSet.getLong("tag_id"), content, tagName, @@ -10165,7 +10165,7 @@ public List<BlackboardArtifactTag> getAllBlackboardArtifactTags() throws TskCore resultSet = connection.executeQuery(statement); ArrayList<BlackboardArtifactTag> tags = new ArrayList<>(); while (resultSet.next()) { - TagName tagName = new TagName(this, resultSet.getLong("tag_name_id"), resultSet.getString("display_name"), + TagName tagName = new TagName(resultSet.getLong("tag_name_id"), resultSet.getString("display_name"), resultSet.getString("description"), TagName.HTML_COLOR.getColorByName(resultSet.getString("color")), TskData.FileKnown.valueOf(resultSet.getByte("knownStatus")), resultSet.getLong("tag_set_id"), resultSet.getInt("rank")); //NON-NLS BlackboardArtifact artifact = getBlackboardArtifact(resultSet.getLong("artifact_id")); //NON-NLS @@ -10395,7 +10395,7 @@ public BlackboardArtifactTag getBlackboardArtifactTagByID(long artifactTagID) th resultSet = connection.executeQuery(statement); while (resultSet.next()) { - TagName tagName = new TagName(this, resultSet.getLong("tag_name_id"), resultSet.getString("display_name"), + TagName tagName = new TagName(resultSet.getLong("tag_name_id"), resultSet.getString("display_name"), resultSet.getString("description"), TagName.HTML_COLOR.getColorByName(resultSet.getString("color")), TskData.FileKnown.valueOf(resultSet.getByte("knownStatus")), resultSet.getLong("tag_set_id"), resultSet.getInt("rank")); BlackboardArtifact artifact = getBlackboardArtifact(resultSet.getLong("artifact_id")); //NON-NLS @@ -10443,7 +10443,7 @@ public List<BlackboardArtifactTag> getBlackboardArtifactTagsByArtifact(Blackboar resultSet = connection.executeQuery(statement); ArrayList<BlackboardArtifactTag> tags = new ArrayList<>(); while (resultSet.next()) { - TagName tagName = new TagName(this, resultSet.getLong("tag_name_id"), resultSet.getString("display_name"), + TagName tagName = new TagName(resultSet.getLong("tag_name_id"), resultSet.getString("display_name"), resultSet.getString("description"), TagName.HTML_COLOR.getColorByName(resultSet.getString("color")), TskData.FileKnown.valueOf(resultSet.getByte("knownStatus")), resultSet.getLong("tag_set_id"), resultSet.getInt("rank")); //NON-NLS Content content = getContentById(artifact.getObjectID()); diff --git a/bindings/java/src/org/sleuthkit/datamodel/TagName.java b/bindings/java/src/org/sleuthkit/datamodel/TagName.java index 131073bf5f44245861df7f8bdd36f18de86120e7..c514db5ff92fb1a3138bb798faa3272613836a0a 100644 --- a/bindings/java/src/org/sleuthkit/datamodel/TagName.java +++ b/bindings/java/src/org/sleuthkit/datamodel/TagName.java @@ -1,7 +1,7 @@ /* * Sleuth Kit Data Model * - * Copyright 2011-2018 Basis Technology Corp. + * Copyright 2013-2020 Basis Technology Corp. * Contact: carrier <at> sleuthkit <dot> org * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -20,7 +20,6 @@ import java.io.Serializable; import java.util.HashMap; -import java.util.List; import java.util.Objects; /** @@ -89,10 +88,9 @@ public static HTML_COLOR getColorByName(String colorName) { private final TskData.FileKnown knownStatus; private final long tagSetId; private final int rank; - private final SleuthkitCase skCase; // Clients of the org.sleuthkit.datamodel package should not directly create these objects. - TagName(SleuthkitCase sleuthkitCase, long id, String displayName, String description, HTML_COLOR color, TskData.FileKnown knownStatus, long tagSetId, int rank) { + TagName(long id, String displayName, String description, HTML_COLOR color, TskData.FileKnown knownStatus, long tagSetId, int rank) { this.id = id; this.displayName = displayName; this.description = description; @@ -100,7 +98,6 @@ public static HTML_COLOR getColorByName(String colorName) { this.knownStatus = knownStatus; this.tagSetId = tagSetId; this.rank = rank; - this.skCase = sleuthkitCase; } public long getId() { @@ -131,27 +128,6 @@ public int getRank() { return rank; } - /** - * Returns the TagName TagSet object. - * - * @return TagName TagSet object or null if the TagName is not a part of a - * TagSet. - * - * @throws TskCoreException - */ - public TagSet getTagSet() throws TskCoreException { - if (tagSetId != 0) { - List<TagSet> tagSets = skCase.getTaggingManager().getTagSets(); - for (TagSet set : tagSets) { - if (tagSetId == set.getId()) { - return set; - } - } - } - - return null; - } - /** * Compares two TagName objects by comparing their display names. * @@ -185,11 +161,11 @@ public boolean equals(Object obj) { return false; } final TagName other = (TagName) obj; - return (this.id == other.id - && Objects.equals(this.displayName, other.displayName) - && Objects.equals(this.description, other.description) - && Objects.equals(this.color, other.color) - && Objects.equals(this.knownStatus, other.knownStatus) - && this.tagSetId == other.tagSetId); + return (this.id == other.getId() + && Objects.equals(this.displayName, other.getDisplayName()) + && Objects.equals(this.description, other.getDescription()) + && Objects.equals(this.color, other.getColor()) + && Objects.equals(this.knownStatus, other.getKnownStatus()) + && this.tagSetId == other.getTagSetId()); } } diff --git a/bindings/java/src/org/sleuthkit/datamodel/TaggingManager.java b/bindings/java/src/org/sleuthkit/datamodel/TaggingManager.java index 97e8b7b4b7a42e1d4b963e9c234104a3f25c3c95..b4e8803e03905dc8d903c168c329d7bdb60d6da3 100755 --- a/bindings/java/src/org/sleuthkit/datamodel/TaggingManager.java +++ b/bindings/java/src/org/sleuthkit/datamodel/TaggingManager.java @@ -112,7 +112,7 @@ public TagSet addTagSet(String name, List<TagName> tagNames) throws TskCoreExcep for (int index = 0; index < tagNames.size(); index++) { TagName tagName = tagNames.get(index); stmt.executeUpdate(String.format("UPDATE tag_names SET tag_set_id = %d, rank = %d WHERE tag_name_id = %d", setID, index, tagName.getId())); - updatedTags.add(new TagName(skCase, tagName.getId(), + updatedTags.add(new TagName(tagName.getId(), tagName.getDisplayName(), tagName.getDescription(), tagName.getColor(), @@ -173,6 +173,43 @@ public void deleteTagSet(TagSet tagSet) throws TskCoreException { } } + /** + * Gets the tag set a tag name (tag definition) belongs to, if any. + * + * @param tagName The tag name. + * + * @return A TagSet object or null. + * + * @throws TskCoreException If there is an error querying the case database. + */ + public TagSet getTagSetForTagName(TagName tagName) throws TskCoreException { + if (tagName == null || tagName == null) { + throw new IllegalArgumentException("Null tagName argument"); + } + + if (tagName.getTagSetId() <= 0) { + return null; + } + + CaseDbConnection connection = skCase.getConnection(); + skCase.acquireSingleUserCaseReadLock(); + TagSet tagSet = null; + String sqlQuery = String.format("SELECT * FROM tsk_tag_sets WHERE tag_set_id = %d", tagName.getTagSetId()); + try (Statement stmt = connection.createStatement(); ResultSet resultSet = stmt.executeQuery(sqlQuery);) { + if (resultSet.next()) { + int setID = resultSet.getInt("tag_set_id"); + String setName = resultSet.getString("name"); + tagSet = new TagSet(setID, setName, getTagNamesByTagSetID(setID)); + } + return tagSet; + } catch (SQLException ex) { + throw new TskCoreException(String.format("Error occurred getting TagSet for TagName '%s' (ID=%d)", tagName.getDisplayName(), tagName.getId()), ex); + } finally { + connection.close(); + skCase.releaseSingleUserCaseReadLock(); + } + } + /** * Inserts a row into the blackboard_artifact_tags table in the case * database. @@ -208,7 +245,6 @@ public BlackboardArtifactTagChange addArtifactTag(BlackboardArtifact artifact, T try (Statement stmt = connection.createStatement(); ResultSet resultSet = stmt.executeQuery(selectQuery)) { while (resultSet.next()) { TagName removedTag = new TagName( - skCase, resultSet.getLong("tag_name_id"), resultSet.getString("display_name"), resultSet.getString("description"), @@ -305,7 +341,6 @@ public ContentTagChange addContentTag(Content content, TagName tagName, String c try (Statement stmt = connection.createStatement(); ResultSet resultSet = stmt.executeQuery(selectQuery)) { while (resultSet.next()) { TagName removedTag = new TagName( - skCase, resultSet.getLong("tag_name_id"), resultSet.getString("display_name"), resultSet.getString("description"), @@ -438,7 +473,7 @@ private List<TagName> getTagNamesByTagSetID(int tagSetId) throws TskCoreExceptio String query = String.format("SELECT * FROM tag_names WHERE tag_set_id = %d", tagSetId); try (Statement stmt = connection.createStatement(); ResultSet resultSet = stmt.executeQuery(query)) { while (resultSet.next()) { - tagNameList.add(new TagName(skCase, resultSet.getLong("tag_name_id"), + tagNameList.add(new TagName(resultSet.getLong("tag_name_id"), resultSet.getString("display_name"), resultSet.getString("description"), TagName.HTML_COLOR.getColorByName(resultSet.getString("color")),