Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
Copyright (C) 2014 Philip Helger (www.helger.com) philip[at]helger[dot]com Licensed under the Apache 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://www.apache.org/licenses/LICENSE-2.0 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 com.helger.webbasics.atom;
 
 import java.util.List;
 import java.util.Set;
 
 
 
ATOM 1.0 feed source.

Author(s):
Philip Helger
 
 public class FeedSource extends AbstractFeedElement
 {
   private static final Logger s_aLogger = LoggerFactory.getLogger (FeedSource.class);
 
   private final List <FeedPersonm_aAuthors = new ArrayList <FeedPerson> ();
   private final List <FeedCategorym_aCategories = new ArrayList <FeedCategory> ();
   private final List <FeedPersonm_aContributors = new ArrayList <FeedPerson> ();
   private FeedGenerator m_aGenerator;
   private String m_sIcon;
   private String m_sID;
   private final List <FeedLinkm_aLinks = new ArrayList <FeedLink> ();
   private String m_sLogo;
   private FeedDate m_aUpdated;
 
   public FeedSource ()
   {}
 
   public final void addAuthor (@Nonnull final FeedPerson aAuthor)
   {
     ValueEnforcer.notNull (aAuthor"Author");
     .add (aAuthor);
   }
 
   @Nonnull
   public final List <FeedPersongetAuthors ()
   {
     return ContainerHelper.newList ();
   }
 
   public final void addCategory (@Nonnull final FeedCategory aCategory)
   {
     ValueEnforcer.notNull (aCategory"Category");
     .add (aCategory);
   }
 
   @Nonnull
   public final List <FeedCategorygetCategories ()
   {
     return ContainerHelper.newList ();
   }
 
   public final void addContributor (@Nonnull final FeedPerson aContributor)
   {
     ValueEnforcer.notNull (aContributor"Contributor");
     .add (aContributor);
   }
 
   @Nonnull
   public final List <FeedPersongetContributors ()
   {
    return ContainerHelper.newList ();
  }
  public final void setGenerator (@Nullable final FeedGenerator aGenerator)
  {
     = aGenerator;
  }
  public final FeedGenerator getGenerator ()
  {
    return ;
  }
  public final void setIcon (@Nullable final String sIcon)
  {
     = sIcon;
  }
  public final String getIcon ()
  {
    return ;
  }
  public final void setID (@Nullable final String sID)
  {
     = sID;
  }
  public final String getID ()
  {
    return ;
  }
  public final void addLink (@Nonnull final FeedLink aLink)
  {
    ValueEnforcer.notNull (aLink"Link");
    .add (aLink);
  }
  public final List <FeedLinkgetLinks ()
  {
    return ContainerHelper.newList ();
  }
  public final void setLogo (@Nullable final String sLogo)
  {
     = sLogo;
  }
  public final String getLogo ()
  {
    return ;
  }
  public final void setRights (@Nullable final IFeedTextConstruct aRights)
  {
     = aRights;
  }
  public final IFeedTextConstruct getRights ()
  {
    return ;
  }
  public final void setSubtitle (@Nullable final IFeedTextConstruct aSubtitle)
  {
     = aSubtitle;
  }
  public final IFeedTextConstruct getSubtitle ()
  {
    return ;
  }
  public final void setTitle (@Nullable final IFeedTextConstruct aTitle)
  {
     = aTitle;
  }
  public final IFeedTextConstruct getTitle ()
  {
    return ;
  }
  public final void setUpdated (@Nullable final FeedDate aUpdated)
  {
     = aUpdated;
  }
  public final FeedDate getUpdated ()
  {
    return ;
  }
  protected final void fillElement (@Nonnull final IMicroElement aElement)
  {
    for (final IFeedElement aAuthor : )
      aElement.appendChild (aAuthor.getAsElement ("author"));
    for (final IFeedElement aCategory : )
      aElement.appendChild (aCategory.getAsElement ("category"));
    for (final IFeedElement aContributor : )
      aElement.appendChild (aContributor.getAsElement ("contributor"));
    if ( != null)
      aElement.appendChild (.getAsElement ("generator"));
    if ( != null)
      aElement.appendElement (."icon").appendText ();
    if ( != null)
      aElement.appendElement (."id").appendText ();
    for (final IFeedElement aLink : )
      aElement.appendChild (aLink.getAsElement ("link"));
    if ( != null)
      aElement.appendElement (."logo").appendText ();
    if ( != null)
      aElement.appendChild (.getAsElement ("rights"));
    if ( != null)
      aElement.appendChild (.getAsElement ("subtitle"));
    if ( != null)
      aElement.appendChild (.getAsElement ("title"));
    if ( != null)
      aElement.appendChild (.getAsElement ("updated"));
    if (StringHelper.hasText (getLanguage ()))
      aElement.setAttribute (.getLanguage ());
  }
  public IMicroElement getAsElement (@Nonnull @Nonempty final String sElementName)
  {
    final IMicroElement aElement = new MicroElement (.sElementName);
    fillElement (aElement);
    return aElement;
  }
  public boolean isValid ()
  {
    // check mandatory fields
    if ( == null)
    {
      .warn ("Required field 'id' is not set!");
      return false;
    }
    if ( == null)
    {
      .warn ("Required field 'title' is not set!");
      return false;
    }
    if ( == null)
    {
      .warn ("Required field 'updated' is not set!");
      return false;
    }
    // check nested fields
    for (final FeedPerson aValue : )
      if (!aValue.isValid ())
      {
        .warn ("At least one author is invalid");
        return false;
      }
    for (final FeedCategory aValue : )
      if (!aValue.isValid ())
      {
        .warn ("At least one category is invalid");
        return false;
      }
    for (final FeedPerson aValue : )
      if (!aValue.isValid ())
      {
        .warn ("At least one constributor is invalid");
        return false;
      }
    if ( != null && !.isValid ())
    {
      .warn ("generator is invalid");
      return false;
    }
    for (final FeedLink aValue : )
      if (!aValue.isValid ())
      {
        .warn ("At least one link is invalid");
        return false;
      }
    if ( != null && !.isValid ())
    {
      .warn ("rights is invalid");
      return false;
    }
    if ( != null && !.isValid ())
    {
      .warn ("subtitle is invalid");
      return false;
    }
    if (!.isValid ())
    {
      .warn ("title is invalid");
      return false;
    }
    if (!.isValid ())
    {
      .warn ("updated is invalid");
      return false;
    }
    // elements SHOULD contain one atom:link element with a rel attribute value
    // of "self". This is the preferred URI for retrieving Atom Feed Documents
    // representing this Atom feed.
    {
      boolean bFoundSelf = false;
      for (final FeedLink aLink : )
        if (..equals (aLink.getRel ()))
        {
          bFoundSelf = true;
          break;
        }
      if (!bFoundSelf)
        .warn ("no '" + . + "' link found!");
    }
    // elements MUST NOT contain more than one atom:link element with a rel
    // attribute value of "alternate" that has the same combination of type and
    // hreflang attribute values.
    {
      final Set <StringaUniques = new HashSet <String> ();
      for (final FeedLink aLink : )
        if (..equals (aLink.getRel ()))
        {
          final String sKey = aLink.getType () +
                              ":" +
                              (aLink.getHrefLang () == null ? "" : aLink.getHrefLang ().toString ());
          if (!aUniques.add (sKey))
          {
            .warn ("'" + . + "' link is not unique: " + aLink);
            return false;
          }
        }
    }
    return true;
  }
New to GrepCode? Check out our FAQ X