class SmsNotificationProcessorImpl implements SmsNotificationProcessor {

    @Override
    public void processNotification(@Nonnull final Long notificationId, @Nonnull final Map<String, String> secureProperties) {
        Assert.notNull(notificationId, "Sms notification id should not be null");
        Assert.notNull(secureProperties, "Secure properties map should not be null");
        /* Retrieve sms notification */
        final SmsNotification smsNotification =
                smsNotificationService.getSmsNotificationForProcessing(notificationId);
        assertNotificationStateIsCreated(smsNotification);
        logger.debug("Successfully retrieved sms notification - {}", smsNotification);
        /* Update notification state to PROCESSING */
        updateSmsNotificationState(smsNotification.getId(), NotificationState.PROCESSING);
        /* Start processing external sms service operation */
        try {
            processSending(smsNotification, secureProperties);
        } catch (final Exception e) {
            final String message = "Error occurred while sending sms message to recipient - " + smsNotification.getRecipientMobileNumber();
            logger.error(message, e);
            /* Update state of notification to NotificationState.FAILED */
            updateSmsNotificationState(smsNotification.getId(), NotificationState.FAILED);
            throw new ServicesRuntimeException(message, e);
        }
    }

      SmsNotificationProcessorImpl(final SmsNotificationService smsNotificationService,
                                 final SmsSenderProvider smsSenderProvider,
                                 @Value("${sms.sender:}") final String senderName);

}