Include Page | ||||
---|---|---|---|---|
|
- Download the latest Grouper 1.4 branch
- cvs -d:pserver:anoncvs@anoncvs.internet2.edu:/home/cvs/i2mi login
- cvs -d:pserver:anoncvs@anoncvs.internet2.edu:/home/cvs/i2mi export -r GROUPER_1_4_BRANCH grouper
- In grouper dir, run: ant dist
- Start the database (hsql in this case, could be mysql/postgres/oracle also):
- F:\temp\grouper1.4\bin>java -cp ..\lib\jdbcSamples\hsqldb.jar org.hsqldb.Server -database.0 file:grouper -dbname.0 grouper
- Add tables: (unix) bin> gsh.sh -registry -runscript (windows): bin>gsh -registry -runscript
- (note: this is using hsql, you can do a similar thing on mysql or postgres or oracle)
- You should now be able to browse the DB with hsqlManager or whatever tool you use to admin the db
- (hsql) bin>java -cp ..\lib\jdbcSamples\hsqldb.jar org.hsqldb.util.DatabaseManager -url jdbc:hsqldb:hsql://localhost/grouper
- Check tables: bin> gsh.sh -registry -check
- Should output: NOTE: database table/object structure (ddl) is up to date
- Start gsh and add a subject: bin> gsh.sh
gsh 10% addSubject("mchyzer", "person", "Chris Hyzer")
hibernatesubject: id='mchyzer' type='person' name='Chris Hyzer'
gsh 11% SubjectFinder.findById("mchyzer", "person").getAttributes()
gsh 12% exitNo Format java.util.HashMap: {LFNAME=[null], LOGINID=[null]}
- Make a directory under src/grouper called "poc" (proof of concept)
- Add a java source file of this name "src/grouper/poc/MyGrouperJdbcSourceAdapter.java" with these contents:
* Edit the sources.xml, and instead of:No Format /* * @author mchyzer * $Id$ */ package poc; import java.util.Set; import org.apache.commons.lang.StringUtils; import edu.internet2.middleware.grouper.subj.GrouperJdbcSourceAdapter; import edu.internet2.middleware.grouper.util.GrouperUtil; import edu.internet2.middleware.subject.Subject; import edu.internet2.middleware.subject.SubjectNotFoundException; import edu.internet2.middleware.subject.SubjectNotUniqueException; /** * */ public class MyGrouperJdbcSourceAdapter extends GrouperJdbcSourceAdapter { /** * as an example, concatenate two attributes together, store as a third attribute * @param subject */ private void decorateSubject(Subject subject) { if (subject != null) { String idNameLoginid = subject.getId() + " " + subject.getName() + " " + StringUtils.defaultString(subject.getAttributeValue("LOGINID")); subject.getAttributes().put("idNameLoginid", idNameLoginid); } } @Override public Subject getSubject(String id) throws SubjectNotFoundException, SubjectNotUniqueException { Subject subject = super.getSubject(id); decorateSubject(subject); return subject; } @Override public Subject getSubjectByIdentifier(String id) throws SubjectNotFoundException, SubjectNotUniqueException { Subject subject = super.getSubjectByIdentifier(id); decorateSubject(subject); return subject; } @Override public Set<Subject> search(String searchValue) { Set<Subject> subjectSet = super.search(searchValue); for (Subject subject : GrouperUtil.nonNull(subjectSet)) { decorateSubject(subject); } return subjectSet; } }
<source adapterClass="edu.internet2.middleware.grouper.subj.GrouperJdbcSourceAdapter">
<id>jdbc</id>
Change it to:
<source adapterClass="poc.MyGrouperJdbcSourceAdapter">
<id>jdbc</id> - Do another "ant dist" from GROUPER_HOME
- Start gsh from the bin dir, search for the subject again, see the new attribute: idNameLoginid
No Format gsh 0% SubjectFinder.findById("mchyzer", "person").getAttributes() java.util.HashMap: {LFNAME=[null], idNameLoginid=mchyzer Chris Hyzer , LOGINID=[null]} gsh 1%
- Note, after major upgrades of Grouper versions, you should test this to make sure it is still accurate...