/*
Name:
- DefaultUserRequestContext
Description:
-
Requires:
-
Provides:
-
Part of: ProcessPuzzle Framework, Domain and Business Model Ready Architecture. Provides content, workflow and social networking functionality.
http://www.processpuzzle.com
ProcessPuzzle - Content and Workflow Management Integration Business Platform
Author(s):
- Zsolt Zsuffa
Copyright: (C) 2011 This program is free software: you can redistribute it and/or modify it under the terms of the
GNU General Public License as published by the Free Software Foundation, either version 3 of the License,
or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.processpuzzle.user_session.domain;
import java.util.EmptyStackException;
import java.util.Stack;
import org.apache.log4j.NDC;
import com.processpuzzle.application.domain.Application;
/**
* Default implementation of a rampart request context. This implementation is audit friendly and will push and pop request ids onto Log4j NDC when
* pushId and popId are called.
*
* @author kkj
* @version $Revision: 1.1.1.1 $
* @since 26-09-2004 17:05:08
*/
public class DefaultUserRequestContext implements UserRequestContext {
private static final long serialVersionUID = 5685494565953921161L;
Stack<String> idStack;
private UserSession userSession;
public DefaultUserRequestContext() {
idStack = new Stack<String>();
}
public String toString() {
StringBuffer stringRep = new StringBuffer();
stringRep.append(DefaultUserRequestContext.class.getName()).append("[ids = ").append(idStack).append("} applicationSession={").append(
getUserSession()).append("}]");
return stringRep.toString();
}
/**
* Push a new request ID onto the stack of IDs. The ID will automatically be made available to Log4j via NDC.
*
* @param id
* The next request ID
*/
public void pushId(String id) {
NDC.push(id);
idStack.push(id);
}
/**
* Pop the top level ID from the stack of IDs for this request. The ID will also be popped from the Log4j NDC.
*
* @return The popped ID or null if no more IDs exist.
*/
public String popId() {
NDC.pop();
try {
return (String) idStack.pop();
} catch (EmptyStackException e) {
return null;
}
}
public String getId() {
try {
return (String) idStack.peek();
} catch (EmptyStackException e) {
return null;
}
}
public String[] getIds() {
return (String[]) idStack.toArray(new String[idStack.size()]);
}
/**
* Store an application session with this request
*
* @param applicationSession
*/
public void setUserSession(UserSession applicationSession) {
this.userSession = applicationSession;
}
public UserSession getUserSession() { return userSession; }
public Application getApplication() { return userSession.getApplication(); }
}