{"action":"created","comment":{"url":"https://api.github.com/repos/bonej-org/BoneJ2/pulls/comments/218990573","pull_request_review_id":157054838,"id":218990573,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIxODk5MDU3Mw==","diff_hunk":"@@ -0,0 +1,294 @@\n+/*\n+BSD 2-Clause License\n+Copyright (c) 2018, Michael Doube, Richard Domander, Alessandro Felder\n+All rights reserved.\n+Redistribution and use in source and binary forms, with or without\n+modification, are permitted provided that the following conditions are met:\n+* Redistributions of source code must retain the above copyright notice, this\n+  list of conditions and the following disclaimer.\n+* Redistributions in binary form must reproduce the above copyright notice,\n+  this list of conditions and the following disclaimer in the documentation\n+  and/or other materials provided with the distribution.\n+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n+*/\n+\n+package org.bonej.wrapperPlugins.wrapperUtils;\n+\n+import java.awt.Dimension;\n+import java.awt.GraphicsConfiguration;\n+import java.awt.GraphicsDevice;\n+import java.awt.GraphicsEnvironment;\n+import java.awt.Toolkit;\n+import java.io.BufferedReader;\n+import java.io.IOException;\n+import java.io.InputStreamReader;\n+import java.net.URL;\n+import java.net.URLConnection;\n+import java.nio.charset.Charset;\n+import java.util.Locale;\n+import java.util.Random;\n+\n+import net.imagej.ImageJ;\n+\n+import org.scijava.Context;\n+import org.scijava.command.ContextCommand;\n+import org.scijava.log.LogService;\n+import org.scijava.log.Logger;\n+import org.scijava.plugin.Parameter;\n+\n+/**\n+ * Prepare and send a report to be logged by \n+ * <a href=\"https://developers.google.com/analytics/resources/concepts/gaConceptsTrackingOverview\">\n+ * Google Analytics event tracking</a>\n+ * <p>\n+ * Should be called in a PlugIn's run() method as\n+ * UsageReporter.reportEvent(this).send()\n+ * </p>\n+ * \n+ * @author Michael Doube\n+ * @author Richard Domander\n+ */\n+public class UsageReporter extends ContextCommand {\n+\t\n+\t@Parameter\n+\tprivate static Context context;\n+\t\n+\t@Parameter\n+\tprivate static ImageJ imagej;\n+\t\n+\t@Parameter\n+\tprivate LogService logService;\n+\t\n+\t@Parameter\n+\tprivate Logger logger;\n+\t\n+\tpublic static final UsageReporter INSTANCE = new UsageReporter();\n+\t\n+/**\n+\t * BoneJ version FIXME: it is fragile to have the version hard-coded here.\n+\t * Create a BoneJApp instead.\n+\t */\n+\tprivate static final String BONEJ_VERSION = \"2.0.0-experimental\";\n+\tprivate static final String ga = \"http://www.google-analytics.com/__utm.gif?\";\n+\tprivate static final String utmwv = \"utmwv=5.2.5&\";\n+\tprivate static final String utmhn = \"utmhn=bonej.org&\";\n+\tprivate static final String utmcs = \"utmcs=\" + Charset.defaultCharset() + \"&\";\n+\tprivate static final String utmac = \"utmac=UA-366405-8&\";\n+\tprivate static final String utmdt = \"utmdt=bonej.org%20Usage%20Statistics&\";\n+\tprivate static final String utmt = \"utmt=event&\";\n+\tprivate static final String utmul = \"utmul=\" + getLocaleString() + \"&\";\n+\tprivate static final String utmje = \"utmje=0&\";\n+\tprivate static final String utmr = \"utmr=-&\";\n+\tprivate static final String utmp = \"utmp=%2Fstats&\";\n+\tprivate static final Random random = new Random();\n+\tprivate static String utmcnr = \"\";\n+\tprivate static String utme;\n+\tprivate static String utmn;\n+\tprivate static String utmsr;\n+\tprivate static String utmvp;\n+\tprivate static String utmsc;\n+\t/** iterated on each new event */\n+\tprivate static int session = 0;\n+\tprivate static String utms = \"utms=\" + session + \"&\";\n+\tprivate static String utmcc;\n+\tprivate static long thisTime = 0;\n+\tprivate static long lastTime = 0;\n+\t/** iterated each time a new BoneJ session starts*/\n+\tprivate static int bonejSession;\n+\tprivate static boolean isFirstRun = true;\n+\n+\tprivate static String utmhid;\n+\n+\tprivate static UsageReporterOptions uro;\n+\t\t\n+\tprivate UsageReporter() {}\n+\n+\t/**\n+\t * Send the report to Google Analytics in the form of an HTTP request for a\n+\t * 1-pixel GIF with lots of parameters set\n+\t */\n+\tpublic void send() {\n+\t\tSystem.out.println(\"Sending report.\\n\");\n+\t\t//check if user has opted in and die if user has opted out\n+\t\turo = new UsageReporterOptions();\n+\t\tif (!uro.isAllowed()) {\n+\t\t\tSystem.out.println(\"Usage reporting forbidden by user\\n\");\n+\t\t\treturn;\n+\t\t}\n+\t\ttry {\n+\t\t\tSystem.out.println(\"Usage reporting approved by user, preparing URL\");\n+\t\t\tfinal URL url = new URL(ga + utmwv + utms + utmn + utmhn + utmt + utme +\n+\t\t\t\tutmcs + utmsr + utmvp + utmsc + utmul + utmje + utmcnr + utmdt +\n+\t\t\t\tutmhid + utmr + utmp + utmac + utmcc);\n+\t\t\tfinal URLConnection uc = url.openConnection();\n+\t\t\tuc.setRequestProperty(\"User-Agent\", userAgentString());\n+\t\t\t\n+//\t\t\tif (logger.getLevel() < LogLevel.INFO) {\n+////\t\t\t\treturn;\n+//\t\t\t}\n+\t\t\t\n+//\t\t\tlogService.info(url.toString());\n+\t\t\tSystem.out.println(url.toString()+\"\\n\");\n+//\t\t\tlogService.info(uc.getRequestProperty(\"User-Agent\"));\n+\t\t\tSystem.out.println(uc.getRequestProperty(\"User-Agent\")+\"\\n\");\n+\t\t\ttry (final BufferedReader reader = new BufferedReader(\n+\t\t\t\tnew InputStreamReader(uc.getInputStream())))\n+\t\t\t{\n+//\t\t\t\tlogService.info(reader.lines());\n+//\t\t\t\tSystem.out.println(reader.lines());\n+\t\t\t\treader.lines().forEachOrdered(item -> System.out.println(item));\n+\t\t\t}\n+\t\t}\n+\t\tcatch (final IOException e) {\n+//\t\t\tif (logger.getLevel() >= LogLevel.INFO) {\n+//\t\t\t\tlogService.error(e.getMessage());\n+//\t\t\t}\n+\t\t\tSystem.out.println(e.getMessage()+\"\\n\");\n+\t\t}\n+\t}\n+\n+\t/**\n+\t * Sets the instance variables to appropriate values based on the system\n+\t * parameters and method arguments and makes the URL request to Google\n+\t *\n+\t * @param category Google Analytics event category classification\n+\t * @param action Google Analytics event action classification\n+\t * @param label Google Analytics event label classification\n+\t * @param value Google Analytics event value - an integer used for sum and\n+\t *          average statistics\n+\t */\n+\tpublic static UsageReporter reportEvent(final String category,\n+\t\tfinal String action, final String label, final Integer value)\n+\t{\n+\t\t//set session-invariant variables once on first run\n+\t\tif (isFirstRun) {\n+\t\t\tSystem.out.println(\"First run of Usage Reporter for this BoneJ session.\\n\");\n+\t\t\tcontext = new Context();\n+\t\t\timagej = new ImageJ();\n+\t\t\tbonejSession = imagej.prefs().getInt(UsageReporterOptions.class,\n+\t\t\t\tUsageReporterOptions.SESSIONKEY, 0);\n+\t\t\tSystem.out.print(\"bonejSession = \"+bonejSession+\"\\n\");\n+\t\t\tbonejSession++;\n+\t\t\timagej.prefs().put(UsageReporterOptions.class,\n+\t\t\t\tUsageReporterOptions.SESSIONKEY, bonejSession);\n+\t\t\tfinal Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();\n+\t\t\tfinal GraphicsEnvironment ge = GraphicsEnvironment\n+\t\t\t\t.getLocalGraphicsEnvironment();\n+\t\t\tint width = 0;\n+\t\t\tint height = 0;\n+\t\t\tif (!ge.isHeadlessInstance()) {\n+\t\t\t\tfinal GraphicsDevice[] screens = ge.getScreenDevices();\n+\t\t\t\tfor (final GraphicsDevice screen : screens) {\n+\t\t\t\t\tfinal GraphicsConfiguration[] gc = screen.getConfigurations();\n+\t\t\t\t\tfor (final GraphicsConfiguration g : gc) {\n+\t\t\t\t\t\twidth = Math.max(g.getBounds().x + g.getBounds().width, width);\n+\t\t\t\t\t\theight = Math.max(g.getBounds().y + g.getBounds().height, height);\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\tutmsr = \"utmsr=\" + screenSize.width + \"x\" + screenSize.height + \"&\";\n+\t\t\tutmvp = \"utmvp=\" + width + \"x\" + height + \"&\";\n+\t\t\tutmsc = \"utmsc=24-bit&\";\n+\t\t\tisFirstRun = false;\n+\t\t}\n+\t\t\n+\t\t//set \n+\t\tutms = \"utms=\" + session + \"&\";\n+\t\tsession++;\n+\t\tfinal String val = (value == null) ? \"\" : \"(\" + value + \")\";\n+\t\tutme = \"utme=5(\" + category + \"*\" + action + \"*\" + label + \")\" + val + \"&\";\n+\t\tutmn = \"utmn=\" + random.nextInt(Integer.MAX_VALUE) + \"&\";\n+\t\tutmhid = \"utmhid=\" + random.nextInt(Integer.MAX_VALUE) + \"&\";\n+\n+\t\tfinal long time = System.currentTimeMillis() / 1000;\n+\t\tlastTime = thisTime;\n+\t\tif (lastTime == 0) lastTime = time;\n+\t\tthisTime = time;\n+\n+\t\tif (\"\".equals(utmcnr)) utmcnr = \"utmcn=1&\";\n+\t\telse utmcnr = \"utmcr=1&\";\n+\n+\t\tutmcc = getCookieString();\n+\t\treturn INSTANCE;\n+\t}\n+\n+\t/**\n+\t * Prepare a usage report on a specific class; its name\n+\t * (.getClass().getName()) is added to the 'action' field of the report,\n+\t * category is \"Plugin Usage\" and label is the BoneJ version string\n+\t *\n+\t * @param o Class to report on\n+\t */\n+\tpublic static UsageReporter reportEvent(final Object o) {\n+\t\treturn reportEvent(\"Plugin%20Usage\", o.getClass().getName(), BONEJ_VERSION, null);\n+\t}\n+\n+\t/**\n+\t * Create a string of cookie data for the gif URL\n+\t *\n+\t * @return cookie string\n+\t */\n+\tprivate static String getCookieString() {\n+\t\tfinal int cookie = imagej.prefs().getInt(UsageReporterOptions.class,\n+\t\t\tUsageReporterOptions.COOKIE, random.nextInt(Integer.MAX_VALUE));\n+\t\tfinal int cookie2 = imagej.prefs().getInt(UsageReporterOptions.class,\n+\t\t\tUsageReporterOptions.COOKIE2, random.nextInt(Integer.MAX_VALUE));\n+\t\tfinal long firstTime = imagej.prefs().getInt(UsageReporterOptions.class,\n+\t\t\tUsageReporterOptions.FIRSTTIMEKEY, random.nextInt(Integer.MAX_VALUE));\n+\t\t// thisTime is not correct, but a best guess\n+\t\treturn \"utmcc=__utma%3D\" + cookie + \".\" + cookie2 + \".\" + firstTime + \".\" +\n+\t\t\tlastTime + \".\" + thisTime + \".\" + bonejSession + \"%3B%2B__utmz%3D\" +\n+\t\t\tcookie + \".\" + thisTime +\n+\t\t\t\".79.42.utmcsr%3Dgoogle%7Cutmccn%3D(organic)%7C\" +\n+\t\t\t\"utmcmd%3Dorganic%7Cutmctr%3DBoneJ%20Usage%20Reporter%3B\";\n+\t}\n+\n+\tprivate static String getLocaleString() {\n+\t\tString locale = Locale.getDefault().toString();\n+\t\tlocale = locale.replace(\"_\", \"-\");\n+\t\tlocale = locale.toLowerCase(Locale.ENGLISH);\n+\t\treturn locale;\n+\t}\n+\n+\tprivate static String userAgentString() {\n+\t\tfinal String os;\n+\t\tString osname = System.getProperty(\"os.name\");","path":"Modern/wrapperPlugins/src/main/java/org/bonej/wrapperPlugins/wrapperUtils/UsageReporter.java","position":266,"original_position":264,"commit_id":"7000071787fd76c9fed4ee508200c74cf18a16e7","original_commit_id":"7308b79f1b018b3b1e8021b1aae2047ee04e548e","user":{"login":"mdoube","id":87103,"node_id":"MDQ6VXNlcjg3MTAz","avatar_url":"https://avatars3.githubusercontent.com/u/87103?v=4","gravatar_id":"","url":"https://api.github.com/users/mdoube","html_url":"https://github.com/mdoube","followers_url":"https://api.github.com/users/mdoube/followers","following_url":"https://api.github.com/users/mdoube/following{/other_user}","gists_url":"https://api.github.com/users/mdoube/gists{/gist_id}","starred_url":"https://api.github.com/users/mdoube/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mdoube/subscriptions","organizations_url":"https://api.github.com/users/mdoube/orgs","repos_url":"https://api.github.com/users/mdoube/repos","events_url":"https://api.github.com/users/mdoube/events{/privacy}","received_events_url":"https://api.github.com/users/mdoube/received_events","type":"User","site_admin":false},"body":"OK","created_at":"2018-09-19T22:59:28Z","updated_at":"2018-09-19T22:59:28Z","html_url":"https://github.com/bonej-org/BoneJ2/pull/138#discussion_r218990573","pull_request_url":"https://api.github.com/repos/bonej-org/BoneJ2/pulls/138","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/bonej-org/BoneJ2/pulls/comments/218990573"},"html":{"href":"https://github.com/bonej-org/BoneJ2/pull/138#discussion_r218990573"},"pull_request":{"href":"https://api.github.com/repos/bonej-org/BoneJ2/pulls/138"}},"in_reply_to_id":217459051},"pull_request":{"url":"https://api.github.com/repos/bonej-org/BoneJ2/pulls/138","id":215270427,"node_id":"MDExOlB1bGxSZXF1ZXN0MjE1MjcwNDI3","html_url":"https://github.com/bonej-org/BoneJ2/pull/138","diff_url":"https://github.com/bonej-org/BoneJ2/pull/138.diff","patch_url":"https://github.com/bonej-org/BoneJ2/pull/138.patch","issue_url":"https://api.github.com/repos/bonej-org/BoneJ2/issues/138","number":138,"state":"open","locked":false,"title":"Phone home","user":{"login":"mdoube","id":87103,"node_id":"MDQ6VXNlcjg3MTAz","avatar_url":"https://avatars3.githubusercontent.com/u/87103?v=4","gravatar_id":"","url":"https://api.github.com/users/mdoube","html_url":"https://github.com/mdoube","followers_url":"https://api.github.com/users/mdoube/followers","following_url":"https://api.github.com/users/mdoube/following{/other_user}","gists_url":"https://api.github.com/users/mdoube/gists{/gist_id}","starred_url":"https://api.github.com/users/mdoube/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mdoube/subscriptions","organizations_url":"https://api.github.com/users/mdoube/orgs","repos_url":"https://api.github.com/users/mdoube/repos","events_url":"https://api.github.com/users/mdoube/events{/privacy}","received_events_url":"https://api.github.com/users/mdoube/received_events","type":"User","site_admin":false},"body":"This is a bit rough around the edges at the moment, but works well enough. Comments on design improvements are welcome.","created_at":"2018-09-13T12:47:06Z","updated_at":"2018-09-19T22:59:28Z","closed_at":null,"merged_at":null,"merge_commit_sha":"799bc3a7d0df5b03261d563b7072efa7f7a969d7","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/bonej-org/BoneJ2/pulls/138/commits","review_comments_url":"https://api.github.com/repos/bonej-org/BoneJ2/pulls/138/comments","review_comment_url":"https://api.github.com/repos/bonej-org/BoneJ2/pulls/comments{/number}","comments_url":"https://api.github.com/repos/bonej-org/BoneJ2/issues/138/comments","statuses_url":"https://api.github.com/repos/bonej-org/BoneJ2/statuses/7000071787fd76c9fed4ee508200c74cf18a16e7","head":{"label":"mdoube:phone-home","ref":"phone-home","sha":"7000071787fd76c9fed4ee508200c74cf18a16e7","user":{"login":"mdoube","id":87103,"node_id":"MDQ6VXNlcjg3MTAz","avatar_url":"https://avatars3.githubusercontent.com/u/87103?v=4","gravatar_id":"","url":"https://api.github.com/users/mdoube","html_url":"https://github.com/mdoube","followers_url":"https://api.github.com/users/mdoube/followers","following_url":"https://api.github.com/users/mdoube/following{/other_user}","gists_url":"https://api.github.com/users/mdoube/gists{/gist_id}","starred_url":"https://api.github.com/users/mdoube/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mdoube/subscriptions","organizations_url":"https://api.github.com/users/mdoube/orgs","repos_url":"https://api.github.com/users/mdoube/repos","events_url":"https://api.github.com/users/mdoube/events{/privacy}","received_events_url":"https://api.github.com/users/mdoube/received_events","type":"User","site_admin":false},"repo":{"id":143660775,"node_id":"MDEwOlJlcG9zaXRvcnkxNDM2NjA3NzU=","name":"BoneJ2","full_name":"mdoube/BoneJ2","private":false,"owner":{"login":"mdoube","id":87103,"node_id":"MDQ6VXNlcjg3MTAz","avatar_url":"https://avatars3.githubusercontent.com/u/87103?v=4","gravatar_id":"","url":"https://api.github.com/users/mdoube","html_url":"https://github.com/mdoube","followers_url":"https://api.github.com/users/mdoube/followers","following_url":"https://api.github.com/users/mdoube/following{/other_user}","gists_url":"https://api.github.com/users/mdoube/gists{/gist_id}","starred_url":"https://api.github.com/users/mdoube/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mdoube/subscriptions","organizations_url":"https://api.github.com/users/mdoube/orgs","repos_url":"https://api.github.com/users/mdoube/repos","events_url":"https://api.github.com/users/mdoube/events{/privacy}","received_events_url":"https://api.github.com/users/mdoube/received_events","type":"User","site_admin":false},"html_url":"https://github.com/mdoube/BoneJ2","description":"BoneJ2 - the next gen version of BoneJ in development","fork":true,"url":"https://api.github.com/repos/mdoube/BoneJ2","forks_url":"https://api.github.com/repos/mdoube/BoneJ2/forks","keys_url":"https://api.github.com/repos/mdoube/BoneJ2/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mdoube/BoneJ2/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mdoube/BoneJ2/teams","hooks_url":"https://api.github.com/repos/mdoube/BoneJ2/hooks","issue_events_url":"https://api.github.com/repos/mdoube/BoneJ2/issues/events{/number}","events_url":"https://api.github.com/repos/mdoube/BoneJ2/events","assignees_url":"https://api.github.com/repos/mdoube/BoneJ2/assignees{/user}","branches_url":"https://api.github.com/repos/mdoube/BoneJ2/branches{/branch}","tags_url":"https://api.github.com/repos/mdoube/BoneJ2/tags","blobs_url":"https://api.github.com/repos/mdoube/BoneJ2/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mdoube/BoneJ2/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mdoube/BoneJ2/git/refs{/sha}","trees_url":"https://api.github.com/repos/mdoube/BoneJ2/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mdoube/BoneJ2/statuses/{sha}","languages_url":"https://api.github.com/repos/mdoube/BoneJ2/languages","stargazers_url":"https://api.github.com/repos/mdoube/BoneJ2/stargazers","contributors_url":"https://api.github.com/repos/mdoube/BoneJ2/contributors","subscribers_url":"https://api.github.com/repos/mdoube/BoneJ2/subscribers","subscription_url":"https://api.github.com/repos/mdoube/BoneJ2/subscription","commits_url":"https://api.github.com/repos/mdoube/BoneJ2/commits{/sha}","git_commits_url":"https://api.github.com/repos/mdoube/BoneJ2/git/commits{/sha}","comments_url":"https://api.github.com/repos/mdoube/BoneJ2/comments{/number}","issue_comment_url":"https://api.github.com/repos/mdoube/BoneJ2/issues/comments{/number}","contents_url":"https://api.github.com/repos/mdoube/BoneJ2/contents/{+path}","compare_url":"https://api.github.com/repos/mdoube/BoneJ2/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mdoube/BoneJ2/merges","archive_url":"https://api.github.com/repos/mdoube/BoneJ2/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mdoube/BoneJ2/downloads","issues_url":"https://api.github.com/repos/mdoube/BoneJ2/issues{/number}","pulls_url":"https://api.github.com/repos/mdoube/BoneJ2/pulls{/number}","milestones_url":"https://api.github.com/repos/mdoube/BoneJ2/milestones{/number}","notifications_url":"https://api.github.com/repos/mdoube/BoneJ2/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mdoube/BoneJ2/labels{/name}","releases_url":"https://api.github.com/repos/mdoube/BoneJ2/releases{/id}","deployments_url":"https://api.github.com/repos/mdoube/BoneJ2/deployments","created_at":"2018-08-06T01:19:33Z","updated_at":"2018-08-17T03:07:52Z","pushed_at":"2018-09-14T10:06:35Z","git_url":"git://github.com/mdoube/BoneJ2.git","ssh_url":"git@github.com:mdoube/BoneJ2.git","clone_url":"https://github.com/mdoube/BoneJ2.git","svn_url":"https://github.com/mdoube/BoneJ2","homepage":null,"size":2207,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"bsd-2-clause","name":"BSD 2-Clause \"Simplified\" License","spdx_id":"BSD-2-Clause","url":"https://api.github.com/licenses/bsd-2-clause","node_id":"MDc6TGljZW5zZTQ="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"bonej-org:master","ref":"master","sha":"6ae09e2618e0fb865d7ea03f83be3c706c59a755","user":{"login":"bonej-org","id":15815050,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE1ODE1MDUw","avatar_url":"https://avatars1.githubusercontent.com/u/15815050?v=4","gravatar_id":"","url":"https://api.github.com/users/bonej-org","html_url":"https://github.com/bonej-org","followers_url":"https://api.github.com/users/bonej-org/followers","following_url":"https://api.github.com/users/bonej-org/following{/other_user}","gists_url":"https://api.github.com/users/bonej-org/gists{/gist_id}","starred_url":"https://api.github.com/users/bonej-org/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bonej-org/subscriptions","organizations_url":"https://api.github.com/users/bonej-org/orgs","repos_url":"https://api.github.com/users/bonej-org/repos","events_url":"https://api.github.com/users/bonej-org/events{/privacy}","received_events_url":"https://api.github.com/users/bonej-org/received_events","type":"Organization","site_admin":false},"repo":{"id":54976745,"node_id":"MDEwOlJlcG9zaXRvcnk1NDk3Njc0NQ==","name":"BoneJ2","full_name":"bonej-org/BoneJ2","private":false,"owner":{"login":"bonej-org","id":15815050,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE1ODE1MDUw","avatar_url":"https://avatars1.githubusercontent.com/u/15815050?v=4","gravatar_id":"","url":"https://api.github.com/users/bonej-org","html_url":"https://github.com/bonej-org","followers_url":"https://api.github.com/users/bonej-org/followers","following_url":"https://api.github.com/users/bonej-org/following{/other_user}","gists_url":"https://api.github.com/users/bonej-org/gists{/gist_id}","starred_url":"https://api.github.com/users/bonej-org/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bonej-org/subscriptions","organizations_url":"https://api.github.com/users/bonej-org/orgs","repos_url":"https://api.github.com/users/bonej-org/repos","events_url":"https://api.github.com/users/bonej-org/events{/privacy}","received_events_url":"https://api.github.com/users/bonej-org/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/bonej-org/BoneJ2","description":"BoneJ2 - the next gen version of BoneJ in development","fork":false,"url":"https://api.github.com/repos/bonej-org/BoneJ2","forks_url":"https://api.github.com/repos/bonej-org/BoneJ2/forks","keys_url":"https://api.github.com/repos/bonej-org/BoneJ2/keys{/key_id}","collaborators_url":"https://api.github.com/repos/bonej-org/BoneJ2/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/bonej-org/BoneJ2/teams","hooks_url":"https://api.github.com/repos/bonej-org/BoneJ2/hooks","issue_events_url":"https://api.github.com/repos/bonej-org/BoneJ2/issues/events{/number}","events_url":"https://api.github.com/repos/bonej-org/BoneJ2/events","assignees_url":"https://api.github.com/repos/bonej-org/BoneJ2/assignees{/user}","branches_url":"https://api.github.com/repos/bonej-org/BoneJ2/branches{/branch}","tags_url":"https://api.github.com/repos/bonej-org/BoneJ2/tags","blobs_url":"https://api.github.com/repos/bonej-org/BoneJ2/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/bonej-org/BoneJ2/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/bonej-org/BoneJ2/git/refs{/sha}","trees_url":"https://api.github.com/repos/bonej-org/BoneJ2/git/trees{/sha}","statuses_url":"https://api.github.com/repos/bonej-org/BoneJ2/statuses/{sha}","languages_url":"https://api.github.com/repos/bonej-org/BoneJ2/languages","stargazers_url":"https://api.github.com/repos/bonej-org/BoneJ2/stargazers","contributors_url":"https://api.github.com/repos/bonej-org/BoneJ2/contributors","subscribers_url":"https://api.github.com/repos/bonej-org/BoneJ2/subscribers","subscription_url":"https://api.github.com/repos/bonej-org/BoneJ2/subscription","commits_url":"https://api.github.com/repos/bonej-org/BoneJ2/commits{/sha}","git_commits_url":"https://api.github.com/repos/bonej-org/BoneJ2/git/commits{/sha}","comments_url":"https://api.github.com/repos/bonej-org/BoneJ2/comments{/number}","issue_comment_url":"https://api.github.com/repos/bonej-org/BoneJ2/issues/comments{/number}","contents_url":"https://api.github.com/repos/bonej-org/BoneJ2/contents/{+path}","compare_url":"https://api.github.com/repos/bonej-org/BoneJ2/compare/{base}...{head}","merges_url":"https://api.github.com/repos/bonej-org/BoneJ2/merges","archive_url":"https://api.github.com/repos/bonej-org/BoneJ2/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/bonej-org/BoneJ2/downloads","issues_url":"https://api.github.com/repos/bonej-org/BoneJ2/issues{/number}","pulls_url":"https://api.github.com/repos/bonej-org/BoneJ2/pulls{/number}","milestones_url":"https://api.github.com/repos/bonej-org/BoneJ2/milestones{/number}","notifications_url":"https://api.github.com/repos/bonej-org/BoneJ2/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/bonej-org/BoneJ2/labels{/name}","releases_url":"https://api.github.com/repos/bonej-org/BoneJ2/releases{/id}","deployments_url":"https://api.github.com/repos/bonej-org/BoneJ2/deployments","created_at":"2016-03-29T13:11:24Z","updated_at":"2018-09-19T14:55:51Z","pushed_at":"2018-09-19T17:09:36Z","git_url":"git://github.com/bonej-org/BoneJ2.git","ssh_url":"git@github.com:bonej-org/BoneJ2.git","clone_url":"https://github.com/bonej-org/BoneJ2.git","svn_url":"https://github.com/bonej-org/BoneJ2","homepage":null,"size":2293,"stargazers_count":5,"watchers_count":5,"language":"Java","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":3,"mirror_url":null,"archived":false,"open_issues_count":10,"license":{"key":"bsd-2-clause","name":"BSD 2-Clause \"Simplified\" License","spdx_id":"BSD-2-Clause","url":"https://api.github.com/licenses/bsd-2-clause","node_id":"MDc6TGljZW5zZTQ="},"forks":3,"open_issues":10,"watchers":5,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/bonej-org/BoneJ2/pulls/138"},"html":{"href":"https://github.com/bonej-org/BoneJ2/pull/138"},"issue":{"href":"https://api.github.com/repos/bonej-org/BoneJ2/issues/138"},"comments":{"href":"https://api.github.com/repos/bonej-org/BoneJ2/issues/138/comments"},"review_comments":{"href":"https://api.github.com/repos/bonej-org/BoneJ2/pulls/138/comments"},"review_comment":{"href":"https://api.github.com/repos/bonej-org/BoneJ2/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/bonej-org/BoneJ2/pulls/138/commits"},"statuses":{"href":"https://api.github.com/repos/bonej-org/BoneJ2/statuses/7000071787fd76c9fed4ee508200c74cf18a16e7"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"mdoube"}}