提交 e192f603 编写于 作者: M Micha Kiener

SPR-6419, manager implementation

上级 21e9bfd0
......@@ -74,11 +74,11 @@ public enum JoinMode {
/**
* This mode is the same as {@link #ROOT} or {@link #NEW}, but it will not
* terminate the current one but rather switch it in order to still be
* available but the newly created one will become the current conversation.
* Using this mode assumes the manual ending and removing of the switched
* conversation as it is not terminated automatically, unless there is a
* timeout.
* implicitly ended as there might be more than one active, switched
* conversations. If there is a current, non-switched conversation, it is
* implicitly ended, however, if a switched one is the current one and a new
* one is created, it is not ended, so ending a switched conversation must
* either be cone manually or by specifying a timeout.
*/
SWITCHED;
......
......@@ -201,27 +201,31 @@ public class ConversationManagerImpl implements ConversationManager {
* org.springframework.conversation.JoinMode)
*/
public Conversation beginConversation(boolean temporary, JoinMode joinMode) {
// create a new conversation and initialize it
MutableConversation newConversation = createNewConversation();
ConversationResolver resolver = getConversationResolver();
ConversationStore store = getConversationStore();
MutableConversation currentConversation = silentlyCastConversation(getCurrentConversation());
MutableConversation newConversation = null;
// set the default timeout according the setup of this manager
newConversation.setTimeout(getDefaultConversationTimeout());
if (currentConversation == null || !joinMode.mustBeJoined()) {
// create a new conversation and initialize it
newConversation = createNewConversation();
// set the temporary flag of the newly created conversation and also
// assign it a newly created, unique id
newConversation.setTemporary(temporary);
newConversation.setId(createNewConversationId());
// set the default timeout according the setup of this manager
newConversation.setTimeout(getDefaultConversationTimeout());
ConversationResolver resolver = getConversationResolver();
ConversationStore store = getConversationStore();
store.registerConversation(newConversation);
// set the temporary flag of the newly created conversation and also
// assign it a newly created, unique id
newConversation.setTemporary(temporary);
newConversation.setId(createNewConversationId());
MutableConversation currentConversation = silentlyCastConversation(getCurrentConversation());
store.registerConversation(newConversation);
}
// check, if there is a current conversation
if (currentConversation != null) {
if (joinMode.mustBeJoined()) {
currentConversation.joinConversation();
return currentConversation;
}
if (joinMode.mustBeSwitched()) {
......@@ -248,8 +252,8 @@ public class ConversationManagerImpl implements ConversationManager {
}
}
// make the newly created conversation the current one, invoke listeners
// and return it
// make the newly created conversation the current one, invoke
// listeners and return it
resolver.setCurrentConversationId(newConversation.getId());
newConversation.activated(joinMode.mustBeSwitched() ? ConversationActivationType.SWITCHED
: ConversationActivationType.NEW, currentConversation);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册