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); }
@Override public Map<String, IPushChannelPreferences> newDefaultPreferences() { Map<String, IPushChannelPreferences> map = Maps.newHashMap(); for (IPushChannel channel : _pushChannels) { IPushChannelPreferences cPrefs = channel.newDefaultPreferences(); if (cPrefs != null) { map.put(channel.getId(), cPrefs); } } return map; }