package se.bjurr.prnfb.settings.legacy;
import static com.google.common.base.MoreObjects.firstNonNull;
import static com.google.common.base.Optional.fromNullable;
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Strings.emptyToNull;
import static com.google.common.base.Strings.nullToEmpty;
import static com.google.common.collect.Iterables.tryFind;
import static java.util.regex.Pattern.compile;
import static se.bjurr.prnfb.http.UrlInvoker.HTTP_METHOD.GET;
import static se.bjurr.prnfb.settings.legacy.AdminFormValues.DEFAULT_NAME;
import static se.bjurr.prnfb.settings.legacy.AdminFormValues.VALUE;
import static se.bjurr.prnfb.settings.legacy.AdminFormValues.FIELDS.filter_regexp;
import static se.bjurr.prnfb.settings.legacy.AdminFormValues.FIELDS.filter_string;
import static se.bjurr.prnfb.settings.legacy.AdminFormValues.FORM_TYPE.TRIGGER_CONFIG_FORM;
import static se.bjurr.prnfb.settings.legacy.AdminFormValues.TRIGGER_IF_MERGE.ALWAYS;
import static se.bjurr.prnfb.settings.legacy.PrnfbPredicates.predicate;
import java.net.URL;
import java.util.List;
import java.util.Map;
import se.bjurr.prnfb.http.UrlInvoker.HTTP_METHOD;
import se.bjurr.prnfb.listener.PrnfbPullRequestAction;
import se.bjurr.prnfb.settings.legacy.AdminFormValues.FIELDS;
import se.bjurr.prnfb.settings.legacy.AdminFormValues.FORM_TYPE;
import se.bjurr.prnfb.settings.legacy.AdminFormValues.TRIGGER_IF_MERGE;
import com.atlassian.bitbucket.pull.PullRequestState;
import com.google.common.base.Optional;
@Deprecated
public class PrnfbNotification {
public static boolean isOfType(AdminFormValues config, FORM_TYPE formType) {
Optional<Map<String, String>> formTypeOpt =
tryFind(config, predicate(AdminFormValues.FIELDS.FORM_TYPE.name()));
return !formTypeOpt.isPresent() && formType.name().equals(TRIGGER_CONFIG_FORM.name())
|| formTypeOpt.get().get(VALUE).equals(TRIGGER_CONFIG_FORM.name());
}
private final String filterRegexp;
private final String filterString;
private final List<Header> headers;
private final String injectionUrl;
private final String injectionUrlRegexp;
private final HTTP_METHOD method;
private final String name;
private final String password;
private final String postContent;
private final String proxyPassword;
private final Integer proxyPort;
private final String proxyServer;
private final String proxyUser;
private final TRIGGER_IF_MERGE triggerIfCanMerge;
private final List<PullRequestState> triggerIgnoreStateList;
private final List<PrnfbPullRequestAction> triggers;
private final String url;
private final String user;
public PrnfbNotification(PrnfbNotificationBuilder builder) throws ValidationException {
this.proxyUser = emptyToNull(nullToEmpty(builder.getProxyUser()).trim());
this.proxyPassword = emptyToNull(nullToEmpty(builder.getProxyPassword()).trim());
this.proxyServer = emptyToNull(nullToEmpty(builder.getProxyServer()).trim());
this.proxyPort =
Integer.valueOf(
firstNonNull(emptyToNull(nullToEmpty(builder.getProxyPort()).trim()), "-1"));
this.headers = checkNotNull(builder.getHeaders());
this.postContent = emptyToNull(nullToEmpty(builder.getPostContent()).trim());
this.method =
HTTP_METHOD.valueOf(
firstNonNull(emptyToNull(nullToEmpty(builder.getMethod()).trim()), GET.name()));
this.triggerIfCanMerge =
TRIGGER_IF_MERGE.valueOf(
firstNonNull(
emptyToNull(nullToEmpty(builder.getTriggerIfCanMerge()).trim()), ALWAYS.name()));
if (nullToEmpty(builder.getUrl()).trim().isEmpty()) {
throw new ValidationException(FIELDS.url.name(), "URL not set!");
}
try {
new URL(builder.getUrl());
} catch (final Exception e) {
throw new ValidationException(FIELDS.url.name(), "URL not valid!");
}
if (!nullToEmpty(builder.getFilterRegexp()).trim().isEmpty()) {
try {
compile(builder.getFilterRegexp());
} catch (final Exception e) {
throw new ValidationException(
filter_regexp.name(),
"Filter regexp not valid! " + e.getMessage().replaceAll("\n", " "));
}
if (nullToEmpty(builder.getFilterString()).trim().isEmpty()) {
throw new ValidationException(
filter_string.name(), "Filter string not set, nothing to match regexp against!");
}
}
this.url = builder.getUrl();
this.user = emptyToNull(nullToEmpty(builder.getUser()).trim());
this.password = emptyToNull(nullToEmpty(builder.getPassword()).trim());
this.triggers = checkNotNull(builder.getTriggers());
this.filterString = builder.getFilterString();
this.filterRegexp = builder.getFilterRegexp();
this.name = firstNonNull(emptyToNull(nullToEmpty(builder.getName()).trim()), DEFAULT_NAME);
this.injectionUrl = emptyToNull(nullToEmpty(builder.getInjectionUrl()).trim());
this.injectionUrlRegexp = emptyToNull(nullToEmpty(builder.getInjectionUrlRegexp()).trim());
this.triggerIgnoreStateList = builder.getTriggerIgnoreStateList();
}
public Optional<String> getFilterRegexp() {
return fromNullable(this.filterRegexp);
}
public Optional<String> getFilterString() {
return fromNullable(this.filterString);
}
public List<Header> getHeaders() {
return this.headers;
}
public Optional<String> getInjectionUrl() {
return fromNullable(this.injectionUrl);
}
public Optional<String> getInjectionUrlRegexp() {
return fromNullable(this.injectionUrlRegexp);
}
public HTTP_METHOD getMethod() {
return this.method;
}
public String getName() {
return this.name;
}
public Optional<String> getPassword() {
return fromNullable(this.password);
}
public Optional<String> getPostContent() {
return fromNullable(this.postContent);
}
public Optional<String> getProxyPassword() {
return fromNullable(this.proxyPassword);
}
public Integer getProxyPort() {
return this.proxyPort;
}
public Optional<String> getProxyServer() {
return fromNullable(this.proxyServer);
}
public Optional<String> getProxyUser() {
return fromNullable(this.proxyUser);
}
public TRIGGER_IF_MERGE getTriggerIfCanMerge() {
return this.triggerIfCanMerge;
}
public List<PullRequestState> getTriggerIgnoreStateList() {
return this.triggerIgnoreStateList;
}
public List<PrnfbPullRequestAction> getTriggers() {
return this.triggers;
}
public String getUrl() {
return this.url;
}
public Optional<String> getUser() {
return fromNullable(this.user);
}
}