Example usage for org.springframework.web.servlet ModelAndView getViewName

List of usage examples for org.springframework.web.servlet ModelAndView getViewName

Introduction

In this page you can find the example usage for org.springframework.web.servlet ModelAndView getViewName.

Prototype

@Nullable
public String getViewName() 

Source Link

Document

Return the view name to be resolved by the DispatcherServlet via a ViewResolver, or null if we are using a View object.

Usage

From source file:net.nicholaswilliams.java.teamcity.plugin.buildNumber.TestSharedBuildNumberController.java

@Test
public void testDoHandleListPage05() throws IOException, ServletException {
    this.setUpSecurity();

    SharedBuildNumber bn1 = new SharedBuildNumber(12);
    bn1.setName("hello");

    SharedBuildNumber bn2 = new SharedBuildNumber(22);
    bn2.setName("world");

    SortedSet<SharedBuildNumber> set = new TreeSet<SharedBuildNumber>(new Comparator<SharedBuildNumber>() {
        @Override//from  ww w.j a va2 s.c o  m
        public int compare(SharedBuildNumber left, SharedBuildNumber right) {
            return left.getName().compareTo(right.getName());
        }
    });
    set.add(bn1);
    set.add(bn2);

    expect(this.request.getParameter("action")).andReturn("list");
    expect(this.request.getMethod()).andReturn("POST");
    expect(this.request.getParameter("direction")).andReturn("asc");
    expect(this.request.getParameter("sort")).andReturn("name");
    expect(this.service.getAllSharedBuildNumbersSortedByName(false)).andReturn(set);

    replay(this.service, this.request, this.response);

    ModelAndView modelAndView = this.controller.doHandle(this.request, this.response);

    assertNotNull("The model and view should not be null.", modelAndView);
    assertEquals("The view is not correct.", "/plugin/" + testNum + "/jsp/list.jsp",
            modelAndView.getViewName());

    Map<String, Object> model = modelAndView.getModel();

    assertNotNull("The model should not be null.", model);
    assertEquals("sortedBy is not correct.", "name", model.get("sortedBy"));
    assertEquals("sortClass is not correct.", "sortedAsc", model.get("sortClass"));
    assertEquals("sortChange is not correct.", "desc", model.get("sortChange"));
    assertEquals("sbnParameterPrefix is not correct.", BuildNumberPropertiesProvider.PARAMETER_PREFIX,
            model.get("sbnParameterPrefix"));
    assertEquals("numResults is not correct.", 2, model.get("numResults"));
    assertSame("buildNumbers is not correct.", set, model.get("buildNumbers"));
}

From source file:org.terasoluna.gfw.web.logging.TraceLoggingInterceptor.java

/**
 * Logic to output end log/*from   w  w w. ja va  2 s  .c o  m*/
 * <p>
 * Outputs the end log.<br>
 * Outputs warning log if difference of time between start time and end time is more than the nano-seconds value<br>
 * set as warning log output timing.
 * </p>
 * @see org.springframework.web.servlet.handler.HandlerInterceptorAdapter#postHandle(javax.servlet.http.HttpServletRequest,
 *      javax.servlet.http.HttpServletResponse, java.lang.Object, org.springframework.web.servlet.ModelAndView)
 */
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
        ModelAndView modelAndView) {

    if (!(handler instanceof HandlerMethod)) {
        return;
    }

    long startTime = 0;
    if (request.getAttribute(START_ATTR) != null) {
        startTime = ((Long) request.getAttribute(START_ATTR)).longValue();
    }
    long handlingTime = System.nanoTime() - startTime;
    request.removeAttribute(START_ATTR);
    request.setAttribute(HANDLING_ATTR, handlingTime);
    String formattedHandlingTime = String.format("%1$,3d", handlingTime);

    boolean isWarnHandling = handlingTime > warnHandlingNanos;

    if (!isEnabledLogLevel(isWarnHandling)) {
        return;
    }

    HandlerMethod handlerMethod = (HandlerMethod) handler;
    Method m = handlerMethod.getMethod();
    Object view = null;
    Map<String, Object> model = null;
    if (modelAndView != null) {
        view = modelAndView.getView();
        model = modelAndView.getModel();
        if (view == null) {
            view = modelAndView.getViewName();
        }
    }

    logger.trace("[END CONTROLLER  ] {}.{}({})-> view={}, model={}",
            new Object[] { m.getDeclaringClass().getSimpleName(), m.getName(), buildMethodParams(handlerMethod),
                    view, model });
    String handlingTimeMessage = "[HANDLING TIME   ] {}.{}({})-> {} ns";
    if (isWarnHandling) {
        logger.warn(handlingTimeMessage + " > {}", new Object[] { m.getDeclaringClass().getSimpleName(),
                m.getName(), buildMethodParams(handlerMethod), formattedHandlingTime, warnHandlingNanos });
    } else {
        logger.trace(handlingTimeMessage, new Object[] { m.getDeclaringClass().getSimpleName(), m.getName(),
                buildMethodParams(handlerMethod), formattedHandlingTime });
    }
}

From source file:net.nicholaswilliams.java.teamcity.plugin.buildNumber.TestSharedBuildNumberController.java

@Test
public void testDoHandleAddBuildNumberPost02() throws IOException, ServletException {
    this.setUpSecurity();

    expect(this.request.getParameter("action")).andReturn("add");
    expect(this.request.getMethod()).andReturn("POST");
    expect(this.request.getParameter("name")).andReturn("Hello");
    expect(this.request.getParameter("description")).andReturn("This is a description.");
    expect(this.request.getParameter("format")).andReturn("1.0.0.{D}");
    expect(this.request.getParameter("dateFormat")).andReturn("Ym");
    expect(this.request.getParameter("counter")).andReturn("-16");

    replay(this.service, this.request, this.response);

    ModelAndView modelAndView = this.controller.doHandle(this.request, this.response);

    assertNotNull("The model and view should not be null.", modelAndView);
    assertEquals("The view is not correct.", "/plugin/" + testNum + "/jsp/addBuildNumber.jsp",
            modelAndView.getViewName());

    Map<String, Object> model = modelAndView.getModel();
    assertNotNull("The model should not be null.", model);

    Object object = model.get(BindingResult.MODEL_KEY_PREFIX + "sharedBuildNumberForm");
    assertNotNull("The binding result attribute should not be null.", object);
    assertTrue("The binding result attribute should be a binding result object.",
            object instanceof BindingResult);

    BindingResult result = (BindingResult) object;
    assertEquals("The binding result object name is not correct.", "sharedBuildNumberForm",
            result.getObjectName());/*from ww w .  jav  a 2  s  .  c  om*/
    assertTrue("The binding result should have errors.", result.hasErrors());
    assertEquals("The binding result should have 2 errors.", 2, result.getErrorCount());

    List<FieldError> errors = result.getFieldErrors();
    assertNotNull("The list of errors should not be null.", errors);
    assertEquals("The list length is not correct.", 2, errors.size());
    assertEquals("The first error is not correct.", "counter", errors.get(0).getField());
    assertEquals("The first error has the wrong message.", "The counter must be a positive integer.",
            errors.get(0).getDefaultMessage());
    assertEquals("The second error is not correct.", "dateFormat", errors.get(1).getField());
    assertEquals("The second error has the wrong message.",
            "The date format must be at least 3 characters long.", errors.get(1).getDefaultMessage());

    object = model.get("sharedBuildNumberForm");
    assertNotNull("sharedBuildNumberForm should not be null.", object);
    assertTrue("sharedBuildNumberForm should be a SharedBuildNumber.", object instanceof SharedBuildNumber);

    SharedBuildNumber form = (SharedBuildNumber) object;
    assertEquals("The name is not correct.", "Hello", form.getName());
    assertEquals("The description is not correct.", "This is a description.", form.getDescription());
    assertEquals("The format is not correct.", "1.0.0.{D}", form.getFormat());
    assertEquals("The date format is not correct.", "Ym", form.getDateFormat());
    assertEquals("The counter is not correct.", 1, form.getCounter());
}

From source file:net.nicholaswilliams.java.teamcity.plugin.buildNumber.TestSharedBuildNumberController.java

@Test
public void testDoHandleAddBuildNumberPost01() throws IOException, ServletException {
    this.setUpSecurity();

    expect(this.request.getParameter("action")).andReturn("add");
    expect(this.request.getMethod()).andReturn("POST");
    expect(this.request.getParameter("name")).andReturn("help");
    expect(this.request.getParameter("description")).andReturn("");
    expect(this.request.getParameter("format")).andReturn("{0");
    expect(this.request.getParameter("dateFormat")).andReturn("Ym");
    expect(this.request.getParameter("counter")).andReturn("15.1");

    replay(this.service, this.request, this.response);

    ModelAndView modelAndView = this.controller.doHandle(this.request, this.response);

    assertNotNull("The model and view should not be null.", modelAndView);
    assertEquals("The view is not correct.", "/plugin/" + testNum + "/jsp/addBuildNumber.jsp",
            modelAndView.getViewName());

    Map<String, Object> model = modelAndView.getModel();
    assertNotNull("The model should not be null.", model);

    Object object = model.get(BindingResult.MODEL_KEY_PREFIX + "sharedBuildNumberForm");
    assertNotNull("The binding result attribute should not be null.", object);
    assertTrue("The binding result attribute should be a binding result object.",
            object instanceof BindingResult);

    BindingResult result = (BindingResult) object;
    assertEquals("The binding result object name is not correct.", "sharedBuildNumberForm",
            result.getObjectName());/*from ww w  .  j a  v a  2s .c  om*/
    assertTrue("The binding result should have errors.", result.hasErrors());
    assertEquals("The binding result should have 3 errors.", 3, result.getErrorCount());

    List<FieldError> errors = result.getFieldErrors();
    assertNotNull("The list of errors should not be null.", errors);
    assertEquals("The list length is not correct.", 3, errors.size());
    assertEquals("The first error is not correct.", "counter", errors.get(0).getField());
    assertEquals("The first error has the wrong message.", "The counter must be a positive integer.",
            errors.get(0).getDefaultMessage());
    assertEquals("The second error is not correct.", "name", errors.get(1).getField());
    assertEquals("The second error has the wrong message.",
            "The name must be between 5 and 60 characters long.", errors.get(1).getDefaultMessage());
    assertEquals("The third error is not correct.", "format", errors.get(2).getField());
    assertEquals("The third error has the wrong message.",
            "The build number format must be at least 3 characters long.", errors.get(2).getDefaultMessage());

    object = model.get("sharedBuildNumberForm");
    assertNotNull("sharedBuildNumberForm should not be null.", object);
    assertTrue("sharedBuildNumberForm should be a SharedBuildNumber.", object instanceof SharedBuildNumber);

    SharedBuildNumber form = (SharedBuildNumber) object;
    assertEquals("The name is not correct.", "help", form.getName());
    assertEquals("The description is not correct.", "", form.getDescription());
    assertEquals("The format is not correct.", "{0", form.getFormat());
    assertEquals("The date format is not correct.", "Ym", form.getDateFormat());
    assertEquals("The counter is not correct.", 1, form.getCounter());
}

From source file:net.nicholaswilliams.java.teamcity.plugin.buildNumber.TestSharedBuildNumberController.java

@Test
public void testDoHandleEditBuildNumberPost03() throws IOException, ServletException {
    this.setUpSecurity();

    SharedBuildNumber originalNumber = new SharedBuildNumber(26);

    expect(this.request.getParameter("action")).andReturn("edit");
    expect(this.request.getMethod()).andReturn("POST");
    expect(this.request.getParameter("id")).andReturn("26");
    expect(this.service.getSharedBuildNumber(26)).andReturn(originalNumber);
    expect(this.request.getParameter("name")).andReturn("Hello");
    expect(this.request.getParameter("description")).andReturn("This is a description.");
    expect(this.request.getParameter("format")).andReturn("1.0.0.{D}");
    expect(this.request.getParameter("dateFormat")).andReturn("Ym");
    expect(this.request.getParameter("counter")).andReturn("-16");

    replay(this.service, this.request, this.response);

    ModelAndView modelAndView = this.controller.doHandle(this.request, this.response);

    assertNotNull("The model and view should not be null.", modelAndView);
    assertEquals("The view is not correct.", "/plugin/" + testNum + "/jsp/editBuildNumber.jsp",
            modelAndView.getViewName());

    Map<String, Object> model = modelAndView.getModel();
    assertNotNull("The model should not be null.", model);
    assertEquals("sbnParameterPrefix is not correct.", BuildNumberPropertiesProvider.PARAMETER_PREFIX,
            model.get("sbnParameterPrefix"));

    Object object = model.get(BindingResult.MODEL_KEY_PREFIX + "sharedBuildNumberForm");
    assertNotNull("The binding result attribute should not be null.", object);
    assertTrue("The binding result attribute should be a binding result object.",
            object instanceof BindingResult);

    BindingResult result = (BindingResult) object;
    assertEquals("The binding result object name is not correct.", "sharedBuildNumberForm",
            result.getObjectName());/*from  www . j av  a 2 s  . c o m*/
    assertTrue("The binding result should have errors.", result.hasErrors());
    assertEquals("The binding result should have 2 errors.", 2, result.getErrorCount());

    List<FieldError> errors = result.getFieldErrors();
    assertNotNull("The list of errors should not be null.", errors);
    assertEquals("The list length is not correct.", 2, errors.size());
    assertEquals("The first error is not correct.", "counter", errors.get(0).getField());
    assertEquals("The first error has the wrong message.", "The counter must be a positive integer.",
            errors.get(0).getDefaultMessage());
    assertEquals("The second error is not correct.", "dateFormat", errors.get(1).getField());
    assertEquals("The second error has the wrong message.",
            "The date format must be at least 3 characters long.", errors.get(1).getDefaultMessage());

    object = model.get("sharedBuildNumberForm");
    assertNotNull("sharedBuildNumberForm should not be null.", object);
    assertTrue("sharedBuildNumberForm should be a SharedBuildNumber.", object instanceof SharedBuildNumber);

    SharedBuildNumber form = (SharedBuildNumber) object;
    assertEquals("The name is not correct.", "Hello", form.getName());
    assertEquals("The description is not correct.", "This is a description.", form.getDescription());
    assertEquals("The format is not correct.", "1.0.0.{D}", form.getFormat());
    assertEquals("The date format is not correct.", "Ym", form.getDateFormat());
    assertEquals("The counter is not correct.", 1, form.getCounter());
}

From source file:net.nicholaswilliams.java.teamcity.plugin.buildNumber.TestSharedBuildNumberController.java

@Test
public void testDoHandleEditBuildNumberPost02() throws IOException, ServletException {
    this.setUpSecurity();

    SharedBuildNumber originalNumber = new SharedBuildNumber(37);

    expect(this.request.getParameter("action")).andReturn("edit");
    expect(this.request.getMethod()).andReturn("POST");
    expect(this.request.getParameter("id")).andReturn("37");
    expect(this.service.getSharedBuildNumber(37)).andReturn(originalNumber);
    expect(this.request.getParameter("name")).andReturn("help");
    expect(this.request.getParameter("description")).andReturn("");
    expect(this.request.getParameter("format")).andReturn("{0");
    expect(this.request.getParameter("dateFormat")).andReturn("Ym");
    expect(this.request.getParameter("counter")).andReturn("15.1");

    replay(this.service, this.request, this.response);

    ModelAndView modelAndView = this.controller.doHandle(this.request, this.response);

    assertNotNull("The model and view should not be null.", modelAndView);
    assertEquals("The view is not correct.", "/plugin/" + testNum + "/jsp/editBuildNumber.jsp",
            modelAndView.getViewName());

    Map<String, Object> model = modelAndView.getModel();
    assertNotNull("The model should not be null.", model);
    assertEquals("sbnParameterPrefix is not correct.", BuildNumberPropertiesProvider.PARAMETER_PREFIX,
            model.get("sbnParameterPrefix"));

    Object object = model.get(BindingResult.MODEL_KEY_PREFIX + "sharedBuildNumberForm");
    assertNotNull("The binding result attribute should not be null.", object);
    assertTrue("The binding result attribute should be a binding result object.",
            object instanceof BindingResult);

    BindingResult result = (BindingResult) object;
    assertEquals("The binding result object name is not correct.", "sharedBuildNumberForm",
            result.getObjectName());/*from   www  .j a  va  2 s  .c om*/
    assertTrue("The binding result should have errors.", result.hasErrors());
    assertEquals("The binding result should have 3 errors.", 3, result.getErrorCount());

    List<FieldError> errors = result.getFieldErrors();
    assertNotNull("The list of errors should not be null.", errors);
    assertEquals("The list length is not correct.", 3, errors.size());
    assertEquals("The first error is not correct.", "counter", errors.get(0).getField());
    assertEquals("The first error has the wrong message.", "The counter must be a positive integer.",
            errors.get(0).getDefaultMessage());
    assertEquals("The second error is not correct.", "name", errors.get(1).getField());
    assertEquals("The second error has the wrong message.",
            "The name must be between 5 and 60 characters long.", errors.get(1).getDefaultMessage());
    assertEquals("The third error is not correct.", "format", errors.get(2).getField());
    assertEquals("The third error has the wrong message.",
            "The build number format must be at least 3 characters long.", errors.get(2).getDefaultMessage());

    object = model.get("sharedBuildNumberForm");
    assertNotNull("sharedBuildNumberForm should not be null.", object);
    assertTrue("sharedBuildNumberForm should be a SharedBuildNumber.", object instanceof SharedBuildNumber);

    SharedBuildNumber form = (SharedBuildNumber) object;
    assertEquals("The name is not correct.", "help", form.getName());
    assertEquals("The description is not correct.", "", form.getDescription());
    assertEquals("The format is not correct.", "{0", form.getFormat());
    assertEquals("The date format is not correct.", "Ym", form.getDateFormat());
    assertEquals("The counter is not correct.", 1, form.getCounter());
}

From source file:org.kmnet.com.fw.web.logging.TraceLoggingInterceptor.java

/**
 * Logic to output end log/*  w ww.  j  av  a2  s. co m*/
 * <p>
 * Outputs the end log.<br>
 * Outputs warning log if difference of time between start time and end time is more than the nano-seconds value<br>
 * set as warning log output timing.
 * </p>
 * @see org.springframework.web.servlet.handler.HandlerInterceptorAdapter#postHandle(javax.servlet.http.HttpServletRequest,
 *      javax.servlet.http.HttpServletResponse, java.lang.Object, org.springframework.web.servlet.ModelAndView)
 */
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
        ModelAndView modelAndView) {

    if (!(handler instanceof HandlerMethod)) {
        return;
    }

    long startTime = 0;
    if (request.getAttribute(START_ATTR) != null) {
        startTime = ((Long) request.getAttribute(START_ATTR)).longValue();
    }
    long handlingTime = System.nanoTime() - startTime;
    request.removeAttribute(START_ATTR);
    request.setAttribute(HANDLING_ATTR, handlingTime);
    String formattedHandlingTime = String.format("%1$,3d", handlingTime);

    boolean isWarnHandling = (handlingTime > warnHandlingNanos);

    if (isWarnHandling) {
        if (!logger.isWarnEnabled()) {
            return;
        }
    } else if (!logger.isTraceEnabled()) {
        return;
    }

    HandlerMethod handlerMethod = (HandlerMethod) handler;
    Method m = handlerMethod.getMethod();
    Object view = null;
    Map<String, Object> model = null;
    if (modelAndView != null) {
        view = modelAndView.getView();
        model = modelAndView.getModel();
        if (view == null) {
            view = modelAndView.getViewName();
        }
    }

    logger.trace("[END CONTROLLER  ] {}.{}({})-> view={}, model={}",
            new Object[] { m.getDeclaringClass().getSimpleName(), m.getName(), buildMethodParams(handlerMethod),
                    view, model });
    String handlingTimeMessage = "[HANDLING TIME   ] {}.{}({})-> {} ns";
    if (isWarnHandling) {
        logger.warn(handlingTimeMessage + " > {}", new Object[] { m.getDeclaringClass().getSimpleName(),
                m.getName(), buildMethodParams(handlerMethod), formattedHandlingTime, warnHandlingNanos });
    } else {
        logger.trace(handlingTimeMessage, new Object[] { m.getDeclaringClass().getSimpleName(), m.getName(),
                buildMethodParams(handlerMethod), formattedHandlingTime });
    }
}

From source file:de.hybris.telcotrail.storefront.interceptors.beforeview.CmsPageBeforeViewHandler.java

@Override
public void beforeView(final HttpServletRequest request, final HttpServletResponse response,
        final ModelAndView modelAndView) {
    modelAndView.addObject("cmsSite", cmsSiteService.getCurrentSite());

    // Look for the page in the model
    AbstractPageModel page = (AbstractPageModel) modelAndView.getModel()
            .get(AbstractPageController.CMS_PAGE_MODEL);
    if (page != null) {
        final AbstractPageModel previewPage = lookupPreviewPage(request);
        if (previewPage != null && !previewPage.equals(page)) {
            // Have a preview page that overrides the current page

            // Check that the preview page is the same type as the expected page
            if (!page.getClass().isInstance(previewPage)) {
                LOG.error("Preview page is of type [" + previewPage.getClass().getName()
                        + "] expected page of type [" + page.getClass().getName() + "]");
            } else {
                // Push the preview page into the model
                LOG.info("Replaced page [" + page + "] with preview page [" + previewPage + "]");
                modelAndView.addObject(AbstractPageController.CMS_PAGE_MODEL, previewPage);

                // Check to see if we are using the default view for the page
                if (modelAndView.getViewName() != null
                        && modelAndView.getViewName().equals(getViewForPage(page))) {
                    final String viewForPreviewPage = getViewForPage(previewPage);
                    if (viewForPreviewPage != null && !viewForPreviewPage.equals(modelAndView.getViewName())) {
                        // Change the view name
                        LOG.info("Changing view from [" + modelAndView.getViewName() + "] to preview view ["
                                + viewForPreviewPage + "]");
                        modelAndView.setViewName(viewForPreviewPage);
                    }//www .j  a  v a2s . c o m
                }

                page = previewPage;
            }
        }

        // Add the page to the request attribute "currentPage" which is then picked up by the CMSBodyTag, and then passed over to the CMS Cockpit
        request.setAttribute("currentPage", page);

        // Add the content slots to the page as a map of slots - keyed by position
        modelAndView.addObject(SLOTS_MODEL, getContentSlotsForPageAsMap(page));
    }
}

From source file:com.epam.cme.storefront.interceptors.beforeview.CmsPageBeforeViewHandler.java

@Override
public void beforeView(final HttpServletRequest request, final HttpServletResponse response,
        final ModelAndView modelAndView) {
    modelAndView.addObject("cmsSite", cmsSiteService.getCurrentSite());

    // Look for the page in the model
    AbstractPageModel page = (AbstractPageModel) modelAndView.getModel()
            .get(AbstractPageController.CMS_PAGE_MODEL);
    if (page != null) {
        final AbstractPageModel previewPage = lookupPreviewPage(request);
        if (previewPage != null && !previewPage.equals(page)) {
            // Have a preview page that overrides the current page

            // Check that the preview page is the same type as the expected page
            if (!page.getClass().isInstance(previewPage)) {
                LOG.error("Preview page is of type [" + previewPage.getClass().getName()
                        + "] expected page of type [" + page.getClass().getName() + "]");
            } else {
                // Push the preview page into the model
                LOG.info("Replaced page [" + page + "] with preview page [" + previewPage + "]");
                modelAndView.addObject(AbstractPageController.CMS_PAGE_MODEL, previewPage);

                // Check to see if we are using the default view for the page
                if (modelAndView.getViewName() != null
                        && modelAndView.getViewName().equals(getViewForPage(page))) {
                    final String viewForPreviewPage = getViewForPage(previewPage);
                    if (viewForPreviewPage != null && !viewForPreviewPage.equals(modelAndView.getViewName())) {
                        // Change the view name
                        LOG.info("Changing view from [" + modelAndView.getViewName() + "] to preview view ["
                                + viewForPreviewPage + "]");
                        modelAndView.setViewName(viewForPreviewPage);
                    }/*from www.  j a  v a2  s .c  om*/
                }

                page = previewPage;
            }
        }

        // Add the page to the request attribute "currentPage" which is then picked up by the
        // CMSBodyTag, and then passed over to the CMS Cockpit
        request.setAttribute("currentPage", page);

        // Add the content slots to the page as a map of slots - keyed by position
        modelAndView.addObject(SLOTS_MODEL, getContentSlotsForPageAsMap(page));
    }
}

From source file:com.acc.storefront.interceptors.beforeview.CmsPageBeforeViewHandler.java

protected AbstractPageModel updateCmsPageInModelAndView(final HttpServletRequest request,
        final ModelAndView modelAndView) {
    // Look for the page in the model
    final AbstractPageModel requestedPage = (AbstractPageModel) modelAndView.getModel()
            .get(AbstractPageController.CMS_PAGE_MODEL);
    if (requestedPage != null) {
        final AbstractPageModel previewPage = lookupPreviewPage(request);
        if (previewPage != null && !previewPage.equals(requestedPage)) {
            // Have a preview page that overrides the current page

            // Check that the preview page is the same type as the expected page
            if (!requestedPage.getClass().isInstance(previewPage)) {
                LOG.error("Preview page is of type [" + previewPage.getClass().getName()
                        + "] expected page of type [" + requestedPage.getClass().getName() + "]");
            } else {
                // Push the preview page into the model
                LOG.info("Replaced page [" + requestedPage + "] with preview page [" + previewPage + "]");
                modelAndView.addObject(AbstractPageController.CMS_PAGE_MODEL, previewPage);

                // Check to see if we are using the default view for the page
                if (modelAndView.getViewName() != null
                        && modelAndView.getViewName().equals(getViewForPage(requestedPage))) {
                    final String viewForPreviewPage = getViewForPage(previewPage);
                    if (viewForPreviewPage != null && !viewForPreviewPage.equals(modelAndView.getViewName())) {
                        // Change the view name
                        LOG.info("Changing view from [" + modelAndView.getViewName() + "] to preview view ["
                                + viewForPreviewPage + "]");
                        modelAndView.setViewName(viewForPreviewPage);
                    }/*  w ww  .  ja v a2s. co m*/
                }

                return previewPage;
            }
        }
    }
    return requestedPage;
}