/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.vertical.adminweb;
import java.util.LinkedHashMap;
import java.util.Map;
import com.enonic.cms.api.plugin.ext.userstore.UserStoreConfigField;
import com.enonic.cms.core.security.userstore.UserStoreEntity;
import com.enonic.cms.api.plugin.ext.userstore.UserStoreConfig;
import com.enonic.cms.api.plugin.ext.userstore.UserFieldType;
class UserFormEditableFieldsResolver
{
private UserStoreEntity userStore;
private UserStoreConfig userStoreConfig;
private FormAction formAction;
private boolean canCreateUserConnectorPolicy = false;
private boolean canUpdateUserConnectorPolicy = false;
UserFormEditableFieldsResolver( UserStoreEntity userStore, FormAction formAction, boolean canCreateUserConnectorPolicy,
boolean canUpdateUserConnectorPolicy )
{
this.userStore = userStore;
this.userStoreConfig = userStore.getConfig();
this.formAction = formAction;
this.canCreateUserConnectorPolicy = canCreateUserConnectorPolicy;
this.canUpdateUserConnectorPolicy = canUpdateUserConnectorPolicy;
}
void resolveAndApply( final Map xslParams )
{
//noinspection unchecked
xslParams.putAll( resolveEditnessForFields() );
}
Map resolveEditnessForFields()
{
Map<String, Boolean> map = new LinkedHashMap<String, Boolean>();
map.put( "is-email-editable", isEmailEditable() );
map.put( "is-firstname-editable", isFirstNameEditable() );
map.put( "is-lastname-editable", isLastNameEditable() );
map.put( "is-middlename-editable", isMiddleNameEditable() );
map.put( "is-nick-editable", isNickNameEditable() );
map.put( "is-birthday-editable", isBirthdayEditable() );
map.put( "is-country-editable", isCountryEditable() );
map.put( "is-description-editable", isDescriptionEditable() );
map.put( "is-initials-editable", isInitialsEditable() );
map.put( "is-globalposition-editable", isGlobalPositionEditable() );
map.put( "is-htmlemail-editable", isHtmlEmailEditable() );
map.put( "is-locale-editable", isLocaleEditable() );
map.put( "is-personalid-editable", isPersonalIdEditable() );
map.put( "is-memberid-editable", isMemberIdEditable() );
map.put( "is-organization-editable", isOrganizationEditable() );
map.put( "is-phone-editable", isPhoneEditable() );
map.put( "is-fax-editable", isFaxEditable() );
map.put( "is-mobile-editable", isMobileEditable() );
map.put( "is-prefix-editable", isPrefixEditable() );
map.put( "is-suffix-editable", isSuffixEditable() );
map.put( "is-title-editable", isTitleEditable() );
map.put( "is-timezone-editable", isTimeZoneEditable() );
map.put( "is-homepage-editable", isHomePageEditable() );
map.put( "is-address-editable", isAddressEditable() );
map.put( "is-photo-editable", isPhotoEditable() );
map.put( "is-gender-editable", isGenderEditable() );
return map;
}
boolean isEmailEditable()
{
if ( userStore.isLocal() )
{
return true;
}
else if ( formAction == FormAction.CREATE )
{
return canCreateUserConnectorPolicy;
}
else if ( formAction == FormAction.UPDATE )
{
return canUpdateUserConnectorPolicy;
}
return false;
}
boolean isGenderEditable()
{
return isEditable( userStoreConfig.getUserFieldConfig( UserFieldType.GENDER ) );
}
boolean isPhotoEditable()
{
return isEditable( userStoreConfig.getUserFieldConfig( UserFieldType.PHOTO ) );
}
boolean isAddressEditable()
{
return isEditable( userStoreConfig.getUserFieldConfig( UserFieldType.ADDRESS ) );
}
boolean isHomePageEditable()
{
return isEditable( userStoreConfig.getUserFieldConfig( UserFieldType.HOME_PAGE ) );
}
boolean isTimeZoneEditable()
{
return isEditable( userStoreConfig.getUserFieldConfig( UserFieldType.TIME_ZONE ) );
}
boolean isTitleEditable()
{
return isEditable( userStoreConfig.getUserFieldConfig( UserFieldType.TITLE ) );
}
boolean isSuffixEditable()
{
return isEditable( userStoreConfig.getUserFieldConfig( UserFieldType.SUFFIX ) );
}
boolean isPrefixEditable()
{
return isEditable( userStoreConfig.getUserFieldConfig( UserFieldType.PREFIX ) );
}
boolean isMobileEditable()
{
return isEditable( userStoreConfig.getUserFieldConfig( UserFieldType.MOBILE ) );
}
boolean isFaxEditable()
{
return isEditable( userStoreConfig.getUserFieldConfig( UserFieldType.FAX ) );
}
boolean isPhoneEditable()
{
return isEditable( userStoreConfig.getUserFieldConfig( UserFieldType.PHONE ) );
}
boolean isOrganizationEditable()
{
return isEditable( userStoreConfig.getUserFieldConfig( UserFieldType.ORGANIZATION ) );
}
boolean isMemberIdEditable()
{
return isEditable( userStoreConfig.getUserFieldConfig( UserFieldType.MEMBER_ID ) );
}
boolean isPersonalIdEditable()
{
return isEditable( userStoreConfig.getUserFieldConfig( UserFieldType.PERSONAL_ID ) );
}
boolean isLocaleEditable()
{
return isEditable( userStoreConfig.getUserFieldConfig( UserFieldType.LOCALE ) );
}
boolean isFirstNameEditable()
{
return isEditable( userStoreConfig.getUserFieldConfig( UserFieldType.FIRST_NAME ) );
}
boolean isLastNameEditable()
{
return isEditable( userStoreConfig.getUserFieldConfig( UserFieldType.LAST_NAME ) );
}
boolean isNickNameEditable()
{
return isEditable( userStoreConfig.getUserFieldConfig( UserFieldType.NICK_NAME ) );
}
boolean isMiddleNameEditable()
{
return isEditable( userStoreConfig.getUserFieldConfig( UserFieldType.MIDDLE_NAME ) );
}
boolean isHtmlEmailEditable()
{
return isEditable( userStoreConfig.getUserFieldConfig( UserFieldType.HTML_EMAIL ) );
}
boolean isGlobalPositionEditable()
{
return isEditable( userStoreConfig.getUserFieldConfig( UserFieldType.GLOBAL_POSITION ) );
}
boolean isInitialsEditable()
{
return isEditable( userStoreConfig.getUserFieldConfig( UserFieldType.INITIALS ) );
}
boolean isDescriptionEditable()
{
return isEditable( userStoreConfig.getUserFieldConfig( UserFieldType.DESCRIPTION ) );
}
boolean isCountryEditable()
{
return isEditable( userStoreConfig.getUserFieldConfig( UserFieldType.COUNTRY ) );
}
boolean isBirthdayEditable()
{
return isEditable( userStoreConfig.getUserFieldConfig( UserFieldType.BIRTHDAY ) );
}
private boolean isEditable( UserStoreConfigField config )
{
if ( config == null )
{
return false;
}
else if ( config.isReadOnly() )
{
return false;
}
else if ( !config.isRemote() )
{
return true;
}
else if ( userStore.isLocal() )
{
return true;
}
else if ( formAction == FormAction.CREATE )
{
return canCreateUserConnectorPolicy;
}
else if ( formAction == FormAction.UPDATE )
{
return canUpdateUserConnectorPolicy;
}
return false;
}
enum FormAction
{
CREATE, UPDATE
}
}