/** * Copyright (c) 2014 by the original author or authors. * * This code is free software; you can redistribute it and/or modify it under the terms of the * GNU Lesser General Public License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * The above copyright notice and this permission notice shall be included in all copies or * substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ package ch.sdi.plugins.oxwall.profile; import java.util.HashMap; import java.util.Map; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.springframework.core.env.Environment; import org.springframework.util.StringUtils; import ch.sdi.core.exc.SdiException; import ch.sdi.core.impl.data.Person; import ch.sdi.plugins.oxwall.converter.OxGender; /** * A very specialized derivation of the number ProfileQuestion. * <p> * See example in ox.target.qn.person.gender in target.properties * <p> * The value which is inserted into the profile data entity is either the default value (see * OxGender) or the configured one (see property ox.target.sex.xxx in target.properties) * * @version 1.0 (18.12.2014) * @author Heri */ @OxCustomQuestion( OxProfileQuestionGender.QUESTION_BEAN_NAME ) public class OxProfileQuestionGender extends OxProfileQuestionNumber { /** logger for this class */ private Logger myLog = LogManager.getLogger( OxProfileQuestionGender.class ); public static final String QUESTION_BEAN_NAME = "gendermap"; public static final String KEY_PREFIX_GENDER = "ox.target.sex."; private Map<OxGender,Number> myGenderMap; /** * Constructor * * @param aName * the name of the question (as configured in a ox.target.qn.xxxx property) * @param aPersonKey * the normalized person key as it is used later in the target phase */ public OxProfileQuestionGender( String aName, String aPersonKey ) { super( aName, aPersonKey ); } /** * @see ch.sdi.plugins.oxwall.profile.OxProfileQuestionNumber#getLongValue(ch.sdi.core.impl.data.Person) */ @Override protected Long getLongValue( Person<?> aPerson ) { OxGender gender = aPerson.getProperty( myPersonKey, OxGender.class ); if ( gender == null ) { return null; } // if gender == null return myGenderMap.get( gender ).longValue(); } /** * @see ch.sdi.plugins.oxwall.profile.OxProfileQuestion#init(org.springframework.core.env.Environment) */ @Override public void init( Environment aEnvironment ) throws SdiException { myGenderMap = new HashMap<OxGender,Number>(); for ( OxGender gender : OxGender.values() ) { String key = KEY_PREFIX_GENDER + gender; String configured = aEnvironment.getProperty( key ); Long value; if ( !StringUtils.hasText( configured ) ) { myLog.warn( "Gender mapping not configured: " + key + "; using default value" ); value = Long.valueOf( gender.getDefaultValue() ); } else { try { value = Long.parseLong( configured ); } catch ( NumberFormatException t ) { throw new SdiException( "Gender mapping " + configured + " cannot be converted to number", t, SdiException.EXIT_CODE_CONFIG_ERROR ); } } myGenderMap.put( gender, value ); } } }