{"action":"created","comment":{"url":"https://api.github.com/repos/jenkinsci/jenkins/pulls/comments/37203096","id":37203096,"diff_hunk":"@@ -0,0 +1,31 @@\n+package hudson;\n+\n+import hudson.model.Api;\n+import hudson.model.Describable;\n+import hudson.model.Descriptor;\n+import hudson.search.Search;\n+import hudson.search.SearchIndex;\n+import jenkins.model.Jenkins;\n+import net.sf.json.JSONArray;\n+import org.jenkinsci.bytecode.Transformer;\n+import org.kohsuke.stapler.DataBoundConstructor;\n+import org.kohsuke.stapler.HttpResponse;\n+import org.kohsuke.stapler.QueryParameter;\n+import org.kohsuke.stapler.StaplerRequest;\n+import org.kohsuke.stapler.StaplerResponse;\n+\n+import javax.servlet.ServletException;\n+import java.io.IOException;\n+import java.util.List;\n+import java.util.jar.Manifest;\n+\n+/** Extension point for selective overriding parts of the PluginManager UI */\n+public abstract class PluginManagerUIProxy implements ExtensionPoint {\n+    public PluginManager getManager() {\n+        return Jenkins.getInstance().getPluginManager();\n+    }\n+\n+    public static ExtensionList<PluginManagerUIProxy> all() {\n+        return Jenkins.getInstance().getExtensionList(PluginManagerUIProxy.class);","path":"core/src/main/java/hudson/PluginManagerUIProxy.java","position":29,"original_position":29,"commit_id":"e105a13bcf9324c87d896ddc04ae03f905dd0f0a","original_commit_id":"e105a13bcf9324c87d896ddc04ae03f905dd0f0a","user":{"login":"jtnord","id":494726,"avatar_url":"https://avatars.githubusercontent.com/u/494726?v=3","gravatar_id":"","url":"https://api.github.com/users/jtnord","html_url":"https://github.com/jtnord","followers_url":"https://api.github.com/users/jtnord/followers","following_url":"https://api.github.com/users/jtnord/following{/other_user}","gists_url":"https://api.github.com/users/jtnord/gists{/gist_id}","starred_url":"https://api.github.com/users/jtnord/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jtnord/subscriptions","organizations_url":"https://api.github.com/users/jtnord/orgs","repos_url":"https://api.github.com/users/jtnord/repos","events_url":"https://api.github.com/users/jtnord/events{/privacy}","received_events_url":"https://api.github.com/users/jtnord/received_events","type":"User","site_admin":false},"body":"potential NPE.","created_at":"2015-08-17T15:58:00Z","updated_at":"2015-08-17T15:58:00Z","html_url":"https://github.com/jenkinsci/jenkins/pull/1788#discussion_r37203096","pull_request_url":"https://api.github.com/repos/jenkinsci/jenkins/pulls/1788","_links":{"self":{"href":"https://api.github.com/repos/jenkinsci/jenkins/pulls/comments/37203096"},"html":{"href":"https://github.com/jenkinsci/jenkins/pull/1788#discussion_r37203096"},"pull_request":{"href":"https://api.github.com/repos/jenkinsci/jenkins/pulls/1788"}}},"pull_request":{"url":"https://api.github.com/repos/jenkinsci/jenkins/pulls/1788","id":41892661,"html_url":"https://github.com/jenkinsci/jenkins/pull/1788","diff_url":"https://github.com/jenkinsci/jenkins/pull/1788.diff","patch_url":"https://github.com/jenkinsci/jenkins/pull/1788.patch","issue_url":"https://api.github.com/repos/jenkinsci/jenkins/issues/1788","number":1788,"state":"open","locked":false,"title":"[WIP] - Make plugin manager UI pluggable","user":{"login":"svanoort","id":5400948,"avatar_url":"https://avatars.githubusercontent.com/u/5400948?v=3","gravatar_id":"","url":"https://api.github.com/users/svanoort","html_url":"https://github.com/svanoort","followers_url":"https://api.github.com/users/svanoort/followers","following_url":"https://api.github.com/users/svanoort/following{/other_user}","gists_url":"https://api.github.com/users/svanoort/gists{/gist_id}","starred_url":"https://api.github.com/users/svanoort/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/svanoort/subscriptions","organizations_url":"https://api.github.com/users/svanoort/orgs","repos_url":"https://api.github.com/users/svanoort/repos","events_url":"https://api.github.com/users/svanoort/events{/privacy}","received_events_url":"https://api.github.com/users/svanoort/received_events","type":"User","site_admin":false},"body":"Adds StaplerProxy implementation and getters/setters for a proxy target to the PluginManager to allow for UI skinning in plugins. \r\n\r\nPlugins will use something like this to register themselves with an alternate UI:\r\n\r\n```java\r\n@Initializer\r\n    public static void init() {\r\n        NewUpdateCenter center = new NewUpdateCenter()\r\n        center.setPluginManager(Jenkins.getInstance().getPluginManager());\r\n        Jenkins.getInstance().getPluginManager().setTarget(center);\r\n    }\r\n```\r\n\r\nMissing: \r\n- Test components (in progress)","created_at":"2015-08-07T13:41:39Z","updated_at":"2015-08-17T15:58:00Z","closed_at":null,"merged_at":null,"merge_commit_sha":"6a39e042dae0ff961e080b759569218ef4a35fc7","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/jenkinsci/jenkins/pulls/1788/commits","review_comments_url":"https://api.github.com/repos/jenkinsci/jenkins/pulls/1788/comments","review_comment_url":"https://api.github.com/repos/jenkinsci/jenkins/pulls/comments{/number}","comments_url":"https://api.github.com/repos/jenkinsci/jenkins/issues/1788/comments","statuses_url":"https://api.github.com/repos/jenkinsci/jenkins/statuses/e105a13bcf9324c87d896ddc04ae03f905dd0f0a","head":{"label":"svanoort:feature-updatecenter-pluggability","ref":"feature-updatecenter-pluggability","sha":"e105a13bcf9324c87d896ddc04ae03f905dd0f0a","user":{"login":"svanoort","id":5400948,"avatar_url":"https://avatars.githubusercontent.com/u/5400948?v=3","gravatar_id":"","url":"https://api.github.com/users/svanoort","html_url":"https://github.com/svanoort","followers_url":"https://api.github.com/users/svanoort/followers","following_url":"https://api.github.com/users/svanoort/following{/other_user}","gists_url":"https://api.github.com/users/svanoort/gists{/gist_id}","starred_url":"https://api.github.com/users/svanoort/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/svanoort/subscriptions","organizations_url":"https://api.github.com/users/svanoort/orgs","repos_url":"https://api.github.com/users/svanoort/repos","events_url":"https://api.github.com/users/svanoort/events{/privacy}","received_events_url":"https://api.github.com/users/svanoort/received_events","type":"User","site_admin":false},"repo":{"id":40362142,"name":"jenkins","full_name":"svanoort/jenkins","owner":{"login":"svanoort","id":5400948,"avatar_url":"https://avatars.githubusercontent.com/u/5400948?v=3","gravatar_id":"","url":"https://api.github.com/users/svanoort","html_url":"https://github.com/svanoort","followers_url":"https://api.github.com/users/svanoort/followers","following_url":"https://api.github.com/users/svanoort/following{/other_user}","gists_url":"https://api.github.com/users/svanoort/gists{/gist_id}","starred_url":"https://api.github.com/users/svanoort/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/svanoort/subscriptions","organizations_url":"https://api.github.com/users/svanoort/orgs","repos_url":"https://api.github.com/users/svanoort/repos","events_url":"https://api.github.com/users/svanoort/events{/privacy}","received_events_url":"https://api.github.com/users/svanoort/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/svanoort/jenkins","description":"Jenkins Continuous Integration Server","fork":true,"url":"https://api.github.com/repos/svanoort/jenkins","forks_url":"https://api.github.com/repos/svanoort/jenkins/forks","keys_url":"https://api.github.com/repos/svanoort/jenkins/keys{/key_id}","collaborators_url":"https://api.github.com/repos/svanoort/jenkins/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/svanoort/jenkins/teams","hooks_url":"https://api.github.com/repos/svanoort/jenkins/hooks","issue_events_url":"https://api.github.com/repos/svanoort/jenkins/issues/events{/number}","events_url":"https://api.github.com/repos/svanoort/jenkins/events","assignees_url":"https://api.github.com/repos/svanoort/jenkins/assignees{/user}","branches_url":"https://api.github.com/repos/svanoort/jenkins/branches{/branch}","tags_url":"https://api.github.com/repos/svanoort/jenkins/tags","blobs_url":"https://api.github.com/repos/svanoort/jenkins/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/svanoort/jenkins/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/svanoort/jenkins/git/refs{/sha}","trees_url":"https://api.github.com/repos/svanoort/jenkins/git/trees{/sha}","statuses_url":"https://api.github.com/repos/svanoort/jenkins/statuses/{sha}","languages_url":"https://api.github.com/repos/svanoort/jenkins/languages","stargazers_url":"https://api.github.com/repos/svanoort/jenkins/stargazers","contributors_url":"https://api.github.com/repos/svanoort/jenkins/contributors","subscribers_url":"https://api.github.com/repos/svanoort/jenkins/subscribers","subscription_url":"https://api.github.com/repos/svanoort/jenkins/subscription","commits_url":"https://api.github.com/repos/svanoort/jenkins/commits{/sha}","git_commits_url":"https://api.github.com/repos/svanoort/jenkins/git/commits{/sha}","comments_url":"https://api.github.com/repos/svanoort/jenkins/comments{/number}","issue_comment_url":"https://api.github.com/repos/svanoort/jenkins/issues/comments{/number}","contents_url":"https://api.github.com/repos/svanoort/jenkins/contents/{+path}","compare_url":"https://api.github.com/repos/svanoort/jenkins/compare/{base}...{head}","merges_url":"https://api.github.com/repos/svanoort/jenkins/merges","archive_url":"https://api.github.com/repos/svanoort/jenkins/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/svanoort/jenkins/downloads","issues_url":"https://api.github.com/repos/svanoort/jenkins/issues{/number}","pulls_url":"https://api.github.com/repos/svanoort/jenkins/pulls{/number}","milestones_url":"https://api.github.com/repos/svanoort/jenkins/milestones{/number}","notifications_url":"https://api.github.com/repos/svanoort/jenkins/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/svanoort/jenkins/labels{/name}","releases_url":"https://api.github.com/repos/svanoort/jenkins/releases{/id}","created_at":"2015-08-07T13:37:53Z","updated_at":"2015-08-07T13:38:16Z","pushed_at":"2015-08-17T14:26:39Z","git_url":"git://github.com/svanoort/jenkins.git","ssh_url":"git@github.com:svanoort/jenkins.git","clone_url":"https://github.com/svanoort/jenkins.git","svn_url":"https://github.com/svanoort/jenkins","homepage":"http://jenkins-ci.org/","size":87644,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_downloads":false,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"jenkinsci:master","ref":"master","sha":"94d80ea4f227fe5e121ea0d3806e59c9f779a2d5","user":{"login":"jenkinsci","id":107424,"avatar_url":"https://avatars.githubusercontent.com/u/107424?v=3","gravatar_id":"","url":"https://api.github.com/users/jenkinsci","html_url":"https://github.com/jenkinsci","followers_url":"https://api.github.com/users/jenkinsci/followers","following_url":"https://api.github.com/users/jenkinsci/following{/other_user}","gists_url":"https://api.github.com/users/jenkinsci/gists{/gist_id}","starred_url":"https://api.github.com/users/jenkinsci/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jenkinsci/subscriptions","organizations_url":"https://api.github.com/users/jenkinsci/orgs","repos_url":"https://api.github.com/users/jenkinsci/repos","events_url":"https://api.github.com/users/jenkinsci/events{/privacy}","received_events_url":"https://api.github.com/users/jenkinsci/received_events","type":"Organization","site_admin":false},"repo":{"id":1103607,"name":"jenkins","full_name":"jenkinsci/jenkins","owner":{"login":"jenkinsci","id":107424,"avatar_url":"https://avatars.githubusercontent.com/u/107424?v=3","gravatar_id":"","url":"https://api.github.com/users/jenkinsci","html_url":"https://github.com/jenkinsci","followers_url":"https://api.github.com/users/jenkinsci/followers","following_url":"https://api.github.com/users/jenkinsci/following{/other_user}","gists_url":"https://api.github.com/users/jenkinsci/gists{/gist_id}","starred_url":"https://api.github.com/users/jenkinsci/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jenkinsci/subscriptions","organizations_url":"https://api.github.com/users/jenkinsci/orgs","repos_url":"https://api.github.com/users/jenkinsci/repos","events_url":"https://api.github.com/users/jenkinsci/events{/privacy}","received_events_url":"https://api.github.com/users/jenkinsci/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/jenkinsci/jenkins","description":"Jenkins Continuous Integration Server","fork":true,"url":"https://api.github.com/repos/jenkinsci/jenkins","forks_url":"https://api.github.com/repos/jenkinsci/jenkins/forks","keys_url":"https://api.github.com/repos/jenkinsci/jenkins/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jenkinsci/jenkins/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jenkinsci/jenkins/teams","hooks_url":"https://api.github.com/repos/jenkinsci/jenkins/hooks","issue_events_url":"https://api.github.com/repos/jenkinsci/jenkins/issues/events{/number}","events_url":"https://api.github.com/repos/jenkinsci/jenkins/events","assignees_url":"https://api.github.com/repos/jenkinsci/jenkins/assignees{/user}","branches_url":"https://api.github.com/repos/jenkinsci/jenkins/branches{/branch}","tags_url":"https://api.github.com/repos/jenkinsci/jenkins/tags","blobs_url":"https://api.github.com/repos/jenkinsci/jenkins/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jenkinsci/jenkins/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jenkinsci/jenkins/git/refs{/sha}","trees_url":"https://api.github.com/repos/jenkinsci/jenkins/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jenkinsci/jenkins/statuses/{sha}","languages_url":"https://api.github.com/repos/jenkinsci/jenkins/languages","stargazers_url":"https://api.github.com/repos/jenkinsci/jenkins/stargazers","contributors_url":"https://api.github.com/repos/jenkinsci/jenkins/contributors","subscribers_url":"https://api.github.com/repos/jenkinsci/jenkins/subscribers","subscription_url":"https://api.github.com/repos/jenkinsci/jenkins/subscription","commits_url":"https://api.github.com/repos/jenkinsci/jenkins/commits{/sha}","git_commits_url":"https://api.github.com/repos/jenkinsci/jenkins/git/commits{/sha}","comments_url":"https://api.github.com/repos/jenkinsci/jenkins/comments{/number}","issue_comment_url":"https://api.github.com/repos/jenkinsci/jenkins/issues/comments{/number}","contents_url":"https://api.github.com/repos/jenkinsci/jenkins/contents/{+path}","compare_url":"https://api.github.com/repos/jenkinsci/jenkins/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jenkinsci/jenkins/merges","archive_url":"https://api.github.com/repos/jenkinsci/jenkins/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jenkinsci/jenkins/downloads","issues_url":"https://api.github.com/repos/jenkinsci/jenkins/issues{/number}","pulls_url":"https://api.github.com/repos/jenkinsci/jenkins/pulls{/number}","milestones_url":"https://api.github.com/repos/jenkinsci/jenkins/milestones{/number}","notifications_url":"https://api.github.com/repos/jenkinsci/jenkins/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jenkinsci/jenkins/labels{/name}","releases_url":"https://api.github.com/repos/jenkinsci/jenkins/releases{/id}","created_at":"2010-11-22T21:21:23Z","updated_at":"2015-08-17T08:43:21Z","pushed_at":"2015-08-17T15:01:30Z","git_url":"git://github.com/jenkinsci/jenkins.git","ssh_url":"git@github.com:jenkinsci/jenkins.git","clone_url":"https://github.com/jenkinsci/jenkins.git","svn_url":"https://github.com/jenkinsci/jenkins","homepage":"http://jenkins-ci.org/","size":447393,"stargazers_count":4427,"watchers_count":4427,"language":"Java","has_issues":false,"has_downloads":false,"has_wiki":false,"has_pages":false,"forks_count":1958,"mirror_url":null,"open_issues_count":114,"forks":1958,"open_issues":114,"watchers":4427,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/jenkinsci/jenkins/pulls/1788"},"html":{"href":"https://github.com/jenkinsci/jenkins/pull/1788"},"issue":{"href":"https://api.github.com/repos/jenkinsci/jenkins/issues/1788"},"comments":{"href":"https://api.github.com/repos/jenkinsci/jenkins/issues/1788/comments"},"review_comments":{"href":"https://api.github.com/repos/jenkinsci/jenkins/pulls/1788/comments"},"review_comment":{"href":"https://api.github.com/repos/jenkinsci/jenkins/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/jenkinsci/jenkins/pulls/1788/commits"},"statuses":{"href":"https://api.github.com/repos/jenkinsci/jenkins/statuses/e105a13bcf9324c87d896ddc04ae03f905dd0f0a"}}}}