1 16 package org.springframework.webflow.conversation.impl; 17 18 import org.springframework.webflow.context.ExternalContextHolder; 19 import org.springframework.webflow.conversation.Conversation; 20 import org.springframework.webflow.conversation.ConversationException; 21 import org.springframework.webflow.conversation.ConversationId; 22 import org.springframework.webflow.conversation.ConversationManager; 23 import org.springframework.webflow.conversation.ConversationParameters; 24 import org.springframework.webflow.core.collection.SharedAttributeMap; 25 import org.springframework.webflow.util.RandomGuidUidGenerator; 26 import org.springframework.webflow.util.UidGenerator; 27 28 34 public class SessionBindingConversationManager implements ConversationManager { 35 36 39 private static final String CONVERSATION_CONTAINER_KEY = "webflow.conversation.container"; 40 41 44 private UidGenerator conversationIdGenerator = new RandomGuidUidGenerator(); 45 46 49 private int maxConversations = -1; 50 51 54 public void setConversationIdGenerator(UidGenerator uidGenerator) { 55 this.conversationIdGenerator = uidGenerator; 56 } 57 58 62 public void setMaxConversations(int maxConversations) { 63 this.maxConversations = maxConversations; 64 } 65 66 public Conversation beginConversation(ConversationParameters conversationParameters) throws ConversationException { 67 ConversationId conversationId = new SimpleConversationId(conversationIdGenerator.generateUid()); 68 return getConversationContainer().createAndAddConversation(conversationId, conversationParameters); 69 } 70 71 public Conversation getConversation(ConversationId id) throws ConversationException { 72 return getConversationContainer().getConversation(id); 73 } 74 75 public ConversationId parseConversationId(String encodedId) throws ConversationException { 76 return new SimpleConversationId(conversationIdGenerator.parseUid(encodedId)); 77 } 78 79 81 86 private ConversationContainer getConversationContainer() { 87 SharedAttributeMap sessionMap = ExternalContextHolder.getExternalContext().getSessionMap(); 88 synchronized (sessionMap.getMutex()) { 89 ConversationContainer container = (ConversationContainer)sessionMap.get(CONVERSATION_CONTAINER_KEY); 90 if (container == null) { 91 container = new ConversationContainer(maxConversations); 92 sessionMap.put(CONVERSATION_CONTAINER_KEY, container); 93 } 94 return container; 95 } 96 } 97 } | Popular Tags |