package org.jboss.seam.navigation;
import org.jboss.seam.annotations.FlushModeType;
import org.jboss.seam.core.Conversation;
import org.jboss.seam.core.ConversationEntries;
import org.jboss.seam.core.ConversationEntry;
import org.jboss.seam.core.Manager;
import org.jboss.seam.core.Expressions.ValueExpression;
import org.jboss.seam.pageflow.Pageflow;
/**
*
* Demarcation of the conversation in pages.xml
*
* @author Gavin King
*/
public class ConversationControl
{
private boolean isBeginConversation;
private boolean isEndConversation;
private boolean isEndConversationBeforeRedirect;
private boolean isEndRootConversation;
private boolean join;
private boolean nested;
private FlushModeType flushMode;
private String pageflow;
private ValueExpression<Boolean> beginConversationCondition;
private ValueExpression<Boolean> endConversationCondition;
private String conversationName;
public boolean isBeginConversation()
{
return isBeginConversation;
}
public void setBeginConversation(boolean isBeginConversation)
{
this.isBeginConversation = isBeginConversation;
}
public boolean isEndConversation()
{
return isEndConversation;
}
public void setEndConversation(boolean isEndConversation)
{
this.isEndConversation = isEndConversation;
}
public void beginOrEndConversation()
{
if ( endConversation() )
{
if(isEndRootConversation)
{
Manager.instance().endRootConversation(isEndConversationBeforeRedirect);
}
else
{
Manager.instance().endConversation(isEndConversationBeforeRedirect);
}
}
if ( beginConversation() )
{
if (conversationName != null)
{
ConversationIdParameter param = Pages.instance().getConversationIdParameter(conversationName);
ConversationEntry ce = ConversationEntries.instance().getConversationEntry(param.getConversationId());
if (ce != null)
{
ce.redirect();
return;
}
}
boolean begun = Conversation.instance().begin(join, nested);
if (begun)
{
if ( flushMode!=null )
{
Conversation.instance().changeFlushMode(flushMode);
}
if ( pageflow!=null )
{
Pageflow.instance().begin(pageflow);
}
}
}
}
private boolean beginConversation()
{
return isBeginConversation &&
(beginConversationCondition==null || Boolean.TRUE.equals( beginConversationCondition.getValue() ) );
}
private boolean endConversation()
{
return isEndConversation &&
(endConversationCondition==null || Boolean.TRUE.equals( endConversationCondition.getValue() ) );
}
public FlushModeType getFlushMode()
{
return flushMode;
}
public void setFlushMode(FlushModeType flushMode)
{
this.flushMode = flushMode;
}
public boolean isJoin()
{
return join;
}
public void setJoin(boolean join)
{
this.join = join;
}
public boolean isNested()
{
return nested;
}
public void setNested(boolean nested)
{
this.nested = nested;
}
public String getPageflow()
{
return pageflow;
}
public void setPageflow(String pageflow)
{
this.pageflow = pageflow;
}
public boolean isEndConversationBeforeRedirect()
{
return isEndConversationBeforeRedirect;
}
public void setEndConversationBeforeRedirect(boolean isEndConversationBeforeRedirect)
{
this.isEndConversationBeforeRedirect = isEndConversationBeforeRedirect;
}
public boolean isEndRootConversation()
{
return isEndConversationBeforeRedirect;
}
public void setEndRootConversation(boolean isEndRootConversation)
{
this.isEndRootConversation = isEndRootConversation;
}
public ValueExpression<Boolean> getBeginConversationCondition()
{
return beginConversationCondition;
}
public void setBeginConversationCondition(ValueExpression<Boolean> beginConversationCondition)
{
this.beginConversationCondition = beginConversationCondition;
}
public ValueExpression<Boolean> getEndConversationCondition()
{
return endConversationCondition;
}
public void setEndConversationCondition(ValueExpression<Boolean> endConversationCondition)
{
this.endConversationCondition = endConversationCondition;
}
public String getConversationName()
{
return conversationName;
}
public void setConversationName(String conversationName)
{
this.conversationName = conversationName;
}
}