Skip to content

Commit 42d8a44

Browse files
committed
UPDATE template, add enabled checkbox
1 parent 627449e commit 42d8a44

12 files changed

+146
-76
lines changed

pom.xml

+2
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,8 @@
172172

173173
<!-- Add package to export here -->
174174
<Export-Package>
175+
com.recuencojones.bitbucket.log,
176+
com.recuencojones.bitbucket.log.dao,
175177
com.recuencojones.bitbucket.log.api,
176178
</Export-Package>
177179

Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package com.recuencojones.bitbucket.log;
22

3+
import com.recuencojones.bitbucket.log.dao.*;
4+
35
import com.atlassian.bitbucket.event.repository.RepositoryCloneEvent;
46
import com.atlassian.bitbucket.repository.Repository;
57
import com.atlassian.event.api.EventListener;
8+
import com.atlassian.event.api.EventPublisher;
69
import com.atlassian.plugin.spring.scanner.annotation.imports.ComponentImport;
710

811
import com.atlassian.sal.api.net.*;
@@ -14,44 +17,52 @@
1417
import org.slf4j.Logger;
1518
import org.slf4j.LoggerFactory;
1619

17-
import javax.inject.Named;
20+
import org.springframework.stereotype.Component;
21+
import org.springframework.beans.factory.DisposableBean;
22+
import org.springframework.beans.factory.InitializingBean;
23+
1824
import javax.inject.Inject;
25+
import javax.inject.Named;
1926

20-
@Named("onRepositoryClone")
27+
@Named
2128
public class OnRepositoryClone {
2229
private static final Logger log = LoggerFactory.getLogger(OnRepositoryClone.class);
2330

2431
@ComponentImport
2532
private final RequestFactory requestFactory;
2633

27-
@ComponentImport
28-
private final PluginSettingsFactory pluginSettingsFactory;
34+
private final RepositoryCloneSettingsDAO repositoryCloneSettingsDAO;
2935

3036
@Inject
3137
public OnRepositoryClone(
3238
final RequestFactory requestFactory,
33-
final PluginSettingsFactory pluginSettingsFactory
39+
final RepositoryCloneSettingsDAO repositoryCloneSettingsDAO
3440
) {
3541
this.requestFactory = requestFactory;
36-
this.pluginSettingsFactory = pluginSettingsFactory;
42+
this.repositoryCloneSettingsDAO = repositoryCloneSettingsDAO;
3743
}
3844

3945
@EventListener
40-
public void onCloneEvent(final RepositoryCloneEvent cloneEvent) {
41-
final Repository repository = cloneEvent.getRepository();
42-
final String projectKey = repository.getProject().getKey();
46+
public void onCloneEvent(final RepositoryCloneEvent event) {
47+
final Repository repository = event.getRepository();
48+
final int repositoryID = repository.getId();
4349
final String repositorySlug = repository.getSlug();
50+
final String projectKey = repository.getProject().getKey();
51+
52+
final RepositoryCloneSettings settings = repositoryCloneSettingsDAO.get(repositoryID);
4453

45-
log.info("Repository {}/{} cloned", projectKey, repositorySlug);
54+
if (settings != null && settings.isEnabled()) {
55+
log.debug("Repository {}/{} has log-on-clone settings", projectKey, repositorySlug);
4656

47-
final Request request = requestFactory.createRequest(Request.MethodType.POST, "https://en6qhxx7a3ksl.x.pipedream.net");
57+
final Request request = requestFactory.createRequest(Request.MethodType.POST, settings.getURL());
4858

49-
request.setRequestBody(new Gson().toJson(repository));
59+
request.setRequestBody(new Gson().toJson(repository));
5060

51-
try {
52-
request.execute();
53-
} catch (final ResponseException e) {
54-
log.error("Could not log clone of {}/{}. Skipping.", projectKey, repositorySlug);
61+
try {
62+
request.execute();
63+
} catch (final ResponseException e) {
64+
log.error("Could not log clone of {}/{}. Skipping.", projectKey, repositorySlug);
65+
}
5566
}
5667
}
5768
}
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.recuencojones.bitbucket.log;
22

3+
import com.recuencojones.bitbucket.log.dao.*;
4+
35
import com.atlassian.bitbucket.event.repository.RepositoryDeletedEvent;
46

57
import com.atlassian.bitbucket.repository.Repository;
@@ -17,26 +19,30 @@
1719
import javax.inject.Named;
1820
import javax.inject.Inject;
1921

20-
@Named("onRepositoryDeleted")
22+
@Named
2123
public class OnRepositoryDeleted {
2224
private static final Logger log = LoggerFactory.getLogger(OnRepositoryClone.class);
2325

24-
@ComponentImport
25-
private final PluginSettingsFactory pluginSettingsFactory;
26+
private final RepositoryCloneSettingsDAO repositoryCloneSettingsDAO;
2627

2728
@Inject
2829
public OnRepositoryDeleted(
29-
final PluginSettingsFactory pluginSettingsFactory
30+
final RepositoryCloneSettingsDAO repositoryCloneSettingsDAO
3031
) {
31-
this.pluginSettingsFactory = pluginSettingsFactory;
32+
this.repositoryCloneSettingsDAO = repositoryCloneSettingsDAO;
3233
}
3334

3435
@EventListener
3536
public void onRepositoryDeleted(final RepositoryDeletedEvent event) {
36-
deleteSettings(event.getRepository());
37-
}
38-
39-
private void deleteSettings(final Repository repository) {
40-
37+
final Repository repository = event.getRepository();
38+
final int repositoryID = repository.getId();
39+
final String repositorySlug = repository.getSlug();
40+
final String projectKey = repository.getProject().getKey();
41+
final RepositoryCloneSettings settings = repositoryCloneSettingsDAO.get(repositoryID);
42+
43+
if (settings != null) {
44+
log.debug("Repository {}/{} has log-on-clone settings, delete.", projectKey, repositorySlug);
45+
repositoryCloneSettingsDAO.remove(settings);
46+
}
4147
}
4248
}

src/main/java/com/recuencojones/bitbucket/log/dao/RepositoryCloneSettings.java

+7
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,20 @@
1414
public interface RepositoryCloneSettings extends Entity {
1515

1616
String REPO_ID_COLUMN = "REPO_ID";
17+
String ENABLED_COLUMN = "ENABLED";
1718
String URL_COLUMN = "URL";
1819

1920
@Indexed
2021
@Accessor(REPO_ID_COLUMN)
2122
@NotNull
2223
int getId();
2324

25+
@Accessor(ENABLED_COLUMN)
26+
boolean isEnabled();
27+
28+
@Mutator(ENABLED_COLUMN)
29+
void setEnabled(boolean enabled);
30+
2431
@Accessor(URL_COLUMN)
2532
@StringLength(UNLIMITED)
2633
String getURL();

src/main/java/com/recuencojones/bitbucket/log/dao/RepositoryCloneSettingsDAO.java

+6-3
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,9 @@
1111
import net.java.ao.DBParam;
1212

1313
import javax.inject.Inject;
14-
import javax.inject.Named;
1514

1615
import static com.recuencojones.bitbucket.log.dao.RepositoryCloneSettings.REPO_ID_COLUMN;
1716

18-
@Named
1917
@Component
2018
public class RepositoryCloneSettingsDAO {
2119
private static final String ID_QUERY = String.format("%s = ?", REPO_ID_COLUMN);
@@ -30,7 +28,7 @@ public RepositoryCloneSettingsDAO(
3028
this.ao = ao;
3129
}
3230

33-
public RepositoryCloneSettings save(int repositoryID, String url) {
31+
public RepositoryCloneSettings save(int repositoryID, String url, boolean enabled) {
3432
RepositoryCloneSettings settings = find(repositoryID);
3533

3634
if (settings == null) {
@@ -41,6 +39,7 @@ public RepositoryCloneSettings save(int repositoryID, String url) {
4139
}
4240

4341
settings.setURL(url);
42+
settings.setEnabled(enabled);
4443
settings.save();
4544

4645
return settings;
@@ -53,6 +52,10 @@ public RepositoryCloneSettings get(int repositoryID) {
5352
public void remove(int repositoryID) {
5453
RepositoryCloneSettings settings = find(repositoryID);
5554

55+
remove(settings);
56+
}
57+
58+
public void remove(RepositoryCloneSettings settings) {
5659
ao.delete(settings);
5760
}
5861

src/main/java/com/recuencojones/bitbucket/log/rest/RepositoryCloneSettingsDTO.java

+19-8
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,25 @@
88
@JsonIgnoreProperties(ignoreUnknown = true)
99
public class RepositoryCloneSettingsDTO {
1010

11-
@JsonProperty("url")
12-
private String url;
11+
@JsonProperty("enabled")
12+
private boolean enabled;
1313

14-
public String getURL() {
15-
return url;
16-
}
14+
@JsonProperty("url")
15+
private String url;
1716

18-
public void setURL(String url) {
19-
this.url = url;
20-
}
17+
public boolean getEnabled() {
18+
return enabled;
19+
}
20+
21+
public void setEnabled(boolean enabled) {
22+
this.enabled = enabled;
23+
}
24+
25+
public String getURL() {
26+
return url;
27+
}
28+
29+
public void setURL(String url) {
30+
this.url = url;
31+
}
2132
}

src/main/java/com/recuencojones/bitbucket/log/rest/RepositoryCloneSettingsResource.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ public Response getSettings(@Context Repository repository) {
5757
if (settings != null) {
5858
RepositoryCloneSettingsDTO settingsDTO = new RepositoryCloneSettingsDTO();
5959

60+
settingsDTO.setEnabled(settings.isEnabled());
6061
settingsDTO.setURL(settings.getURL());
6162

6263
return ResponseFactory.ok(settingsDTO).build();
@@ -70,7 +71,7 @@ public Response saveSettings(@Context Repository repository, RepositoryCloneSett
7071
permissionValidationService.validateForRepository(repository, Permission.REPO_ADMIN);
7172

7273
log.info("Store logging url for repository {}/{}", repository.getProject().getKey(), repository.getSlug());
73-
repositoryCloneSettingsDAO.save(repository.getId(), settings.getURL());
74+
repositoryCloneSettingsDAO.save(repository.getId(), settings.getURL(), settings.getEnabled());
7475

7576
return ResponseFactory.ok().build();
7677
}

src/main/resources/META-INF/spring/atlassian-component-imports.xml

-12
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
bitbucket.web.repository.log-on-clone.title=Log on clone for {0} / {1}
22
bitbucket.web.repository.log-on-clone.heading=Log on clone
3+
bitbucket.web.repository.log-on-clone.setting.enabled.label=Enable
4+
bitbucket.web.repository.log-on-clone.setting.enabled.description=Call URL on clone event?
35
bitbucket.web.repository.log-on-clone.setting.url.label=URL
46
bitbucket.web.repository.log-on-clone.setting.url.placeholder=Logging service URL
57
bitbucket.web.repository.log-on-clone.setting.url.description=Target url should be a webhook listening on http/https. Event will be sent with POST method.

src/main/resources/static/clone-log-settings.css

+7
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,10 @@
66
width: 20px;
77
top: 5px;
88
}
9+
10+
.button-success {
11+
display: inline-block;
12+
top: -12px;
13+
margin-left: 8px;
14+
color: #35B37E;
15+
}

0 commit comments

Comments
 (0)