/** * Licensed to The Apereo Foundation under one or more contributor license * agreements. See the NOTICE file distributed with this work for additional * information regarding copyright ownership. * * * The Apereo Foundation licenses this file to you under the Educational * Community License, Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of the License * at: * * http://opensource.org/licenses/ecl2.txt * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. * */ package org.opencastproject.feed.impl; import org.opencastproject.feed.api.Category; import org.opencastproject.feed.api.Content; import org.opencastproject.feed.api.Enclosure; import org.opencastproject.feed.api.Feed; import org.opencastproject.feed.api.FeedEntry; import org.opencastproject.feed.api.FeedExtension; import org.opencastproject.feed.api.Link; import org.opencastproject.feed.api.Person; import org.apache.commons.lang3.StringUtils; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * Implementation for a feed entry. */ public class FeedEntryImpl implements FeedEntry { /** Unique identifier for this entry */ private String uri = null; /** Date where this entry has been updated */ private Date updatedDate = null; /** Title of this entry */ private Content title = null; /** Description for this entry */ private Content description = null; /** Dublin Core Publication date */ private Date publishedDate = null; /** A list of links */ private List<Link> links = null; /** Entry bodies, can come in multiple content types */ private List<Content> contents = null; /** Modules used in this entry */ private List<FeedExtension> modules = null; /** Enclosures */ private List<Enclosure> enclosures = null; /** Authors of this entry */ private List<Person> authors = null; /** Contributors to this entries */ private List<Person> contributors = null; /** Entry categories */ private List<Category> categories = null; /** The containing feed */ private Feed feed = null; /** * Creates a new feed entry for the given feed. * * @param feed * the containing feed * @param title * the entry title * @param link * link to the orginal resource * @param uri * the entry uri */ public FeedEntryImpl(Feed feed, String title, Link link, String uri) { this(feed, title, null, link, uri); } /** * Creates a new feed entry for the given feed. * * @param feed * the containing feed * @param title * the entry title * @param description * the entry description * @param link * link to the orginal resource * @param uri * the entry uri */ public FeedEntryImpl(Feed feed, String title, String description, Link link, String uri) { if (feed == null) throw new IllegalArgumentException("Argument 'feed' must not be null"); if (StringUtils.isEmpty(title)) throw new IllegalArgumentException("Entry title must not be null"); if (link == null || StringUtils.isEmpty(link.getHref())) throw new IllegalArgumentException("Entry link must not be null"); if (StringUtils.isEmpty(uri)) throw new IllegalArgumentException("Entry uri must not be null"); this.feed = feed; this.title = new ContentImpl(title); if (description != null) this.description = new ContentImpl(description); addLink(link); this.uri = uri; } /** * @see org.opencastproject.feed.api.FeedEntry#getAuthors() */ public List<Person> getAuthors() { return authors; } /** * @see org.opencastproject.feed.api.FeedEntry#getCategories() */ public List<Category> getCategories() { return categories; } /** * @see org.opencastproject.feed.api.FeedEntry#getContents() */ public List<Content> getContents() { return contents; } /** * @see org.opencastproject.feed.api.FeedEntry#getContributors() */ public List<Person> getContributors() { return contributors; } /** * @see org.opencastproject.feed.api.FeedEntry#getDescription() */ public Content getDescription() { return description; } /** * @see org.opencastproject.feed.api.FeedEntry#getEnclosures() */ public List<Enclosure> getEnclosures() { return enclosures; } /** * @see org.opencastproject.feed.api.FeedEntry#getLinks() */ public List<Link> getLinks() { return links; } /** * @see org.opencastproject.feed.api.FeedEntry#getModule(java.lang.String) */ public FeedExtension getModule(String uri) { if (modules == null) return null; for (FeedExtension m : modules) if (uri.equals(m.getUri())) return m; return null; } /** * @see org.opencastproject.feed.api.FeedEntry#getModules() */ public List<FeedExtension> getModules() { return modules; } /** * @see org.opencastproject.feed.api.FeedEntry#getPublishedDate() */ public Date getPublishedDate() { return publishedDate; } /** * @see org.opencastproject.feed.api.FeedEntry#getTitle() */ public Content getTitle() { return title; } /** * @see org.opencastproject.feed.api.FeedEntry#getUpdatedDate() */ public Date getUpdatedDate() { return updatedDate; } /** * @see org.opencastproject.feed.api.FeedEntry#getUri() */ public String getUri() { return uri; } /** * @see org.opencastproject.feed.api.FeedEntry#addAuthor(org.opencastproject.feed.api.Person) */ public void addAuthor(Person author) { if (authors == null) authors = new ArrayList<Person>(); authors.add(author); } /** * @see org.opencastproject.feed.api.FeedEntry#setAuthors(java.util.List) */ public void setAuthors(List<Person> authors) { this.authors = authors; } /** * @see org.opencastproject.feed.api.FeedEntry#setCategories(java.util.List) */ public void setCategories(List<Category> categories) { this.categories = categories; } /** * @see org.opencastproject.feed.api.FeedEntry#addCategory(org.opencastproject.feed.api.Category) */ public void addCategory(Category category) { if (categories == null) categories = new ArrayList<Category>(); categories.add(category); } /** * @see org.opencastproject.feed.api.FeedEntry#setContents(java.util.List) */ public void setContents(List<Content> contents) { this.contents = contents; } /** * @see org.opencastproject.feed.api.FeedEntry#addContent(org.opencastproject.feed.api.Content) */ public void addContent(Content content) { if (contents == null) contents = new ArrayList<Content>(); contents.add(content); } /** * @see org.opencastproject.feed.api.FeedEntry#setContributors(java.util.List) */ public void setContributors(List<Person> contributors) { this.contributors = contributors; } /** * @see org.opencastproject.feed.api.FeedEntry#addContributor(org.opencastproject.feed.api.Person) */ public void addContributor(Person contributor) { if (contributors == null) contributors = new ArrayList<Person>(); contributors.add(contributor); } /** * @see org.opencastproject.feed.api.FeedEntry#setDescription(org.opencastproject.feed.api.Content) */ public void setDescription(Content description) { this.description = description; } /** * @see org.opencastproject.feed.api.FeedEntry#setEnclosures(java.util.List) */ public void setEnclosures(List<Enclosure> enclosures) { this.enclosures = enclosures; } /** * @see org.opencastproject.feed.api.FeedEntry#addEnclosure(org.opencastproject.feed.api.Enclosure) */ public void addEnclosure(Enclosure enclosure) { if (enclosures == null) enclosures = new ArrayList<Enclosure>(); enclosures.add(enclosure); } /** * @see org.opencastproject.feed.api.FeedEntry#setLinks(java.util.List) */ public void setLinks(List<Link> links) { this.links = links; } /** * @see org.opencastproject.feed.api.FeedEntry#addLink(org.opencastproject.feed.api.Link) */ public void addLink(Link link) { if (links == null) links = new ArrayList<Link>(); links.add(link); } /** * @see org.opencastproject.feed.api.FeedEntry#setExtensions(java.util.List) */ public void setExtensions(List<FeedExtension> modules) { this.modules = modules; } /** * @see org.opencastproject.feed.api.FeedEntry#addExtension(org.opencastproject.feed.api.FeedExtension) */ public void addExtension(FeedExtension module) { if (modules == null) modules = new ArrayList<FeedExtension>(); modules.add(module); } /** * @see org.opencastproject.feed.api.FeedEntry#setPublishedDate(java.util.Date) */ public void setPublishedDate(Date publishedDate) { this.publishedDate = publishedDate; } /** * @see org.opencastproject.feed.api.FeedEntry#setTitle(java.lang.String) */ public void setTitle(String title) { setTitle(new ContentImpl(title)); } /** * @see org.opencastproject.feed.api.FeedEntry#setTitle(org.opencastproject.feed.api.Content) */ public void setTitle(Content title) { this.title = title; } /** * @see org.opencastproject.feed.api.FeedEntry#setUpdatedDate(java.util.Date) */ public void setUpdatedDate(Date updatedDate) { this.updatedDate = updatedDate; } /** * @see org.opencastproject.feed.api.FeedEntry#setUri(java.lang.String) */ public void setUri(String uri) { this.uri = uri; } /** * @see org.opencastproject.feed.api.FeedEntry#getSource() */ public Feed getSource() { return feed; } /** * {@inheritDoc} * * @see java.lang.Object#toString() */ @Override public String toString() { return (title != null) ? title.getValue() : uri; } }