/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.core.user.field; import java.util.Date; import java.util.LinkedList; import java.util.Locale; import java.util.TimeZone; import com.enonic.cms.api.client.model.user.Address; import com.enonic.cms.api.client.model.user.Gender; import com.enonic.cms.api.client.model.user.UserInfo; import com.enonic.cms.api.plugin.ext.userstore.UserField; import com.enonic.cms.api.plugin.ext.userstore.UserFieldType; import com.enonic.cms.api.plugin.ext.userstore.UserFields; public final class UserInfoTransformer { public UserInfo toUserInfo( UserFields fields ) { UserInfo info = new UserInfo(); updateUserInfo( info, fields ); return info; } public void updateUserInfo( UserInfo info, UserFields fields ) { for ( UserField field : fields ) { if ( !field.isOfType( UserFieldType.ADDRESS ) ) { updateUserInfo( info, field ); } } updateAddresses( info, fields ); } private void updateUserInfo( UserInfo info, UserField field ) { switch ( field.getType() ) { case FIRST_NAME: info.setFirstName( (String) field.getValue() ); break; case BIRTHDAY: info.setBirthday( (Date) field.getValue() ); break; case COUNTRY: info.setCountry( (String) field.getValue() ); break; case DESCRIPTION: info.setDescription( (String) field.getValue() ); break; case FAX: info.setFax( (String) field.getValue() ); break; case GENDER: info.setGender( (Gender) field.getValue() ); break; case GLOBAL_POSITION: info.setGlobalPosition( (String) field.getValue() ); break; case HOME_PAGE: info.setHomePage( (String) field.getValue() ); break; case HTML_EMAIL: info.setHtmlEmail( (Boolean) field.getValue() ); break; case INITIALS: info.setInitials( (String) field.getValue() ); break; case LAST_NAME: info.setLastName( (String) field.getValue() ); break; case LOCALE: info.setLocale( (Locale) field.getValue() ); break; case MEMBER_ID: info.setMemberId( (String) field.getValue() ); break; case MIDDLE_NAME: info.setMiddleName( (String) field.getValue() ); break; case MOBILE: info.setMobile( (String) field.getValue() ); break; case NICK_NAME: info.setNickName( (String) field.getValue() ); break; case ORGANIZATION: info.setOrganization( (String) field.getValue() ); break; case PERSONAL_ID: info.setPersonalId( (String) field.getValue() ); break; case PHONE: info.setPhone( (String) field.getValue() ); break; case PHOTO: info.setPhoto( (byte[]) field.getValue() ); break; case PREFIX: info.setPrefix( (String) field.getValue() ); break; case SUFFIX: info.setSuffix( (String) field.getValue() ); break; case TIME_ZONE: info.setTimezone( (TimeZone) field.getValue() ); break; case TITLE: info.setTitle( (String) field.getValue() ); break; } } private void updateAddresses( UserInfo info, UserFields fields ) { Address[] existing = info.getAddresses(); Address[] addresses = toAddresses( fields ); if ( addresses.length == 0 ) { return; } if ( existing.length == 0 ) { // Overwrite all info.setAddresses( addresses ); } else { // Overwrite only primary existing[0] = addresses[0]; info.setAddresses( existing ); } } private Address[] toAddresses( UserFields fields ) { LinkedList<Address> list = new LinkedList<Address>(); for ( UserField field : fields.getFields( UserFieldType.ADDRESS ) ) { list.add( (Address) field.getValue() ); } return list.toArray( new Address[list.size()] ); } public UserFields toUserFields( UserInfo info ) { UserFields fields = new UserFields( true ); for ( Address address : info.getAddresses() ) { addIfNotNull( fields, UserFieldType.ADDRESS, address ); } addIfNotNull( fields, UserFieldType.BIRTHDAY, info.getBirthday() ); addIfNotNull( fields, UserFieldType.COUNTRY, info.getCountry() ); addIfNotNull( fields, UserFieldType.DESCRIPTION, info.getDescription() ); addIfNotNull( fields, UserFieldType.FAX, info.getFax() ); addIfNotNull( fields, UserFieldType.FIRST_NAME, info.getFirstName() ); addIfNotNull( fields, UserFieldType.GENDER, info.getGender() ); addIfNotNull( fields, UserFieldType.GLOBAL_POSITION, info.getGlobalPosition() ); addIfNotNull( fields, UserFieldType.HOME_PAGE, info.getHomePage() ); addIfNotNull( fields, UserFieldType.HTML_EMAIL, info.getHtmlEmail() ); addIfNotNull( fields, UserFieldType.INITIALS, info.getInitials() ); addIfNotNull( fields, UserFieldType.LAST_NAME, info.getLastName() ); addIfNotNull( fields, UserFieldType.LOCALE, info.getLocale() ); addIfNotNull( fields, UserFieldType.MEMBER_ID, info.getMemberId() ); addIfNotNull( fields, UserFieldType.MIDDLE_NAME, info.getMiddleName() ); addIfNotNull( fields, UserFieldType.MOBILE, info.getMobile() ); addIfNotNull( fields, UserFieldType.NICK_NAME, info.getNickName() ); addIfNotNull( fields, UserFieldType.ORGANIZATION, info.getOrganization() ); addIfNotNull( fields, UserFieldType.PERSONAL_ID, info.getPersonalId() ); addIfNotNull( fields, UserFieldType.PHONE, info.getPhone() ); addIfNotNull( fields, UserFieldType.PHOTO, info.getPhoto() ); addIfNotNull( fields, UserFieldType.PREFIX, info.getPrefix() ); addIfNotNull( fields, UserFieldType.SUFFIX, info.getSuffix() ); addIfNotNull( fields, UserFieldType.TIME_ZONE, info.getTimeZone() ); addIfNotNull( fields, UserFieldType.TITLE, info.getTitle() ); return fields; } private void addIfNotNull( UserFields fields, UserFieldType type, Object value ) { if ( value != null ) { fields.add( new UserField( type, value ) ); } } }