<div>== Picketlink IDM API Review ==</div><div><br></div><div>=== General ===</div><div><br></div><div>* We should probably implement a good hashcode and equals for our simple implementations in the API.</div><div><br></div>

<div><br></div><div>=== AbstractIdentityType / IdentityType ===</div><div><br></div><div>* getCreationDate should return a copy / clone of the date</div><div>* setAttribute might be easier to use if it were vararg</div><div>

* getAttribute Would returning the first value be expected? Maybe it should be renamed to getFirstAttributeValue?</div><div>* getAttributeValues should also return a clone of the array</div><div><br></div><div>=== Range ===</div>

<div><br></div><div>* The private no args constructor is redundant because there&#39;s already a ctor with args</div><div><br></div><div>=== Queries ===</div><div><br></div><div>* Maybe it&#39;s just me, but these are all a type of query and have some things in common. It makes sense to me, and we could make things DRY by pulling those things out into a common interface (maybe also use generics) and cut down on the implementation a bit.</div>

<div><br></div><div>=== IdentityStore ====</div><div><br></div><div>* Having two executeQuery methods, one without the Range would be a little more user friendly when you don&#39;t want to use a range or don&#39;t need one.</div>

<div>* I see no point in having all the get, set, remove methods on IdentityStore. It blurs the line of what you would expect it to do based on its name and doesn&#39;t separate concerns. I would figure it would have retrieve and store methods for IdentityType, Group, Role and User then you&#39;d modify those objects as needed and store them when you&#39;re done just like with JPA entities.</div>

<div><br></div><div>=== SecurityConfigurationException / SecurityException ===</div><div><br></div><div>* We should remove the ctors that don&#39;t set a message. An exception w/o a message for the user is worthless.</div>

<div><br></div><div><br></div>-- <br>Jason Porter<br><a href="http://lightguard-jp.blogspot.com" target="_blank">http://lightguard-jp.blogspot.com</a><br><a href="http://twitter.com/lightguardjp" target="_blank">http://twitter.com/lightguardjp</a><br>

<br>Software Engineer<br>Open Source Advocate<br>Author of Seam Catch - Next Generation Java Exception Handling<br><br>PGP key id: 926CCFF5<br>PGP key available at: <a href="http://keyserver.net" target="_blank">keyserver.net</a>, <a href="http://pgp.mit.edu" target="_blank">pgp.mit.edu</a><br>