Autopsy 4.22.1
Graphical digital forensics platform for The Sleuth Kit and other tools.
OutputResults.java
Go to the documentation of this file.
1/*
2 * Autopsy Forensic Browser
3 *
4 * Copyright 2020 Basis Technology Corp.
5 * Contact: carrier <at> sleuthkit <dot> org
6 *
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 */
19package org.sleuthkit.autopsy.integrationtesting;
20
21import java.io.File;
22import java.io.FileWriter;
23import java.io.IOException;
24import java.nio.file.Path;
25import java.nio.file.Paths;
26import java.util.Collections;
27import java.util.HashMap;
28import java.util.Map;
29import java.util.Set;
30import java.util.function.Supplier;
31import java.util.logging.Level;
32import org.sleuthkit.autopsy.coreutils.Logger;
33import org.sleuthkit.autopsy.casemodule.Case;
34import org.yaml.snakeyaml.DumperOptions;
35import org.yaml.snakeyaml.Yaml;
36import org.yaml.snakeyaml.introspector.Property;
37import org.yaml.snakeyaml.nodes.MappingNode;
38import org.yaml.snakeyaml.nodes.Tag;
39import org.yaml.snakeyaml.representer.Representer;
40
44class OutputResults {
45 private static final Logger logger = Logger.getLogger(IntegrationTestService.class.getName());
46
57 private static <K, V> V getOrCreate(Map<K, V> map, K key, Supplier<V> onNotPresent) {
58 V curValue = map.get(key);
59 if (curValue == null) {
60 curValue = onNotPresent.get();
61 map.put(key, curValue);
62 }
63 return curValue;
64 }
65
69 private final Map<String, Map<String, Map<String, Object>>> data = new HashMap<>();
70
79 void addResult(String pkgName, String className, String methodName, Object result) {
80 Map<String, Map<String, Object>> packageClasses = getOrCreate(data, pkgName, () -> new HashMap<>());
81 Map<String, Object> classMethods = getOrCreate(packageClasses, className, () -> new HashMap<>());
82 Object toWrite = result instanceof Throwable ? new ExceptionObject((Throwable) result) : result;
83 classMethods.put(methodName, toWrite);
84 }
85
89 Object getSerializableData() {
90 return Collections.unmodifiableMap(data);
91 }
92
99 private String getCaseTypeId(Case.CaseType caseType) {
100 if (caseType == null) {
101 return "";
102 }
103
104 switch (caseType) {
105 case SINGLE_USER_CASE:
106 return "singleUser";
107 case MULTI_USER_CASE:
108 return "multiUser";
109 default:
110 throw new IllegalArgumentException("Unknown case type: " + caseType);
111 }
112 }
113
117 private static final Representer MAP_REPRESENTER = new Representer(new DumperOptions()) {
118 @Override
119 protected MappingNode representJavaBean(Set<Property> properties, Object javaBean) {
120 // don't show class name in yaml
121 if (!classTags.containsKey(javaBean.getClass())) {
122 addClassTag(javaBean.getClass(), Tag.MAP);
123 }
124
125 return super.representJavaBean(properties, javaBean);
126 }
127 };
128
132 private static final DumperOptions DUMPER_OPTS = new DumperOptions() {
133 {
134 // Show each property on a new line.
135 setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
136 // allow for serializing properties that only have getters.
137 setAllowReadOnlyProperties(true);
138 }
139 };
140
144 private static final Yaml YAML_SERIALIZER = new Yaml(MAP_REPRESENTER, DUMPER_OPTS);
145
153 public void serializeToFile(String outputFolder, String caseName, Case.CaseType caseType) {
154 serializeToFile(getSerializationPath(outputFolder, caseName, caseType));
155 }
156
157 private String getSerializationPath(String outputFolder, String caseName, Case.CaseType caseType) {
158 String outputExtension = ".yml";
159 Path outputPath = Paths.get(outputFolder, String.format("%s-%s%s", caseName, getCaseTypeId(caseType), outputExtension));
160 return outputPath.toString();
161 }
162
168 void serializeToFile(String outputPath) {
169 File outputFile = new File(outputPath);
170
171 if (!outputFile.getParentFile().exists()) {
172 outputFile.getParentFile().mkdirs();
173 }
174
175 try {
176 FileWriter writer = new FileWriter(outputFile);
177 YAML_SERIALIZER.dump(getSerializableData(), writer);
178 } catch (IOException ex) {
179 logger.log(Level.WARNING, "There was an error writing results to outputPath: " + outputPath, ex);
180 }
181 }
182}

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