package uk.ac.ebi.ep.sitemap.advanced; import java.net.MalformedURLException; import java.net.URL; import java.util.Arrays; import java.util.Date; /** * One configurable Google News Search URL. To configure, use {@link Options} * @author Dan Fabulich * @see Options * @see <a href="http://www.google.com/support/news_pub/bin/answer.py?answer=74288">Creating a News Sitemap</a> */ public class GoogleNewsSitemapUrl extends WebSitemapUrl { private final Date publicationDate; private final String keywords; /** Options to configure Google News URLs */ public static class Options extends AbstractSitemapUrlOptions<GoogleNewsSitemapUrl, Options> { private Date publicationDate; private String keywords; /** Specifies an URL and publication date (which is mandatory for Google News) */ public Options(String url, Date publicationDate) throws MalformedURLException { this(new URL(url), publicationDate); } /** Specifies an URL and publication date (which is mandatory for Google News) */ public Options(URL url, Date publicationDate) { super(url, GoogleNewsSitemapUrl.class); if (publicationDate == null) throw new NullPointerException("publicationDate must not be null"); this.publicationDate = publicationDate; } /** Specifies a list of comma-delimited keywords */ public Options keywords(String keywords) { this.keywords = keywords; return this; } /** Specifies a list of comma-delimited keywords */ public Options keywords(Iterable<String> keywords) { StringBuilder sb = new StringBuilder(); boolean first = true; for (String keyword : keywords) { if (first) { first = false; } else { sb.append(", "); } sb.append(keyword); } this.keywords = sb.toString(); return this; } /** Specifies a list of comma-delimited keywords */ public Options keywords(String... keywords) { return keywords(Arrays.asList(keywords)); } } /** Specifies an URL and publication date (which is mandatory for Google News) */ public GoogleNewsSitemapUrl(URL url, Date publicationDate) { this(new Options(url, publicationDate)); } /** Specifies an URL and publication date (which is mandatory for Google News) */ public GoogleNewsSitemapUrl(String url, Date publicationDate) throws MalformedURLException { this(new Options(url, publicationDate)); } /** Configures an URL with options */ public GoogleNewsSitemapUrl(Options options) { super(options); publicationDate = options.publicationDate; keywords = options.keywords; } /** Retrieves the publication date */ public Date getPublicationDate() { return publicationDate; } /** Retrieves the list of comma-delimited keywords */ public String getKeywords() { return keywords; } }