/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.server.service.admin.ajax; import com.enonic.cms.core.security.userstore.connector.synchronize.status.GroupMembershipsStatus; import com.enonic.cms.core.security.userstore.connector.synchronize.status.RemoteUsersStatus; import com.enonic.cms.core.AdminConsoleTranslationService; import com.enonic.cms.core.security.userstore.connector.synchronize.status.RemoteGroupsStatus; import com.enonic.cms.core.security.userstore.connector.synchronize.status.UserMembershipsStatus; import com.enonic.cms.core.security.userstore.connector.synchronize.status.SynchronizeStatus; import com.enonic.cms.core.security.userstore.status.LocalGroupsStatus; import com.enonic.cms.core.security.userstore.status.LocalUsersStatus; public final class StatusMessageCreator { private String languageCode; private final AdminConsoleTranslationService adminConsoleTranslationService = AdminConsoleTranslationService.getInstance(); public StatusMessageCreator() { this.languageCode = adminConsoleTranslationService.getDefaultLanguageCode(); } public StatusMessageCreator( final String languageCode ) { if ( languageCode == null ) { throw new IllegalArgumentException( "languageCode cannot be NULL" ); } this.languageCode = languageCode; } public String createMessage( SynchronizeStatus status ) { if ( status.isCompleted() ) { return createProgressMessage( adminConsoleTranslationService.getTranslation( "%synchCompleted%", languageCode ) ); } String message = null; switch ( status.getType() ) { case USERS_ONLY: message = createMessageForUsersOnly( status ); break; case GROUPS_ONLY: message = createMessageForGroupsOnly( status ); break; case USERS_AND_GROUPS: message = createMessageForUsersAndGroups( status ); break; } if ( message != null ) { return message; } return createProgressMessage( adminConsoleTranslationService.getTranslation( "%synchGettingInfo%", languageCode ) ); } private String createMessageForUsersOnly( SynchronizeStatus status ) { RemoteUsersStatus remote = status.getRemoteUsersStatus(); LocalUsersStatus local = status.getLocalUsersStatus(); UserMembershipsStatus memberships = status.getUserMembershipsStatus(); if ( remote.inProgress() ) { return createSyncRemoteUserProgress( remote ); } if ( local.inProgress() ) { return createSyncLocalUserProgress( local ); } if ( memberships.inProgress() ) { return createSyncUserMembershipsProgress( memberships ); } return null; } private String createMessageForGroupsOnly( SynchronizeStatus status ) { RemoteGroupsStatus remote = status.getRemoteGroupsStatus(); LocalGroupsStatus local = status.getLocalGroupsStatus(); GroupMembershipsStatus memberships = status.getGroupMembershipsStatus(); if ( remote.inProgress() ) { return createSyncRemoteGroupProgress( remote ); } if ( local.inProgress() ) { return createSyncLocalGroupProgress( local ); } if ( memberships.inProgress() ) { return createSyncGroupMembershipsProgress( memberships ); } return null; } private String createMessageForUsersAndGroups( SynchronizeStatus status ) { RemoteUsersStatus remoteUsers = status.getRemoteUsersStatus(); LocalUsersStatus localUsers = status.getLocalUsersStatus(); UserMembershipsStatus userMemberships = status.getUserMembershipsStatus(); RemoteGroupsStatus remoteGroups = status.getRemoteGroupsStatus(); LocalGroupsStatus localGroups = status.getLocalGroupsStatus(); GroupMembershipsStatus groupMemberships = status.getGroupMembershipsStatus(); if ( remoteUsers.inProgress() ) { return createSyncRemoteUserProgress( remoteUsers ); } if ( localUsers.inProgress() ) { return createSyncLocalUserProgress( localUsers ); } if ( remoteGroups.inProgress() ) { return createSyncRemoteGroupProgress( remoteGroups ); } if ( localGroups.inProgress() ) { return createSyncLocalGroupProgress( localGroups ); } if ( userMemberships.inProgress() ) { return createSyncUserMembershipsProgress( userMemberships ); } if ( groupMemberships.inProgress() ) { return createSyncGroupMembershipsProgress( groupMemberships ); } return null; } private String createSyncRemoteUserProgress( RemoteUsersStatus status ) { return createProgressMessage( adminConsoleTranslationService.getTranslation( "%synchSynchronizingInProgress%", languageCode ), adminConsoleTranslationService.getTranslation( "%synchSynchronizingRemoteUsers%", languageCode ), status.getCurrentCount(), status.getTotalCount() ); } private String createSyncLocalUserProgress( LocalUsersStatus status ) { return createProgressMessage( adminConsoleTranslationService.getTranslation( "%synchSynchronizingInProgress%", languageCode ), adminConsoleTranslationService.getTranslation( "%synchSynchronizingLocalUsers%", languageCode ), status.getCurrentCount(), status.getTotalCount() ); } private String createSyncRemoteGroupProgress( RemoteGroupsStatus status ) { return createProgressMessage( adminConsoleTranslationService.getTranslation( "%synchSynchronizingInProgress%", languageCode ), adminConsoleTranslationService.getTranslation( "%synchSynchronizingRemoteGroups%", languageCode ), status.getCurrentCount(), status.getTotalCount() ); } private String createSyncLocalGroupProgress( LocalGroupsStatus status ) { return createProgressMessage( adminConsoleTranslationService.getTranslation( "%synchSynchronizingInProgress%", languageCode ), adminConsoleTranslationService.getTranslation( "%synchSynchronizingLocalGroups%", languageCode ), status.getCurrentCount(), status.getTotalCount() ); } private String createSyncUserMembershipsProgress( UserMembershipsStatus status ) { return createProgressMessage( adminConsoleTranslationService.getTranslation( "%synchSynchronizingInProgress%", languageCode ), adminConsoleTranslationService.getTranslation( "%synchSynchronizingUserMemberships%", languageCode ), status.getCurrentCount(), status.getTotalCount() ); } private String createSyncGroupMembershipsProgress( GroupMembershipsStatus status ) { return createProgressMessage( adminConsoleTranslationService.getTranslation( "%synchSynchronizingInProgress%", languageCode ), adminConsoleTranslationService.getTranslation( "%synchSynchronizingGroupMemberships%", languageCode ), status.getCurrentCount(), status.getTotalCount() ); } private String createProgressMessage( String heading ) { return createProgressMessage( heading, null ); } private String createProgressMessage( String heading, String progress ) { StringBuffer str = new StringBuffer(); str.append( "<div>" ); str.append( "<p>" ).append( heading ).append( "</p>" ); if ( progress != null ) { str.append( "<div>" ).append( progress ).append( "</div>" ); } str.append( "</div>" ); return str.toString(); } private String createProgressMessage( String heading, String progress, int current, int total ) { StringBuffer str = new StringBuffer(); str.append( progress ).append( " " ); str.append( current ).append( "/" ).append( total ); int percent = Math.round( (float) current / (float) total * 100f ); str.append( " (" ).append( percent ).append( "%)" ); return createProgressMessage( heading, str.toString() ); } }