Package org.apache.sling.sitemap.spi.generator

## Interface SitemapGenerator

All Known Implementing Classes:
  `ResourceTreeSitemapGenerator`

    @ConsumerType
    public interface SitemapGenerator

`SitemapGenerator` implementations are responsible to generate one or many sitemaps for a given sitemap root `Resource`. When a `SitemapGenerator` generates multiple sitemaps for a given `Resource` it has to return their names using `getNames(Resource)`. Also, the `SitemapGenerator` may decide that any of those names should be served on-demand by returning a subset of names for `getOnDemandNames(Resource)`.

`generate(Resource, String, Sitemap, Context)` may be called for each name and each sitemap root `Resource`, the implementation returned an non-empty `Set` of names for.

It is possible to register multiple `SitemapGenerator`s for a single name. In this case the one with the highest ranking according to the OSGI specification is used.

### Nested Class Summary

Nested Classes
`static interface` `SitemapGenerator.Context` A context object that gives the `SitemapGenerator` access to additional configurations and methods to track state.

### Method Summary

All Methods Instance Methods Abstract Methods Default Methods
`void` `generate​(@NotNull org.apache.sling.api.resource.Resource sitemapRoot, @NotNull String name, @NotNull Sitemap sitemap, SitemapGenerator.Context context)` Generates a `Sitemap` with the given name at the given `Resource`.
`default @NotNull Set<String>` `getNames​(@NotNull org.apache.sling.api.resource.Resource sitemapRoot)` Returns a `Set` of sitemap names this `SitemapGenerator` can generate for a particular sitemap root `Resource`.
`default @NotNull Set<String>` `getOnDemandNames​(@NotNull org.apache.sling.api.resource.Resource sitemapRoot)` Implementations may return a subset of the names returned by `getNames(Resource)` that should be served on-demand.

### Method Detail

#### getNames

    @NotNull
    default @NotNull Set<String> getNames​(@NotNull
                                          @NotNull org.apache.sling.api.resource.Resource sitemapRoot)

Returns a `Set` of sitemap names this `SitemapGenerator` can generate for a particular sitemap root `Resource`. If the implementation does not generate a sitemap for a particular root it must return an empty `Set`, if it does but does not differentiate by name, it must return a `Set` containing only the `SitemapService.DEFAULT_SITEMAP_NAME`.

The default implementation returns a `Set` of only `SitemapService.DEFAULT_SITEMAP_NAME`.

Returns:
  a `Set` of names

#### getOnDemandNames

    @NotNull
    default @NotNull Set<String> getOnDemandNames​(@NotNull
                                                  @NotNull org.apache.sling.api.resource.Resource sitemapRoot)

Implementations may return a subset of the names returned by `getNames(Resource)` that should be served on-demand.

The default implementation returns an empty `Set`, meaning none of the names should be served on-demand.

Parameters:
  `sitemapRoot` -
Returns:

#### generate

    void generate​(@NotNull
                  @NotNull org.apache.sling.api.resource.Resource sitemapRoot,
                  @NotNull
                  @NotNull String name,
                  @NotNull
                  @NotNull Sitemap sitemap,
                  @NotNull
                  SitemapGenerator.Context context)
           throws SitemapException

Generates a `Sitemap` with the given name at the given `Resource`.

This process may be stateful and the given `SitemapGenerator.Context` can be used to keep track of the state. For example a traversal that keeps track on the last `Resource` added to the `Sitemap`.

Parameters:
  `sitemapRoot` - the root at which the sitemap should be created
  `name` - the name, one of the names returned by `getNames(Resource)` for the given sitemapRoot
  `sitemap` - the `Sitemap` object to add locations to
  `context` - the context under which the sitemap is generated
Throws:
  `SitemapException` - may be thrown in unrecoverable exceptional cases