Autopsy 4.22.1
Graphical digital forensics platform for The Sleuth Kit and other tools.
Route.java
Go to the documentation of this file.
1/*
2 *
3 * Autopsy Forensic Browser
4 *
5 * Copyright 2019-2020 Basis Technology Corp.
6 * contact: carrier <at> sleuthkit <dot> org
7 *
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
11 *
12 * http://www.apache.org/licenses/LICENSE-2.0
13 *
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 */
20package org.sleuthkit.autopsy.geolocation.datamodel;
21
22import java.util.Collections;
23import java.util.HashMap;
24import java.util.List;
25import java.util.Map;
26import org.openide.util.NbBundle.Messages;
27import org.sleuthkit.datamodel.BlackboardArtifact;
28import org.sleuthkit.datamodel.BlackboardAttribute;
29import org.sleuthkit.datamodel.blackboardutils.attributes.BlackboardJsonAttrUtil;
30import org.sleuthkit.datamodel.blackboardutils.attributes.BlackboardJsonAttrUtil.InvalidJsonException;
31import org.sleuthkit.datamodel.blackboardutils.attributes.GeoWaypoints;
32
39public class Route extends GeoPath {
40
41 private final Long timestamp;
42
43 // This list is not expected to change after construction so the
44 // constructor will take care of creating an unmodifiable List
45 private final List<Waypoint.Property> propertiesList;
46
52 @Messages({
53 // This is the original static hardcoded label from the
54 // original kml-report code
55 "Route_Label=As-the-crow-flies Route"
56 })
57 Route(BlackboardArtifact artifact) throws GeoLocationDataException {
58 super(artifact, Bundle.Route_Label());
59
60 Map<BlackboardAttribute.ATTRIBUTE_TYPE, BlackboardAttribute> attributeMap = Waypoint.getAttributesFromArtifactAsMap(artifact);
61
62 BlackboardAttribute attribute = attributeMap.get(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DATETIME);
63 timestamp = attribute != null ? attribute.getValueLong() : null;
64
65 propertiesList = Waypoint.createGeolocationProperties(attributeMap);
66
67 createRoute(artifact, attributeMap);
68 }
69
75 public List<Waypoint> getRoute() {
76 return getPath();
77 }
78
86 return Collections.unmodifiableList(propertiesList);
87 }
88
94 public Long getTimestamp() {
95 return timestamp;
96 }
97
107 @Messages({
108 "Route_point_label=Waypoints for route"
109 })
110 private void createRoute(BlackboardArtifact artifact, Map<BlackboardAttribute.ATTRIBUTE_TYPE, BlackboardAttribute> attributeMap) throws GeoLocationDataException {
111 BlackboardAttribute attribute = attributeMap.get(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_GEO_WAYPOINTS);
112
113 String label = getLabel();
114 if (label == null || label.isEmpty()) {
115 label = Bundle.Route_point_label();
116 } else {
117 label = String.format("%s: %s", Bundle.Route_point_label(), label);
118 }
119
120 if (attribute != null) {
121 GeoWaypoints waypoints;
122 try {
123 waypoints = BlackboardJsonAttrUtil.fromAttribute(attribute, GeoWaypoints.class);
124 } catch (InvalidJsonException ex) {
125 throw new GeoLocationDataException(String.format("Unable to parse waypoints in TSK_GEO_WAYPOINTS attribute (artifact object ID =%d)", artifact.getId()), ex);
126 }
127 for (GeoWaypoints.Waypoint waypoint : waypoints) {
128 String name = waypoint.getName();
129 Map<BlackboardAttribute.ATTRIBUTE_TYPE, BlackboardAttribute> map = attributeMap;
130 if(name != null && !name.isEmpty()) {
131 BlackboardAttribute pointNameAtt = new BlackboardAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_LOCATION, "", name);
132 map = new HashMap<>(attributeMap);
133 map.put(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_LOCATION, pointNameAtt);
134 }
135 addToPath(new Waypoint(artifact, label, timestamp, waypoint.getLatitude(), waypoint.getLongitude(), waypoint.getAltitude(), null, map, this));
136 }
137 } else {
138 Waypoint start = getRouteStartPoint(artifact, attributeMap);
139 Waypoint end = getRouteEndPoint(artifact, attributeMap);
140
141 addToPath(start);
142 addToPath(end);
143 }
144 }
145
158 @Messages({
159 "Route_Start_Label=Start"
160 })
161
162 private Waypoint getRouteStartPoint(BlackboardArtifact artifact, Map<BlackboardAttribute.ATTRIBUTE_TYPE, BlackboardAttribute> attributeMap) throws GeoLocationDataException {
163 BlackboardAttribute latitude = attributeMap.get(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_GEO_LATITUDE_START);
164 BlackboardAttribute longitude = attributeMap.get(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_GEO_LONGITUDE_START);
165 BlackboardAttribute altitude = attributeMap.get(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_GEO_ALTITUDE);
166
167 if (latitude != null && longitude != null) {
168 return new Waypoint(artifact,
169 Bundle.Route_Start_Label(),
170 timestamp,
171 latitude.getValueDouble(),
172 longitude.getValueDouble(),
173 altitude != null ? altitude.getValueDouble() : null,
174 null,
175 attributeMap, this);
176 } else {
177 throw new GeoLocationDataException("Unable to create route start point, invalid longitude and/or latitude");
178 }
179 }
180
193 @Messages({
194 "Route_End_Label=End"
195 })
196 private Waypoint getRouteEndPoint(BlackboardArtifact artifact, Map<BlackboardAttribute.ATTRIBUTE_TYPE, BlackboardAttribute> attributeMap) throws GeoLocationDataException {
197 BlackboardAttribute latitude = attributeMap.get(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_GEO_LATITUDE_END);
198 BlackboardAttribute longitude = attributeMap.get(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_GEO_LONGITUDE_END);
199 BlackboardAttribute altitude = attributeMap.get(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_GEO_ALTITUDE);
200
201 if (latitude != null && longitude != null) {
202
203 return new Waypoint(artifact,
204 Bundle.Route_End_Label(),
205 timestamp,
206 latitude.getValueDouble(),
207 longitude.getValueDouble(),
208 altitude != null ? altitude.getValueDouble() : null,
209 null,
210 attributeMap,
211 this);
212 } else {
213 throw new GeoLocationDataException("Unable to create route end point, invalid longitude and/or latitude");
214 }
215 }
216}
Waypoint getRouteStartPoint(BlackboardArtifact artifact, Map< BlackboardAttribute.ATTRIBUTE_TYPE, BlackboardAttribute > attributeMap)
Definition Route.java:162
Waypoint getRouteEndPoint(BlackboardArtifact artifact, Map< BlackboardAttribute.ATTRIBUTE_TYPE, BlackboardAttribute > attributeMap)
Definition Route.java:196
final List< Waypoint.Property > propertiesList
Definition Route.java:45
void createRoute(BlackboardArtifact artifact, Map< BlackboardAttribute.ATTRIBUTE_TYPE, BlackboardAttribute > attributeMap)
Definition Route.java:110
List< Waypoint.Property > getOtherProperties()
Definition Route.java:85

Copyright © 2012-2024 Sleuth Kit Labs. Generated on:
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.