1 /** 2 * This file Copyright (c) 2008-2012 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 }