19 package org.sleuthkit.autopsy.externalresults;
21 import java.util.ArrayList;
22 import java.util.List;
23 import java.util.logging.Level;
24 import org.openide.util.NbBundle;
29 import org.w3c.dom.Document;
30 import org.w3c.dom.Element;
31 import org.w3c.dom.NodeList;
40 private static final String
XSD_FILE =
"autopsy_external_results.xsd";
44 private List<ErrorInfo>
errors =
new ArrayList<>();
138 final Element rootElem = doc.getDocumentElement();
139 if (rootElem != null && rootElem.getNodeName().equals(
TagNames.
ROOT_ELEM.toString())) {
144 String errorMessage = NbBundle.getMessage(this.getClass(),
145 "ExternalResultsXMLParser.parse.errMsg1.text",
150 }
catch (Exception ex) {
151 String errorMessage = NbBundle.getMessage(this.getClass(),
"ExternalResultsXMLParser.parse.errMsg2.text", this.resultsFilePath);
159 return new ArrayList<>(this.
errors);
165 for (
int i = 0; i < derivedFilesListNodes.getLength(); ++i) {
166 Element derivedFilesListElem = (Element) derivedFilesListNodes.item(i);
169 for (
int j = 0; j < derivedFileNodes.getLength(); ++j) {
170 Element derivedFileElem = (Element) derivedFileNodes.item(j);
173 if (path.isEmpty()) {
178 if (parentFile.isEmpty()) {
181 this.resultsData.addDerivedFile(path, parentFile);
189 for (
int i = 0; i < artifactsListNodes.getLength(); ++i) {
190 Element artifactsListElem = (Element) artifactsListNodes.item(i);
193 for (
int j = 0; j < artifactNodes.getLength(); ++j) {
194 Element artifactElem = (Element) artifactNodes.item(j);
197 if (!type.isEmpty()) {
201 if (!sourceFilePath.isEmpty()) {
213 for (
int i = 0; i < attributeNodesList.getLength(); ++i) {
214 Element attributeElem = (Element) attributeNodesList.item(i);
216 if (type.isEmpty()) {
221 if (valueElem == null) {
224 final String value = valueElem.getTextContent();
225 if (value.isEmpty()) {
226 String errorMessage = NbBundle.getMessage(this.getClass(),
227 "ExternalResultsXMLParser.parseArtifactAttributes.errMsg1.text",
234 if (valueType.isEmpty()) {
240 artifact.addAttribute(type, value, valueType, sourceModule);
246 if (valueType.isEmpty()) {
253 String errorMessage = NbBundle.getMessage(this.getClass(),
254 "ExternalResultsXMLParser.parseAttributeValueType.errMsg1.text",
267 for (
int i = 0; i < reportsListNodes.getLength(); ++i) {
268 Element reportsListElem = (Element) reportsListNodes.item(i);
270 NodeList reportNodes = reportsListElem.getElementsByTagName(
TagNames.
REPORT_ELEM.toString());
271 for (
int j = 0; j < reportNodes.getLength(); ++j) {
272 Element reportElem = (Element) reportNodes.item(j);
275 if (path.isEmpty()) {
280 if (path.isEmpty()) {
285 this.resultsData.addReport(path, sourceModule, reportName);
291 final String attributeValue = element.getAttribute(attributeName);
292 if (attributeValue.isEmpty()) {
293 logger.log(Level.SEVERE,
"Found {0} element missing {1} attribute in {2}",
new Object[]{
294 element.getTagName(),
296 this.resultsFilePath});
298 return attributeValue;
303 Element childElement = this.
getChildElement(parentElement, childElementTagName);
304 if (childElement != null) {
305 content = childElement.getTextContent();
306 if (content.isEmpty()) {
307 String errorMessage = NbBundle.getMessage(this.getClass(),
308 "ExternalResultsXMLParser.getChildElementContent.errMsg1.text",
309 parentElement.getTagName(),
314 }
else if (required) {
315 String errorMessage = NbBundle.getMessage(this.getClass(),
"ExternalResultsXMLParser.getChildElementContent.errMsg2.text",
316 parentElement.getTagName(),
325 Element childElem = null;
326 NodeList childNodes = parentElement.getElementsByTagName(childElementTagName);
327 if (childNodes.getLength() > 0) {
328 childElem = (Element) childNodes.item(0);
329 if (childNodes.getLength() > 1) {
330 String errorMessage = NbBundle.getMessage(this.getClass(),
"ExternalResultsXMLParser.getChildElement.errMsg1.text",
332 parentElement.getTagName(),
342 this.errors.add(
new ErrorInfo(this.getClass().getSimpleName(), errorMessage));
347 this.errors.add(
new ErrorInfo(this.getClass().getSimpleName(), errorMessage, ex));
AttributeValues(final String text)
void parseDerivedFiles(Element rootElement)
static< T > Document loadDoc(Class< T > clazz, String xmlPath)
List< ErrorInfo > getErrorInfo()
final String resultsFilePath
static final String XSD_FILE
String parseArtifactAttributeValueType(Element valueElem)
String getElementAttributeValue(Element element, String attributeName)
AttributeNames(final String text)
Element getChildElement(Element parentElement, String childElementTagName)
void parseArtifacts(final Element root)
void parseArtifactAttributes(final Element artifactElem, ExternalResults.Artifact artifact)
static final Logger logger
void parseReports(Element root)
ExternalResultsXMLParser(Content dataSource, String resultsFilePath)
String getChildElementContent(Element parentElement, String childElementTagName, boolean required)
TagNames(final String text)
void recordError(String errorMessage)
ExternalResults resultsData
void recordError(String errorMessage, Exception ex)
static Logger getLogger(String name)