{"action":"created","comment":{"url":"https://api.github.com/repos/codice/ddf/pulls/comments/208986104","pull_request_review_id":144910959,"id":208986104,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIwODk4NjEwNA==","diff_hunk":"@@ -0,0 +1,245 @@\n+/**\n+ * Copyright (c) Codice Foundation\n+ *\n+ * <p>This is free software: you can redistribute it and/or modify it under the terms of the GNU\n+ * Lesser General Public License as published by the Free Software Foundation, either version 3 of\n+ * the License, or any later version.\n+ *\n+ * <p>This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n+ * GNU Lesser General Public License for more details. A copy of the GNU Lesser General Public\n+ * License is distributed along with this program and can be found at\n+ * <http://www.gnu.org/licenses/lgpl.html>.\n+ */\n+package org.codice.ddf.catalog.ui.query.handlers;\n+\n+import com.google.common.base.Stopwatch;\n+import com.google.common.collect.ImmutableMap;\n+import ddf.action.ActionRegistry;\n+import ddf.catalog.CatalogFramework;\n+import ddf.catalog.data.BinaryContent;\n+import ddf.catalog.data.Result;\n+import ddf.catalog.federation.FederationException;\n+import ddf.catalog.filter.FilterAdapter;\n+import ddf.catalog.filter.FilterBuilder;\n+import ddf.catalog.operation.QueryRequest;\n+import ddf.catalog.operation.QueryResponse;\n+import ddf.catalog.operation.impl.QueryResponseImpl;\n+import ddf.catalog.source.SourceUnavailableException;\n+import ddf.catalog.source.UnsupportedQueryException;\n+import ddf.catalog.transform.CatalogTransformerException;\n+import ddf.catalog.transform.QueryResponseTransformer;\n+import ddf.catalog.util.impl.QueryFunction;\n+import ddf.catalog.util.impl.ResultIterable;\n+import java.io.IOException;\n+import java.io.InputStream;\n+import java.io.OutputStream;\n+import java.time.Instant;\n+import java.util.ArrayList;\n+import java.util.Collections;\n+import java.util.HashMap;\n+import java.util.List;\n+import java.util.Objects;\n+import java.util.concurrent.TimeUnit;\n+import java.util.stream.Collectors;\n+import java.util.zip.GZIPOutputStream;\n+import javax.ws.rs.core.HttpHeaders;\n+import org.apache.commons.lang.StringUtils;\n+import org.apache.tika.mime.MimeTypeException;\n+import org.apache.tika.mime.MimeTypes;\n+import org.boon.json.JsonParserFactory;\n+import org.boon.json.JsonSerializerFactory;\n+import org.boon.json.ObjectMapper;\n+import org.boon.json.implementation.ObjectMapperImpl;\n+import org.codice.ddf.catalog.ui.query.cql.CqlQueryResponse;\n+import org.codice.ddf.catalog.ui.query.cql.CqlRequest;\n+import org.codice.ddf.catalog.ui.util.EndpointUtil;\n+import org.osgi.framework.BundleContext;\n+import org.osgi.framework.ServiceReference;\n+import org.slf4j.Logger;\n+import org.slf4j.LoggerFactory;\n+import spark.Request;\n+import spark.Response;\n+import spark.Route;\n+import spark.utils.IOUtils;\n+\n+public class CqlTransformHandler implements Route {\n+\n+  private static final Logger LOGGER = LoggerFactory.getLogger(CqlTransformHandler.class);\n+\n+  private List<ServiceReference> queryResponseTransformers;\n+\n+  private BundleContext bundleContext;\n+\n+  private FilterBuilder filterBuilder;\n+\n+  private FilterAdapter filterAdapter;\n+\n+  private CatalogFramework catalogFramework;\n+\n+  private ActionRegistry actionRegistry;\n+\n+  private ObjectMapper mapper =\n+      new ObjectMapperImpl(\n+          new JsonParserFactory().usePropertyOnly(),\n+          new JsonSerializerFactory()\n+              .includeEmpty()\n+              .includeNulls()\n+              .includeDefaultValues()\n+              .setJsonFormatForDates(false)\n+              .useAnnotations());\n+\n+  private EndpointUtil util;\n+\n+  public CqlTransformHandler(\n+      List<ServiceReference> queryResponseTransformers, BundleContext bundleContext) {\n+    this.queryResponseTransformers = queryResponseTransformers;\n+    this.bundleContext = bundleContext;\n+  }\n+\n+  @Override\n+  public Object handle(Request request, Response response) throws Exception {\n+    String transformerId = request.params(\":transformerId\");\n+    String body = util.safeGetBody(request);\n+    CqlRequest cqlRequest = mapper.readValue(body, CqlRequest.class);\n+    CqlQueryResponse cqlQueryResponse = executeCqlQuery(cqlRequest);\n+\n+    LOGGER.trace(\"Finding transformer to transform query response.\");\n+\n+    ServiceReference<QueryResponseTransformer> queryResponseTransformer =\n+        queryResponseTransformers\n+            .stream()\n+            .filter(transformer -> transformer.getProperty(\"id\").equals(transformerId))\n+            .findFirst()\n+            .orElse(null);\n+\n+    if (queryResponseTransformer == null) {\n+      LOGGER.debug(\"Could not find transformer with id: {}\", transformerId);\n+      response.status(404);\n+      return mapper.toJson(ImmutableMap.of(\"message\", \"Service not found\"));\n+    }\n+\n+    attachFileWithTransformer(queryResponseTransformer, cqlQueryResponse, request, response);\n+\n+    return \"\";\n+  }\n+\n+  private void attachFileWithTransformer(\n+      ServiceReference<QueryResponseTransformer> queryResponseTransformer,\n+      CqlQueryResponse cqlQueryResponse,","path":"catalog/ui/catalog-ui-search/src/main/java/org/codice/ddf/catalog/ui/query/handlers/CqlTransformHandler.java","position":122,"original_position":129,"commit_id":"ca8c4f72072a93034d4e97a9c85ce0a89e63055a","original_commit_id":"791c5cdbf7fe3ce4d474e5e3dfb691d38d5ab9ba","user":{"login":"Corey-Collins","id":8355949,"node_id":"MDQ6VXNlcjgzNTU5NDk=","avatar_url":"https://avatars2.githubusercontent.com/u/8355949?v=4","gravatar_id":"","url":"https://api.github.com/users/Corey-Collins","html_url":"https://github.com/Corey-Collins","followers_url":"https://api.github.com/users/Corey-Collins/followers","following_url":"https://api.github.com/users/Corey-Collins/following{/other_user}","gists_url":"https://api.github.com/users/Corey-Collins/gists{/gist_id}","starred_url":"https://api.github.com/users/Corey-Collins/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Corey-Collins/subscriptions","organizations_url":"https://api.github.com/users/Corey-Collins/orgs","repos_url":"https://api.github.com/users/Corey-Collins/repos","events_url":"https://api.github.com/users/Corey-Collins/events{/privacy}","received_events_url":"https://api.github.com/users/Corey-Collins/received_events","type":"User","site_admin":false},"body":"done 👍 ","created_at":"2018-08-09T15:58:12Z","updated_at":"2018-08-09T15:58:12Z","html_url":"https://github.com/codice/ddf/pull/3516#discussion_r208986104","pull_request_url":"https://api.github.com/repos/codice/ddf/pulls/3516","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/codice/ddf/pulls/comments/208986104"},"html":{"href":"https://github.com/codice/ddf/pull/3516#discussion_r208986104"},"pull_request":{"href":"https://api.github.com/repos/codice/ddf/pulls/3516"}},"in_reply_to_id":208738658},"pull_request":{"url":"https://api.github.com/repos/codice/ddf/pulls/3516","id":204882909,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA0ODgyOTA5","html_url":"https://github.com/codice/ddf/pull/3516","diff_url":"https://github.com/codice/ddf/pull/3516.diff","patch_url":"https://github.com/codice/ddf/pull/3516.patch","issue_url":"https://api.github.com/repos/codice/ddf/issues/3516","number":3516,"state":"open","locked":false,"title":"DDF-3997 Create a service to support an incoming query and outbound format for generating files","user":{"login":"Corey-Collins","id":8355949,"node_id":"MDQ6VXNlcjgzNTU5NDk=","avatar_url":"https://avatars2.githubusercontent.com/u/8355949?v=4","gravatar_id":"","url":"https://api.github.com/users/Corey-Collins","html_url":"https://github.com/Corey-Collins","followers_url":"https://api.github.com/users/Corey-Collins/followers","following_url":"https://api.github.com/users/Corey-Collins/following{/other_user}","gists_url":"https://api.github.com/users/Corey-Collins/gists{/gist_id}","starred_url":"https://api.github.com/users/Corey-Collins/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Corey-Collins/subscriptions","organizations_url":"https://api.github.com/users/Corey-Collins/orgs","repos_url":"https://api.github.com/users/Corey-Collins/repos","events_url":"https://api.github.com/users/Corey-Collins/events{/privacy}","received_events_url":"https://api.github.com/users/Corey-Collins/received_events","type":"User","site_admin":false},"body":"<!--\r\nUncomment this block and include PR # of change against 2.13.x where appropriate.\r\nWhen doing so, it is reasonable to delete much of the rest of the PR description, leaving only:\r\n- This uncommented block with link to 2.13.x PR\r\n- Reviewers tagged\r\n- Teams tagged\r\n- Committers tagged\r\n- The link to the \"Notes on Review Process\"\r\n\r\n##### ABBREVIATED REVIEW BETWEEN 2.13.X AND MASTER IS IN EFFECT\r\nLink to 2.13.x PR: #XXXX\r\n____\r\n-->\r\n\r\n#### What does this PR do?\r\n\r\nCreates a `/internal/cql/transform/{transformerId}` endpoint used to export a file from a result set.\r\nThe result set from the query response will be transformed to the matching id, and returned in the http response in the file format that matches the transformer's mime-type.\r\n\r\n#### Who is reviewing it? \r\n<!--(please choose AT LEAST two reviewers that need to approve the PR before it can get merged)-->\r\n@brianfelix \r\n@leo-sakh \r\n@bellcc\r\n@jrnorth \r\n#### Select relevant component teams: \r\nhttps://github.com/orgs/codice/teams\r\n#### Ask 2 committers to review/merge the PR and tag them here.\r\n<!--\r\nIf you don't know who to ask, you can request reviews in https://groups.google.com/forum/#!forum/ddf-developers .\r\n(please choose ONLY two committers from below, delete the rest)\r\n-->\r\n@millerw8 \r\n@bdeining \r\n#### How should this be tested?\r\n<!--(List steps with links to updated documentation)-->\r\n\r\n- (Optional) Disable web sockets in Admin > System > Catalog UI Search\r\n- Populate local catalog with metacard(s) (via postman or ui uploader)\r\n- Search using a transformer id (I recommend `/cql/transform/xml`). You can do this in postman, however I was able to do this easier with the `Requestly` chrome extension, where you replace the host in a request from `cql` to `cql/transform/xml`, and execute that query from the run button in DDF ui (and view the response data in network dev tools).\r\n- In network dev tools or postman ensure the response header returns `attachment;filename=export-{time}{fileformat}` (for ex: `attachment;filename=export-2018-07-30T20:36:15.302Z.xml`) and contains the metacard(s) data in proper transformation data format (in my case xml).\r\n\r\n#### Any background context you want to provide?\r\n\r\nFuture tickets would like a result set to be exported to various file formats. Transformers will need to be made for these formats, and this service will allow the UI to perform this operation to access those transformers.\r\n\r\n#### What are the relevant tickets?\r\n[DDF-3997](https://codice.atlassian.net/browse/DDF-3997)\r\n#### Checklist:\r\n- [ ] Documentation Updated\r\n- [ ] Update / Add Unit Tests\r\n- [ ] Update / Add Integration Tests\r\n\r\n#### Notes on Review Process\r\nPlease see [Notes on Review Process](https://codice.atlassian.net/wiki/spaces/DDF/pages/71946981/Pull+Request+Guidelines) for further guidance on requirements for merging and abbreviated reviews. \r\n\r\n#### Review Comment Legend:\r\n- ✏️ (Pencil) This comment is a nitpick or style suggestion, no action required for approval. This comment should provide a suggestion either as an in line code snippet or a gist. \r\n- ❓ (Question Mark) This comment is to gain a clearer understanding of design or code choices, clarification is required but action may not be necessary for approval.\r\n- ❗ (Exclamation Mark) This comment is critical and requires clarification or action before approval.\r\n","created_at":"2018-07-30T17:58:52Z","updated_at":"2018-08-09T15:58:12Z","closed_at":null,"merged_at":null,"merge_commit_sha":"c4febd3a1ca65a13bf59e27e06119eb5ce70b5e1","assignee":{"login":"millerw8","id":4419422,"node_id":"MDQ6VXNlcjQ0MTk0MjI=","avatar_url":"https://avatars3.githubusercontent.com/u/4419422?v=4","gravatar_id":"","url":"https://api.github.com/users/millerw8","html_url":"https://github.com/millerw8","followers_url":"https://api.github.com/users/millerw8/followers","following_url":"https://api.github.com/users/millerw8/following{/other_user}","gists_url":"https://api.github.com/users/millerw8/gists{/gist_id}","starred_url":"https://api.github.com/users/millerw8/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/millerw8/subscriptions","organizations_url":"https://api.github.com/users/millerw8/orgs","repos_url":"https://api.github.com/users/millerw8/repos","events_url":"https://api.github.com/users/millerw8/events{/privacy}","received_events_url":"https://api.github.com/users/millerw8/received_events","type":"User","site_admin":false},"assignees":[{"login":"millerw8","id":4419422,"node_id":"MDQ6VXNlcjQ0MTk0MjI=","avatar_url":"https://avatars3.githubusercontent.com/u/4419422?v=4","gravatar_id":"","url":"https://api.github.com/users/millerw8","html_url":"https://github.com/millerw8","followers_url":"https://api.github.com/users/millerw8/followers","following_url":"https://api.github.com/users/millerw8/following{/other_user}","gists_url":"https://api.github.com/users/millerw8/gists{/gist_id}","starred_url":"https://api.github.com/users/millerw8/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/millerw8/subscriptions","organizations_url":"https://api.github.com/users/millerw8/orgs","repos_url":"https://api.github.com/users/millerw8/repos","events_url":"https://api.github.com/users/millerw8/events{/privacy}","received_events_url":"https://api.github.com/users/millerw8/received_events","type":"User","site_admin":false},{"login":"bdeining","id":6551038,"node_id":"MDQ6VXNlcjY1NTEwMzg=","avatar_url":"https://avatars2.githubusercontent.com/u/6551038?v=4","gravatar_id":"","url":"https://api.github.com/users/bdeining","html_url":"https://github.com/bdeining","followers_url":"https://api.github.com/users/bdeining/followers","following_url":"https://api.github.com/users/bdeining/following{/other_user}","gists_url":"https://api.github.com/users/bdeining/gists{/gist_id}","starred_url":"https://api.github.com/users/bdeining/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bdeining/subscriptions","organizations_url":"https://api.github.com/users/bdeining/orgs","repos_url":"https://api.github.com/users/bdeining/repos","events_url":"https://api.github.com/users/bdeining/events{/privacy}","received_events_url":"https://api.github.com/users/bdeining/received_events","type":"User","site_admin":false}],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/codice/ddf/pulls/3516/commits","review_comments_url":"https://api.github.com/repos/codice/ddf/pulls/3516/comments","review_comment_url":"https://api.github.com/repos/codice/ddf/pulls/comments{/number}","comments_url":"https://api.github.com/repos/codice/ddf/issues/3516/comments","statuses_url":"https://api.github.com/repos/codice/ddf/statuses/ca8c4f72072a93034d4e97a9c85ce0a89e63055a","head":{"label":"Corey-Collins:DDF-3997-final","ref":"DDF-3997-final","sha":"ca8c4f72072a93034d4e97a9c85ce0a89e63055a","user":{"login":"Corey-Collins","id":8355949,"node_id":"MDQ6VXNlcjgzNTU5NDk=","avatar_url":"https://avatars2.githubusercontent.com/u/8355949?v=4","gravatar_id":"","url":"https://api.github.com/users/Corey-Collins","html_url":"https://github.com/Corey-Collins","followers_url":"https://api.github.com/users/Corey-Collins/followers","following_url":"https://api.github.com/users/Corey-Collins/following{/other_user}","gists_url":"https://api.github.com/users/Corey-Collins/gists{/gist_id}","starred_url":"https://api.github.com/users/Corey-Collins/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Corey-Collins/subscriptions","organizations_url":"https://api.github.com/users/Corey-Collins/orgs","repos_url":"https://api.github.com/users/Corey-Collins/repos","events_url":"https://api.github.com/users/Corey-Collins/events{/privacy}","received_events_url":"https://api.github.com/users/Corey-Collins/received_events","type":"User","site_admin":false},"repo":{"id":136080264,"node_id":"MDEwOlJlcG9zaXRvcnkxMzYwODAyNjQ=","name":"ddf","full_name":"Corey-Collins/ddf","owner":{"login":"Corey-Collins","id":8355949,"node_id":"MDQ6VXNlcjgzNTU5NDk=","avatar_url":"https://avatars2.githubusercontent.com/u/8355949?v=4","gravatar_id":"","url":"https://api.github.com/users/Corey-Collins","html_url":"https://github.com/Corey-Collins","followers_url":"https://api.github.com/users/Corey-Collins/followers","following_url":"https://api.github.com/users/Corey-Collins/following{/other_user}","gists_url":"https://api.github.com/users/Corey-Collins/gists{/gist_id}","starred_url":"https://api.github.com/users/Corey-Collins/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Corey-Collins/subscriptions","organizations_url":"https://api.github.com/users/Corey-Collins/orgs","repos_url":"https://api.github.com/users/Corey-Collins/repos","events_url":"https://api.github.com/users/Corey-Collins/events{/privacy}","received_events_url":"https://api.github.com/users/Corey-Collins/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/Corey-Collins/ddf","description":"DDF Distributed Data Framework - an open source, modular integration framework.","fork":true,"url":"https://api.github.com/repos/Corey-Collins/ddf","forks_url":"https://api.github.com/repos/Corey-Collins/ddf/forks","keys_url":"https://api.github.com/repos/Corey-Collins/ddf/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Corey-Collins/ddf/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Corey-Collins/ddf/teams","hooks_url":"https://api.github.com/repos/Corey-Collins/ddf/hooks","issue_events_url":"https://api.github.com/repos/Corey-Collins/ddf/issues/events{/number}","events_url":"https://api.github.com/repos/Corey-Collins/ddf/events","assignees_url":"https://api.github.com/repos/Corey-Collins/ddf/assignees{/user}","branches_url":"https://api.github.com/repos/Corey-Collins/ddf/branches{/branch}","tags_url":"https://api.github.com/repos/Corey-Collins/ddf/tags","blobs_url":"https://api.github.com/repos/Corey-Collins/ddf/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Corey-Collins/ddf/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Corey-Collins/ddf/git/refs{/sha}","trees_url":"https://api.github.com/repos/Corey-Collins/ddf/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Corey-Collins/ddf/statuses/{sha}","languages_url":"https://api.github.com/repos/Corey-Collins/ddf/languages","stargazers_url":"https://api.github.com/repos/Corey-Collins/ddf/stargazers","contributors_url":"https://api.github.com/repos/Corey-Collins/ddf/contributors","subscribers_url":"https://api.github.com/repos/Corey-Collins/ddf/subscribers","subscription_url":"https://api.github.com/repos/Corey-Collins/ddf/subscription","commits_url":"https://api.github.com/repos/Corey-Collins/ddf/commits{/sha}","git_commits_url":"https://api.github.com/repos/Corey-Collins/ddf/git/commits{/sha}","comments_url":"https://api.github.com/repos/Corey-Collins/ddf/comments{/number}","issue_comment_url":"https://api.github.com/repos/Corey-Collins/ddf/issues/comments{/number}","contents_url":"https://api.github.com/repos/Corey-Collins/ddf/contents/{+path}","compare_url":"https://api.github.com/repos/Corey-Collins/ddf/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Corey-Collins/ddf/merges","archive_url":"https://api.github.com/repos/Corey-Collins/ddf/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Corey-Collins/ddf/downloads","issues_url":"https://api.github.com/repos/Corey-Collins/ddf/issues{/number}","pulls_url":"https://api.github.com/repos/Corey-Collins/ddf/pulls{/number}","milestones_url":"https://api.github.com/repos/Corey-Collins/ddf/milestones{/number}","notifications_url":"https://api.github.com/repos/Corey-Collins/ddf/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Corey-Collins/ddf/labels{/name}","releases_url":"https://api.github.com/repos/Corey-Collins/ddf/releases{/id}","deployments_url":"https://api.github.com/repos/Corey-Collins/ddf/deployments","created_at":"2018-06-04T20:41:35Z","updated_at":"2018-08-07T20:24:38Z","pushed_at":"2018-08-09T15:49:15Z","git_url":"git://github.com/Corey-Collins/ddf.git","ssh_url":"git@github.com:Corey-Collins/ddf.git","clone_url":"https://github.com/Corey-Collins/ddf.git","svn_url":"https://github.com/Corey-Collins/ddf","homepage":"http://ddf.codice.org","size":393019,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"codice:master","ref":"master","sha":"fb9a735acbd234c58a6edcdde8aac72809ca558c","user":{"login":"codice","id":2386734,"node_id":"MDEyOk9yZ2FuaXphdGlvbjIzODY3MzQ=","avatar_url":"https://avatars2.githubusercontent.com/u/2386734?v=4","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,"node_id":"MDEwOlJlcG9zaXRvcnkxNTE3MzU2Mw==","name":"ddf","full_name":"codice/ddf","owner":{"login":"codice","id":2386734,"node_id":"MDEyOk9yZ2FuaXphdGlvbjIzODY3MzQ=","avatar_url":"https://avatars2.githubusercontent.com/u/2386734?v=4","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":"DDF 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":"2018-08-08T22:05:36Z","pushed_at":"2018-08-09T15:55:11Z","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":400306,"stargazers_count":86,"watchers_count":86,"language":"Java","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":151,"mirror_url":null,"archived":false,"open_issues_count":41,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":151,"open_issues":41,"watchers":86,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/codice/ddf/pulls/3516"},"html":{"href":"https://github.com/codice/ddf/pull/3516"},"issue":{"href":"https://api.github.com/repos/codice/ddf/issues/3516"},"comments":{"href":"https://api.github.com/repos/codice/ddf/issues/3516/comments"},"review_comments":{"href":"https://api.github.com/repos/codice/ddf/pulls/3516/comments"},"review_comment":{"href":"https://api.github.com/repos/codice/ddf/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/codice/ddf/pulls/3516/commits"},"statuses":{"href":"https://api.github.com/repos/codice/ddf/statuses/ca8c4f72072a93034d4e97a9c85ce0a89e63055a"}},"author_association":"NONE"}}
{"actor":{"display_login":"Corey-Collins"}}