{"action":"created","comment":{"url":"https://api.github.com/repos/OpenNMS/opennms/pulls/comments/26226037","id":26226037,"diff_hunk":"@@ -0,0 +1,281 @@\n+/*******************************************************************************\n+ * This file is part of OpenNMS(R).\n+ *\n+ * Copyright (C) 2013-2014 The OpenNMS Group, Inc.\n+ * OpenNMS(R) is Copyright (C) 1999-2014 The OpenNMS Group, Inc.\n+ *\n+ * OpenNMS(R) is a registered trademark of The OpenNMS Group, Inc.\n+ *\n+ * OpenNMS(R) is free software: you can redistribute it and/or modify\n+ * it under the terms of the GNU Affero General Public License as published\n+ * by the Free Software Foundation, either version 3 of the License,\n+ * or (at your option) any later version.\n+ *\n+ * OpenNMS(R) is distributed in the hope that it will be useful,\n+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\n+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n+ * GNU Affero General Public License for more details.\n+ *\n+ * You should have received a copy of the GNU Affero General Public License\n+ * along with OpenNMS(R).  If not, see:\n+ *      http://www.gnu.org/licenses/\n+ *\n+ * For more information contact:\n+ *     OpenNMS(R) Licensing <license@opennms.org>\n+ *     http://www.opennms.org/\n+ *     http://www.opennms.com/\n+ *******************************************************************************/\n+package org.opennms.features.vaadin.surveillanceviews.ui;\n+\n+import com.vaadin.data.Property;\n+import com.vaadin.data.util.BeanItemContainer;\n+import com.vaadin.ui.Alignment;\n+import com.vaadin.ui.Button;\n+import com.vaadin.ui.CheckBox;\n+import com.vaadin.ui.HorizontalLayout;\n+import com.vaadin.ui.Label;\n+import com.vaadin.ui.Table;\n+import com.vaadin.ui.VerticalLayout;\n+import org.opennms.features.vaadin.surveillanceviews.config.SurveillanceViewProvider;\n+import org.opennms.features.vaadin.surveillanceviews.model.View;\n+import org.opennms.features.vaadin.surveillanceviews.service.SurveillanceViewService;\n+import org.slf4j.Logger;\n+import org.slf4j.LoggerFactory;\n+\n+/**\n+ * This class is used to display a list of editable surveillance view configurations.\n+ *\n+ * @author Christian Pape\n+ */\n+public class SurveillanceViewsConfigList extends VerticalLayout {\n+    /**\n+     * the logger instance\n+     */\n+    private static final Logger LOG = LoggerFactory.getLogger(SurveillanceViewsConfigList.class);\n+    /**\n+     * The {@link Table} this component uses to display {@link View} configurations\n+     */\n+    private Table m_table;\n+    /**\n+     * The {@link com.vaadin.data.util.BeanItemContainer} this component uses for {@link View} configurations\n+     */\n+    BeanItemContainer<View> m_beanItemContainer = new BeanItemContainer<View>(View.class);\n+    /**\n+     * the surveillance view service\n+     */\n+    private SurveillanceViewService m_surveillanceViewService;\n+\n+    /**\n+     * Construcotr for creating this component.\n+     *\n+     * @param surveillanceViewService the surveillance view service to be used\n+     */\n+    public SurveillanceViewsConfigList(SurveillanceViewService surveillanceViewService) {\n+        /**\n+         * set the fields\n+         */\n+        this.m_surveillanceViewService = surveillanceViewService;\n+\n+        /**\n+         * Loading the config\n+         */\n+        reloadSurveillanceViews();\n+\n+        /**\n+         * Setting up the layout component\n+         */\n+        setSizeFull();\n+        setMargin(true);\n+        setSpacing(true);\n+\n+        Label label = new Label(\"Surveillance View Configurations\");\n+        label.addStyleName(\"configuration-title\");\n+\n+        /*\n+        Button button = new Button(\"Help\");\n+        button.setStyleName(\"small\");\n+        button.setDescription(\"Display help and usage\");\n+        */\n+\n+        /**\n+         * button.addClickListener(new HelpClickListener(this, m_wallboardConfigView.getDashletSelector()));\n+         */\n+\n+        Button addButton = new Button(\"Add\");\n+        addButton.setStyleName(\"small\");\n+        addButton.setDescription(\"Add surveillance view configuration\");\n+\n+        addButton.addClickListener(new Button.ClickListener() {\n+            @Override\n+            public void buttonClick(Button.ClickEvent clickEvent) {\n+                String newName;\n+                int i = 0;\n+\n+                do {\n+                    i++;\n+                    newName = \"Untitled #\" + i;\n+                } while (SurveillanceViewProvider.getInstance().containsView(newName));\n+\n+                View view = new View();\n+                view.setName(newName);\n+\n+                getUI().addWindow(new SurveillanceViewConfigurationWindow(m_surveillanceViewService, view, new SurveillanceViewConfigurationWindow.SaveActionListener() {\n+                    @Override\n+                    public void save(View view) {\n+                        m_beanItemContainer.addItem(view);\n+\n+                        SurveillanceViewProvider.getInstance().getSurveillanceViewConfiguration().getViews().add(view);\n+                        SurveillanceViewProvider.getInstance().save();\n+\n+                        ((SurveillanceViewsConfigUI) getUI()).notifyMessage(\"Data saved\", \"Surveillance View\");\n+\n+                        m_table.refreshRowCache();\n+                        m_table.sort(new Object[]{\"name\"}, new boolean[]{true});\n+                    }\n+                }));\n+            }\n+        });\n+\n+        HorizontalLayout horizontalLayout = new HorizontalLayout();\n+        horizontalLayout.addComponent(label);\n+        // horizontalLayout.addComponent(button);\n+        horizontalLayout.setWidth(100, Unit.PERCENTAGE);\n+\n+        horizontalLayout.setComponentAlignment(label, Alignment.MIDDLE_LEFT);\n+        // horizontalLayout.setComponentAlignment(button, Alignment.MIDDLE_RIGHT);\n+\n+        addComponent(horizontalLayout);\n+\n+        addComponent(addButton);\n+\n+        /**\n+         * Adding the table with the required {@link com.vaadin.ui.Table.ColumnGenerator} objects\n+         */\n+        m_table = new Table();\n+\n+        m_table.setContainerDataSource(m_beanItemContainer);\n+        m_table.setSizeFull();\n+        m_table.sort(new Object[]{\"name\"}, new boolean[]{true});\n+\n+        m_table.addGeneratedColumn(\"Edit\", new Table.ColumnGenerator()\n+\n+                {\n+                    public Object generateCell(Table source, final Object itemId, Object columnId) {\n+                        Button button = new Button(\"Edit\");\n+                        button.setDescription(\"Edit this Surveillance View configuration\");\n+                        button.setStyleName(\"small\");\n+                        button.addClickListener(new Button.ClickListener() {\n+                            public void buttonClick(Button.ClickEvent clickEvent) {\n+                                getUI().addWindow(new SurveillanceViewConfigurationWindow(m_surveillanceViewService, m_beanItemContainer.getItem(itemId).getBean(), new SurveillanceViewConfigurationWindow.SaveActionListener() {\n+                                    @Override\n+                                    public void save(View view) {\n+                                        View oldView = m_beanItemContainer.getItem(itemId).getBean();\n+\n+                                        m_beanItemContainer.removeItem(itemId);\n+                                        m_beanItemContainer.addItem(view);\n+\n+                                        SurveillanceViewProvider.getInstance().replaceView(oldView, view);\n+\n+                                        SurveillanceViewProvider.getInstance().save();\n+                                        ((SurveillanceViewsConfigUI) getUI()).notifyMessage(\"Data saved\", \"Surveillance view\");\n+\n+                                        m_table.refreshRowCache();\n+                                        m_table.sort(new Object[]{\"name\"}, new boolean[]{true});\n+                                    }\n+                                }));\n+                            }\n+                        });\n+                        return button;\n+                    }\n+                }\n+\n+        );\n+\n+        m_table.addGeneratedColumn(\"Remove\", new Table.ColumnGenerator()\n+\n+                {\n+                    public Object generateCell(Table source, final Object itemId, Object columnId) {\n+                        Button button = new Button(\"Remove\");\n+                        button.setDescription(\"Delete this Surveillance View configuration\");\n+                        button.setStyleName(\"small\");\n+                        button.addClickListener(new Button.ClickListener() {\n+                            public void buttonClick(Button.ClickEvent clickEvent) {\n+                                SurveillanceViewProvider.getInstance().removeView((View) itemId);\n+                                m_beanItemContainer.removeItem(itemId);\n+                            }\n+                        });\n+                        return button;\n+                    }\n+                }\n+\n+        );\n+\n+        m_table.addGeneratedColumn(\"Preview\", new Table.ColumnGenerator()\n+\n+                {\n+                    public Object generateCell(Table source, final Object itemId, Object columnId) {\n+                        Button button = new Button(\"Preview\");\n+                        button.setDescription(\"Preview this Surveillance View configuration\");\n+                        button.setStyleName(\"small\");\n+\n+                        button.addClickListener(new PreviewClickListener(m_surveillanceViewService, SurveillanceViewsConfigList.this, (View) itemId));\n+\n+                        return button;\n+                    }\n+                }\n+\n+        );\n+\n+        m_table.addGeneratedColumn(\"Default\", new Table.ColumnGenerator()\n+\n+                {","path":"features/vaadin-surveillance-views/src/main/java/org/opennms/features/vaadin/surveillanceviews/ui/SurveillanceViewsConfigList.java","position":231,"original_position":231,"commit_id":"1572a4b3b9cf2ba901e0ab20f488cc0af7ca73fe","original_commit_id":"1572a4b3b9cf2ba901e0ab20f488cc0af7ca73fe","user":{"login":"thedesloge","id":1054248,"avatar_url":"https://avatars.githubusercontent.com/u/1054248?v=3","gravatar_id":"","url":"https://api.github.com/users/thedesloge","html_url":"https://github.com/thedesloge","followers_url":"https://api.github.com/users/thedesloge/followers","following_url":"https://api.github.com/users/thedesloge/following{/other_user}","gists_url":"https://api.github.com/users/thedesloge/gists{/gist_id}","starred_url":"https://api.github.com/users/thedesloge/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/thedesloge/subscriptions","organizations_url":"https://api.github.com/users/thedesloge/orgs","repos_url":"https://api.github.com/users/thedesloge/repos","events_url":"https://api.github.com/users/thedesloge/events{/privacy}","received_events_url":"https://api.github.com/users/thedesloge/received_events","type":"User","site_admin":false},"body":"Same as above. This time its your own fault. ;-)","created_at":"2015-03-11T16:03:30Z","updated_at":"2015-03-11T16:03:30Z","html_url":"https://github.com/OpenNMS/opennms/pull/230#discussion_r26226037","pull_request_url":"https://api.github.com/repos/OpenNMS/opennms/pulls/230","_links":{"self":{"href":"https://api.github.com/repos/OpenNMS/opennms/pulls/comments/26226037"},"html":{"href":"https://github.com/OpenNMS/opennms/pull/230#discussion_r26226037"},"pull_request":{"href":"https://api.github.com/repos/OpenNMS/opennms/pulls/230"}}},"pull_request":{"url":"https://api.github.com/repos/OpenNMS/opennms/pulls/230","id":30379863,"html_url":"https://github.com/OpenNMS/opennms/pull/230","diff_url":"https://github.com/OpenNMS/opennms/pull/230.diff","patch_url":"https://github.com/OpenNMS/opennms/pull/230.patch","issue_url":"https://api.github.com/repos/OpenNMS/opennms/issues/230","number":230,"state":"open","locked":false,"title":"NMS-7298: Replace GWT and improve Dashboard","user":{"login":"christianpape","id":4200555,"avatar_url":"https://avatars.githubusercontent.com/u/4200555?v=3","gravatar_id":"","url":"https://api.github.com/users/christianpape","html_url":"https://github.com/christianpape","followers_url":"https://api.github.com/users/christianpape/followers","following_url":"https://api.github.com/users/christianpape/following{/other_user}","gists_url":"https://api.github.com/users/christianpape/gists{/gist_id}","starred_url":"https://api.github.com/users/christianpape/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/christianpape/subscriptions","organizations_url":"https://api.github.com/users/christianpape/orgs","repos_url":"https://api.github.com/users/christianpape/repos","events_url":"https://api.github.com/users/christianpape/events{/privacy}","received_events_url":"https://api.github.com/users/christianpape/received_events","type":"User","site_admin":false},"body":"Please review...\r\n\r\nJIRA: http://issues.opennms.org/browse/NMS-7298\r\n\r\nTodo:\r\n- [ ] Review code\r\n- [ ] Merge to develop\r\n","created_at":"2015-03-03T14:54:59Z","updated_at":"2015-03-11T16:03:30Z","closed_at":null,"merged_at":null,"merge_commit_sha":"c726ac30a9c39be2ad766b2c5b851bc123d84ca5","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/OpenNMS/opennms/pulls/230/commits","review_comments_url":"https://api.github.com/repos/OpenNMS/opennms/pulls/230/comments","review_comment_url":"https://api.github.com/repos/OpenNMS/opennms/pulls/comments{/number}","comments_url":"https://api.github.com/repos/OpenNMS/opennms/issues/230/comments","statuses_url":"https://api.github.com/repos/OpenNMS/opennms/statuses/1572a4b3b9cf2ba901e0ab20f488cc0af7ca73fe","head":{"label":"OpenNMS:jira/NMS-7298","ref":"jira/NMS-7298","sha":"1572a4b3b9cf2ba901e0ab20f488cc0af7ca73fe","user":{"login":"OpenNMS","id":2972482,"avatar_url":"https://avatars.githubusercontent.com/u/2972482?v=3","gravatar_id":"","url":"https://api.github.com/users/OpenNMS","html_url":"https://github.com/OpenNMS","followers_url":"https://api.github.com/users/OpenNMS/followers","following_url":"https://api.github.com/users/OpenNMS/following{/other_user}","gists_url":"https://api.github.com/users/OpenNMS/gists{/gist_id}","starred_url":"https://api.github.com/users/OpenNMS/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OpenNMS/subscriptions","organizations_url":"https://api.github.com/users/OpenNMS/orgs","repos_url":"https://api.github.com/users/OpenNMS/repos","events_url":"https://api.github.com/users/OpenNMS/events{/privacy}","received_events_url":"https://api.github.com/users/OpenNMS/received_events","type":"Organization","site_admin":false},"repo":{"id":9377198,"name":"opennms","full_name":"OpenNMS/opennms","owner":{"login":"OpenNMS","id":2972482,"avatar_url":"https://avatars.githubusercontent.com/u/2972482?v=3","gravatar_id":"","url":"https://api.github.com/users/OpenNMS","html_url":"https://github.com/OpenNMS","followers_url":"https://api.github.com/users/OpenNMS/followers","following_url":"https://api.github.com/users/OpenNMS/following{/other_user}","gists_url":"https://api.github.com/users/OpenNMS/gists{/gist_id}","starred_url":"https://api.github.com/users/OpenNMS/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OpenNMS/subscriptions","organizations_url":"https://api.github.com/users/OpenNMS/orgs","repos_url":"https://api.github.com/users/OpenNMS/repos","events_url":"https://api.github.com/users/OpenNMS/events{/privacy}","received_events_url":"https://api.github.com/users/OpenNMS/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/OpenNMS/opennms","description":"","fork":false,"url":"https://api.github.com/repos/OpenNMS/opennms","forks_url":"https://api.github.com/repos/OpenNMS/opennms/forks","keys_url":"https://api.github.com/repos/OpenNMS/opennms/keys{/key_id}","collaborators_url":"https://api.github.com/repos/OpenNMS/opennms/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/OpenNMS/opennms/teams","hooks_url":"https://api.github.com/repos/OpenNMS/opennms/hooks","issue_events_url":"https://api.github.com/repos/OpenNMS/opennms/issues/events{/number}","events_url":"https://api.github.com/repos/OpenNMS/opennms/events","assignees_url":"https://api.github.com/repos/OpenNMS/opennms/assignees{/user}","branches_url":"https://api.github.com/repos/OpenNMS/opennms/branches{/branch}","tags_url":"https://api.github.com/repos/OpenNMS/opennms/tags","blobs_url":"https://api.github.com/repos/OpenNMS/opennms/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/OpenNMS/opennms/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/OpenNMS/opennms/git/refs{/sha}","trees_url":"https://api.github.com/repos/OpenNMS/opennms/git/trees{/sha}","statuses_url":"https://api.github.com/repos/OpenNMS/opennms/statuses/{sha}","languages_url":"https://api.github.com/repos/OpenNMS/opennms/languages","stargazers_url":"https://api.github.com/repos/OpenNMS/opennms/stargazers","contributors_url":"https://api.github.com/repos/OpenNMS/opennms/contributors","subscribers_url":"https://api.github.com/repos/OpenNMS/opennms/subscribers","subscription_url":"https://api.github.com/repos/OpenNMS/opennms/subscription","commits_url":"https://api.github.com/repos/OpenNMS/opennms/commits{/sha}","git_commits_url":"https://api.github.com/repos/OpenNMS/opennms/git/commits{/sha}","comments_url":"https://api.github.com/repos/OpenNMS/opennms/comments{/number}","issue_comment_url":"https://api.github.com/repos/OpenNMS/opennms/issues/comments{/number}","contents_url":"https://api.github.com/repos/OpenNMS/opennms/contents/{+path}","compare_url":"https://api.github.com/repos/OpenNMS/opennms/compare/{base}...{head}","merges_url":"https://api.github.com/repos/OpenNMS/opennms/merges","archive_url":"https://api.github.com/repos/OpenNMS/opennms/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/OpenNMS/opennms/downloads","issues_url":"https://api.github.com/repos/OpenNMS/opennms/issues{/number}","pulls_url":"https://api.github.com/repos/OpenNMS/opennms/pulls{/number}","milestones_url":"https://api.github.com/repos/OpenNMS/opennms/milestones{/number}","notifications_url":"https://api.github.com/repos/OpenNMS/opennms/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/OpenNMS/opennms/labels{/name}","releases_url":"https://api.github.com/repos/OpenNMS/opennms/releases{/id}","created_at":"2013-04-11T18:22:33Z","updated_at":"2015-03-11T13:21:03Z","pushed_at":"2015-03-11T15:27:30Z","git_url":"git://github.com/OpenNMS/opennms.git","ssh_url":"git@github.com:OpenNMS/opennms.git","clone_url":"https://github.com/OpenNMS/opennms.git","svn_url":"https://github.com/OpenNMS/opennms","homepage":"http://www.opennms.org/","size":1003315,"stargazers_count":79,"watchers_count":79,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":167,"mirror_url":null,"open_issues_count":24,"forks":167,"open_issues":24,"watchers":79,"default_branch":"develop"}},"base":{"label":"OpenNMS:develop","ref":"develop","sha":"7bad3bcfe96a122acc7a8d9682729cae0188a8d1","user":{"login":"OpenNMS","id":2972482,"avatar_url":"https://avatars.githubusercontent.com/u/2972482?v=3","gravatar_id":"","url":"https://api.github.com/users/OpenNMS","html_url":"https://github.com/OpenNMS","followers_url":"https://api.github.com/users/OpenNMS/followers","following_url":"https://api.github.com/users/OpenNMS/following{/other_user}","gists_url":"https://api.github.com/users/OpenNMS/gists{/gist_id}","starred_url":"https://api.github.com/users/OpenNMS/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OpenNMS/subscriptions","organizations_url":"https://api.github.com/users/OpenNMS/orgs","repos_url":"https://api.github.com/users/OpenNMS/repos","events_url":"https://api.github.com/users/OpenNMS/events{/privacy}","received_events_url":"https://api.github.com/users/OpenNMS/received_events","type":"Organization","site_admin":false},"repo":{"id":9377198,"name":"opennms","full_name":"OpenNMS/opennms","owner":{"login":"OpenNMS","id":2972482,"avatar_url":"https://avatars.githubusercontent.com/u/2972482?v=3","gravatar_id":"","url":"https://api.github.com/users/OpenNMS","html_url":"https://github.com/OpenNMS","followers_url":"https://api.github.com/users/OpenNMS/followers","following_url":"https://api.github.com/users/OpenNMS/following{/other_user}","gists_url":"https://api.github.com/users/OpenNMS/gists{/gist_id}","starred_url":"https://api.github.com/users/OpenNMS/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OpenNMS/subscriptions","organizations_url":"https://api.github.com/users/OpenNMS/orgs","repos_url":"https://api.github.com/users/OpenNMS/repos","events_url":"https://api.github.com/users/OpenNMS/events{/privacy}","received_events_url":"https://api.github.com/users/OpenNMS/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/OpenNMS/opennms","description":"","fork":false,"url":"https://api.github.com/repos/OpenNMS/opennms","forks_url":"https://api.github.com/repos/OpenNMS/opennms/forks","keys_url":"https://api.github.com/repos/OpenNMS/opennms/keys{/key_id}","collaborators_url":"https://api.github.com/repos/OpenNMS/opennms/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/OpenNMS/opennms/teams","hooks_url":"https://api.github.com/repos/OpenNMS/opennms/hooks","issue_events_url":"https://api.github.com/repos/OpenNMS/opennms/issues/events{/number}","events_url":"https://api.github.com/repos/OpenNMS/opennms/events","assignees_url":"https://api.github.com/repos/OpenNMS/opennms/assignees{/user}","branches_url":"https://api.github.com/repos/OpenNMS/opennms/branches{/branch}","tags_url":"https://api.github.com/repos/OpenNMS/opennms/tags","blobs_url":"https://api.github.com/repos/OpenNMS/opennms/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/OpenNMS/opennms/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/OpenNMS/opennms/git/refs{/sha}","trees_url":"https://api.github.com/repos/OpenNMS/opennms/git/trees{/sha}","statuses_url":"https://api.github.com/repos/OpenNMS/opennms/statuses/{sha}","languages_url":"https://api.github.com/repos/OpenNMS/opennms/languages","stargazers_url":"https://api.github.com/repos/OpenNMS/opennms/stargazers","contributors_url":"https://api.github.com/repos/OpenNMS/opennms/contributors","subscribers_url":"https://api.github.com/repos/OpenNMS/opennms/subscribers","subscription_url":"https://api.github.com/repos/OpenNMS/opennms/subscription","commits_url":"https://api.github.com/repos/OpenNMS/opennms/commits{/sha}","git_commits_url":"https://api.github.com/repos/OpenNMS/opennms/git/commits{/sha}","comments_url":"https://api.github.com/repos/OpenNMS/opennms/comments{/number}","issue_comment_url":"https://api.github.com/repos/OpenNMS/opennms/issues/comments{/number}","contents_url":"https://api.github.com/repos/OpenNMS/opennms/contents/{+path}","compare_url":"https://api.github.com/repos/OpenNMS/opennms/compare/{base}...{head}","merges_url":"https://api.github.com/repos/OpenNMS/opennms/merges","archive_url":"https://api.github.com/repos/OpenNMS/opennms/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/OpenNMS/opennms/downloads","issues_url":"https://api.github.com/repos/OpenNMS/opennms/issues{/number}","pulls_url":"https://api.github.com/repos/OpenNMS/opennms/pulls{/number}","milestones_url":"https://api.github.com/repos/OpenNMS/opennms/milestones{/number}","notifications_url":"https://api.github.com/repos/OpenNMS/opennms/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/OpenNMS/opennms/labels{/name}","releases_url":"https://api.github.com/repos/OpenNMS/opennms/releases{/id}","created_at":"2013-04-11T18:22:33Z","updated_at":"2015-03-11T13:21:03Z","pushed_at":"2015-03-11T15:27:30Z","git_url":"git://github.com/OpenNMS/opennms.git","ssh_url":"git@github.com:OpenNMS/opennms.git","clone_url":"https://github.com/OpenNMS/opennms.git","svn_url":"https://github.com/OpenNMS/opennms","homepage":"http://www.opennms.org/","size":1003315,"stargazers_count":79,"watchers_count":79,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":167,"mirror_url":null,"open_issues_count":24,"forks":167,"open_issues":24,"watchers":79,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/OpenNMS/opennms/pulls/230"},"html":{"href":"https://github.com/OpenNMS/opennms/pull/230"},"issue":{"href":"https://api.github.com/repos/OpenNMS/opennms/issues/230"},"comments":{"href":"https://api.github.com/repos/OpenNMS/opennms/issues/230/comments"},"review_comments":{"href":"https://api.github.com/repos/OpenNMS/opennms/pulls/230/comments"},"review_comment":{"href":"https://api.github.com/repos/OpenNMS/opennms/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/OpenNMS/opennms/pulls/230/commits"},"statuses":{"href":"https://api.github.com/repos/OpenNMS/opennms/statuses/1572a4b3b9cf2ba901e0ab20f488cc0af7ca73fe"}}}}