}
@Override
public CNSSubscriptionAttributes getSubscriptionAttributes(String subscriptionArn) throws Exception {
CNSSubscriptionAttributes subscriptionAttributes = null;
CmbColumnSlice<String, String> slice = cassandraHandler.readColumnSlice(AbstractDurablePersistence.CNS_KEYSPACE, columnFamilySubscriptionAttributes, subscriptionArn, null, null, 10, CMB_SERIALIZER.STRING_SERIALIZER, CMB_SERIALIZER.STRING_SERIALIZER, CMB_SERIALIZER.STRING_SERIALIZER);
if (slice != null) {
subscriptionAttributes = new CNSSubscriptionAttributes();
if (slice.getColumnByName("confirmationWasAuthenticated") != null) {
subscriptionAttributes.setConfirmationWasAuthenticated(Boolean.getBoolean(slice.getColumnByName("confirmationWasAuthenticated").getValue()));
}
if (slice.getColumnByName("deliveryPolicy") != null) {
subscriptionAttributes.setDeliveryPolicy(new CNSSubscriptionDeliveryPolicy(new JSONObject(slice.getColumnByName("deliveryPolicy").getValue())));
}
// if "ignore subscription override" is checked, get effective delivery policy from topic delivery policy, otherwise
// get effective delivery policy from subscription delivery policy
CNSSubscription subscription = PersistenceFactory.getSubscriptionPersistence().getSubscription(subscriptionArn);
if (subscription == null) {
throw new SubscriberNotFoundException("Subscription not found. arn=" + subscriptionArn);
}
CNSTopicAttributes topicAttributes = getTopicAttributes(subscription.getTopicArn());
if (topicAttributes != null) {
CNSTopicDeliveryPolicy topicEffectiveDeliveryPolicy = topicAttributes.getEffectiveDeliveryPolicy();
if (topicEffectiveDeliveryPolicy != null) {
if (topicEffectiveDeliveryPolicy.isDisableSubscriptionOverrides() || subscriptionAttributes.getDeliveryPolicy() == null) {
CNSSubscriptionDeliveryPolicy effectiveDeliveryPolicy = new CNSSubscriptionDeliveryPolicy();
effectiveDeliveryPolicy.setHealthyRetryPolicy(topicEffectiveDeliveryPolicy.getDefaultHealthyRetryPolicy());
effectiveDeliveryPolicy.setSicklyRetryPolicy(topicEffectiveDeliveryPolicy.getDefaultSicklyRetryPolicy());
effectiveDeliveryPolicy.setThrottlePolicy(topicEffectiveDeliveryPolicy.getDefaultThrottlePolicy());
subscriptionAttributes.setEffectiveDeliveryPolicy(effectiveDeliveryPolicy);
} else {
subscriptionAttributes.setEffectiveDeliveryPolicy(subscriptionAttributes.getDeliveryPolicy());
}
}
}
if (slice.getColumnByName("topicArn") != null) {
subscriptionAttributes.setTopicArn(slice.getColumnByName("topicArn").getValue());
}
if (slice.getColumnByName("userId") != null) {
subscriptionAttributes.setUserId(slice.getColumnByName("userId").getValue());
}
subscriptionAttributes.setSubscriptionArn(subscriptionArn);
}
return subscriptionAttributes;
}