blob: 846b917088e7c251313ae842a3d4a0dbbc239ee1 [file] [log] [blame]
/*
* Copyright 2017 Cisco Systems, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License. You may obtain
* a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
*/
package com.cisco.gerrit.plugins.slack.config;
import com.google.gerrit.entities.Project;
import com.google.gerrit.server.config.PluginConfigFactory;
import com.google.gerrit.server.project.NoSuchProjectException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* A simple configuration class to access plugin config values.
*
* @author Matthew Montgomery
*/
public class ProjectConfig {
/** The name of the plugin config section to lookup within the gerrit.config file. */
public static final String CONFIG_NAME = "slack-integration";
/** The class logger instance. */
private static final Logger LOGGER = LoggerFactory.getLogger(ProjectConfig.class);
private boolean enabled;
private String webhookUrl;
private String channel;
private String username;
private String ignore;
private boolean ignoreUnchangedPatchSet;
private boolean ignoreWorkInProgressPatchSet;
private boolean ignorePrivatePatchSet;
private String ignoreCommentAuthor;
private boolean publishOnPatchSetCreated;
private boolean publishOnChangeMerged;
private boolean publishOnCommentAdded;
private boolean publishOnReviewerAdded;
private boolean publishOnWipReady;
private boolean publishOnPrivateToPublic;
private String proxyHost;
private int proxyPort;
private String proxyUsername;
private String proxyPassword;
/**
* Creates a new instance of the ProjectConfig class for the given project.
*
* @param configFactory The Gerrit PluginConfigFactory instance to use.
* @param project The project to use when looking up a configuration.
*/
public ProjectConfig(PluginConfigFactory configFactory, String project) {
enabled = false;
Project.NameKey projectNameKey;
projectNameKey = Project.NameKey.parse(project);
try {
enabled =
configFactory
.getFromProjectConfigWithInheritance(projectNameKey, CONFIG_NAME)
.getBoolean("enabled", false);
webhookUrl =
configFactory
.getFromProjectConfigWithInheritance(projectNameKey, CONFIG_NAME)
.getString("webhookurl", "");
channel =
configFactory
.getFromProjectConfigWithInheritance(projectNameKey, CONFIG_NAME)
.getString("channel", "general");
username =
configFactory
.getFromProjectConfigWithInheritance(projectNameKey, CONFIG_NAME)
.getString("username", "gerrit");
ignore =
configFactory
.getFromProjectConfigWithInheritance(projectNameKey, CONFIG_NAME)
.getString("ignore", "");
ignoreUnchangedPatchSet =
configFactory
.getFromProjectConfigWithInheritance(projectNameKey, CONFIG_NAME)
.getBoolean("ignore-unchanged-patch-set", true);
ignoreWorkInProgressPatchSet =
configFactory
.getFromProjectConfigWithInheritance(projectNameKey, CONFIG_NAME)
.getBoolean("ignore-wip-patch-set", true);
ignorePrivatePatchSet =
configFactory
.getFromProjectConfigWithInheritance(projectNameKey, CONFIG_NAME)
.getBoolean("ignore-private-patch-set", true);
ignoreCommentAuthor =
configFactory
.getFromProjectConfigWithInheritance(projectNameKey, CONFIG_NAME)
.getString("ignore-comment-author", "");
publishOnPatchSetCreated =
configFactory
.getFromProjectConfigWithInheritance(projectNameKey, CONFIG_NAME)
.getBoolean("publish-on-patch-set-created", true);
publishOnChangeMerged =
configFactory
.getFromProjectConfigWithInheritance(projectNameKey, CONFIG_NAME)
.getBoolean("publish-on-change-merged", true);
publishOnCommentAdded =
configFactory
.getFromProjectConfigWithInheritance(projectNameKey, CONFIG_NAME)
.getBoolean("publish-on-comment-added", true);
publishOnReviewerAdded =
configFactory
.getFromProjectConfigWithInheritance(projectNameKey, CONFIG_NAME)
.getBoolean("publish-on-reviewer-added", true);
publishOnWipReady =
configFactory
.getFromProjectConfigWithInheritance(projectNameKey, CONFIG_NAME)
.getBoolean("publish-on-wip-ready", publishOnPatchSetCreated);
publishOnPrivateToPublic =
configFactory
.getFromProjectConfigWithInheritance(projectNameKey, CONFIG_NAME)
.getBoolean("publish-on-private-to-public", publishOnPatchSetCreated);
proxyHost = configFactory.getFromGerritConfig(CONFIG_NAME).getString("proxy-host", null);
proxyPort = configFactory.getFromGerritConfig(CONFIG_NAME).getInt("proxy-port", 8080);
proxyUsername =
configFactory.getFromGerritConfig(CONFIG_NAME).getString("proxy-username", null);
proxyPassword =
configFactory.getFromGerritConfig(CONFIG_NAME).getString("proxy-password", null);
} catch (NoSuchProjectException e) {
LOGGER.warn("The specified project could not be found: " + project);
}
}
public boolean isEnabled() {
return enabled;
}
public String getWebhookUrl() {
return webhookUrl;
}
public String getChannel() {
return channel;
}
public String getUsername() {
return username;
}
public String getIgnore() {
return ignore;
}
public boolean getIgnoreUnchangedPatchSet() {
return ignoreUnchangedPatchSet;
}
public boolean getIgnoreWorkInProgressPatchSet() {
return ignoreWorkInProgressPatchSet;
}
public boolean getIgnorePrivatePatchSet() {
return ignorePrivatePatchSet;
}
public String getIgnoreCommentAuthor() {
return ignoreCommentAuthor;
}
public boolean shouldPublishOnPatchSetCreated() {
return publishOnPatchSetCreated;
}
public boolean shouldPublishOnChangeMerged() {
return publishOnChangeMerged;
}
public boolean shouldPublishOnCommentAdded() {
return publishOnCommentAdded;
}
public boolean shouldPublishOnReviewerAdded() {
return publishOnReviewerAdded;
}
public boolean shouldPublishOnWipReady() {
return publishOnWipReady;
}
public boolean shouldPublishOnPrivateToPublic() {
return publishOnPrivateToPublic;
}
public String getProxyHost() {
return proxyHost;
}
public int getProxyPort() {
return proxyPort;
}
public String getProxyUsername() {
return proxyUsername;
}
public String getProxyPassword() {
return proxyPassword;
}
}