/** * Licensed to Apereo under one or more contributor license agreements. See the NOTICE file * distributed with this work for additional information regarding copyright ownership. Apereo * licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use * this file except in compliance with the License. You may obtain a copy of the License at the * following location: * * <p>http://www.apache.org/licenses/LICENSE-2.0 * * <p>Unless required by applicable law or agreed to in writing, software distributed under the * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing permissions and * limitations under the License. */ package org.apereo.portal.groups.pags.testers; import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang.StringUtils; import org.apereo.portal.IUserProfile; import org.apereo.portal.groups.pags.IPersonTester; import org.apereo.portal.groups.pags.dao.IPersonAttributesGroupTestDefinition; import org.apereo.portal.layout.IUserLayoutStore; import org.apereo.portal.layout.dao.IStylesheetDescriptorDao; import org.apereo.portal.layout.om.IStylesheetDescriptor; import org.apereo.portal.layout.profile.IProfileMapper; import org.apereo.portal.security.IPerson; import org.apereo.portal.spring.locator.ApplicationContextLocator; import org.apereo.portal.url.IPortalRequestUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.ApplicationContext; /** * This Group tester checks the current session's user profile theme against the test value ignoring * case. * */ public class ThemeNameEqualsIgnoreCaseTester implements IPersonTester { protected Logger logger = LoggerFactory.getLogger(getClass()); private String themeTestValue; private final ApplicationContext applicationContext; private final IPortalRequestUtils portalRequestUtils; private final IProfileMapper profileMapper; private final IUserLayoutStore userLayoutStore; private final IStylesheetDescriptorDao stylesheetDescriptorDao; /** @since 4.3 */ public ThemeNameEqualsIgnoreCaseTester(IPersonAttributesGroupTestDefinition definition) { final String themeTestValue = definition.getTestValue(); assert StringUtils.isNotBlank(themeTestValue); this.themeTestValue = themeTestValue; this.applicationContext = ApplicationContextLocator.getApplicationContext(); this.portalRequestUtils = applicationContext.getBean(IPortalRequestUtils.class); this.profileMapper = applicationContext.getBean("profileMapper", IProfileMapper.class); this.userLayoutStore = applicationContext.getBean("userLayoutStore", IUserLayoutStore.class); this.stylesheetDescriptorDao = applicationContext.getBean( "stylesheetDescriptorDao", IStylesheetDescriptorDao.class); } public boolean test(IPerson person) { HttpServletRequest currentPortalRequest = getCurrentHttpServletRequest(); if (currentPortalRequest == null) { return false; } IStylesheetDescriptor descriptor = getCurrentUserProfileStyleSheetDescriptor(person, currentPortalRequest); String uiTheme = descriptor.getName(); logDebugMessages(uiTheme); return getStringCompareResults(uiTheme); } private HttpServletRequest getCurrentHttpServletRequest() { HttpServletRequest currentPortalRequest = null; try { currentPortalRequest = portalRequestUtils.getCurrentPortalRequest(); } catch (IllegalStateException e) { logger.warn("No portal request to test ui theme"); } return currentPortalRequest; } private IStylesheetDescriptor getCurrentUserProfileStyleSheetDescriptor( IPerson person, HttpServletRequest currentPortalRequest) { final String currentFname = this.profileMapper.getProfileFname(person, currentPortalRequest); IUserProfile profile = this.userLayoutStore.getSystemProfileByFname(currentFname); int profileId = profile.getThemeStylesheetId(); return this.stylesheetDescriptorDao.getStylesheetDescriptor(profileId); } private void logDebugMessages(String uiTheme) { if (logger.isDebugEnabled()) { logger.debug("themeTestValue: {}", this.themeTestValue); logger.debug("uiTheme: {}", uiTheme); logger.debug("getStringCompareResults(uiTheme): {}", getStringCompareResults(uiTheme)); } } private boolean getStringCompareResults(String uiTheme) { boolean testResult = false; if (StringUtils.isNotBlank(uiTheme)) { testResult = uiTheme.equalsIgnoreCase(themeTestValue); } return testResult; } }