}
private void pushChannel(IPushChannel channel, IPreferences prefs, Notification notification,
boolean ignoreFrequency) throws PushException, RenderException {
IPushChannelPreferences cPrefs = prefs.getChannelPrefs().get(channel.getId());
if (cPrefs == null) {
cPrefs = channel.newDefaultPreferences();
if (cPrefs == null) {
// don't flood user after he configures this channel
throw new PushException("channel not configured for user", false);
}
}
if (!channel.getNotificationTypes().contains(notification.getType())) {
// channel not applicable for type
throw new PushException("channel not applicable for type " + notification.getType(), false);
}
Dispatch dispatch = _dispatchService.create(notification, prefs, cPrefs);
if (!channel.isConfigured(dispatch.getParams())) {
// don't flood user after he configures this channel
throw new PushException("channel not configured for user", false);
}
if (!ignoreFrequency && !Frequency.INSTANT.equals(cPrefs.getFrequency())) {
// temporary as other dispatcher will handle this
throw new PushException("channel not configured for this frequency", true);
}
channel.push(dispatch);