External Database Group store implementation

Implementation of the GroupStore API for using an external Database to hold username<-->group_name information.

Back in November 2013 (I believe) Anthony Colebourne started a discussion concerning building a custom Group source for uPortal that would work against an external Database source…

http://jasig.275507.n4.nabble.com/Custom-group-source-tt4661293.html

http://jasig.275507.n4.nabble.com/Custom-Group-Source-td4663482.html

We still have a requirement to be able to drive groups and group membership from an external database. To that end we have recently got round to doing the work to create an implementation of the GroupService to meet this requirement. 

this is the pull request of our implementation. It is heavily based on the smartLDAP implementation. Any comments / suggestions would be very much appreciated.

This implementation assumes no hierarchy in the groups held within the external database -- all groups are direct children of the Root Group for the GroupStore ('DB Root'). The implication being that DB backing this is the simplest possible structure (username <--> group_name pairs held in a single table). There is no reason why this could not be backed by more complex structures if required with changes to the supplied queries (implementors should change these for their own implementation anyway).

Best Regards
Chris