package org.jboss.seam.framework;
import java.io.Serializable;
import java.util.Map;
import javax.faces.context.FacesContext;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
import org.jboss.seam.Component;
import org.jboss.seam.annotations.Logger;
import org.jboss.seam.contexts.Context;
import org.jboss.seam.contexts.Contexts;
import org.jboss.seam.core.ClassValidator;
import org.jboss.seam.core.Conversation;
import org.jboss.seam.core.Events;
import org.jboss.seam.core.Expressions;
import org.jboss.seam.core.Interpolator;
import org.jboss.seam.core.Validators;
import org.jboss.seam.core.Expressions.ValueExpression;
import org.jboss.seam.faces.FacesMessages;
import org.jboss.seam.faces.HttpError;
import org.jboss.seam.faces.Redirect;
import org.jboss.seam.faces.Renderer;
import org.jboss.seam.faces.Validation;
import org.jboss.seam.international.Messages;
import org.jboss.seam.international.StatusMessages;
import org.jboss.seam.log.Log;
import org.jboss.seam.security.Identity;
import org.jboss.seam.transaction.Transaction;
import org.jboss.seam.web.Session;
/**
* Base class for controller objects. Provides various
* helper methods that help slightly reduce the code
* required to create a Seam component that acts as
* a controller.
*
* @author Gavin King
*
*/
public abstract class Controller implements Serializable
{
@Logger Log log;
protected Context getApplicationContext()
{
return Contexts.getApplicationContext();
}
protected Context getBusinessProcessContext()
{
return Contexts.getBusinessProcessContext();
}
protected Context getConversationContext()
{
return Contexts.getConversationContext();
}
protected Context getEventContext()
{
return Contexts.getEventContext();
}
protected Events getEvents()
{
return Events.instance();
}
protected Conversation getConversation()
{
return Conversation.instance();
}
@Deprecated
protected FacesMessages getFacesMessages()
{
return FacesMessages.instance();
}
protected StatusMessages getStatusMessages()
{
return StatusMessages.instance();
}
protected Identity getIdentity()
{
return Identity.instance();
}
protected Cookie getCookie(String name)
{
return (Cookie) FacesContext.getCurrentInstance().getExternalContext()
.getRequestCookieMap().get(name);
}
protected void addCookie(Cookie cookie)
{
( (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext()
.getResponse() ).addCookie(cookie);
}
protected void addFacesMessage(String messageTemplate, Object... params)
{
getFacesMessages().add(messageTemplate, params);
}
protected void addFacesMessageFromResourceBundle(String key, Object... params)
{
getFacesMessages().addFromResourceBundle(key, params);
}
protected String render(String path)
{
return Renderer.instance().render(path);
}
protected void sendHttpError(int code)
{
HttpError.instance().send(code);
}
protected void sendHttpError(int code, String message)
{
HttpError.instance().send(code, message);
}
protected Log getLog()
{
return log;
}
protected Map<String, String> getMessages()
{
return Messages.instance();
}
protected Context getMethodContext()
{
return Contexts.getMethodContext();
}
protected Context getPageContext()
{
return Contexts.getPageContext();
}
protected Redirect getRedirect()
{
return Redirect.instance();
}
protected Context getSessionContext()
{
return Contexts.getSessionContext();
}
protected FacesContext getFacesContext()
{
return FacesContext.getCurrentInstance();
}
protected boolean validationSucceeded()
{
return Validation.instance().isSucceeded();
}
protected boolean validationFailed()
{
return Validation.instance().isFailed();
}
protected void failValidation()
{
Validation.instance().fail();
}
protected String interpolate(String string, Object... params)
{
return Interpolator.instance().interpolate(string, params);
}
protected <T> ClassValidator<T> getValidator(Class<T> modelClass)
{
return Validators.instance().getValidator(modelClass);
}
protected <T> ClassValidator<T> getValidator(T model)
{
return Validators.instance().getValidator(model);
}
protected void debug(Object object, Object... params)
{
log.debug(object, params);
}
protected void debug(Object object, Throwable t, Object... params)
{
log.debug(object, t, params);
}
protected void error(Object object, Object... params)
{
log.error(object, params);
}
protected void error(Object object, Throwable t, Object... params)
{
log.error(object, t, params);
}
protected void fatal(Object object, Object... params)
{
log.fatal(object, params);
}
protected void fatal(Object object, Throwable t, Object... params)
{
log.fatal(object, t, params);
}
protected void info(Object object, Object... params)
{
log.info(object, params);
}
protected void info(Object object, Throwable t, Object... params)
{
log.info(object, t, params);
}
protected void trace(Object object, Object... params)
{
log.trace(object, params);
}
protected void trace(Object object, Throwable t, Object... params)
{
log.trace(object, t, params);
}
protected void warn(Object object, Object... params)
{
log.warn(object, params);
}
protected void warn(Object object, Throwable t, Object... params)
{
log.warn(object, t, params);
}
protected void raiseAsynchronousEvent(String type, Object... parameters)
{
getEvents().raiseAsynchronousEvent(type, parameters);
}
protected void raiseEvent(String type, Object... parameters)
{
getEvents().raiseEvent(type, parameters);
}
protected void raiseTransactionSuccessEvent(String type, Object... parameters)
{
getEvents().raiseTransactionSuccessEvent(type, parameters);
}
protected Object getComponentInstance(String name)
{
return Component.getInstance(name);
}
protected Object getComponentInstance(Class clazz)
{
return Component.getInstance(clazz);
}
protected void invalidateSession()
{
Session.instance().invalidate();
}
protected boolean isTransactionMarkedRollback()
{
try
{
return Transaction.instance().isMarkedRollback();
}
catch (Exception e)
{
return false;
}
}
protected <T> T evaluateValueExpression(String expression, Class<T> type)
{
return createValueExpression(expression, type).getValue();
}
protected Object evaluateValueExpression(String expression)
{
return createValueExpression(expression).getValue();
}
protected <T> ValueExpression<T> createValueExpression(String expression, Class<T> type)
{
return Expressions.instance().createValueExpression(expression, type);
}
protected ValueExpression createValueExpression(String expression)
{
return createValueExpression(expression, Object.class);
}
}