-
Notifications
You must be signed in to change notification settings - Fork 736
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Changing GHHook to abstract is a binary incompatible change in theory, but given the way this class is designed it is difficult to imagine any client code instantiating this class. So I think it is OK.
- Loading branch information
Showing
7 changed files
with
251 additions
and
54 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,130 @@ | ||
package org.kohsuke.github; | ||
|
||
import java.io.IOException; | ||
import java.util.ArrayList; | ||
import java.util.Arrays; | ||
import java.util.Collection; | ||
import java.util.List; | ||
import java.util.Locale; | ||
import java.util.Map; | ||
|
||
/** | ||
* Utility class for creating and retrieving webhooks; removes duplication between GHOrganization and GHRepository | ||
* functionality | ||
*/ | ||
class GHHooks { | ||
static abstract class Context { | ||
private final GitHub root; | ||
|
||
private Context(GitHub root) { | ||
this.root = root; | ||
} | ||
|
||
public List<GHHook> getHooks() throws IOException { | ||
List<GHHook> list = new ArrayList<GHHook>(Arrays.asList( | ||
root.retrieve().to(collection(), collectionClass()))); | ||
for (GHHook h : list) | ||
wrap(h); | ||
return list; | ||
} | ||
|
||
public GHHook getHook(int id) throws IOException { | ||
GHHook hook = root.retrieve().to(collection() + "/" + id, clazz()); | ||
return wrap(hook); | ||
} | ||
|
||
public GHHook createHook(String name, Map<String, String> config, Collection<GHEvent> events, boolean active) throws IOException { | ||
List<String> ea = null; | ||
if (events!=null) { | ||
ea = new ArrayList<String>(); | ||
for (GHEvent e : events) | ||
ea.add(e.name().toLowerCase(Locale.ENGLISH)); | ||
} | ||
|
||
GHHook hook = new Requester(root) | ||
.with("name", name) | ||
.with("active", active) | ||
._with("config", config) | ||
._with("events", ea) | ||
.to(collection(), clazz()); | ||
|
||
return wrap(hook); | ||
} | ||
|
||
abstract String collection(); | ||
|
||
abstract Class<? extends GHHook[]> collectionClass(); | ||
|
||
abstract Class<? extends GHHook> clazz(); | ||
|
||
abstract GHHook wrap(GHHook hook); | ||
} | ||
|
||
private static class RepoContext extends Context { | ||
private final GHRepository repository; | ||
private final GHUser owner; | ||
|
||
private RepoContext(GHRepository repository, GHUser owner) { | ||
super(repository.root); | ||
this.repository = repository; | ||
this.owner = owner; | ||
} | ||
|
||
@Override | ||
String collection() { | ||
return String.format("/repos/%s/%s/hooks", owner.getLogin(), repository.getName()); | ||
} | ||
|
||
@Override | ||
Class<? extends GHHook[]> collectionClass() { | ||
return GHRepoHook[].class; | ||
} | ||
|
||
@Override | ||
Class<? extends GHHook> clazz() { | ||
return GHRepoHook.class; | ||
} | ||
|
||
@Override | ||
GHHook wrap(GHHook hook) { | ||
return ((GHRepoHook)hook).wrap(repository); | ||
} | ||
} | ||
|
||
private static class OrgContext extends Context { | ||
private final GHOrganization organization; | ||
|
||
private OrgContext(GHOrganization organization) { | ||
super(organization.root); | ||
this.organization = organization; | ||
} | ||
|
||
@Override | ||
String collection() { | ||
return String.format("/orgs/%s/hooks", organization.getLogin()); | ||
} | ||
|
||
@Override | ||
Class<? extends GHHook[]> collectionClass() { | ||
return GHOrgHook[].class; | ||
} | ||
|
||
@Override | ||
Class<? extends GHHook> clazz() { | ||
return GHOrgHook.class; | ||
} | ||
|
||
@Override | ||
GHHook wrap(GHHook hook) { | ||
return ((GHOrgHook)hook).wrap(organization); | ||
} | ||
} | ||
|
||
static Context repoContext(GHRepository repository, GHUser owner) { | ||
return new RepoContext(repository, owner); | ||
} | ||
|
||
static Context orgContext(GHOrganization organization) { | ||
return new OrgContext(organization); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
/* | ||
* © Copyright 2015 - SourceClear Inc | ||
*/ | ||
|
||
package org.kohsuke.github; | ||
|
||
class GHOrgHook extends GHHook { | ||
/** | ||
* Organization that the hook belongs to. | ||
*/ | ||
/*package*/ transient GHOrganization organization; | ||
|
||
/*package*/ GHOrgHook wrap(GHOrganization owner) { | ||
this.organization = owner; | ||
return this; | ||
} | ||
|
||
@Override | ||
GitHub getRoot() { | ||
return organization.root; | ||
} | ||
|
||
@Override | ||
String getApiRoute() { | ||
return String.format("/orgs/%s/hooks/%d", organization.getLogin(), id); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
package org.kohsuke.github; | ||
|
||
class GHRepoHook extends GHHook { | ||
/** | ||
* Repository that the hook belongs to. | ||
*/ | ||
/*package*/ transient GHRepository repository; | ||
|
||
/*package*/ GHRepoHook wrap(GHRepository owner) { | ||
this.repository = owner; | ||
return this; | ||
} | ||
|
||
@Override | ||
GitHub getRoot() { | ||
return repository.root; | ||
} | ||
|
||
@Override | ||
String getApiRoute() { | ||
return String.format("/repos/%s/%s/hooks/%d", repository.getOwnerName(), repository.getName(), id); | ||
} | ||
} |
Oops, something went wrong.