Modified: turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/spi/AbstractRoleManager.java URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/spi/AbstractRoleManager.java?rev=1845858&r1=1845857&r2=1845858&view=diff ============================================================================== --- turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/spi/AbstractRoleManager.java (original) +++ turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/spi/AbstractRoleManager.java Mon Nov 5 21:14:02 2018 @@ -35,7 +35,15 @@ import org.apache.fulcrum.security.util. */ public abstract class AbstractRoleManager extends AbstractEntityManager implements RoleManager { - protected abstract <T extends Role> T persistNewRole(T role) throws DataBackendException; + /** default serial id */ + private static final long serialVersionUID = 1L; + + /** + * @param role to persist + * @return the Role object + * @throws DataBackendException if fail to connect to datasource + */ + protected abstract <T extends Role> T persistNewRole(T role) throws DataBackendException; /** * Construct a blank Role object. @@ -87,6 +95,8 @@ public abstract class AbstractRoleManage /** * Retrieve a Role object with specified name. * + * @see org.apache.fulcrum.security.RoleManager#getRoleByName(java.lang.String) + * * @param name * the name of the Role. * @return an object representing the Role with specified name. @@ -94,6 +104,7 @@ public abstract class AbstractRoleManage * if there was an error accessing the data backend. * @throws UnknownEntityException * if the role does not exist. + * */ @Override public <T extends Role> T getRoleByName(String name) throws DataBackendException, UnknownEntityException @@ -110,8 +121,8 @@ public abstract class AbstractRoleManage /** * Retrieve a Role object with specified Id. * - * @param name - * the name of the Role. + * @param id + * the ID of the Role. * * @return an object representing the Role with specified name. *
Modified: turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/spi/AbstractUserManager.java URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/spi/AbstractUserManager.java?rev=1845858&r1=1845857&r2=1845858&view=diff ============================================================================== --- turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/spi/AbstractUserManager.java (original) +++ turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/spi/AbstractUserManager.java Mon Nov 5 21:14:02 2018 @@ -32,23 +32,32 @@ import org.apache.fulcrum.security.util. /** * This implementation keeps all objects in memory. This is mostly meant to help * with testing and prototyping of ideas. - * - * @todo Need to load up Crypto component and actually encrypt passwords! + * * @author <a href="mailto:ep...@upstate.com">Eric Pugh</a> * @version $Id$ */ + +// TODO Need to load up Crypto component and actually encrypt passwords! + public abstract class AbstractUserManager extends AbstractEntityManager implements UserManager { - /** - * - */ + /** ID **/ private static final long serialVersionUID = 1L; + /** + * @param user user to persist + * @param <T> User type + * @return a User object + * @throws DataBackendException if fail to connect + */ protected abstract <T extends User> T persistNewUser(T user) throws DataBackendException; private ACLFactory aclFactory; private Authenticator authenticator; + /* (non-Javadoc) + * @see org.apache.fulcrum.security.UserManager#getACL(org.apache.fulcrum.security.entity.User) + */ @Override public <T extends AccessControlList> T getACL(User user) throws UnknownEntityException { Modified: turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/util/GroupSet.java URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/util/GroupSet.java?rev=1845858&r1=1845857&r2=1845858&view=diff ============================================================================== --- turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/util/GroupSet.java (original) +++ turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/util/GroupSet.java Mon Nov 5 21:14:02 2018 @@ -97,7 +97,7 @@ public class GroupSet extends SecuritySe /** * Print out a GroupSet as a String * - * @returns The Group Set as String + * @return The Group Set as String * */ @Override Modified: turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/util/PermissionSet.java URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/util/PermissionSet.java?rev=1845858&r1=1845857&r2=1845858&view=diff ============================================================================== --- turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/util/PermissionSet.java (original) +++ turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/util/PermissionSet.java Mon Nov 5 21:14:02 2018 @@ -99,7 +99,7 @@ public class PermissionSet extends Secur /** * Print out a PermissionSet as a String * - * @returns The Permission Set as String + * @return The Permission Set as String * */ @Override Modified: turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/util/RoleSet.java URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/util/RoleSet.java?rev=1845858&r1=1845857&r2=1845858&view=diff ============================================================================== --- turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/util/RoleSet.java (original) +++ turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/util/RoleSet.java Mon Nov 5 21:14:02 2018 @@ -97,7 +97,7 @@ public class RoleSet extends SecuritySet /** * Print out a RoleSet as a String * - * @returns The Role Set as String + * @return The Role Set as String * */ @Override Modified: turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/util/SecuritySet.java URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/util/SecuritySet.java?rev=1845858&r1=1845857&r2=1845858&view=diff ============================================================================== --- turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/util/SecuritySet.java (original) +++ turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/util/SecuritySet.java Mon Nov 5 21:14:02 2018 @@ -35,8 +35,8 @@ import org.apache.fulcrum.security.entit * UI. It wraps a TreeSet object to enforce that only relevant methods are * available. TreeSet's contain only unique Objects (no duplicates) based on the * ID. They may or may not have a name, that depends on the implementation. Want - * to get away from requiring an ID and a name... Nothing should force Name to be - * unique in the basic architecture of Fulcrum Security. + * to get away from requiring an ID and a name... Nothing should force Name to + * be unique in the basic architecture of Fulcrum Security. * * @author <a href="mailto:ep...@upstate.com">Eric Pugh</a> * @author <a href="mailto:jmcna...@collab.net">John D. McNally</a> @@ -45,319 +45,269 @@ import org.apache.fulcrum.security.entit * @author <a href="mailto:h...@intermeta.de">Henning P. Schmiedehausen</a> * @version $Id$ */ -public abstract class SecuritySet<T extends SecurityEntity> implements Serializable, Set<T>, Iterable<T> -{ - /** Serial version */ - private static final long serialVersionUID = 2251987059226422569L; - - /** Map for "name" -> "security object" */ - protected Map<String, T> nameMap = null; - /** Map for "id" -> "security object" */ - protected Map<Object, T> idMap = null; - - /** - * Constructs an empty Set - */ - public SecuritySet() - { - nameMap = new TreeMap<String, T>(String.CASE_INSENSITIVE_ORDER); - idMap = new TreeMap<Object, T>(); - } - - /** - * Returns a set of security objects in this object. - * - * @return A Set Object - * - */ - public Set<T> getSet() - { - return new HashSet<T>(idMap.values()); - } - - /** - * Returns a set of Names in this Object. - * - * @return The Set of Names in this Object, backed by the actual data. - */ - public Set<String> getNames() - { - return nameMap.keySet(); - } - - /** - * Returns a set of Id values in this Object. - * - * @return The Set of Ids in this Object, backed by the actual data. - */ - public Set<Object> getIds() - { - return idMap.keySet(); - } - - /** - * Removes all Objects from this Set. - */ - @Override - public void clear() - { - nameMap.clear(); - idMap.clear(); - } - - /** - * Searches if an Object with a given name is in the Set - * - * @param roleName - * Name of the Security Object. - * @return True if argument matched an Object in this Set; false if no - * match. - */ - public boolean containsName(String name) - { - return (StringUtils.isNotEmpty(name)) ? nameMap.containsKey(name) : false; - } - - /** - * Searches if an Object with a given Id is in the Set - * - * @param id - * Id of the Security Object. - * @return True if argument matched an Object in this Set; false if no - * match. - */ - public boolean containsId(Object id) - { - return (id == null) ? false : idMap.containsKey(id); - } - - /** - * Returns an Iterator for Objects in this Set. - * - * @return An iterator for the Set - */ - @Override - public Iterator<T> iterator() - { - return idMap.values().iterator(); - } - - /** - * Returns size (cardinality) of this set. - * - * @return The cardinality of this Set. - */ - @Override - public int size() - { - return idMap.size(); - } - - /** - * list of role names in this set - * - * @return The string representation of this Set. - */ - @Override - public String toString() - { - StringBuilder sbuf = new StringBuilder(12 * size()); - - for (Iterator<T> it = iterator(); it.hasNext();) - { - T se = it.next(); - sbuf.append('['); - sbuf.append(se.getName()); - sbuf.append(" -> "); - sbuf.append(se.getId()); - sbuf.append(']'); - if (it.hasNext()) - { - sbuf.append(", "); - } - } - - return sbuf.toString(); - } - - // methods from Set - /** - * @see java.util.Collection#add(java.lang.Object) - */ - @Override - public boolean add(T o) - { - if (contains(o)) - { - return false; - } - - if (o.getId() != null) - { - idMap.put(o.getId(), o); - } - if (o.getName() != null) - { - nameMap.put(o.getName(), o); - } - - return true; - } - - /** - * Adds the entities in a Collection to this SecuritySet. - * - * @param collection - * A Collection of entities. - * @return True if this Set changed as a result; false if no change to this - * Set occurred (this Set already contained all members of the added - * Set). - */ - public boolean add(Collection<? extends T> collection) - { - return addAll(collection); - } - - @Override - public boolean addAll(Collection<? extends T> collection) - { - boolean res = false; - - for (T o : collection) - { - res |= add(o); - } - - return res; - } - - @Override - public boolean isEmpty() - { - return idMap.isEmpty(); - } - - @Override - public boolean containsAll(Collection<?> collection) - { - for (Object object : collection) - { - if (!contains(object)) - { - return false; - } - } - return true; - } - - @Override - public boolean removeAll(Collection<?> collection) - { - boolean changed = false; - for (Object object : collection) - { - boolean result = remove(object); - if (result) - { - changed = true; - } - } - - return changed; - } - - @Override - public boolean retainAll(Collection<?> collection) - { - throw new RuntimeException("not implemented"); - } - - /* - * (non-Javadoc) - * - * @see java.util.Collection#toArray() - */ - @Override - public Object[] toArray() - { - return getSet().toArray(); - } - - /** - * Checks whether this SecuritySet contains an entity. - * - * @param o - * An entity. - * @return True if this Set contains the entity, false otherwise. - */ - @Override - public boolean contains(Object o) - { - if (o == null || !(o instanceof SecurityEntity)) - { - return false; - } - else - { - return containsId(((SecurityEntity) o).getId()); - } - } - - /** - * Removes an entity from this SecuritySet. - * - * @param o - * An entity. - * @return True if this Set contained the entity before it was removed. - */ - @Override - public boolean remove(Object o) - { - if (o instanceof SecurityEntity) - { - boolean res = contains(o); - idMap.remove(((SecurityEntity) o).getId()); - nameMap.remove(((SecurityEntity) o).getName()); - return res; - } - - return false; - } - - /** - * @see java.util.Set#toArray(T[]) - */ - @Override - public <A> A[] toArray(A[] a) - { - return getSet().toArray(a); - } - - /** - * Returns an entity with the given name, if it is contained in this - * SecuritySet. - * - * @param name - * Name of entity. - * @return entity if argument matched an entity in this Set; null if no - * match. - */ - public T getByName(String name) - { - return nameMap.get(name); - } - - /** - * Returns an entity with the given id, if it is contained in this - * SecuritySet. - * - * @param id - * ID of entity. - * @return entity if argument matched an entity in this Set; null if no - * match. - */ - public T getById(Object id) - { - return idMap.get(id); - } +public abstract class SecuritySet<T extends SecurityEntity> implements Serializable, Set<T>, Iterable<T> { + /** Serial version */ + private static final long serialVersionUID = 2251987059226422569L; + + /** Map for "name" is "security object" */ + protected Map<String, T> nameMap = null; + + /** Map for "id" is "security object" */ + protected Map<Object, T> idMap = null; + + /** + * Constructs an empty Set + */ + public SecuritySet() { + nameMap = new TreeMap<String, T>(String.CASE_INSENSITIVE_ORDER); + idMap = new TreeMap<Object, T>(); + } + + /** + * Returns a set of security objects in this object. + * + * @return A Set Object + * + */ + public Set<T> getSet() { + return new HashSet<T>(idMap.values()); + } + + /** + * Returns a set of Names in this Object. + * + * @return The Set of Names in this Object, backed by the actual data. + */ + public Set<String> getNames() { + return nameMap.keySet(); + } + + /** + * Returns a set of Id values in this Object. + * + * @return The Set of Ids in this Object, backed by the actual data. + */ + public Set<Object> getIds() { + return idMap.keySet(); + } + + /** + * Removes all Objects from this Set. + */ + @Override + public void clear() { + nameMap.clear(); + idMap.clear(); + } + + /** + * Searches if an Object with a given name is in the Set + * + * @param name Name of the Security Object. + * @return True if argument matched an Object in this Set; false if no match. + */ + public boolean containsName(String name) { + return (StringUtils.isNotEmpty(name)) ? nameMap.containsKey(name) : false; + } + + /** + * Searches if an Object with a given Id is in the Set + * + * @param id Id of the Security Object. + * @return True if argument matched an Object in this Set; false if no match. + */ + public boolean containsId(Object id) { + return (id == null) ? false : idMap.containsKey(id); + } + + /** + * Returns an Iterator for Objects in this Set. + * + * @return An iterator for the Set + */ + @Override + public Iterator<T> iterator() { + return idMap.values().iterator(); + } + + /** + * Returns size (cardinality) of this set. + * + * @return The cardinality of this Set. + */ + @Override + public int size() { + return idMap.size(); + } + + /** + * list of role names in this set + * + * @return The string representation of this Set. + */ + @Override + public String toString() { + StringBuilder sbuf = new StringBuilder(12 * size()); + + for (Iterator<T> it = iterator(); it.hasNext();) { + T se = it.next(); + sbuf.append('['); + sbuf.append(se.getName()); + sbuf.append(" -> "); + sbuf.append(se.getId()); + sbuf.append(']'); + if (it.hasNext()) { + sbuf.append(", "); + } + } + + return sbuf.toString(); + } + + // methods from Set + /** + * @see java.util.Collection#add(java.lang.Object) + */ + @Override + public boolean add(T o) { + if (contains(o)) { + return false; + } + + if (o.getId() != null) { + idMap.put(o.getId(), o); + } + if (o.getName() != null) { + nameMap.put(o.getName(), o); + } + + return true; + } + + /** + * Adds the entities in a Collection to this SecuritySet. + * + * @param collection A Collection of entities. + * @return True if this Set changed as a result; false if no change to this Set + * occurred (this Set already contained all members of the added Set). + */ + public boolean add(Collection<? extends T> collection) { + return addAll(collection); + } + + @Override + public boolean addAll(Collection<? extends T> collection) { + boolean res = false; + + for (T o : collection) { + res |= add(o); + } + + return res; + } + + @Override + public boolean isEmpty() { + return idMap.isEmpty(); + } + + @Override + public boolean containsAll(Collection<?> collection) { + for (Object object : collection) { + if (!contains(object)) { + return false; + } + } + return true; + } + + @Override + public boolean removeAll(Collection<?> collection) { + boolean changed = false; + for (Object object : collection) { + boolean result = remove(object); + if (result) { + changed = true; + } + } + + return changed; + } + + @Override + public boolean retainAll(Collection<?> collection) { + throw new RuntimeException("not implemented"); + } + + /* + * (non-Javadoc) + * + * @see java.util.Collection#toArray() + */ + @Override + public Object[] toArray() { + return getSet().toArray(); + } + + /** + * Checks whether this SecuritySet contains an entity. + * + * @param o An entity. + * @return True if this Set contains the entity, false otherwise. + */ + @Override + public boolean contains(Object o) { + if (o == null || !(o instanceof SecurityEntity)) { + return false; + } else { + return containsId(((SecurityEntity) o).getId()); + } + } + + /** + * Removes an entity from this SecuritySet. + * + * @param o An entity. + * @return True if this Set contained the entity before it was removed. + */ + @Override + public boolean remove(Object o) { + if (o instanceof SecurityEntity) { + boolean res = contains(o); + idMap.remove(((SecurityEntity) o).getId()); + nameMap.remove(((SecurityEntity) o).getName()); + return res; + } + + return false; + } + + /* (non-Javadoc) + * @see java.util.Set#toArray(java.lang.Object[]) + */ + @Override + public <A> A[] toArray(A[] a) { + return getSet().toArray(a); + } + + /** + * Returns an entity with the given name, if it is contained in this + * SecuritySet. + * + * @param name Name of entity. + * @return entity if argument matched an entity in this Set; null if no match. + */ + public T getByName(String name) { + return nameMap.get(name); + } + + /** + * Returns an entity with the given id, if it is contained in this SecuritySet. + * + * @param id ID of entity. + * @return entity if argument matched an entity in this Set; null if no match. + */ + public T getById(Object id) { + return idMap.get(id); + } } Modified: turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/util/UserSet.java URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/util/UserSet.java?rev=1845858&r1=1845857&r2=1845858&view=diff ============================================================================== --- turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/util/UserSet.java (original) +++ turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/util/UserSet.java Mon Nov 5 21:14:02 2018 @@ -94,7 +94,7 @@ public class UserSet<T extends User> ext /** * Print out a UserSet as a String * - * @returns The User Set as String + * @return The User Set as String * */ @Override Modified: turbine/fulcrum/trunk/security/api/src/test/org/apache/fulcrum/security/model/basic/test/AbstractModelManagerTest.java URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/api/src/test/org/apache/fulcrum/security/model/basic/test/AbstractModelManagerTest.java?rev=1845858&r1=1845857&r2=1845858&view=diff ============================================================================== --- turbine/fulcrum/trunk/security/api/src/test/org/apache/fulcrum/security/model/basic/test/AbstractModelManagerTest.java (original) +++ turbine/fulcrum/trunk/security/api/src/test/org/apache/fulcrum/security/model/basic/test/AbstractModelManagerTest.java Mon Nov 5 21:14:02 2018 @@ -36,9 +36,6 @@ import org.junit.Test; /** * @author Eric Pugh - * - * To change the template for this generated type comment go to - * Window>Preferences>Java>Code Generation>Code and Comments */ public abstract class AbstractModelManagerTest extends BaseUnit4Test { Modified: turbine/fulcrum/trunk/security/api/src/test/org/apache/fulcrum/security/model/test/AbstractGroupManagerTest.java URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/api/src/test/org/apache/fulcrum/security/model/test/AbstractGroupManagerTest.java?rev=1845858&r1=1845857&r2=1845858&view=diff ============================================================================== --- turbine/fulcrum/trunk/security/api/src/test/org/apache/fulcrum/security/model/test/AbstractGroupManagerTest.java (original) +++ turbine/fulcrum/trunk/security/api/src/test/org/apache/fulcrum/security/model/test/AbstractGroupManagerTest.java Mon Nov 5 21:14:02 2018 @@ -32,9 +32,6 @@ import org.junit.Test; /** * @author Eric Pugh - * - * To change the template for this generated type comment go to - * Window>Preferences>Java>Code Generation>Code and Comments */ public abstract class AbstractGroupManagerTest extends BaseUnit4Test { Modified: turbine/fulcrum/trunk/security/api/src/test/org/apache/fulcrum/security/model/test/AbstractPermissionManagerTest.java URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/api/src/test/org/apache/fulcrum/security/model/test/AbstractPermissionManagerTest.java?rev=1845858&r1=1845857&r2=1845858&view=diff ============================================================================== --- turbine/fulcrum/trunk/security/api/src/test/org/apache/fulcrum/security/model/test/AbstractPermissionManagerTest.java (original) +++ turbine/fulcrum/trunk/security/api/src/test/org/apache/fulcrum/security/model/test/AbstractPermissionManagerTest.java Mon Nov 5 21:14:02 2018 @@ -35,9 +35,6 @@ import static org.junit.Assert.*; /** * @author Eric Pugh - * - * To change the template for this generated type comment go to - * Window>Preferences>Java>Code Generation>Code and Comments */ public abstract class AbstractPermissionManagerTest extends BaseUnit4Test { Modified: turbine/fulcrum/trunk/security/api/src/test/org/apache/fulcrum/security/model/test/AbstractRoleManagerTest.java URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/api/src/test/org/apache/fulcrum/security/model/test/AbstractRoleManagerTest.java?rev=1845858&r1=1845857&r2=1845858&view=diff ============================================================================== --- turbine/fulcrum/trunk/security/api/src/test/org/apache/fulcrum/security/model/test/AbstractRoleManagerTest.java (original) +++ turbine/fulcrum/trunk/security/api/src/test/org/apache/fulcrum/security/model/test/AbstractRoleManagerTest.java Mon Nov 5 21:14:02 2018 @@ -37,9 +37,6 @@ import org.junit.Test; /** * @author Eric Pugh - * - * To change the template for this generated type comment go to - * Window>Preferences>Java>Code Generation>Code and Comments */ public abstract class AbstractRoleManagerTest extends BaseUnit4Test { Modified: turbine/fulcrum/trunk/security/api/src/test/org/apache/fulcrum/security/model/test/AbstractUserManagerTest.java URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/api/src/test/org/apache/fulcrum/security/model/test/AbstractUserManagerTest.java?rev=1845858&r1=1845857&r2=1845858&view=diff ============================================================================== --- turbine/fulcrum/trunk/security/api/src/test/org/apache/fulcrum/security/model/test/AbstractUserManagerTest.java (original) +++ turbine/fulcrum/trunk/security/api/src/test/org/apache/fulcrum/security/model/test/AbstractUserManagerTest.java Mon Nov 5 21:14:02 2018 @@ -39,9 +39,6 @@ import org.junit.Test; /** * @author Eric Pugh - * - * To change the template for this generated type comment go to - * Window>Preferences>Java>Code Generation>Code and Comments */ public abstract class AbstractUserManagerTest extends BaseUnit4Test { @@ -166,8 +163,9 @@ public abstract class AbstractUserManage userManager.authenticate(user, "JC_SUBSET"); } - /* + /** * Class to test for User getUserInstance() + * @throws Exception generic exception */ @Test public void testGetUserInstance() throws Exception @@ -177,8 +175,10 @@ public abstract class AbstractUserManage assertTrue(user.getName() == null); } - /* + /** * Class to test for User getUserInstance(String) + * + * @throws Exception generic exception */ @Test public void testGetUserInstanceString() throws Exception @@ -191,12 +191,12 @@ public abstract class AbstractUserManage * Need to figure out if save is something we want.. right now it just bloes * up if you actually cahnge anything. * - * @todo figur out what to do here... - * @throws Exception + * @throws Exception generic exception */ @Test public void testSaveUser() throws Exception { + // TODO figure out what to do here user = userManager.getUserInstance("Kate"); userManager.addUser(user, "katiedid"); user = userManager.getUser(user.getName());