SitemapIndex.java
/*-
* #%L
* io.earcam.utilitarian.site.sitemap
* %%
* Copyright (C) 2017 earcam
* %%
* SPDX-License-Identifier: (BSD-3-Clause OR EPL-1.0 OR Apache-2.0 OR MIT)
*
* You <b>must</b> choose to accept, in full - any individual or combination of
* the following licenses:
* <ul>
* <li><a href="https://opensource.org/licenses/BSD-3-Clause">BSD-3-Clause</a></li>
* <li><a href="https://www.eclipse.org/legal/epl-v10.html">EPL-1.0</a></li>
* <li><a href="https://www.apache.org/licenses/LICENSE-2.0">Apache-2.0</a></li>
* <li><a href="https://opensource.org/licenses/MIT">MIT</a></li>
* </ul>
* #L%
*/
package io.earcam.utilitarian.site.sitemap;
import java.io.IOException;
import java.net.URI;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Map;
import java.util.function.Consumer;
import java.util.stream.Stream;
import javax.annotation.concurrent.NotThreadSafe;
@NotThreadSafe
public final class SitemapIndex extends AbstractSitemap {
public static final String NAME_SITEMAP_INDEX = "sitemapindex";
private static final String TAG_SITEMAP = "sitemap";
private static final String HEAD = "<sitemapindex xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">";
private static final String TAIL = "</sitemapindex>";
private SitemapParameters currentParameters;
private URI targetUri;
public SitemapIndex(SitemapParameters parameters, Consumer<Path> generatedFileRecorder)
{
super(parameters, HEAD, TAG_SITEMAP, TAIL, generatedFileRecorder);
}
public void accept(Stream<Map.Entry<SitemapParameters, Stream<String>>> sitemaps) throws IOException
{
Stream<Path> paths = sitemaps.sequential()
.flatMap(this::perGroup);
super.process(paths);
}
private Stream<Path> perGroup(Map.Entry<SitemapParameters, Stream<String>> sitemaps)
{
this.currentParameters = sitemaps.getKey();
this.targetUri = currentParameters.targetDir.toUri();
return sitemaps.getValue().map(Paths::get);
}
@Override
protected Path filename()
{
return filename(parameters, NAME_SITEMAP_INDEX + (++indexFileSuffix));
}
@Override
protected String createUrl(Path sitemapXml) throws IOException
{
URI uri = targetUri.relativize(sitemapXml.toUri());
return currentParameters.base.resolve(uri).toString();
}
}