All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.togglz.slack.config.NotificationConfiguration Maven / Gradle / Ivy

package org.togglz.slack.config;

import org.togglz.core.repository.FeatureState;

import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;

import static org.togglz.core.util.MoreObjects.firstNonNull;
import static org.togglz.core.util.Preconditions.checkArgument;
import static org.togglz.core.util.Strings.isNotBlank;

public class NotificationConfiguration {

    private static final String DEFAULT_MESSAGE_FORMAT = "$stateIcon *$feature* was $changed by $user $link";

    private static final List DEFAULT_CHANNELS = Collections.singletonList("toggles");
    private static final List DEFAULT_STATE_ICONS = Arrays.asList("large_blue_circle", "white_circle");
    private static final List DEFAULT_CHANGE_VERBS = Arrays.asList("enabled", "disabled");
    private static final String DEFAULT_APP_ICON = "joystick";

    private final String slackHookUrl;
    private final List channels;
    private final String togglzAdminConsoleUrl;
    private final String appName;
    private final String messageFormat;
    private final String appIcon;
    private final List stateIcons;
    private final List changeVerbs;
    private final boolean asyncSenderDisabled;
    private final boolean labelingEnabled;

    public static NotificationConfigurationBuilder builder() {
        return new NotificationConfigurationBuilder();
    }

    NotificationConfiguration(String slackHookUrl,
                              List channels,
                              String togglzAdminConsoleUrl,
                              String appName,
                              String messageFormat,
                              String appIcon,
                              List stateIcons,
                              List changeVerbs,
                              boolean asyncSenderDisabled,
                              boolean labelingEnabled) {
        checkArgument(isNotBlank(slackHookUrl), "slackHookUrl is required");
        checkArgument(slackHookUrl.startsWith("http"), "slackHookUrl isn't valid url: %s", slackHookUrl);
        this.slackHookUrl = slackHookUrl;
        this.channels = channels != null ? new LinkedList<>(channels) : DEFAULT_CHANNELS;
        this.togglzAdminConsoleUrl = firstNonNull(togglzAdminConsoleUrl, "");
        this.appName = firstNonNull(appName, "");
        this.messageFormat = firstNonNull(messageFormat, DEFAULT_MESSAGE_FORMAT);
        this.appIcon = firstNonNull(appIcon, DEFAULT_APP_ICON);
        this.stateIcons = stateIcons != null ? new LinkedList<>(stateIcons) : DEFAULT_STATE_ICONS;
        this.changeVerbs = changeVerbs != null ? new LinkedList<>(changeVerbs) : DEFAULT_CHANGE_VERBS;
        this.asyncSenderDisabled = asyncSenderDisabled;
        this.labelingEnabled = labelingEnabled;
    }

    public String getSlackHookUrl() {
        return slackHookUrl;
    }

    public List getChannels() {
        return channels;
    }

    public String getTogglzAdminConsoleUrl() {
        return togglzAdminConsoleUrl;
    }

    public String getAppName() {
        return appName;
    }

    public String getMessageFormat() {
        return messageFormat;
    }

    public String getAppIcon() {
        return appIcon;
    }

    public String getStateIcon(FeatureState state) {
        return stateIcons.get(state.isEnabled() ? 0 : 1);
    }

    public String getChangeVerb(FeatureState state) {
        return changeVerbs.get(state.isEnabled() ? 0 : 1);
    }

    public boolean isAsyncSenderDisabled() {
        return asyncSenderDisabled;
    }

    public boolean isLabelingEnabled() {
        return labelingEnabled;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy