View Javadoc

1   /*
2    * Copyright (c) 2005 Regents of the University of California (Regents). Created
3    * by TELS, Graduate School of Education, University of California at Berkeley.
4    *
5    * This software is distributed under the GNU Lesser General Public License, v2.
6    *
7    * Permission is hereby granted, without written agreement and without license
8    * or royalty fees, to use, copy, modify, and distribute this software and its
9    * documentation for any purpose, provided that the above copyright notice and
10   * the following two paragraphs appear in all copies of this software.
11   *
12   * REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
13   * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
14   * PURPOSE. THE SOFTWAREAND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED
15   * HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE
16   * MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
17   *
18   * IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
19   * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS,
20   * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
21   * REGENTS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
22   */
23  package net.sf.sail.core.entity;
24  
25  import java.util.HashSet;
26  
27  /**
28   * Extends HashSet to add some handy methods for Agents 
29   * 
30   * @author turadg
31   *
32   */
33  public class AgentSet extends HashSet<IAgent> {
34  
35  	private static final long serialVersionUID = 8185517197325172183L;
36  
37  	/**
38  	 * Assumes there is only one agent in the set
39  	 * @throws MismatchedAgentSetSizeException 
40  	 */
41  	public IAgent getSingle() throws MismatchedAgentSetSizeException {
42  		// TODO make a checked exception for this
43  		if (size() > 1)
44  			throw new MismatchedAgentSetSizeException(1, size());
45  		if (isEmpty())
46  			throw new MismatchedAgentSetSizeException(1, 0);
47  		// otherwise, length is 1
48  		return iterator().next();
49  	}
50  
51  	public AgentSet select(Role role) {
52  		AgentSet subset = new AgentSet();
53  		for (IAgent agent : this) {
54  			if (agent.getRole().equals(role))
55  				subset.add(agent);
56  		}
57  		return subset;
58  	}
59  }