package org.apereo.cas.services.web.view;
import com.google.common.base.Throwables;
import org.apereo.cas.authentication.ProtocolAttributeEncoder;
import org.apereo.cas.services.ServicesManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.View;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
/**
* Renders and prepares CAS2 views. This view is responsible
* to simply just prep the base model, and delegates to
* a the real view to render the final output.
*
* @author Misagh Moayyed
* @since 4.1.0
*/
public abstract class AbstractDelegatingCasView extends AbstractCasView {
private static final Logger LOGGER = LoggerFactory.getLogger(AbstractDelegatingCasView.class);
/**
* View to delegate.
*/
protected View view;
public AbstractDelegatingCasView(final boolean successResponse,
final ProtocolAttributeEncoder protocolAttributeEncoder,
final ServicesManager servicesManager,
final String authenticationContextAttribute,
final View view) {
super(successResponse, protocolAttributeEncoder, servicesManager, authenticationContextAttribute);
this.view = view;
}
@Override
protected void renderMergedOutputModel(final Map<String, Object> model, final HttpServletRequest request,
final HttpServletResponse response) throws Exception {
try {
LOGGER.debug("Preparing the output model [{}] to render view [{}]", model.keySet(), getClass().getSimpleName());
prepareMergedOutputModel(model, request, response);
LOGGER.debug("Prepared output model with objects [{}]. Now rendering view...", model.keySet().toArray());
if (this.view != null) {
this.view.render(model, request, response);
} else {
LOGGER.warn("No view is available to render the output for [{}]", this.getClass().getName());
}
} catch (final Exception e) {
throw Throwables.propagate(e);
}
}
/**
* Prepare merged output model before final rendering.
*
* @param model the model
* @param request the request
* @param response the response
* @throws Exception the exception
*/
protected abstract void prepareMergedOutputModel(Map<String, Object> model, HttpServletRequest request,
HttpServletResponse response) throws Exception;
public View getView() {
return this.view;
}
public void setView(final View view) {
this.view = view;
}
}