Report
Summary report
Summary report example
<?xml version="1.0" encoding="UTF-8"?>
<ContentGroups>
<!-- Example of a conforming file -->
<ContentGroup>
<AdditionalInformation>
<AllowedItems>
<AllowedItem InstanceCount="3">External Hyperlinks</AllowedItem>
<AllowedItem InstanceCount="2">Metadata</AllowedItem>
</AllowedItems>
<SanitisationItems>
<SanitisationItem InstanceCount="25">Embedded File</SanitisationItem>
</SanitisationItems>
</AdditionalInformation>
<FileName>/home/glasswall/Documents/Example.doc</FileName>
<ProcessMessage>Remedies Applied</ProcessMessage>
<EngineOutcome>Managed</EngineOutcome>
<LastErrorMessage/>
</ContentGroup>
<!-- Example of a non-conforming file -->
<ContentGroup>
<AdditionalInformation>
<AllowedItems>
<AllowedItem InstanceCount="22">Metadata</AllowedItem>
</AllowedItems>
</AdditionalInformation>
<FileName>/home/glasswall/Documents/Example2.docx</FileName>
<ProcessMessage>Issues Found</ProcessMessage>
<EngineOutcome>Non-conforming</EngineOutcome>
<LastErrorMessage>End of stream 'xl/workbook.xml' not reached</LastErrorMessage>
</ContentGroup>
<!-- Example of an unsupported file type when the skip unsupported file types flag is set to true -->
<ContentGroup>
<AdditionalInformation/>
<FileName>/home/glasswall/Documents/UnsupportedFileType.cat</FileName>
<ProcessMessage/>
<EngineOutcome>Unsupported</EngineOutcome>
<LastErrorMessage>Skipping unsupported filetype</LastErrorMessage>
</ContentGroup>
<!-- Example of an unsupported file type when the skip unsupported file types flag is set to false -->
<ContentGroup>
<AdditionalInformation/>
<FileName>/home/glasswall/Documents/UnsupportedFileType.cat</FileName>
<ProcessMessage>Issues Found</ProcessMessage>
<EngineOutcome>Non-conforming</EngineOutcome>
<LastErrorMessage>Unable to determine file type</LastErrorMessage>
</ContentGroup>
</ContentGroups>
API
Constructors
SummaryReport() throws ParserConfigurationException, DOMException
SummaryReport(boolean skipUnsupportedFileTypes) throws ParserConfigurationException, DOMException
Parameters:
boolean skipUnsupportedFileTypes- This sets the skipUnsupportedFileTypes flag. If this flag is not specified then the skip unsupported file types will be set tofalse.
Instance methods
void setSkipUnsupportedFileTypes(boolean skipUnsupportedFileTypes)
Setter for the skip unsupported file types flag.
Parameters:
boolean skipUnsupportedFileTypes- This sets the skip unsupported file types flag.
boolean getSkipUnsupportedFileTypes()
Getter for the skip unsupported file types flag.
Returns:
true if unsupported file types should be skipped, and false otherwise.
void addAnalysisReport(
Path inputFilePath,
int sessionStatus,
String lastErrorMessage,
String processMessage,
InputStream analysisInputStream
) throws SAXException, ParserConfigurationException, IOException
Add a new Glasswall analysis report to the summary report.
Parameters:
Path inputFilePath- The file path of the file that was processed.int sessionStatus- The return status from GW2RunSession.String lastErrorMessage- The error message from [GW2FileErrorMsg]/embedded-engine/16.8.2/embedded-engine-gw2fileerrormsg). If this is null or empty then it won't be included in the summary report.String processMessage- The process message from GW2FileSessionStatus. If this null or empty then it won't be included in the summary report.InputStream analysisInputStream- Input stream containing the analysis report to be included.
void addAnalysisReport(FileSummary summary) throws SAXException, ParserConfigurationException, IOException
Add a new Glasswall file summary to the summary report.
Parameters:
FileSummary summary- The summary information to be added to the summary report.
public void generateSummaryReport(Writer writer) throws TransformerConfigurationException, TransformerException
Generate a XML summary report from the provided analysis reports.
Parameters:
Writer writer- A writer where the summary report will be written to.
public void generateSummaryReport(Writer writer, Transformer transformer) throws TransformerException
Generate a XML summary report from the provided analysis reports using the specified transformer.
Parameters:
Writer writer- A writer where the summary report will be written to.Transformer transformer- The transformer that will be used for generating the XML report.
API example
The summary report functionality is implemented in com.glasswall.analysissummary.SummaryReport class. First an instance of the class is created, addAnalysisReport is then called for each analysis report that will be included in the summary report, and then generateSummaryReport is called at the end to generate the summary report. An example can be seen below:
File input_directory = new File("Input");
File output_directory = new File("Output");
output_directory.mkdirs();
SummaryReport summary_report = new SummaryReport();
summary_report.setSkipUnsupportedFileTypes(true); // Optionally set the skip unsupported file types flag
for (File file : input_directory.listFiles())
{
if (file.isDirectory())
continue;
try (Core2JavaBridge gw = new Core2JavaBridge())
{
// Create the output path for file and analysis report
String file_output_path = Paths.get(output_directory.getAbsolutePath().toString(), file.getName()).toString();
String analysis_output_path = file_output_path + ".xml";
// Run the file through the Glasswall engine
int session = gw.GW2OpenSession();
gw.GW2RegisterInputFile(session, file.getAbsolutePath());
gw.GW2RegisterAnalysisFile(session, analysis_output_path, 0);
gw.GW2RegisterOutFile(session, file_output_path);
int run_status = gw.GW2RunSession(session);
// Retrieve the error message if the file is non-conforming
String error_message = null;
if (run_status < 0)
error_message = gw.GW2FileErrorMsgString(session);
// Retrieve the session status along with the session description
FileSessionStatus session_status = gw.GW2FileSessionStatusResult(session);
// Add the analysis report to the summary report
try (FileInputStream stream = new FileInputStream(analysis_output_path))
{
summary_report.addAnalysisReport(file.toPath(), run_status, error_message, session_status.summaryDescription, stream);
}
}
catch (Exception ex)
{
System.err.println("Exception occurred: " + ex.getMessage());
}
}
// Write the summary report to `SummaryReport.xml` file
try (BufferedWriter writer = Files.newBufferedWriter(
Paths.get(output_directory.getAbsolutePath().toString(), "SummaryReport.xml"),
StandardCharsets.UTF_8,
StandardOpenOption.TRUNCATE_EXISTING,
StandardOpenOption.CREATE,
StandardOpenOption.WRITE))
{
summary_report.generateSummaryReport(writer);
}