From 55eeccf68e238d6642b1250180d28cb2a0ea7c9a Mon Sep 17 00:00:00 2001 From: Timothy Washington Date: Sun, 5 Jul 2009 18:41:00 -0400 Subject: [PATCH] fixing bookkeeping to add a user to the system instead of a 'users' block --- bin/bkell.sh | 1 + build.xml | 9 ++-- lib/log4j.properties | 8 +-- lib/spittoon.properties | 23 ++++++--- lib/spittoon/spittoon.jar | Bin 65212 -> 65408 bytes lib/zob/bob.jar | Bin 545823 -> 545852 bytes src/com/interrupt/bookkeeping/System.java | 39 ++++++++++++--- .../bookkeeping/cc/bkell/command/AddCommand.java | 3 ++ .../bookkeeping/http/TestBookkeepingServlet.java | 55 ++++++++++++++++++++- 9 files changed, 112 insertions(+), 26 deletions(-) diff --git a/bin/bkell.sh b/bin/bkell.sh index 1cec1da..ebf9b08 100755 --- a/bin/bkell.sh +++ b/bin/bkell.sh @@ -4,6 +4,7 @@ export BK_HOME=. export CP="\ .:\ $BK_HOME/xml/:\ +$BK_HOME/xml/http/:\ $BK_HOME/build/gen:\ $BK_HOME/build/src:\ $BK_HOME/build/test:\ diff --git a/build.xml b/build.xml index 4d831e7..4ee1be3 100755 --- a/build.xml +++ b/build.xml @@ -137,8 +137,8 @@ - - + + @@ -697,10 +697,11 @@ - + diff --git a/lib/log4j.properties b/lib/log4j.properties index 2b8672a..2d6248b 100755 --- a/lib/log4j.properties +++ b/lib/log4j.properties @@ -43,14 +43,14 @@ log4j.additivity.com.interrupt.bob.util.Util=false ## Bookkeeping log4j.logger.com.interrupt.bookkeeping.cc.bkell.Configure=WARN, CAppender, FAppender log4j.additivity.com.interrupt.bookkeeping.cc.bkell.Configure=false -log4j.logger.com.interrupt.bookkeeping.cc.ExpressionVisitor=DEBUG, CAppender, FAppender +log4j.logger.com.interrupt.bookkeeping.cc.ExpressionVisitor=WARN, CAppender, FAppender log4j.additivity.com.interrupt.bookkeeping.cc.ExpressionVisitor=false log4j.logger.com.interrupt.bookkeeping.cc.bkell.aauth.AuthenticateUserVisitor=WARN, CAppender, FAppender log4j.additivity.com.interrupt.bookkeeping.cc.bkell.aauth.AuthenticateUserVisitor=false log4j.logger.com.interrupt.bookkeeping.cc.bkell.command.LoginCommand=WARN, CAppender, FAppender log4j.additivity.com.interrupt.bookkeeping.cc.bkell.command.LoginCommand=false -log4j.logger.com.interrupt.bookkeeping.cc.bkell.command.AbstractCommand=DEBUG, CAppender, FAppender +log4j.logger.com.interrupt.bookkeeping.cc.bkell.command.AbstractCommand=WARN, CAppender, FAppender log4j.additivity.com.interrupt.bookkeeping.cc.bkell.command.LoginCommand=false log4j.logger.com.interrupt.bookkeeping.cc.lexer.Lexer=WARN, CAppender, FAppender @@ -68,9 +68,9 @@ log4j.additivity.com.interrupt.bookkeeping.cc.lexer.Lexer=false ## Spittoon -log4j.logger.com.interrupt.spittoon.SaveOrUpdateVisitor=DEBUG, CAppender, FAppender +log4j.logger.com.interrupt.spittoon.SaveOrUpdateVisitor=WARN, CAppender, FAppender log4j.additivity.com.interrupt.spittoon.SaveOrUpdateVisitor=false -log4j.logger.com.interrupt.spittoon.Spittoon=DEBUG, CAppender, FAppender +log4j.logger.com.interrupt.spittoon.Spittoon=WARN, CAppender, FAppender log4j.additivity.com.interrupt.spittoon.Spittoon=false diff --git a/lib/spittoon.properties b/lib/spittoon.properties index 9a4f4b2..6ab0ace 100644 --- a/lib/spittoon.properties +++ b/lib/spittoon.properties @@ -1,11 +1,12 @@ - # root directory Spittoon will use root.dir=rootDir + # eXist database parameter variables db.url=xmldb:exist:///db/ + db.uname=admin db.passwd= @@ -16,22 +17,28 @@ exist.home=. org.xml.sax.features.validation=false java.endorsed.dirs=lib/endorsed -db-1-config=confAauth.xml # needs to be named 'exist' ['aauthdb' desired], otherwise the database stalls with .lck files +# db-1-port=8081 +db-1-config=confAauth.xml db-1-id=exist +db-1-port=8080 + +# should we split the DB into 2 (aauthentication & groups) +db-split=false -#db-2-config=confGroups.xml -#db-2-id=groupsdb +# db-2-config=confGroups.xml +# db-2-id=groupsdb db-2-config=confAauth.xml db-2-id=exist +db-2-port=8080 # bob environment variables -bob.home=/Users/timothyw/Projects/Bookkeeping -bob.base=/Users/timothyw/Projects/Bookkeeping -bob.gen=/Users/timothyw/Projects/Bookkeeping/gen +bob.home=/Users/timothyw/Projects/Spittoon +bob.base=/Users/timothyw/Projects/Spittoon +bob.gen=/Users/timothyw/Projects/Spittoon/gen bob.end=.xml -bob.def=/Users/timothyw/Projects/Bookkeeping/xml/bookkeeping.system.xml +bob.def=/Users/timothyw/Projects/Spittoon/xml/bookkeeping.system.xml # mappings mapping.system=/system diff --git a/lib/spittoon/spittoon.jar b/lib/spittoon/spittoon.jar index 49fc13182d684f0801c935ee64684c3c95a14d5e..d9bc0a13c3fadb2a2319684975bfa8457c34355c 100644 GIT binary patch delta 12698 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 diff --git a/lib/zob/bob.jar b/lib/zob/bob.jar index cec3413242048757d0ed29aadd320da7334c5762..05542e6988f570efeeae3760aa262cd34b7623b0 100644 GIT binary patch delta 25500 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 Hr(jP33HxDc delta 25217 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 diff --git a/src/com/interrupt/bookkeeping/System.java b/src/com/interrupt/bookkeeping/System.java index 0b2a315..128882c 100755 --- a/src/com/interrupt/bookkeeping/System.java +++ b/src/com/interrupt/bookkeeping/System.java @@ -43,6 +43,11 @@ public class System extends com.interrupt.bookkeeping.GSystem { public void initialise() { + if(spittoon == null) { + + spittoon = new Spittoon(); + spittoon.initialise(); + } //1. initiliase and set your aauthentication //Aauthentication.instance().initialise(); //this.setAauthentication(Aauthentication.instance()); @@ -217,16 +222,34 @@ public class System extends com.interrupt.bookkeeping.GSystem { } public void addUser(User user) { - if( this.aauthenticationMediator == null ) { - - aauthenticationMediator = new AauthenticationMediator(); - this.setAauthenticationMediator(aauthenticationMediator); + try { + if( this.aauthenticationMediator == null ) { + + aauthenticationMediator = new AauthenticationMediator(); + this.setAauthenticationMediator(aauthenticationMediator); + + } + logger.debug("System.addUser: "+ user); + logger.debug("System.addUser USERS: "+ + ((Aauthentication)this.findAauthenticationById("main.authentication")).getUsers() ); + this.getAauthentication().addUser(user); + } + catch(RuntimeException t) { + Throwable cause = this.getRootCause(t); + cause.printStackTrace(); + //t.printStackTrace(); + } + } + + private Throwable getRootCause(Throwable t) { + + Throwable cause = t.getCause(); + if(cause != null) { + return this.getRootCause(t); } - logger.debug("System.addUser: "+ user); - logger.debug("System.addUser USERS: "+ - ((Aauthentication)this.findAauthenticationById("main.authentication")).getUsers() ); - this.getAauthentication().addUser(user); + return t; + } public void addGroupSetAssociatedBookkeeping(Group newGroup) { diff --git a/src/com/interrupt/bookkeeping/cc/bkell/command/AddCommand.java b/src/com/interrupt/bookkeeping/cc/bkell/command/AddCommand.java index daa8ddd..51b9582 100755 --- a/src/com/interrupt/bookkeeping/cc/bkell/command/AddCommand.java +++ b/src/com/interrupt/bookkeeping/cc/bkell/command/AddCommand.java @@ -50,6 +50,9 @@ public class AddCommand extends AddRemoveReverseCommon { Class defParams[] = { eachLiteral.getClass() }; IBob methParams[] = { eachLiteral }; + + logger.debug("adding >> treceiver["+treciever.getClass()+" / "+treciever+"] / token["+eachLiteral.getClass()+" / "+eachLiteral.getTagName() + +"] / defParams["+defParams+"] / methParams["+methParams+"]"); Util.evalReflectedAdd(treciever, eachLiteral.getTagName(), defParams, methParams); } diff --git a/test/com/interrupt/bookkeeping/http/TestBookkeepingServlet.java b/test/com/interrupt/bookkeeping/http/TestBookkeepingServlet.java index 706430e..23a756c 100755 --- a/test/com/interrupt/bookkeeping/http/TestBookkeepingServlet.java +++ b/test/com/interrupt/bookkeeping/http/TestBookkeepingServlet.java @@ -70,13 +70,64 @@ public class TestBookkeepingServlet extends ServletTestCase { logger.debug("TestBookkeepingServlet.setUp CALLED"); + //logger.debug("System Properties..."); + //java.lang.System.getProperties().list(System.out); + + // BEGIN + System.out.println("java.class.path["+ java.lang.System.getProperty("java.class.path") +"]"); + + String resourceName = "setup.aauthentication.xml"; + InputStream istream = this.getClass().getResourceAsStream(resourceName); + System.out.println("1. (\"setup.aauthentication.xml\") resoruce stream["+ istream +"]"); + + String resourceName2 = "/setup.aauthentication.xml"; + InputStream istream2 = this.getClass().getResourceAsStream(resourceName2); + System.out.println("2. (\"/setup.aauthentication.xml\") resoruce stream["+ istream2 +"]"); + + String resourceName3 = "/setup.aauthentication.xml"; + ClassLoader parent = this.getClass().getClassLoader().getParent(); + System.out.println("3. PARENT["+ parent +"]"); + InputStream istream3 = parent.getResourceAsStream(resourceName3); + System.out.println("3. PARENT > resoruce stream["+ istream3 +"]"); + + + InputStream is1 = this.getClass().getClassLoader().getResourceAsStream("setup.aauthentication.xml"); + InputStream is2 = this.getClass().getClassLoader().getResourceAsStream("/setup.aauthentication.xml"); + InputStream is3 = this.getClass().getClassLoader().getSystemResourceAsStream("setup.aauthentication.xml"); + InputStream is4 = this.getClass().getClassLoader().getSystemResourceAsStream("/setup.aauthentication.xml"); + + System.out.println("is1 ["+ is1 +"]"); + System.out.println("is2 ["+ is2 +"]"); + System.out.println("is3 ["+ is3 +"]"); + System.out.println("is4 ["+ is4 +"]"); + + + ClassLoader cloader = this.getClass().getClassLoader(); + System.out.println("ClassLoader["+ cloader.toString() +"]"); + + ClassLoader sloader = session.getClass().getClassLoader(); + System.out.println("Session ClassLoader["+ sloader.toString() +"]"); + + InputStream istream4 = session.getClass().getResourceAsStream(resourceName2); + System.out.println("4. (/session) resoruce stream["+ istream4 +"]"); + + istream4 = session.getClass().getResourceAsStream(resourceName); + System.out.println("4. (session) resoruce stream["+ istream4 +"]"); + + + String textString = Util.loadTextFile("setup.aauthentication.xml"); + System.out.println("RESULT [ "+ textString +" ]"); + + // END + + //** setup spittoon = new Spittoon(); spittoon.initialise(); spittoon.setupRoot(); - InputStream istreamAauth = this.getClass().getResourceAsStream("setup.aauthentication.xml"); - InputStream istreamGroups = this.getClass().getResourceAsStream("setup.groups.xml"); + InputStream istreamAauth = session.getClass().getResourceAsStream("setup.aauthentication.xml"); + InputStream istreamGroups = session.getClass().getResourceAsStream("setup.groups.xml"); String axml = Util.loadTextFile(istreamAauth); String gxml = Util.loadTextFile(istreamGroups); -- 2.11.4.GIT