## Summary - standalone

The standalone file summary can be generated by creating a `com.glasswall.analysissummary.FileSummary` object. 

### API

#### Constructors
```java
public FileSummary(
    Path inputFilePath,
    int sessionStatus,
    String lastErrorMessage,
    String processMessage,
    InputStream analysisInputStream,
    boolean skipUnsupportedFileTypes
) throws SAXException, ParserConfigurationException, IOException
```

**Parameters**:
- `Path inputFilePath` - The file path of the file that was processed.
- `int sessionStatus` - The return status from [GW2RunSession](/embedded-engine/embedded-engine-gw2runsession).
- `String lastErrorMessage` - The error message from [GW2FileErrorMsg](/embedded-engine/embedded-engine-gw2fileerrormsg). If this is null or empty then it won't be included in the summary.
- `String processMessage` - The process message from [GW2FileSessionStatus](/embedded-engine/embedded-engine-gw2filesessionstatus). If this null or empty then it won't be included in the summary.
- `InputStream analysisInputStream` - Input stream containing the analysis report to be included.
- `boolean skipUnsupportedFileTypes` - boolean indicating whether unsupported file types should be skipped.

#### Instance methods
```java
public String getFileName()
```

Returns the filename of the processed file.

**Returns**:
The absolute file path of the processed file.

---

```java
public String getProcessMessage()
```

Returns the file session process message. This will be null if the process message was not specified.

**Returns**:
File session process message.

---

```java
public EngineOutcome getEngineOutcome()
```

Returns an `EngineOutcome` enum indicating whether the processed file was `Managed`, `NonConforming`, or `Unsupported`.

**Returns**:
An `EngineOutcome` enum.

---

```java
public String getErrorMessage()
```

Returns the error message if the file is non-conforming. This will be null if the file is managed. 

**Returns**:
The error message.

---

```java
public Map<String, Long> getSanitisedItems()
```

Returns a map of the sanitised items along with their count.

**Returns**:
A map of sanitised items with their counts.

---

```java
public Map<String, Long> getAllowedItems()
```

Returns a map of the allowed items along with their count.

**Returns**:
A map of allowed items with their counts.

---

```java
public Map<String, Long> getRemedyItems()
```

Returns a map of the remedy items along with their count.

**Returns**:
A map of remedy items with their counts.

### API example

```java
File input_directory = new File("Input");
File output_directory = new File("Output");

output_directory.mkdirs();

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);

        // Create a file summary
        try (FileInputStream stream = new FileInputStream(analysis_output_path))
        {
            FileSummary file_summary = new FileSummary(
                file.toPath(),
                run_status,
                error_message,
                session_status.summaryDescription,
                stream,
                true // true to skip unsupported file types
            );
            
            // TODO - do something with the file summary
        }
    }
    catch (Exception ex)
    {
        System.err.println("Exception occurred: " + ex.getMessage());
    }
}
```