applesingle/api
Rob Greene cebb3727b0 Adding an AppleSingle edit command. 2024-02-07 18:54:43 -06:00
..
src Adding an AppleSingle edit command. 2024-02-07 18:54:43 -06:00
MAVEN-REPO.md Updating Maven release notes with a copy from AppleCommander. 2023-10-28 12:00:24 -05:00
README.md Updating documentation and tests a bit. 2018-06-03 17:27:42 -05:00
build.gradle Bump junit:junit from 4.13.1 to 4.13.2 2023-10-28 16:34:38 +00:00

README.md

Java API Examples

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

Maven / Gradle

To include in a Maven project:

<dependency>
    <groupId>net.sf.applecommander</groupId>
    <artifactId>applesingle-api</artifactId>
    <version>1.2.0</version>
</dependency>

To include in a Gradle project:

dependencies {
    // ...
    compile "net.sf.applecommander:applesingle-api:1.2.0"
    // ...
}

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