CreateProject: Don't instantiate event when there are no listeners

Also, split the event out into its own static class and move the
invocation of the event into a 'fire' method.

Change-Id: Ie3df5f1762c9597d9af1e4006bbc5c9e59c7516f
This commit is contained in:
David Pursehouse
2016-07-13 10:10:10 +09:00
parent fae251bf17
commit 5a50832c0c

View File

@@ -94,7 +94,7 @@ public class CreateProject implements RestModifyView<TopLevelResource, ProjectIn
private final ProjectJson json;
private final ProjectControl.GenericFactory projectControlFactory;
private final GitRepositoryManager repoManager;
private final DynamicSet<NewProjectCreatedListener> createdListener;
private final DynamicSet<NewProjectCreatedListener> createdListeners;
private final ProjectCache projectCache;
private final GroupBackend groupBackend;
private final ProjectOwnerGroupsProvider.Factory projectOwnerGroups;
@@ -113,7 +113,7 @@ public class CreateProject implements RestModifyView<TopLevelResource, ProjectIn
DynamicSet<ProjectCreationValidationListener> projectCreationValidationListeners,
ProjectControl.GenericFactory projectControlFactory,
GitRepositoryManager repoManager,
DynamicSet<NewProjectCreatedListener> createdListener,
DynamicSet<NewProjectCreatedListener> createdListeners,
ProjectCache projectCache,
GroupBackend groupBackend,
ProjectOwnerGroupsProvider.Factory projectOwnerGroups,
@@ -131,7 +131,7 @@ public class CreateProject implements RestModifyView<TopLevelResource, ProjectIn
this.json = json;
this.projectControlFactory = projectControlFactory;
this.repoManager = repoManager;
this.createdListener = createdListener;
this.createdListeners = createdListeners;
this.projectCache = projectCache;
this.groupBackend = groupBackend;
this.projectOwnerGroups = projectOwnerGroups;
@@ -253,24 +253,7 @@ public class CreateProject implements RestModifyView<TopLevelResource, ProjectIn
createEmptyCommits(repo, nameKey, args.branch);
}
NewProjectCreatedListener.Event event = new NewProjectCreatedListener.Event() {
@Override
public String getProjectName() {
return nameKey.get();
}
@Override
public String getHeadName() {
return head;
}
};
for (NewProjectCreatedListener l : createdListener) {
try {
l.onNewProjectCreated(event);
} catch (RuntimeException e) {
log.warn("Failure in NewProjectCreatedListener", e);
}
}
fire(nameKey, head);
return projectCache.get(nameKey).getProject();
}
@@ -395,4 +378,39 @@ public class CreateProject implements RestModifyView<TopLevelResource, ProjectIn
throw e;
}
}
private void fire(Project.NameKey name, String head) {
if (!createdListeners.iterator().hasNext()) {
return;
}
Event event = new Event(name, head);
for (NewProjectCreatedListener l : createdListeners) {
try {
l.onNewProjectCreated(event);
} catch (RuntimeException e) {
log.warn("Failure in NewProjectCreatedListener", e);
}
}
}
static class Event implements NewProjectCreatedListener.Event {
private final Project.NameKey name;
private final String head;
Event(Project.NameKey name, String head) {
this.name = name;
this.head = head;
}
@Override
public String getProjectName() {
return name.get();
}
@Override
public String getHeadName() {
return head;
}
}
}