summaryrefslogtreecommitdiff
path: root/projects/net.wotonomy.web/src/main/java/net/wotonomy/web/WODirectActionRequestHandler.java
diff options
context:
space:
mode:
authorBenjamin Culkin <scorpress@gmail.com>2024-05-20 17:58:16 -0400
committerBenjamin Culkin <scorpress@gmail.com>2024-05-20 17:58:16 -0400
commit40a9d99496e098562f090fb7ffce9e749011b131 (patch)
tree437df24d65470582e943e494a52db8ed65a881ae /projects/net.wotonomy.web/src/main/java/net/wotonomy/web/WODirectActionRequestHandler.java
parentff072dfe782f6f22123cd4ba050828d35c0d0fbd (diff)
Formatting pass
Diffstat (limited to 'projects/net.wotonomy.web/src/main/java/net/wotonomy/web/WODirectActionRequestHandler.java')
-rw-r--r--projects/net.wotonomy.web/src/main/java/net/wotonomy/web/WODirectActionRequestHandler.java322
1 files changed, 141 insertions, 181 deletions
diff --git a/projects/net.wotonomy.web/src/main/java/net/wotonomy/web/WODirectActionRequestHandler.java b/projects/net.wotonomy.web/src/main/java/net/wotonomy/web/WODirectActionRequestHandler.java
index eac826b..228f387 100644
--- a/projects/net.wotonomy.web/src/main/java/net/wotonomy/web/WODirectActionRequestHandler.java
+++ b/projects/net.wotonomy.web/src/main/java/net/wotonomy/web/WODirectActionRequestHandler.java
@@ -21,201 +21,161 @@ package net.wotonomy.web;
import net.wotonomy.foundation.NSArray;
/**
-* An implementation of WORequestHandler that dispatches
-* DirectActions. <br><br>
-*
-* See WODirectAction for the rules for parsing a request.
-* In short, className defaults to "DirectAction", and the
-* action defaults to "default". The action class is expected
-* to have a constructor that takes a WORequest parameter.
-*
-* @author michael@mpowers.net
-* @author $Author: cgruber $
-* @version $Revision: 905 $
-*/
-public class WODirectActionRequestHandler
- extends WORequestHandler
-{
- public WOResponse handleRequest (WORequest aRequest)
- {
- WOResponse response = null;
-
- // no concurrent access is allowed to a user's session:
- // a user/browser/machine with multiple requests will have to wait.
- // NOTE: this forces a session creation for any direct action (!)
- synchronized ( aRequest.request.getSession() )
- {
- WOApplication application = aRequest.application();
- WOContext context = WOContext.contextWithRequest( aRequest );
-
- String className = "DirectAction";
- String actionName = "default";
- NSArray path = aRequest.requestHandlerPathArray();
- if ( path.count() > 0 )
- {
- className = path.objectAtIndex( 0 ).toString();
- if ( path.count() > 1 )
- {
- actionName = path.objectAtIndex( path.count() - 1 ).toString();
- }
- if ( path.count() > 2 )
- {
- for ( int i = 1; i < path.count()-1; i++ )
- {
- className = className + "." +
- path.objectAtIndex( i ).toString();
- }
- }
- }
-
- //FIXME: sessions are supposed to be lazily created for direct actions
-
- WOSession session = null;
-
- String sessionID = aRequest.sessionID();
- if ( sessionID != null )
- {
- session = application.restoreSessionWithID( sessionID, context );
- }
-
- if ( session == null )
- {
- session = application.createSessionForRequest( aRequest );
- if ( session == null )
- {
- response = application.handleSessionCreationErrorInContext( context );
- }
- else
- {
- session.setContext( context );
- }
- }
-
- context.setSession( session );
-
- application.awake();
- session.awake();
-
- try
- {
-
- if ( response == null )
- {
- Class c = null;
- c = application.getLocalClass( className );
- if ( ( c == null ) && ( path.count() == 1 ) )
- {
- actionName = className;
- className = "DirectAction";
- c = application.getLocalClass( className );
- }
- if ( c == null )
- {
- throw new RuntimeException(
- "Could not find class named \"" + className
- + "\": " );
- }
- java.lang.reflect.Constructor ctor =
- c.getConstructor( new Class[] { WORequest.class } );
-
- WODirectAction action = (WODirectAction)
- ctor.newInstance( new Object[] { aRequest } );
- action.context = context; //HACK: how else can action call pageWithName?
-
- WOActionResults result = action.performActionNamed( actionName );
- if ( result instanceof WOComponent )
- {
- //HACK: I'm not sure where this should have gone: seems hackish here.
- context.pushElement( (WOComponent) result );
- ((WOComponent)result).ensureAwakeInContext( context );
- //context.popElement();
- }
- response = result.generateResponse(); // calls session.savePage (?)
- if ( result instanceof WOComponent )
- {
- //HACK: I'm not sure where this should have gone: seems hackish here.
- ((WOComponent)result).sleep();
- }
- }
- }
- catch ( NoSuchMethodException exc )
- {
- WOResponse error = new WOResponse();
- exc.printStackTrace();
- error.setStatus( 404 ); // not found
- error.appendContentString(
- "Could not find request constructor for class named \""
- + className + "\": " );
- response = error;
- }
- catch ( Exception exc )
- {
- WOResponse error = new WOResponse();
- error.setStatus( 500 ); // error
- if ( exc.getMessage() != null )
- {
- error.appendContentString( exc.getMessage() );
- exc.printStackTrace();
- }
- else
- {
- error.appendContentString( exc.toString() );
- exc.printStackTrace();
- }
- response = error;
- }
-
- session.sleep();
- session.setContext( null );
- application.saveSessionForContext( context );
- application.sleep();
- }
- return response;
- }
-
+ * An implementation of WORequestHandler that dispatches DirectActions. <br>
+ * <br>
+ *
+ * See WODirectAction for the rules for parsing a request. In short, className
+ * defaults to "DirectAction", and the action defaults to "default". The action
+ * class is expected to have a constructor that takes a WORequest parameter.
+ *
+ * @author michael@mpowers.net
+ * @author $Author: cgruber $
+ * @version $Revision: 905 $
+ */
+public class WODirectActionRequestHandler extends WORequestHandler {
+ public WOResponse handleRequest(WORequest aRequest) {
+ WOResponse response = null;
+
+ // no concurrent access is allowed to a user's session:
+ // a user/browser/machine with multiple requests will have to wait.
+ // NOTE: this forces a session creation for any direct action (!)
+ synchronized (aRequest.request.getSession()) {
+ WOApplication application = aRequest.application();
+ WOContext context = WOContext.contextWithRequest(aRequest);
+
+ String className = "DirectAction";
+ String actionName = "default";
+ NSArray path = aRequest.requestHandlerPathArray();
+ if (path.count() > 0) {
+ className = path.objectAtIndex(0).toString();
+ if (path.count() > 1) {
+ actionName = path.objectAtIndex(path.count() - 1).toString();
+ }
+ if (path.count() > 2) {
+ for (int i = 1; i < path.count() - 1; i++) {
+ className = className + "." + path.objectAtIndex(i).toString();
+ }
+ }
+ }
+
+ // FIXME: sessions are supposed to be lazily created for direct actions
+
+ WOSession session = null;
+
+ String sessionID = aRequest.sessionID();
+ if (sessionID != null) {
+ session = application.restoreSessionWithID(sessionID, context);
+ }
+
+ if (session == null) {
+ session = application.createSessionForRequest(aRequest);
+ if (session == null) {
+ response = application.handleSessionCreationErrorInContext(context);
+ } else {
+ session.setContext(context);
+ }
+ }
+
+ context.setSession(session);
+
+ application.awake();
+ session.awake();
+
+ try {
+
+ if (response == null) {
+ Class c = null;
+ c = application.getLocalClass(className);
+ if ((c == null) && (path.count() == 1)) {
+ actionName = className;
+ className = "DirectAction";
+ c = application.getLocalClass(className);
+ }
+ if (c == null) {
+ throw new RuntimeException("Could not find class named \"" + className + "\": ");
+ }
+ java.lang.reflect.Constructor ctor = c.getConstructor(new Class[] { WORequest.class });
+
+ WODirectAction action = (WODirectAction) ctor.newInstance(new Object[] { aRequest });
+ action.context = context; // HACK: how else can action call pageWithName?
+
+ WOActionResults result = action.performActionNamed(actionName);
+ if (result instanceof WOComponent) {
+ // HACK: I'm not sure where this should have gone: seems hackish here.
+ context.pushElement((WOComponent) result);
+ ((WOComponent) result).ensureAwakeInContext(context);
+ // context.popElement();
+ }
+ response = result.generateResponse(); // calls session.savePage (?)
+ if (result instanceof WOComponent) {
+ // HACK: I'm not sure where this should have gone: seems hackish here.
+ ((WOComponent) result).sleep();
+ }
+ }
+ } catch (NoSuchMethodException exc) {
+ WOResponse error = new WOResponse();
+ exc.printStackTrace();
+ error.setStatus(404); // not found
+ error.appendContentString("Could not find request constructor for class named \"" + className + "\": ");
+ response = error;
+ } catch (Exception exc) {
+ WOResponse error = new WOResponse();
+ error.setStatus(500); // error
+ if (exc.getMessage() != null) {
+ error.appendContentString(exc.getMessage());
+ exc.printStackTrace();
+ } else {
+ error.appendContentString(exc.toString());
+ exc.printStackTrace();
+ }
+ response = error;
+ }
+
+ session.sleep();
+ session.setContext(null);
+ application.saveSessionForContext(context);
+ application.sleep();
+ }
+ return response;
+ }
+
}
/*
- * $Log$
- * Revision 1.2 2006/02/19 01:44:02 cgruber
- * Add xmlrpc files
- * Remove jclark and replace with dom4j and javax.xml.sax stuff
- * Re-work dependencies and imports so it all compiles.
+ * $Log$ Revision 1.2 2006/02/19 01:44:02 cgruber Add xmlrpc files Remove jclark
+ * and replace with dom4j and javax.xml.sax stuff Re-work dependencies and
+ * imports so it all compiles.
*
- * Revision 1.1 2006/02/16 13:22:22 cgruber
- * Check in all sources in eclipse-friendly maven-enabled packages.
+ * Revision 1.1 2006/02/16 13:22:22 cgruber Check in all sources in
+ * eclipse-friendly maven-enabled packages.
*
- * Revision 1.10 2003/03/28 17:26:18 mpowers
- * Implemented package support: Applications can now live in packages.
- * Better support for locating package local classes.
+ * Revision 1.10 2003/03/28 17:26:18 mpowers Implemented package support:
+ * Applications can now live in packages. Better support for locating package
+ * local classes.
*
- * Revision 1.9 2003/01/19 22:33:26 mpowers
- * Fixed problems with classpath and dynamic class loading.
- * Dynamic elements now pass on ensureAwakeInContext.
+ * Revision 1.9 2003/01/19 22:33:26 mpowers Fixed problems with classpath and
+ * dynamic class loading. Dynamic elements now pass on ensureAwakeInContext.
* Parser how handles <standalone/> tags.
*
- * Revision 1.8 2003/01/17 20:34:57 mpowers
- * Better handling for components and parents in the context's element stack.
+ * Revision 1.8 2003/01/17 20:34:57 mpowers Better handling for components and
+ * parents in the context's element stack.
*
- * Revision 1.7 2003/01/15 19:50:49 mpowers
- * Fixed issues with WOSession and Serializable.
- * Can now persist sessions between classloaders (hot swap of class impls).
+ * Revision 1.7 2003/01/15 19:50:49 mpowers Fixed issues with WOSession and
+ * Serializable. Can now persist sessions between classloaders (hot swap of
+ * class impls).
*
- * Revision 1.5 2003/01/13 22:25:00 mpowers
- * Request-response cycle is working with session and page persistence.
+ * Revision 1.5 2003/01/13 22:25:00 mpowers Request-response cycle is working
+ * with session and page persistence.
*
- * Revision 1.4 2003/01/09 21:16:49 mpowers
- * Bringing request-response cycle more into conformance.
+ * Revision 1.4 2003/01/09 21:16:49 mpowers Bringing request-response cycle more
+ * into conformance.
*
- * Revision 1.2 2002/12/17 14:57:44 mpowers
- * Minor corrections to WORequests's parsing, and updated javadocs.
+ * Revision 1.2 2002/12/17 14:57:44 mpowers Minor corrections to WORequests's
+ * parsing, and updated javadocs.
*
- * Revision 1.1.1.1 2000/12/21 15:53:19 mpowers
- * Contributing wotonomy.
+ * Revision 1.1.1.1 2000/12/21 15:53:19 mpowers Contributing wotonomy.
*
- * Revision 1.2 2000/12/20 16:25:50 michael
- * Added log to all files.
+ * Revision 1.2 2000/12/20 16:25:50 michael Added log to all files.
*
*
*/
-