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.common.persistance.memory; 24 25 import java.util.HashSet; 26 import java.util.Set; 27 28 import net.sf.sail.core.entity.IAgent; 29 import net.sf.sail.core.entity.Role; 30 import net.sf.sail.core.uuid.AgentUuid; 31 import net.sf.sail.core.uuid.UserUuid; 32 33 import org.doomdark.uuid.UUIDGenerator; 34 35 36 /** 37 * <p> 38 * A set of users, in a given role, that are responsible for some events or 39 * data. 40 * </p> 41 * 42 * @author turadg 43 */ 44 public class MemoryAgent implements IAgent { 45 46 transient static int agentCount = 0; 47 48 transient int agentSerial = ++agentCount; 49 50 private final Role role; 51 private AgentUuid id; 52 53 /** 54 * This can be used to store an id or cookie so this Agent 55 * can be matched up again with its representation in a portal. 56 * Alternatively the portal can provide its own AgentService implementation 57 * which in turn can provide a custom IAgent implementation. 58 */ 59 private String agentToken; 60 61 public Role getRole() { 62 return role; 63 } 64 65 /** 66 * element type: User 67 */ 68 Set<UserUuid> users; 69 70 public MemoryAgent(Role role, AgentUuid id) { 71 this.role = role; 72 users = new HashSet<UserUuid>(); 73 this.id = id; 74 } 75 76 public MemoryAgent(Role role) { 77 this(role, new AgentUuid(UUIDGenerator.getInstance().generateTimeBasedUUID().asByteArray())); 78 } 79 80 // TODO check this against rules of the role 81 public void addUser(UserUuid user) { 82 users.add(user); 83 } 84 85 public void removeUser(UserUuid user) { 86 users.remove(user); 87 } 88 89 public UserUuid[] getUserArray() { 90 UserUuid[] userArray = new UserUuid[users.size()]; 91 users.toArray(userArray); 92 return userArray; 93 } 94 95 @Override 96 public String toString() { 97 return "MemoryAgent@" + agentSerial + "{role=" + role + "}"; 98 } 99 100 /* (non-Javadoc) 101 * @see net.sf.sail.core.entity.IAgent#getAgentId() 102 */ 103 public AgentUuid getAgentId() 104 { 105 return id; 106 } 107 108 public String getAgentToken() { 109 return agentToken; 110 } 111 112 public void setAgentToken(String agentToken) { 113 this.agentToken = agentToken; 114 } 115 }