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

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

Introduction

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

Prototype

public Map<String, Object> getModel() 

Source Link

Document

Return the model map.

Usage

From source file:au.com.gaiaresources.bdrs.controller.theme.ThemeControllerTest.java

@Test
public void testEditSubmit() throws Exception {
    ManagedFile mf = new ManagedFile();
    mf.setContentType("application/zip");
    mf.setFilename("testTheme.zip");
    mf.setCredit("");
    mf.setLicense("");
    mf.setDescription("");
    managedFileDAO.save(mf);//from www .ja v a  2  s  . c  o m
    fileService.createFile(mf.getClass(), mf.getId(), mf.getFilename(), createTestTheme(DEFAULT_CONFIG_VALUES));

    login("root", "password", new String[] { Role.ROOT });
    Portal portal = getRequestContext().getPortal();

    request.setMethod("POST");
    request.setRequestURI("/bdrs/root/theme/edit.htm");
    request.setParameter("portalPk", portal.getId().toString());
    request.setParameter("name", "Test Theme");
    request.setParameter("themeFileUUID", mf.getUuid());
    request.setParameter("active", "true");

    ModelAndView mv = handle(request, response);
    ModelAndViewAssert.assertModelAttributeValue(mv, "portalId", portal.getId());
    Assert.assertTrue(mv.getView() instanceof RedirectView);
    RedirectView redirect = (RedirectView) mv.getView();
    Assert.assertEquals("/bdrs/root/theme/edit.htm", redirect.getUrl());

    Theme theme = themeDAO.getTheme((Integer) mv.getModel().get("themeId"));
    Assert.assertEquals(request.getParameter("name"), theme.getName());
    Assert.assertEquals(request.getParameter("themeFileUUID"), theme.getThemeFileUUID());
    Assert.assertEquals(Boolean.parseBoolean(request.getParameter("active")), theme.isActive());

    Assert.assertEquals(DEFAULT_CONFIG_VALUES.size(), theme.getThemeElements().size());
    for (ThemeElement elem : theme.getThemeElements()) {
        String expectedValue = DEFAULT_CONFIG_VALUES.get(elem.getKey());
        Assert.assertEquals(expectedValue, elem.getDefaultValue());
        Assert.assertEquals(expectedValue, elem.getCustomValue());
    }

    // Check that the save theme files have been decompressed and processed correctly.
    // Check the raw file directory.
    File rawDir = fileService.getTargetDirectory(theme, Theme.THEME_DIR_RAW, false);
    Assert.assertEquals(TEST_CSS_RAW_CONTENT, FileUtils.fileRead(new File(rawDir, TEST_CSS_FILE_PATH)));
    Assert.assertEquals(TEST_TEMPLATE_RAW_CONTENT,
            FileUtils.fileRead(new File(rawDir, TEST_TEMPLATE_FILE_PATH)));
    Assert.assertEquals(TEST_JS_RAW_CONTENT, FileUtils.fileRead(new File(rawDir, TEST_JS_FILE_PATH)));
    BufferedImage rawImg = ImageIO.read(new File(rawDir, TEST_IMAGE_FILE_PATH));
    Assert.assertEquals(IMAGE_WIDTH, rawImg.getWidth());
    Assert.assertEquals(IMAGE_HEIGHT, rawImg.getHeight());

    // Check the processed file directory
    File processedDir = fileService.getTargetDirectory(theme, Theme.THEME_DIR_PROCESSED, false);
    Assert.assertEquals(String.format(TEST_CSS_DEFAULT_CONTENT_TMPL, theme.getId()).trim(),
            FileUtils.fileRead(new File(processedDir, TEST_CSS_FILE_PATH)).trim());
    Assert.assertEquals(String.format(TEST_TEMPLATE_DEFAULT_CONTENT, theme.getId()).trim(),
            FileUtils.fileRead(new File(processedDir, TEST_TEMPLATE_FILE_PATH)).trim());
    Assert.assertEquals(TEST_JS_DEFAULT_CONTENT,
            FileUtils.fileRead(new File(processedDir, TEST_JS_FILE_PATH)).trim());
    BufferedImage processedImg = ImageIO.read(new File(processedDir, TEST_IMAGE_FILE_PATH));
    Assert.assertEquals(IMAGE_WIDTH, processedImg.getWidth());
    Assert.assertEquals(IMAGE_HEIGHT, processedImg.getHeight());

    assertThemePage(theme.getId().intValue());
}

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

/**
 * Logic to output end log/*from  ww  w  . j  a  v  a2  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 (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:net.nicholaswilliams.java.teamcity.plugin.buildNumber.TestSharedBuildNumberController.java

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

    SortedSet<SharedBuildNumber> set = new TreeSet<SharedBuildNumber>();

    expect(this.request.getParameter("action")).andReturn(null);
    expect(this.request.getMethod()).andReturn("GET");
    expect(this.request.getParameter("direction")).andReturn(null);
    expect(this.request.getParameter("sort")).andReturn(null);
    expect(this.service.getAllSharedBuildNumbersSortedById(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.", "id", 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.", 0, model.get("numResults"));
    assertSame("buildNumbers is not correct.", set, model.get("buildNumbers"));
}

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

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

    SortedSet<SharedBuildNumber> set = new TreeSet<SharedBuildNumber>();

    expect(this.request.getParameter("action")).andReturn("");
    expect(this.request.getMethod()).andReturn("GET");
    expect(this.request.getParameter("direction")).andReturn(null);
    expect(this.request.getParameter("sort")).andReturn(null);
    expect(this.service.getAllSharedBuildNumbersSortedById(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.", "id", 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.", 0, model.get("numResults"));
    assertSame("buildNumbers is not correct.", set, model.get("buildNumbers"));
}

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

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

    SortedSet<SharedBuildNumber> set = new TreeSet<SharedBuildNumber>();

    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("id");
    expect(this.service.getAllSharedBuildNumbersSortedById(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.", "id", 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.", 0, model.get("numResults"));
    assertSame("buildNumbers is not correct.", set, model.get("buildNumbers"));
}

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

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

    SortedSet<SharedBuildNumber> set = new TreeSet<SharedBuildNumber>();
    set.add(new SharedBuildNumber(12));

    expect(this.request.getParameter("action")).andReturn("list");
    expect(this.request.getMethod()).andReturn("POST");
    expect(this.request.getParameter("direction")).andReturn("desc");
    expect(this.request.getParameter("sort")).andReturn("id");
    expect(this.service.getAllSharedBuildNumbersSortedById(true)).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.", "id", model.get("sortedBy"));
    assertEquals("sortClass is not correct.", "sortedDesc", model.get("sortClass"));
    assertEquals("sortChange is not correct.", "asc", model.get("sortChange"));
    assertEquals("sbnParameterPrefix is not correct.", BuildNumberPropertiesProvider.PARAMETER_PREFIX,
            model.get("sbnParameterPrefix"));
    assertEquals("numResults is not correct.", 1, model.get("numResults"));
    assertSame("buildNumbers is not correct.", set, model.get("buildNumbers"));
}

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

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

    SharedBuildNumber number = new SharedBuildNumber(17);

    expect(this.request.getParameter("action")).andReturn("edit");
    expect(this.request.getMethod()).andReturn("GET");
    expect(this.request.getParameter("id")).andReturn("17");
    expect(this.service.getSharedBuildNumber(17)).andReturn(number);

    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"));
    assertSame("sharedBuildNumberForm is not correct.", number, model.get("sharedBuildNumberForm"));
}

From source file:au.com.gaiaresources.bdrs.controller.theme.ThemeControllerTest.java

@Test
public void testEditCustomSubmit() throws Exception {
    ManagedFile mf = new ManagedFile();
    mf.setContentType("application/zip");
    mf.setFilename("testTheme.zip");
    mf.setCredit("");
    mf.setLicense("");
    mf.setDescription("");
    managedFileDAO.save(mf);/*from   ww w . j ava  2  s .  c o  m*/
    fileService.createFile(mf.getClass(), mf.getId(), mf.getFilename(), createTestTheme(DEFAULT_CONFIG_VALUES));

    Portal portal = getRequestContext().getPortal();

    Map<String, ThemeElement> themeElementMap = new HashMap<String, ThemeElement>();
    List<ThemeElement> themeElements = new ArrayList<ThemeElement>(DEFAULT_CONFIG_VALUES.size());
    for (Map.Entry<String, String> entry : DEFAULT_CONFIG_VALUES.entrySet()) {
        ThemeElement te = new ThemeElement();
        te.setKey(entry.getKey());
        te.setDefaultValue(entry.getValue());
        te.setCustomValue(entry.getValue());
        te.setType(ThemeElementType.TEXT);
        te = themeDAO.save(te);
        themeElements.add(te);
        themeElementMap.put(te.getKey(), te);
    }

    Theme theme = new Theme();
    theme.setActive(true);
    theme.setName("Test Theme");
    theme.setThemeFileUUID(mf.getUuid());
    theme.setCssFiles(new String[] { TEST_CSS_FILE_PATH });
    theme.setJsFiles(new String[] { TEST_JS_FILE_PATH });
    theme.setPortal(portal);
    theme.setThemeElements(themeElements);
    theme = themeDAO.save(theme);

    ZipUtils.decompressToDir(new ZipFile(fileService.getFile(mf, mf.getFilename()).getFile()),
            fileService.getTargetDirectory(theme, Theme.THEME_DIR_RAW, true));

    login("root", "password", new String[] { Role.ROOT });

    request.setMethod("POST");
    request.setRequestURI("/bdrs/root/theme/edit.htm");
    request.setParameter("portalPk", portal.getId().toString());
    request.setParameter("themePk", theme.getId().toString());
    request.setParameter("name", theme.getName());
    request.setParameter("themeFileUUID", theme.getThemeFileUUID());
    request.setParameter("active", String.valueOf(theme.isActive()));
    for (Map.Entry<String, String> customEntry : CUSTOM_CONFIG_VALUES.entrySet()) {
        ThemeElement te = themeElementMap.get(customEntry.getKey());
        request.setParameter(String.format(ThemeController.THEME_ELEMENT_CUSTOM_VALUE_TEMPLATE, te.getId()),
                customEntry.getValue());
    }

    ModelAndView mv = handle(request, response);
    ModelAndViewAssert.assertModelAttributeValue(mv, "portalId", portal.getId());
    Assert.assertTrue(mv.getView() instanceof RedirectView);
    RedirectView redirect = (RedirectView) mv.getView();
    Assert.assertEquals("/bdrs/root/theme/edit.htm", redirect.getUrl());

    Theme actualTheme = themeDAO.getTheme((Integer) mv.getModel().get("themeId"));
    Assert.assertEquals(theme.getName(), actualTheme.getName());
    Assert.assertEquals(theme.getThemeFileUUID(), actualTheme.getThemeFileUUID());
    Assert.assertEquals(theme.isActive(), actualTheme.isActive());

    Assert.assertEquals(DEFAULT_CONFIG_VALUES.size(), actualTheme.getThemeElements().size());
    for (ThemeElement elem : actualTheme.getThemeElements()) {
        String expectedDefaultValue = DEFAULT_CONFIG_VALUES.get(elem.getKey());
        Assert.assertEquals(expectedDefaultValue, elem.getDefaultValue());

        String expectedCustomValue = CUSTOM_CONFIG_VALUES.get(elem.getKey());
        Assert.assertEquals(expectedCustomValue, elem.getCustomValue());
    }

    // Check that the save theme files have been decompressed and processed correctly.
    // Check the raw file directory.
    File rawDir = fileService.getTargetDirectory(actualTheme, Theme.THEME_DIR_RAW, false);
    Assert.assertEquals(TEST_CSS_RAW_CONTENT, FileUtils.fileRead(new File(rawDir, TEST_CSS_FILE_PATH)));
    Assert.assertEquals(TEST_TEMPLATE_RAW_CONTENT,
            FileUtils.fileRead(new File(rawDir, TEST_TEMPLATE_FILE_PATH)));
    Assert.assertEquals(TEST_JS_RAW_CONTENT, FileUtils.fileRead(new File(rawDir, TEST_JS_FILE_PATH)));
    BufferedImage rawImg = ImageIO.read(new File(rawDir, TEST_IMAGE_FILE_PATH));
    Assert.assertEquals(IMAGE_WIDTH, rawImg.getWidth());
    Assert.assertEquals(IMAGE_HEIGHT, rawImg.getHeight());

    // Check the processed file directory
    File processedDir = fileService.getTargetDirectory(actualTheme, Theme.THEME_DIR_PROCESSED, false);
    Assert.assertEquals(String.format(TEST_CSS_CUSTOM_CONTENT_TMPL, actualTheme.getId()).trim(),
            FileUtils.fileRead(new File(processedDir, TEST_CSS_FILE_PATH)).trim());
    Assert.assertEquals(String.format(TEST_TEMPLATE_CUSTOM_CONTENT, actualTheme.getId()).trim(),
            FileUtils.fileRead(new File(processedDir, TEST_TEMPLATE_FILE_PATH)).trim());
    Assert.assertEquals(TEST_JS_CUSTOM_CONTENT,
            FileUtils.fileRead(new File(processedDir, TEST_JS_FILE_PATH)).trim());
    BufferedImage processedImg = ImageIO.read(new File(processedDir, TEST_IMAGE_FILE_PATH));
    Assert.assertEquals(IMAGE_WIDTH, processedImg.getWidth());
    Assert.assertEquals(IMAGE_HEIGHT, processedImg.getHeight());
}

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

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

    expect(this.request.getParameter("action")).andReturn("add");
    expect(this.request.getMethod()).andReturn("GET");

    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("sharedBuildNumberForm");
    assertNotNull("sharedBuildNumberForm should not be null.", object);
    assertTrue("sharedBuildNumberForm should be a SharedBuildNumber.", object instanceof SharedBuildNumber);

    SharedBuildNumber form = (SharedBuildNumber) object;
    assertEquals("The format is not correct.", "{0}", form.getFormat());
    assertEquals("The date format is not correct.", "yyyyMMddHHmmss", form.getDateFormat());
    assertEquals("The counter is not correct.", 1, form.getCounter());
}

From source file:au.com.gaiaresources.bdrs.controller.theme.ThemeControllerTest.java

@Test
public void testEditRevertSubmit() throws Exception {
    ManagedFile mf = new ManagedFile();
    mf.setContentType("application/zip");
    mf.setFilename("testTheme.zip");
    mf.setCredit("");
    mf.setLicense("");
    mf.setDescription("");
    managedFileDAO.save(mf);/*from  ww w .j a v  a  2 s  .c o  m*/
    fileService.createFile(mf.getClass(), mf.getId(), mf.getFilename(), createTestTheme(DEFAULT_CONFIG_VALUES));

    Portal portal = getRequestContext().getPortal();

    Map<String, ThemeElement> themeElementMap = new HashMap<String, ThemeElement>();
    List<ThemeElement> themeElements = new ArrayList<ThemeElement>(DEFAULT_CONFIG_VALUES.size());
    for (Map.Entry<String, String> entry : DEFAULT_CONFIG_VALUES.entrySet()) {
        ThemeElement te = new ThemeElement();
        te.setKey(entry.getKey());
        te.setDefaultValue(entry.getValue());
        te.setCustomValue(CUSTOM_CONFIG_VALUES.get(entry.getKey()));
        te.setType(ThemeElementType.TEXT);
        te = themeDAO.save(te);
        themeElements.add(te);
        themeElementMap.put(te.getKey(), te);
    }

    Theme theme = new Theme();
    theme.setActive(true);
    theme.setName("Test Theme");
    theme.setThemeFileUUID(mf.getUuid());
    theme.setCssFiles(new String[] { TEST_CSS_FILE_PATH });
    theme.setJsFiles(new String[] { TEST_JS_FILE_PATH });
    theme.setPortal(portal);
    theme.setThemeElements(themeElements);
    theme = themeDAO.save(theme);

    ZipUtils.decompressToDir(new ZipFile(fileService.getFile(mf, mf.getFilename()).getFile()),
            fileService.getTargetDirectory(theme, Theme.THEME_DIR_RAW, true));

    login("root", "password", new String[] { Role.ROOT });

    request.setMethod("POST");
    request.setRequestURI("/bdrs/root/theme/edit.htm");
    request.setParameter("portalPk", portal.getId().toString());
    request.setParameter("themePk", theme.getId().toString());
    request.setParameter("name", theme.getName());
    request.setParameter("themeFileUUID", theme.getThemeFileUUID());
    request.setParameter("active", String.valueOf(theme.isActive()));
    request.setParameter("revert", "Revert Theme");
    for (Map.Entry<String, String> customEntry : CUSTOM_CONFIG_VALUES.entrySet()) {
        ThemeElement te = themeElementMap.get(customEntry.getKey());
        request.setParameter(String.format(ThemeController.THEME_ELEMENT_CUSTOM_VALUE_TEMPLATE, te.getId()),
                customEntry.getValue());
    }

    ModelAndView mv = handle(request, response);
    ModelAndViewAssert.assertModelAttributeValue(mv, "portalId", portal.getId());
    Assert.assertTrue(mv.getView() instanceof RedirectView);
    RedirectView redirect = (RedirectView) mv.getView();
    Assert.assertEquals("/bdrs/root/theme/edit.htm", redirect.getUrl());

    Theme actualTheme = themeDAO.getTheme((Integer) mv.getModel().get("themeId"));
    Assert.assertEquals(theme.getName(), actualTheme.getName());
    Assert.assertEquals(theme.getThemeFileUUID(), actualTheme.getThemeFileUUID());
    Assert.assertEquals(theme.isActive(), actualTheme.isActive());

    Assert.assertEquals(DEFAULT_CONFIG_VALUES.size(), actualTheme.getThemeElements().size());
    for (ThemeElement elem : actualTheme.getThemeElements()) {
        String expectedDefaultValue = DEFAULT_CONFIG_VALUES.get(elem.getKey());
        Assert.assertEquals(expectedDefaultValue, elem.getDefaultValue());
        Assert.assertEquals(expectedDefaultValue, elem.getCustomValue());
    }

    // Check that the save theme files have been decompressed and processed correctly.
    // Check the raw file directory.
    File rawDir = fileService.getTargetDirectory(actualTheme, Theme.THEME_DIR_RAW, false);
    Assert.assertEquals(TEST_CSS_RAW_CONTENT, FileUtils.fileRead(new File(rawDir, TEST_CSS_FILE_PATH)));
    Assert.assertEquals(TEST_TEMPLATE_RAW_CONTENT,
            FileUtils.fileRead(new File(rawDir, TEST_TEMPLATE_FILE_PATH)));
    Assert.assertEquals(TEST_JS_RAW_CONTENT, FileUtils.fileRead(new File(rawDir, TEST_JS_FILE_PATH)));
    BufferedImage rawImg = ImageIO.read(new File(rawDir, TEST_IMAGE_FILE_PATH));
    Assert.assertEquals(IMAGE_WIDTH, rawImg.getWidth());
    Assert.assertEquals(IMAGE_HEIGHT, rawImg.getHeight());

    // Check the processed file directory
    File processedDir = fileService.getTargetDirectory(actualTheme, Theme.THEME_DIR_PROCESSED, false);
    Assert.assertEquals(String.format(TEST_CSS_DEFAULT_CONTENT_TMPL, theme.getId()).trim(),
            FileUtils.fileRead(new File(processedDir, TEST_CSS_FILE_PATH)).trim());
    Assert.assertEquals(String.format(TEST_TEMPLATE_DEFAULT_CONTENT, theme.getId()).trim(),
            FileUtils.fileRead(new File(processedDir, TEST_TEMPLATE_FILE_PATH)).trim());
    Assert.assertEquals(TEST_JS_DEFAULT_CONTENT,
            FileUtils.fileRead(new File(processedDir, TEST_JS_FILE_PATH)).trim());
    BufferedImage processedImg = ImageIO.read(new File(processedDir, TEST_IMAGE_FILE_PATH));
    Assert.assertEquals(IMAGE_WIDTH, processedImg.getWidth());
    Assert.assertEquals(IMAGE_HEIGHT, processedImg.getHeight());

    assertThemePage(theme.getId().intValue());
}