{"action":"created","comment":{"url":"https://api.github.com/repos/codice/ddf/pulls/comments/69737220","id":69737220,"diff_hunk":"@@ -0,0 +1,210 @@\n+/**\n+ * Copyright (c) Codice Foundation\n+ * <p>\n+ * This is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser\n+ * General Public License as published by the Free Software Foundation, either version 3 of the\n+ * License, or any later version.\n+ * <p>\n+ * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without\n+ * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n+ * Lesser General Public License for more details. A copy of the GNU Lesser General Public License\n+ * is distributed along with this program and can be found at\n+ * <http://www.gnu.org/licenses/lgpl.html>.\n+ */\n+\n+package org.codice.ddf.transformer.xml.streaming.lib;\n+\n+import static org.hamcrest.Matchers.is;\n+import static org.junit.Assert.assertThat;\n+\n+import java.io.IOException;\n+\n+import javax.xml.stream.XMLStreamException;\n+\n+import org.junit.Test;\n+import org.xml.sax.SAXException;\n+\n+public class TestSaxEventToXmlElementConverter {\n+\n+    /*\n+     * Some of the \"reconstructedExpectations\" in this class are different than the input. This is acceptable and expected,\n+     * because the output just has to be semantically the same as the input, it doesn't have to be literally the same.\n+     * For example, sometimes the namespaces are declared at different scopes, in a different order, comments are removed, etc.\n+     */\n+\n+    @Test\n+    public void testSaxEventToXmlElementConverterRedeclaredNamespaceUri()\n+            throws XMLStreamException, IOException, SAXException {\n+        String doubleDeclaredNamespaceUriSnippet =\n+                //@formatter:off\n+                  \"<x xmlns:n1='foobar' xmlns='foobar'>\"\n+                + \"    <good a='1' b='2' />\"\n+                + \"    <good a='1' n1:a='2' />\"\n+                + \"</x>\";\n+                //@formatter:on\n+\n+        String reconstructedExpectation =\n+                //@formatter:off\n+                  \"<x xmlns='foobar'>\"\n+                + \"    <good a='1' b='2'></good>\"\n+                + \"    <good a='1' xmlns:ns1='foobar' ns1:a='2'></good>\"\n+                + \"</x>\";\n+                //@formatter:on\n+        TestSaxParser parser = new TestSaxParser();\n+        String reconstructedXml = parser.parseAndReconstruct(doubleDeclaredNamespaceUriSnippet);\n+        reconstructedExpectation = reconstructedExpectation.replaceAll(\"'\", \"\\\"\");\n+        assertThat(reconstructedExpectation, is(reconstructedXml));\n+    }\n+\n+    @Test\n+    public void testSaxEventToXmlElementConverterRedeclaredNamespaceUriVariation()\n+            throws XMLStreamException, IOException, SAXException {\n+        String doubleDeclaredNamespaceUriSnippet =\n+                //@formatter:off\n+                  \"<x:y xmlns='default' xmlns:x='www.x.com' x:one='2' x:two='2'>\"\n+                + \"    <y:z xmlns:y='www.x.com' x:one='1' y:two='2'>\"\n+                + \"        <x:z>abcdefg</x:z>\"\n+                + \"    </y:z>\"\n+                + \"</x:y>\";\n+                //@formatter:on\n+        String reconstructedExpectation =\n+                //@formatter:off\n+                  \"<x:y xmlns:x='www.x.com' x:one='2' x:two='2'>\"\n+                + \"    <y:z xmlns:y='www.x.com' y:one='1' y:two='2'>\"\n+                + \"        <y:z>abcdefg</y:z>\"\n+                + \"    </y:z>\"\n+                + \"</x:y>\";\n+                //@formatter:on\n+        TestSaxParser parser = new TestSaxParser();\n+        String reconstructedXml = parser.parseAndReconstruct(doubleDeclaredNamespaceUriSnippet);\n+        reconstructedExpectation = reconstructedExpectation.replaceAll(\"'\", \"\\\"\");\n+        assertThat(reconstructedXml, is(reconstructedExpectation));\n+    }\n+\n+    @Test\n+    public void testSaxEventToXmlElementConverterRedeclaredNamespaceUriVariation2()\n+            throws XMLStreamException, IOException, SAXException {\n+        String snippet =\n+                //@formatter:off\n+                  \"<?xml version='1.0' encoding='UTF-8' ?>\"\n+                + \"<outer xmlns:aaa='whocares' xmlns='http://www.w3.com'>\"\n+                + \"    <aaa:foo name='outside'>\"\n+                + \"        <aaa:bar xmlns:bbb='inside1'>\"\n+                + \"            <bbb:baz xmlns:aaa='inside2'>\"\n+                + \"                <aaa:verybad name='scope matters'/>\"\n+                + \"            </bbb:baz>\"\n+                + \"        </aaa:bar>\"\n+                + \"    </aaa:foo>\"\n+                + \"</outer>\";\n+                //@formatter:on\n+        String reconstructedExpectation =\n+                //@formatter:off\n+                  \"<outer xmlns='http://www.w3.com'>\"\n+                + \"    <aaa:foo xmlns:aaa='whocares' name='outside'>\"\n+                + \"        <aaa:bar>\"\n+                + \"            <bbb:baz xmlns:bbb='inside1'>\"\n+                + \"                <aaa:verybad xmlns:aaa='inside2' name='scope matters'></aaa:verybad>\"\n+                + \"            </bbb:baz>\"\n+                + \"        </aaa:bar>\"\n+                + \"    </aaa:foo>\"\n+                + \"</outer>\";\n+                //@formatter:on\n+\n+        TestSaxParser parser = new TestSaxParser();\n+        String reconstructedXml = parser.parseAndReconstruct(snippet);\n+        reconstructedExpectation = reconstructedExpectation.replaceAll(\"'\", \"\\\"\");\n+        assertThat(reconstructedXml, is(reconstructedExpectation));\n+    }\n+\n+    @Test\n+    public void testSaxEventToXmlConverterNormal()\n+            throws XMLStreamException, IOException, SAXException {\n+        String normalSnippet =\n+                //@formatter:off\n+                  \"<?xml version='1.0'?>\"\n+                + \"<!-- both namespace prefixes are available throughout -->\"\n+                + \"<bk:book xmlns:bk='urn:loc.gov:books' xmlns:isbn='urn:ISBN:0-395-36341-6'>\"\n+                + \"    <bk:title>Cheaper by the Dozen</bk:title>\"\n+                + \"    <isbn:number>1568491379</isbn:number>\"\n+                + \"</bk:book>\";\n+                //@formatter:on\n+\n+        String reconstructedExpectation =\n+                //@formatter:off\n+                  \"<bk:book xmlns:bk='urn:loc.gov:books'>\"\n+                + \"    <bk:title>Cheaper by the Dozen</bk:title>\"\n+                + \"    <isbn:number xmlns:isbn='urn:ISBN:0-395-36341-6'>1568491379</isbn:number>\"\n+                + \"</bk:book>\";\n+                //@formatter:on\n+\n+        TestSaxParser parser = new TestSaxParser();\n+        String reconstructedXml = parser.parseAndReconstruct(normalSnippet);\n+        reconstructedExpectation = reconstructedExpectation.replaceAll(\"'\", \"\\\"\");\n+        assertThat(reconstructedExpectation, is(reconstructedXml));\n+    }\n+\n+    @Test\n+    public void testSaxEventToXmlConverterScopedPrefixRedeclaration()\n+            throws XMLStreamException, IOException, SAXException {\n+        String snippet =\n+                //@formatter:off\n+                  \"<?xml version='1.0'?>\"\n+                + \"<!-- initially, the default namespace is 'books' -->\"\n+                + \"<book xmlns='urn:loc.gov:books' xmlns:isbn='urn:ISBN:0-395-36341-6'>\"\n+                + \"    <title>Cheaper by the Dozen</title>\"\n+                + \"    <isbn:number>1568491379</isbn:number>\"\n+                + \"    <notes><!-- make HTML the default namespace for some commentary -->\"","path":"catalog/transformer/catalog-transformer-streaming-lib/src/test/java/org/codice/ddf/transformer/xml/streaming/lib/TestSaxEventToXmlElementConverter.java","position":156,"original_position":156,"commit_id":"f41c88f90a527fba7701abf90009f6c7e1db97b6","original_commit_id":"f41c88f90a527fba7701abf90009f6c7e1db97b6","user":{"login":"coyotesqrl","id":1469860,"avatar_url":"https://avatars.githubusercontent.com/u/1469860?v=3","gravatar_id":"","url":"https://api.github.com/users/coyotesqrl","html_url":"https://github.com/coyotesqrl","followers_url":"https://api.github.com/users/coyotesqrl/followers","following_url":"https://api.github.com/users/coyotesqrl/following{/other_user}","gists_url":"https://api.github.com/users/coyotesqrl/gists{/gist_id}","starred_url":"https://api.github.com/users/coyotesqrl/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/coyotesqrl/subscriptions","organizations_url":"https://api.github.com/users/coyotesqrl/orgs","repos_url":"https://api.github.com/users/coyotesqrl/repos","events_url":"https://api.github.com/users/coyotesqrl/events{/privacy}","received_events_url":"https://api.github.com/users/coyotesqrl/received_events","type":"User","site_admin":false},"body":"Wouldn't a more common usage here be to put the re-declaration of HTML as the default namespace up in the `notes` tag? Otherwise, you'd have to keep resetting the namespace in every paragraph, etc. below.","created_at":"2016-07-06T14:10:54Z","updated_at":"2016-07-06T14:10:54Z","html_url":"https://github.com/codice/ddf/pull/969#discussion_r69737220","pull_request_url":"https://api.github.com/repos/codice/ddf/pulls/969","_links":{"self":{"href":"https://api.github.com/repos/codice/ddf/pulls/comments/69737220"},"html":{"href":"https://github.com/codice/ddf/pull/969#discussion_r69737220"},"pull_request":{"href":"https://api.github.com/repos/codice/ddf/pulls/969"}}},"pull_request":{"url":"https://api.github.com/repos/codice/ddf/pulls/969","id":76320472,"html_url":"https://github.com/codice/ddf/pull/969","diff_url":"https://github.com/codice/ddf/pull/969.diff","patch_url":"https://github.com/codice/ddf/pull/969.patch","issue_url":"https://api.github.com/repos/codice/ddf/issues/969","number":969,"state":"open","locked":false,"title":"DDF-2250 Make SaxEventToXmlConverter handle edge cases","user":{"login":"harrison-tarr","id":14062223,"avatar_url":"https://avatars.githubusercontent.com/u/14062223?v=3","gravatar_id":"","url":"https://api.github.com/users/harrison-tarr","html_url":"https://github.com/harrison-tarr","followers_url":"https://api.github.com/users/harrison-tarr/followers","following_url":"https://api.github.com/users/harrison-tarr/following{/other_user}","gists_url":"https://api.github.com/users/harrison-tarr/gists{/gist_id}","starred_url":"https://api.github.com/users/harrison-tarr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/harrison-tarr/subscriptions","organizations_url":"https://api.github.com/users/harrison-tarr/orgs","repos_url":"https://api.github.com/users/harrison-tarr/repos","events_url":"https://api.github.com/users/harrison-tarr/events{/privacy}","received_events_url":"https://api.github.com/users/harrison-tarr/received_events","type":"User","site_admin":false},"body":"#### What does this PR do?\r\nAdds unit tests and makes the SaxEventToXmlElementConverter even more robust\r\n#### Who is reviewing it (please choose AT LEAST two reviewers that need to approve the PR before it can get merged; if a component team is listed, at least one of its members needs to approve)?\r\n@brendan-hofmann \r\n#### Choose 2 committers to review/merge the PR (please choose ONLY two committers from below, delete the rest).\r\n@coyotesqrl\r\n@shaundmorris\r\n#### How should this be tested?\r\nUnit tests should be enough. If during review we realize we need more, they can be added.\r\n#### Any background context you want to provide?\r\nWhen this ticket was first being reviewed, we noticed it could use better unit tests with better edge case coverage. This PR intends to add that edge case coverage.\r\n#### What are the relevant tickets?\r\nDDF-2250\r\n#### Screenshots (if appropriate)\r\n#### Checklist:\r\n- [ ] Documentation Updated\r\n- [X] Update / Add Unit Tests\r\n- [ ] Update / Add Integration Tests\r\n","created_at":"2016-07-05T18:29:37Z","updated_at":"2016-07-06T14:10:54Z","closed_at":null,"merged_at":null,"merge_commit_sha":"f0994bc05289b410d37ecd14d830aa8263d5cd06","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/codice/ddf/pulls/969/commits","review_comments_url":"https://api.github.com/repos/codice/ddf/pulls/969/comments","review_comment_url":"https://api.github.com/repos/codice/ddf/pulls/comments{/number}","comments_url":"https://api.github.com/repos/codice/ddf/issues/969/comments","statuses_url":"https://api.github.com/repos/codice/ddf/statuses/f41c88f90a527fba7701abf90009f6c7e1db97b6","head":{"label":"harrison-tarr:DDF-2250","ref":"DDF-2250","sha":"f41c88f90a527fba7701abf90009f6c7e1db97b6","user":{"login":"harrison-tarr","id":14062223,"avatar_url":"https://avatars.githubusercontent.com/u/14062223?v=3","gravatar_id":"","url":"https://api.github.com/users/harrison-tarr","html_url":"https://github.com/harrison-tarr","followers_url":"https://api.github.com/users/harrison-tarr/followers","following_url":"https://api.github.com/users/harrison-tarr/following{/other_user}","gists_url":"https://api.github.com/users/harrison-tarr/gists{/gist_id}","starred_url":"https://api.github.com/users/harrison-tarr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/harrison-tarr/subscriptions","organizations_url":"https://api.github.com/users/harrison-tarr/orgs","repos_url":"https://api.github.com/users/harrison-tarr/repos","events_url":"https://api.github.com/users/harrison-tarr/events{/privacy}","received_events_url":"https://api.github.com/users/harrison-tarr/received_events","type":"User","site_admin":false},"repo":{"id":41703445,"name":"ddf","full_name":"harrison-tarr/ddf","owner":{"login":"harrison-tarr","id":14062223,"avatar_url":"https://avatars.githubusercontent.com/u/14062223?v=3","gravatar_id":"","url":"https://api.github.com/users/harrison-tarr","html_url":"https://github.com/harrison-tarr","followers_url":"https://api.github.com/users/harrison-tarr/followers","following_url":"https://api.github.com/users/harrison-tarr/following{/other_user}","gists_url":"https://api.github.com/users/harrison-tarr/gists{/gist_id}","starred_url":"https://api.github.com/users/harrison-tarr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/harrison-tarr/subscriptions","organizations_url":"https://api.github.com/users/harrison-tarr/orgs","repos_url":"https://api.github.com/users/harrison-tarr/repos","events_url":"https://api.github.com/users/harrison-tarr/events{/privacy}","received_events_url":"https://api.github.com/users/harrison-tarr/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/harrison-tarr/ddf","description":"The Distributed Data Framework - Distribution, SDK, and Test","fork":true,"url":"https://api.github.com/repos/harrison-tarr/ddf","forks_url":"https://api.github.com/repos/harrison-tarr/ddf/forks","keys_url":"https://api.github.com/repos/harrison-tarr/ddf/keys{/key_id}","collaborators_url":"https://api.github.com/repos/harrison-tarr/ddf/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/harrison-tarr/ddf/teams","hooks_url":"https://api.github.com/repos/harrison-tarr/ddf/hooks","issue_events_url":"https://api.github.com/repos/harrison-tarr/ddf/issues/events{/number}","events_url":"https://api.github.com/repos/harrison-tarr/ddf/events","assignees_url":"https://api.github.com/repos/harrison-tarr/ddf/assignees{/user}","branches_url":"https://api.github.com/repos/harrison-tarr/ddf/branches{/branch}","tags_url":"https://api.github.com/repos/harrison-tarr/ddf/tags","blobs_url":"https://api.github.com/repos/harrison-tarr/ddf/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/harrison-tarr/ddf/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/harrison-tarr/ddf/git/refs{/sha}","trees_url":"https://api.github.com/repos/harrison-tarr/ddf/git/trees{/sha}","statuses_url":"https://api.github.com/repos/harrison-tarr/ddf/statuses/{sha}","languages_url":"https://api.github.com/repos/harrison-tarr/ddf/languages","stargazers_url":"https://api.github.com/repos/harrison-tarr/ddf/stargazers","contributors_url":"https://api.github.com/repos/harrison-tarr/ddf/contributors","subscribers_url":"https://api.github.com/repos/harrison-tarr/ddf/subscribers","subscription_url":"https://api.github.com/repos/harrison-tarr/ddf/subscription","commits_url":"https://api.github.com/repos/harrison-tarr/ddf/commits{/sha}","git_commits_url":"https://api.github.com/repos/harrison-tarr/ddf/git/commits{/sha}","comments_url":"https://api.github.com/repos/harrison-tarr/ddf/comments{/number}","issue_comment_url":"https://api.github.com/repos/harrison-tarr/ddf/issues/comments{/number}","contents_url":"https://api.github.com/repos/harrison-tarr/ddf/contents/{+path}","compare_url":"https://api.github.com/repos/harrison-tarr/ddf/compare/{base}...{head}","merges_url":"https://api.github.com/repos/harrison-tarr/ddf/merges","archive_url":"https://api.github.com/repos/harrison-tarr/ddf/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/harrison-tarr/ddf/downloads","issues_url":"https://api.github.com/repos/harrison-tarr/ddf/issues{/number}","pulls_url":"https://api.github.com/repos/harrison-tarr/ddf/pulls{/number}","milestones_url":"https://api.github.com/repos/harrison-tarr/ddf/milestones{/number}","notifications_url":"https://api.github.com/repos/harrison-tarr/ddf/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/harrison-tarr/ddf/labels{/name}","releases_url":"https://api.github.com/repos/harrison-tarr/ddf/releases{/id}","deployments_url":"https://api.github.com/repos/harrison-tarr/ddf/deployments","created_at":"2015-08-31T22:18:51Z","updated_at":"2015-08-31T22:19:01Z","pushed_at":"2016-07-05T22:09:39Z","git_url":"git://github.com/harrison-tarr/ddf.git","ssh_url":"git@github.com:harrison-tarr/ddf.git","clone_url":"https://github.com/harrison-tarr/ddf.git","svn_url":"https://github.com/harrison-tarr/ddf","homepage":"","size":145672,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_downloads":true,"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":"codice:master","ref":"master","sha":"f62b196b10cb2a2009f18bbbad53baecb6f41ddd","user":{"login":"codice","id":2386734,"avatar_url":"https://avatars.githubusercontent.com/u/2386734?v=3","gravatar_id":"","url":"https://api.github.com/users/codice","html_url":"https://github.com/codice","followers_url":"https://api.github.com/users/codice/followers","following_url":"https://api.github.com/users/codice/following{/other_user}","gists_url":"https://api.github.com/users/codice/gists{/gist_id}","starred_url":"https://api.github.com/users/codice/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/codice/subscriptions","organizations_url":"https://api.github.com/users/codice/orgs","repos_url":"https://api.github.com/users/codice/repos","events_url":"https://api.github.com/users/codice/events{/privacy}","received_events_url":"https://api.github.com/users/codice/received_events","type":"Organization","site_admin":false},"repo":{"id":15173563,"name":"ddf","full_name":"codice/ddf","owner":{"login":"codice","id":2386734,"avatar_url":"https://avatars.githubusercontent.com/u/2386734?v=3","gravatar_id":"","url":"https://api.github.com/users/codice","html_url":"https://github.com/codice","followers_url":"https://api.github.com/users/codice/followers","following_url":"https://api.github.com/users/codice/following{/other_user}","gists_url":"https://api.github.com/users/codice/gists{/gist_id}","starred_url":"https://api.github.com/users/codice/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/codice/subscriptions","organizations_url":"https://api.github.com/users/codice/orgs","repos_url":"https://api.github.com/users/codice/repos","events_url":"https://api.github.com/users/codice/events{/privacy}","received_events_url":"https://api.github.com/users/codice/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/codice/ddf","description":"Distributed Data Framework - an open source, modular integration framework.","fork":false,"url":"https://api.github.com/repos/codice/ddf","forks_url":"https://api.github.com/repos/codice/ddf/forks","keys_url":"https://api.github.com/repos/codice/ddf/keys{/key_id}","collaborators_url":"https://api.github.com/repos/codice/ddf/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/codice/ddf/teams","hooks_url":"https://api.github.com/repos/codice/ddf/hooks","issue_events_url":"https://api.github.com/repos/codice/ddf/issues/events{/number}","events_url":"https://api.github.com/repos/codice/ddf/events","assignees_url":"https://api.github.com/repos/codice/ddf/assignees{/user}","branches_url":"https://api.github.com/repos/codice/ddf/branches{/branch}","tags_url":"https://api.github.com/repos/codice/ddf/tags","blobs_url":"https://api.github.com/repos/codice/ddf/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/codice/ddf/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/codice/ddf/git/refs{/sha}","trees_url":"https://api.github.com/repos/codice/ddf/git/trees{/sha}","statuses_url":"https://api.github.com/repos/codice/ddf/statuses/{sha}","languages_url":"https://api.github.com/repos/codice/ddf/languages","stargazers_url":"https://api.github.com/repos/codice/ddf/stargazers","contributors_url":"https://api.github.com/repos/codice/ddf/contributors","subscribers_url":"https://api.github.com/repos/codice/ddf/subscribers","subscription_url":"https://api.github.com/repos/codice/ddf/subscription","commits_url":"https://api.github.com/repos/codice/ddf/commits{/sha}","git_commits_url":"https://api.github.com/repos/codice/ddf/git/commits{/sha}","comments_url":"https://api.github.com/repos/codice/ddf/comments{/number}","issue_comment_url":"https://api.github.com/repos/codice/ddf/issues/comments{/number}","contents_url":"https://api.github.com/repos/codice/ddf/contents/{+path}","compare_url":"https://api.github.com/repos/codice/ddf/compare/{base}...{head}","merges_url":"https://api.github.com/repos/codice/ddf/merges","archive_url":"https://api.github.com/repos/codice/ddf/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/codice/ddf/downloads","issues_url":"https://api.github.com/repos/codice/ddf/issues{/number}","pulls_url":"https://api.github.com/repos/codice/ddf/pulls{/number}","milestones_url":"https://api.github.com/repos/codice/ddf/milestones{/number}","notifications_url":"https://api.github.com/repos/codice/ddf/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/codice/ddf/labels{/name}","releases_url":"https://api.github.com/repos/codice/ddf/releases{/id}","deployments_url":"https://api.github.com/repos/codice/ddf/deployments","created_at":"2013-12-13T20:38:28Z","updated_at":"2016-06-30T23:25:30Z","pushed_at":"2016-07-06T13:53:01Z","git_url":"git://github.com/codice/ddf.git","ssh_url":"git@github.com:codice/ddf.git","clone_url":"https://github.com/codice/ddf.git","svn_url":"https://github.com/codice/ddf","homepage":"http://ddf.codice.org","size":277895,"stargazers_count":39,"watchers_count":39,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":81,"mirror_url":null,"open_issues_count":17,"forks":81,"open_issues":17,"watchers":39,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/codice/ddf/pulls/969"},"html":{"href":"https://github.com/codice/ddf/pull/969"},"issue":{"href":"https://api.github.com/repos/codice/ddf/issues/969"},"comments":{"href":"https://api.github.com/repos/codice/ddf/issues/969/comments"},"review_comments":{"href":"https://api.github.com/repos/codice/ddf/pulls/969/comments"},"review_comment":{"href":"https://api.github.com/repos/codice/ddf/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/codice/ddf/pulls/969/commits"},"statuses":{"href":"https://api.github.com/repos/codice/ddf/statuses/f41c88f90a527fba7701abf90009f6c7e1db97b6"}}}}
{"actor":{"display_login":"coyotesqrl"}}