Skip to content
This repository has been archived by the owner on Nov 9, 2017. It is now read-only.

Commit

Permalink
feat(webhook): Add/Remove version webhook
Browse files Browse the repository at this point in the history
  • Loading branch information
Alex Eng committed Sep 8, 2016
1 parent d8849ec commit 468a9fc
Show file tree
Hide file tree
Showing 26 changed files with 956 additions and 365 deletions.
Expand Up @@ -42,7 +42,7 @@
public class ProjectWebHooksTab extends ProjectBasePage {

private By webHooksForm = By.id("settings-webhooks-form");
private By saveWebhookButton = By.id("add-webhook-button");
private By saveWebhookButton = By.id("addWebhookBtn");
private By urlInputField = By.id("payloadUrlInput");
private By secretInputField = By.id("secretInput");

Expand Down
3 changes: 2 additions & 1 deletion zanata-model/src/main/java/org/zanata/model/HProject.java
Expand Up @@ -152,7 +152,8 @@ public class HProject extends SlugEntityBase implements Serializable,
@Column(name = "alias", nullable = false)
private Map<LocaleId, String> localeAliases = Maps.newHashMap();

@OneToMany(mappedBy = "project", cascade = CascadeType.ALL)
@OneToMany(cascade = CascadeType.ALL, mappedBy = "project",
orphanRemoval = true)
private List<WebHook> webHooks = Lists.newArrayList();

@Enumerated(EnumType.STRING)
Expand Down
47 changes: 33 additions & 14 deletions zanata-model/src/main/java/org/zanata/model/WebHook.java
Expand Up @@ -22,26 +22,30 @@
package org.zanata.model;

import java.io.Serializable;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToOne;
import javax.persistence.Transient;
import javax.validation.constraints.Size;

import com.google.common.collect.Sets;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import org.hibernate.annotations.Type;
import org.hibernate.annotations.TypeDef;
import org.hibernate.annotations.TypeDefs;
import org.zanata.model.type.WebhookType;
import org.zanata.model.type.WebhookTypeType;
import org.zanata.model.validator.Url;

/**
Expand All @@ -51,9 +55,6 @@
@Getter
@Setter(AccessLevel.PRIVATE)
@NoArgsConstructor
@TypeDefs({
@TypeDef(name = "webhookType", typeClass = WebhookTypeType.class)
})
public class WebHook implements Serializable {

private Long id;
Expand All @@ -63,7 +64,7 @@ public class WebHook implements Serializable {
@Url
private String url;

private WebhookType webhookType;
private Set<WebhookType> types = Sets.newHashSet();

/**
* Secret key used to generate webhook header in hmac-sha1 encryption.
Expand All @@ -72,10 +73,11 @@ public class WebHook implements Serializable {
@Column(nullable = true)
private String secret;

public WebHook(HProject project, String url, WebhookType webhookType, String secret) {
public WebHook(HProject project, String url, Set<WebhookType> types,
String secret) {
this.project = project;
this.url = url;
this.webhookType = webhookType;
this.types = types;
this.secret = secret;
}

Expand All @@ -85,15 +87,32 @@ public Long getId() {
return id;
}

@ManyToOne
@ManyToOne(cascade = { CascadeType.MERGE, CascadeType.PERSIST,
CascadeType.REFRESH })
@JoinColumn(name = "projectId", nullable = false)
public HProject getProject() {
return project;
}

@Type(type = "webhookType")
public WebhookType getWebhookType() {
return webhookType;
@ElementCollection
@Enumerated(EnumType.STRING)
@JoinTable(name = "WebHook_WebHookType",
joinColumns = @JoinColumn(name = "webhookId"))
@Column(name = "type", nullable = false)
public Set<WebhookType> getTypes() {
return types;
}

@Transient
public void update(String url, Set<WebhookType> newTypes, String secret) {
this.url = url;
this.secret = secret;
this.types.addAll(newTypes);
Set<WebhookType> currentTypes = Sets.newHashSet(this.types);
for (WebhookType type: currentTypes) {
if (!newTypes.contains(type)) {
this.types.remove(type);
}
}
}
}
20 changes: 17 additions & 3 deletions zanata-model/src/main/java/org/zanata/model/type/WebhookType.java
@@ -1,11 +1,25 @@
package org.zanata.model.type;

import lombok.Getter;

import java.io.Serializable;

/**
* Type of Webhook event. See {@link org.zanata.model.WebHook} for usage.
*
* @author Alex Eng <a href="mailto:aeng@redhat.com">aeng@redhat.com</a>
*/
public enum WebhookType {
DocumentMilestoneEvent,
DocumentStatsEvent;
public enum WebhookType implements Serializable {
DocumentMilestoneEvent("Translation milestone"),
DocumentStatsEvent("Translation update"),
VersionChangedEvent("Project version"),
ProjectMaintainerChangedEvent("Project maintainer update"),
SourceDocumentChangedEvent("Document");

@Getter
private String displayName;

WebhookType(String displayName) {
this.displayName = displayName;
}
}

This file was deleted.

This file was deleted.

0 comments on commit 468a9fc

Please sign in to comment.