View Javadoc

1   /**
2    * This file Copyright (c) 2008-2010 Magnolia International
3    * Ltd.  (http://www.magnolia-cms.com). All rights reserved.
4    *
5    *
6    * This file is dual-licensed under both the Magnolia
7    * Network Agreement and the GNU General Public License.
8    * You may elect to use one or the other of these licenses.
9    *
10   * This file is distributed in the hope that it will be
11   * useful, but AS-IS and WITHOUT ANY WARRANTY; without even the
12   * implied warranty of MERCHANTABILITY or FITNESS FOR A
13   * PARTICULAR PURPOSE, TITLE, or NONINFRINGEMENT.
14   * Redistribution, except as permitted by whichever of the GPL
15   * or MNA you select, is prohibited.
16   *
17   * 1. For the GPL license (GPL), you can redistribute and/or
18   * modify this file under the terms of the GNU General
19   * Public License, Version 3, as published by the Free Software
20   * Foundation.  You should have received a copy of the GNU
21   * General Public License, Version 3 along with this program;
22   * if not, write to the Free Software Foundation, Inc., 51
23   * Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
24   *
25   * 2. For the Magnolia Network Agreement (MNA), this file
26   * and the accompanying materials are made available under the
27   * terms of the MNA which accompanies this distribution, and
28   * is available at http://www.magnolia-cms.com/mna.html
29   *
30   * Any modifications to this file must keep this entire header
31   * intact.
32   *
33   */
34  package info.magnolia.module.rssaggregator.importhandler;
35  
36  import info.magnolia.module.rssaggregator.util.Assert;
37  import org.apache.commons.lang.builder.ToStringBuilder;
38  
39  import java.util.HashSet;
40  import java.util.Set;
41  
42  /**
43   * A {@link #name named} set of feed {@link FeedChannel channels}.
44   *
45   * @author Rob van der Linden Vooren
46   */
47  public class AggregateFeed {
48  
49      private final String name;
50      private final Set<FeedChannel> channels;
51  
52      /**
53       * Create a new AggregateFeed with the given name.
54       *
55       * @param name name of this aggregate feed (must not be blank)
56       * @throws IllegalArgumentException if the given <code>name</code> is blank
57       */
58      public AggregateFeed(String name) {
59          Assert.notBlank(name, "'name' must not be blank");
60          this.name = name;
61          this.channels = new HashSet<FeedChannel>();
62      }
63  
64      /**
65       * Add a feed channel to this aggregate feed. Only one reference to any given channel will be maintained, regardless
66       * whether the same channel is being added multiple times.
67       *
68       * @param feedChannel the feed channel to add to this aggregate feed (must not be null)
69       * @throws IllegalArgumentException if the given <code>aggregateChannel</code>is <code>null</code>
70       */
71      public void addFeedChannel(FeedChannel feedChannel) {
72          Assert.notNull(feedChannel, "'feedChannel' must not be null");
73          channels.add(feedChannel);
74      }
75  
76      /** {@inheritDoc} */
77      @Override
78      public boolean equals(Object that) {
79          if (this == that) return true;
80          if (that == null || getClass() != that.getClass()) return false;
81  
82          AggregateFeed aggregateFeed = (AggregateFeed) that;
83  
84          if (!name.equals(aggregateFeed.name)) return false;
85          if (!channels.equals(aggregateFeed.channels)) return false;
86  
87          return true;
88      }
89  
90      /** {@inheritDoc} */
91      @Override
92      public int hashCode() {
93          int result = name.hashCode();
94          result = 31 * result + channels.hashCode();
95          return result;
96      }
97  
98      /** {@inheritDoc} */
99      @Override
100     public String toString() {
101         return new ToStringBuilder(this)
102                 .append("name", name)
103                 .append("channels", channels)
104                 .toString();
105     }
106 
107     //Getters & setters
108 
109     /**
110      * Return the name of this aggregate.
111      *
112      * @return the name of this aggregate
113      */
114     public String getName() {
115         return name;
116     }
117 
118     /**
119      * Return the channels known to this aggregate.
120      *
121      * @return the channels known to this aggregate
122      */
123     public Set<FeedChannel> getChannels() {
124         return new HashSet<FeedChannel>(channels);
125     }
126 
127 }