Skip to content

AppleSingle API

The AppleCommander AppleSingle API is a reusable component that can be utilized by other Java projects.

Java API Examples

Usage is catered to the factory methods and builder. Some samples are included below.

Read AppleSingle

Use the factory method to...

Reading from standard input:

AppleSingle as = AppleSingle.read(System.in);

Reading from a file:

File file = new File("myfile.as");
AppleSingle as = AppleSingle.read(file);

The AppleSingle file can be read from an InputStream, File, Path, or just a byte array.

Create AppleSingle

Use the builder to create a new AppleSingle file and then save it...

AppleSingle as = AppleSingle.builder()
        .dataFork(dataFork)
        .realName(realName)
        .build();

Path file = Paths.get("mynewfile.as"); 
as.save(file);

The save(...) method can save to a File, Path, or an OutputStream.

Entries

If the higher-level API is insufficient, the lower-level API does allow either tracking of the processing (see code for the analyze subcommand) or alternate processing of Entry objects (see the filter subcommand).

To tap into the AppleSingleReader events, add as many reporters as required. For example, the analyze command uses these to display the details of the AppleSingle file as it is read:

AppleSingleReader reader = AppleSingleReader.builder(fileData)
        .readAtReporter((start,chunk,desc) -> used.add(IntRange.of(start, start + chunk.length)))
        .readAtReporter((start,chunk,desc) -> dumper.dump(start, chunk, desc))
        .versionReporter(this::reportVersion)
        .numberOfEntriesReporter(this::reportNumberOfEntries)
        .entryReporter(this::reportEntry)
        .build();

To work with the raw Entry objects, use the various AppleSingle#asEntries methods. For instance, the filter subcommand bypasses the AppleSingle object altogether to implement the filter:

List<Entry> entries = stdinFlag ? AppleSingle.asEntries(System.in) : AppleSingle.asEntries(inputFile);
// ...
AppleSingle.write(outputStream, newEntries);