{"action":"created","comment":{"url":"https://api.github.com/repos/ow2-proactive/connector-r/pulls/comments/43869578","id":43869578,"diff_hunk":"@@ -0,0 +1,533 @@\n+package org.ow2.parserve.util.rsession;\n+\n+import org.rosuda.REngine.REXP;\n+import org.rosuda.REngine.REXPList;\n+import org.rosuda.REngine.REXPMismatchException;\n+import org.rosuda.REngine.RList;\n+\n+import java.io.*;\n+import java.net.BindException;\n+import java.net.ServerSocket;\n+import java.text.SimpleDateFormat;\n+import java.util.Date;\n+import java.util.Map;\n+import java.util.Properties;\n+\n+/**\n+ * Various utility functions used by the rsession package\n+ *\n+ * @author Activeeon Team\n+ */\n+public class Utils {\n+\n+    public final static String R_HOME_KEY = \"R_HOME\";\n+    public static String R_HOME = null;\n+    static String separator = \",\";\n+\n+    public static boolean isPortAvailable(int p) {\n+        try {\n+            ServerSocket test = new ServerSocket(p);\n+            test.close();\n+        } catch (BindException e) {\n+            return false;\n+        } catch (IOException e) {\n+            return false;\n+        }\n+        return true;\n+    }\n+\n+    /**\n+     * cast R object in java object\n+     *\n+     * @param eval REXP R object\n+     * @return java object\n+     * @throws REXPMismatchException\n+     */\n+    public static Object cast(REXP eval) throws REXPMismatchException {\n+        if (eval == null) {\n+            return null;\n+        }\n+        if (eval.isNumeric()) {\n+            if (eval.dim() == null || eval.dim().length == 1) {\n+                double[] array = eval.asDoubles();\n+                if (array.length == 0) {\n+                    return null;\n+                }\n+                if (array.length == 1) {\n+                    return array[0];\n+                }\n+                return array;\n+            } else {\n+                double[][] mat = eval.asDoubleMatrix();\n+                if (mat.length == 0) {\n+                    return null;\n+                } else if (mat.length == 1) {\n+                    if (mat[0].length == 0) {\n+                        return null;\n+                    } else if (mat[0].length == 1) {\n+                        return mat[0][0];\n+                    } else {\n+                        return mat[0];\n+                    }\n+                } else {\n+                    if (mat[0].length == 0) {\n+                        return null;\n+                    } else if (mat[0].length == 1) {\n+                        double[] dmat = new double[mat.length];\n+                        for (int i = 0; i < dmat.length; i++) {\n+                            dmat[i] = mat[i][0];\n+                        }\n+                        return dmat;\n+                    } else {\n+                        return mat;\n+                    }\n+                }\n+            }\n+        }\n+\n+        if (eval.isString()) {\n+            String[] s = eval.asStrings();\n+            if (s.length == 1) {\n+                return s[0];\n+            } else {\n+                return s;\n+            }\n+        }\n+\n+        if (eval.isLogical()) {\n+            return eval.asInteger() == 1;\n+        }\n+\n+        if (eval.isList()) {\n+            return eval.asList();\n+        }\n+\n+        if (eval.isNull()) {\n+            return null;\n+        } else {\n+            System.err.println(\"Unsupported type: \" + eval.toDebugString());\n+        }\n+        return eval.toString();\n+    }\n+\n+    /**\n+     * create a R list with given R strings\n+     *\n+     * @param vars R strings\n+     * @return String list expression\n+     */\n+    public static String buildListString(String... vars) {\n+        if (vars.length > 1) {\n+            StringBuffer b = new StringBuffer(\"c(\");\n+            for (String v : vars) {\n+                b.append(\"'\" + v + \"',\");\n+            }\n+\n+            return b.substring(0, b.length() - 1) + \")\";\n+        } else {\n+            return \"'\" + vars[0] + \"'\";\n+        }\n+    }\n+\n+    /**\n+     * Map java File object to R path (as string)\n+     *\n+     * @param path java File object\n+     */\n+    public static String toRpath(File path) {\n+        return toRpath(path.getAbsolutePath());\n+    }\n+\n+    /**\n+     * Map java path to R path (as string)\n+     *\n+     * @param path java string path\n+     */\n+    public static String toRpath(String path) {\n+        return path.replaceAll(\"\\\\\\\\\", \"/\");\n+    }\n+\n+    // <editor-fold defaultstate=\"collapsed\" desc=\"Conveniency static String methods\">\n+    public static String toString(Object o) {\n+        if (o == null) {\n+            return \"NULL\";\n+        } else if (o instanceof double[]) {\n+            return cat((double[]) o);\n+        } else if (o instanceof double[][]) {\n+            return cat((double[][]) o);\n+        } else if (o instanceof int[]) {\n+            return cat((int[]) o);\n+        } else if (o instanceof int[][]) {\n+            return cat((int[][]) o);\n+        } else if (o instanceof Object[]) {\n+            return cat((Object[]) o);\n+        } else if (o instanceof Object[][]) {\n+            return cat((Object[][]) o);\n+        } else if (o instanceof RList) {\n+            return cat((RList) o);\n+        } else {\n+            return o.toString();\n+        }\n+    }\n+\n+    public static String cat(RList list) {\n+        try {\n+            StringBuffer sb = new StringBuffer(\"\\t\");\n+            double[][] data = new double[list.names.size()][];\n+            for (int i = 0; i < list.size(); i++) {\n+                String n = list.keyAt(i);\n+                sb.append(n + \"\\t\");\n+                data[i] = list.at(n).asDoubles();\n+            }\n+            sb.append(\"\\n\");\n+            for (int i = 0; i < data[0].length; i++) {\n+                sb.append((i + 1) + \"\\t\");\n+                for (int j = 0; j < data.length; j++) {\n+                    sb.append(data[j][i] + \"\\t\");\n+                }\n+                sb.append(\"\\n\");\n+            }\n+            return sb.toString();\n+        } catch (REXPMismatchException r) {\n+            return \"(Not a numeric dataframe)\\n\" + new REXPList(list).toDebugString();\n+        }\n+    }\n+\n+    public static String cat(double[] array) {\n+        if (array == null || array.length == 0) {\n+            return \"NA\";\n+        }\n+\n+        String o = array[0] + \"\";\n+        if (array.length > 1) {\n+            for (int i = 1; i < array.length; i++) {\n+                o += (separator + (array[i] + \"\"));\n+            }\n+        }\n+        return o;\n+    }\n+\n+    public static String cat(int[] array) {\n+        if (array == null || array.length == 0) {\n+            return \"NA\";\n+        }\n+\n+        String o = array[0] + \"\";\n+        if (array.length > 1) {\n+            for (int i = 1; i < array.length; i++) {\n+                o += (separator + (array[i] + \"\"));\n+            }\n+        }\n+        return o;\n+    }\n+\n+    public static String cat(double[][] array) {\n+        if (array == null || array.length == 0 || array[0].length == 0) {\n+            return \"NA\";\n+        }\n+\n+        String o = cat(array[0]);\n+        if (array.length > 1) {\n+            for (int i = 1; i < array.length; i++) {\n+                o += \"\\n\" + cat(array[i]);\n+            }\n+        }\n+        return o;\n+    }\n+\n+    public static String cat(int[][] array) {\n+        if (array == null || array.length == 0 || array[0].length == 0) {\n+            return \"NA\";\n+        }\n+\n+        String o = cat(array[0]);\n+        if (array.length > 1) {\n+            for (int i = 1; i < array.length; i++) {\n+                o += \"\\n\" + cat(array[i]);\n+            }\n+        }\n+        return o;\n+    }\n+\n+    public static String cat(Object[] array) {\n+        if (array == null || array.length == 0 || array[0] == null) {\n+            return \"\";\n+        }\n+\n+        String o = array[0].toString();\n+        if (array.length > 1) {\n+            for (int i = 1; i < array.length; i++) {\n+                o += (separator + (array[i] == null ? \"\" : array[i].toString()));\n+            }\n+        }\n+\n+        return o;\n+    }\n+\n+    public static String cat(String sep, String[] array) {\n+        if (array == null || array.length == 0 || array[0] == null) {\n+            return \"\";\n+        }\n+\n+        String o = array[0].toString();\n+        if (array.length > 1) {\n+            for (int i = 1; i < array.length; i++) {\n+                o += (sep + (array[i] == null ? \"\" : array[i].toString()));\n+            }\n+        }\n+\n+        return o;\n+    }\n+\n+    public static String cat(Object[][] array) {\n+        if (array == null || array.length == 0 || array[0].length == 0) {\n+            return \"NA\";\n+        }\n+\n+        String o = cat(array[0]);\n+        if (array.length > 1) {\n+            for (int i = 1; i < array.length; i++) {\n+                o += \"\\n\" + cat(array[i]);\n+            }\n+        }\n+        return o;\n+    }\n+\n+    public static boolean findR_HOME(String r_HOME) {\n+        Map<String, String> env = System.getenv();\n+        Properties prop = System.getProperties();\n+\n+        if (r_HOME != null) R_HOME = r_HOME;\n+        if (R_HOME == null || !(new File(R_HOME).isDirectory())) {\n+            if (env.containsKey(R_HOME_KEY)) {\n+                R_HOME = env.get(R_HOME_KEY);\n+            }\n+\n+            if (R_HOME == null || prop.containsKey(R_HOME_KEY) || !(new File(R_HOME).isDirectory())) {\n+                R_HOME = prop.getProperty(R_HOME_KEY);\n+            }\n+\n+            if (R_HOME == null || !(new File(R_HOME).isDirectory())) {\n+                R_HOME = \"R\";\n+            }\n+\n+            if (R_HOME == null || !(new File(R_HOME).isDirectory())) {\n+                R_HOME = null;\n+                if (System.getProperty(\"os.name\").contains(\"Win\")) {\n+                    for (int major = 20; major >= 0; major--) {\n+                        //int major = 10;//known to work with R 2.9 only.\n+                        if (R_HOME == null) {\n+                            for (int minor = 10; minor >= 0; minor--) {\n+                                //int minor = 0;\n+                                r_HOME = \"C:\\\\Program Files\\\\R\\\\R-3.\" + major + \".\" + minor + \"\\\\\";","path":"pa-rserve/src/main/java/org/ow2/parserve/util/rsession/Utils.java","position":322,"original_position":322,"commit_id":"734e66a6b63456135b711796a316c42acb1ee16a","original_commit_id":"734e66a6b63456135b711796a316c42acb1ee16a","user":{"login":"lpellegr","id":128898,"avatar_url":"https://avatars.githubusercontent.com/u/128898?v=3","gravatar_id":"","url":"https://api.github.com/users/lpellegr","html_url":"https://github.com/lpellegr","followers_url":"https://api.github.com/users/lpellegr/followers","following_url":"https://api.github.com/users/lpellegr/following{/other_user}","gists_url":"https://api.github.com/users/lpellegr/gists{/gist_id}","starred_url":"https://api.github.com/users/lpellegr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lpellegr/subscriptions","organizations_url":"https://api.github.com/users/lpellegr/orgs","repos_url":"https://api.github.com/users/lpellegr/repos","events_url":"https://api.github.com/users/lpellegr/events{/privacy}","received_events_url":"https://api.github.com/users/lpellegr/received_events","type":"User","site_admin":false},"body":"R version 3 seems to be a prerequisite, this should be displayed somewhere, no?","created_at":"2015-11-04T11:31:26Z","updated_at":"2015-11-04T11:31:26Z","html_url":"https://github.com/ow2-proactive/connector-r/pull/76#discussion_r43869578","pull_request_url":"https://api.github.com/repos/ow2-proactive/connector-r/pulls/76","_links":{"self":{"href":"https://api.github.com/repos/ow2-proactive/connector-r/pulls/comments/43869578"},"html":{"href":"https://github.com/ow2-proactive/connector-r/pull/76#discussion_r43869578"},"pull_request":{"href":"https://api.github.com/repos/ow2-proactive/connector-r/pulls/76"}}},"pull_request":{"url":"https://api.github.com/repos/ow2-proactive/connector-r/pulls/76","id":49461231,"html_url":"https://github.com/ow2-proactive/connector-r/pull/76","diff_url":"https://github.com/ow2-proactive/connector-r/pull/76.diff","patch_url":"https://github.com/ow2-proactive/connector-r/pull/76.patch","issue_url":"https://api.github.com/repos/ow2-proactive/connector-r/issues/76","number":76,"state":"open","locked":false,"title":"Add Rserve support in connector-r project","user":{"login":"fviale","id":3063713,"avatar_url":"https://avatars.githubusercontent.com/u/3063713?v=3","gravatar_id":"","url":"https://api.github.com/users/fviale","html_url":"https://github.com/fviale","followers_url":"https://api.github.com/users/fviale/followers","following_url":"https://api.github.com/users/fviale/following{/other_user}","gists_url":"https://api.github.com/users/fviale/gists{/gist_id}","starred_url":"https://api.github.com/users/fviale/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fviale/subscriptions","organizations_url":"https://api.github.com/users/fviale/orgs","repos_url":"https://api.github.com/users/fviale/repos","events_url":"https://api.github.com/users/fviale/events{/privacy}","received_events_url":"https://api.github.com/users/fviale/received_events","type":"User","site_admin":false},"body":"","created_at":"2015-11-02T17:34:41Z","updated_at":"2015-11-04T11:31:26Z","closed_at":null,"merged_at":null,"merge_commit_sha":"66d4b20fd7857ec7ef4152609edf7ae834149f94","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/ow2-proactive/connector-r/pulls/76/commits","review_comments_url":"https://api.github.com/repos/ow2-proactive/connector-r/pulls/76/comments","review_comment_url":"https://api.github.com/repos/ow2-proactive/connector-r/pulls/comments{/number}","comments_url":"https://api.github.com/repos/ow2-proactive/connector-r/issues/76/comments","statuses_url":"https://api.github.com/repos/ow2-proactive/connector-r/statuses/734e66a6b63456135b711796a316c42acb1ee16a","head":{"label":"fviale:master","ref":"master","sha":"734e66a6b63456135b711796a316c42acb1ee16a","user":{"login":"fviale","id":3063713,"avatar_url":"https://avatars.githubusercontent.com/u/3063713?v=3","gravatar_id":"","url":"https://api.github.com/users/fviale","html_url":"https://github.com/fviale","followers_url":"https://api.github.com/users/fviale/followers","following_url":"https://api.github.com/users/fviale/following{/other_user}","gists_url":"https://api.github.com/users/fviale/gists{/gist_id}","starred_url":"https://api.github.com/users/fviale/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fviale/subscriptions","organizations_url":"https://api.github.com/users/fviale/orgs","repos_url":"https://api.github.com/users/fviale/repos","events_url":"https://api.github.com/users/fviale/events{/privacy}","received_events_url":"https://api.github.com/users/fviale/received_events","type":"User","site_admin":false},"repo":{"id":42522186,"name":"connector-r","full_name":"fviale/connector-r","owner":{"login":"fviale","id":3063713,"avatar_url":"https://avatars.githubusercontent.com/u/3063713?v=3","gravatar_id":"","url":"https://api.github.com/users/fviale","html_url":"https://github.com/fviale","followers_url":"https://api.github.com/users/fviale/followers","following_url":"https://api.github.com/users/fviale/following{/other_user}","gists_url":"https://api.github.com/users/fviale/gists{/gist_id}","starred_url":"https://api.github.com/users/fviale/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fviale/subscriptions","organizations_url":"https://api.github.com/users/fviale/orgs","repos_url":"https://api.github.com/users/fviale/repos","events_url":"https://api.github.com/users/fviale/events{/privacy}","received_events_url":"https://api.github.com/users/fviale/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/fviale/connector-r","description":"ProActive connector for R","fork":true,"url":"https://api.github.com/repos/fviale/connector-r","forks_url":"https://api.github.com/repos/fviale/connector-r/forks","keys_url":"https://api.github.com/repos/fviale/connector-r/keys{/key_id}","collaborators_url":"https://api.github.com/repos/fviale/connector-r/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/fviale/connector-r/teams","hooks_url":"https://api.github.com/repos/fviale/connector-r/hooks","issue_events_url":"https://api.github.com/repos/fviale/connector-r/issues/events{/number}","events_url":"https://api.github.com/repos/fviale/connector-r/events","assignees_url":"https://api.github.com/repos/fviale/connector-r/assignees{/user}","branches_url":"https://api.github.com/repos/fviale/connector-r/branches{/branch}","tags_url":"https://api.github.com/repos/fviale/connector-r/tags","blobs_url":"https://api.github.com/repos/fviale/connector-r/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/fviale/connector-r/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/fviale/connector-r/git/refs{/sha}","trees_url":"https://api.github.com/repos/fviale/connector-r/git/trees{/sha}","statuses_url":"https://api.github.com/repos/fviale/connector-r/statuses/{sha}","languages_url":"https://api.github.com/repos/fviale/connector-r/languages","stargazers_url":"https://api.github.com/repos/fviale/connector-r/stargazers","contributors_url":"https://api.github.com/repos/fviale/connector-r/contributors","subscribers_url":"https://api.github.com/repos/fviale/connector-r/subscribers","subscription_url":"https://api.github.com/repos/fviale/connector-r/subscription","commits_url":"https://api.github.com/repos/fviale/connector-r/commits{/sha}","git_commits_url":"https://api.github.com/repos/fviale/connector-r/git/commits{/sha}","comments_url":"https://api.github.com/repos/fviale/connector-r/comments{/number}","issue_comment_url":"https://api.github.com/repos/fviale/connector-r/issues/comments{/number}","contents_url":"https://api.github.com/repos/fviale/connector-r/contents/{+path}","compare_url":"https://api.github.com/repos/fviale/connector-r/compare/{base}...{head}","merges_url":"https://api.github.com/repos/fviale/connector-r/merges","archive_url":"https://api.github.com/repos/fviale/connector-r/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/fviale/connector-r/downloads","issues_url":"https://api.github.com/repos/fviale/connector-r/issues{/number}","pulls_url":"https://api.github.com/repos/fviale/connector-r/pulls{/number}","milestones_url":"https://api.github.com/repos/fviale/connector-r/milestones{/number}","notifications_url":"https://api.github.com/repos/fviale/connector-r/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/fviale/connector-r/labels{/name}","releases_url":"https://api.github.com/repos/fviale/connector-r/releases{/id}","created_at":"2015-09-15T13:47:45Z","updated_at":"2015-11-02T17:32:17Z","pushed_at":"2015-11-02T17:36:40Z","git_url":"git://github.com/fviale/connector-r.git","ssh_url":"git@github.com:fviale/connector-r.git","clone_url":"https://github.com/fviale/connector-r.git","svn_url":"https://github.com/fviale/connector-r","homepage":"http://proactive.activeeon.com/","size":14092,"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":"ow2-proactive:master","ref":"master","sha":"1e0a21221e24955f70b58ee766fc9d7f15e999de","user":{"login":"ow2-proactive","id":11553998,"avatar_url":"https://avatars.githubusercontent.com/u/11553998?v=3","gravatar_id":"","url":"https://api.github.com/users/ow2-proactive","html_url":"https://github.com/ow2-proactive","followers_url":"https://api.github.com/users/ow2-proactive/followers","following_url":"https://api.github.com/users/ow2-proactive/following{/other_user}","gists_url":"https://api.github.com/users/ow2-proactive/gists{/gist_id}","starred_url":"https://api.github.com/users/ow2-proactive/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ow2-proactive/subscriptions","organizations_url":"https://api.github.com/users/ow2-proactive/orgs","repos_url":"https://api.github.com/users/ow2-proactive/repos","events_url":"https://api.github.com/users/ow2-proactive/events{/privacy}","received_events_url":"https://api.github.com/users/ow2-proactive/received_events","type":"Organization","site_admin":false},"repo":{"id":35725082,"name":"connector-r","full_name":"ow2-proactive/connector-r","owner":{"login":"ow2-proactive","id":11553998,"avatar_url":"https://avatars.githubusercontent.com/u/11553998?v=3","gravatar_id":"","url":"https://api.github.com/users/ow2-proactive","html_url":"https://github.com/ow2-proactive","followers_url":"https://api.github.com/users/ow2-proactive/followers","following_url":"https://api.github.com/users/ow2-proactive/following{/other_user}","gists_url":"https://api.github.com/users/ow2-proactive/gists{/gist_id}","starred_url":"https://api.github.com/users/ow2-proactive/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ow2-proactive/subscriptions","organizations_url":"https://api.github.com/users/ow2-proactive/orgs","repos_url":"https://api.github.com/users/ow2-proactive/repos","events_url":"https://api.github.com/users/ow2-proactive/events{/privacy}","received_events_url":"https://api.github.com/users/ow2-proactive/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ow2-proactive/connector-r","description":"ProActive connector for R","fork":false,"url":"https://api.github.com/repos/ow2-proactive/connector-r","forks_url":"https://api.github.com/repos/ow2-proactive/connector-r/forks","keys_url":"https://api.github.com/repos/ow2-proactive/connector-r/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ow2-proactive/connector-r/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ow2-proactive/connector-r/teams","hooks_url":"https://api.github.com/repos/ow2-proactive/connector-r/hooks","issue_events_url":"https://api.github.com/repos/ow2-proactive/connector-r/issues/events{/number}","events_url":"https://api.github.com/repos/ow2-proactive/connector-r/events","assignees_url":"https://api.github.com/repos/ow2-proactive/connector-r/assignees{/user}","branches_url":"https://api.github.com/repos/ow2-proactive/connector-r/branches{/branch}","tags_url":"https://api.github.com/repos/ow2-proactive/connector-r/tags","blobs_url":"https://api.github.com/repos/ow2-proactive/connector-r/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ow2-proactive/connector-r/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ow2-proactive/connector-r/git/refs{/sha}","trees_url":"https://api.github.com/repos/ow2-proactive/connector-r/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ow2-proactive/connector-r/statuses/{sha}","languages_url":"https://api.github.com/repos/ow2-proactive/connector-r/languages","stargazers_url":"https://api.github.com/repos/ow2-proactive/connector-r/stargazers","contributors_url":"https://api.github.com/repos/ow2-proactive/connector-r/contributors","subscribers_url":"https://api.github.com/repos/ow2-proactive/connector-r/subscribers","subscription_url":"https://api.github.com/repos/ow2-proactive/connector-r/subscription","commits_url":"https://api.github.com/repos/ow2-proactive/connector-r/commits{/sha}","git_commits_url":"https://api.github.com/repos/ow2-proactive/connector-r/git/commits{/sha}","comments_url":"https://api.github.com/repos/ow2-proactive/connector-r/comments{/number}","issue_comment_url":"https://api.github.com/repos/ow2-proactive/connector-r/issues/comments{/number}","contents_url":"https://api.github.com/repos/ow2-proactive/connector-r/contents/{+path}","compare_url":"https://api.github.com/repos/ow2-proactive/connector-r/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ow2-proactive/connector-r/merges","archive_url":"https://api.github.com/repos/ow2-proactive/connector-r/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ow2-proactive/connector-r/downloads","issues_url":"https://api.github.com/repos/ow2-proactive/connector-r/issues{/number}","pulls_url":"https://api.github.com/repos/ow2-proactive/connector-r/pulls{/number}","milestones_url":"https://api.github.com/repos/ow2-proactive/connector-r/milestones{/number}","notifications_url":"https://api.github.com/repos/ow2-proactive/connector-r/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ow2-proactive/connector-r/labels{/name}","releases_url":"https://api.github.com/repos/ow2-proactive/connector-r/releases{/id}","created_at":"2015-05-16T13:38:56Z","updated_at":"2015-06-12T14:54:57Z","pushed_at":"2015-11-02T17:36:41Z","git_url":"git://github.com/ow2-proactive/connector-r.git","ssh_url":"git@github.com:ow2-proactive/connector-r.git","clone_url":"https://github.com/ow2-proactive/connector-r.git","svn_url":"https://github.com/ow2-proactive/connector-r","homepage":"http://proactive.activeeon.com/","size":14105,"stargazers_count":0,"watchers_count":0,"language":"R","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":3,"mirror_url":null,"open_issues_count":32,"forks":3,"open_issues":32,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/ow2-proactive/connector-r/pulls/76"},"html":{"href":"https://github.com/ow2-proactive/connector-r/pull/76"},"issue":{"href":"https://api.github.com/repos/ow2-proactive/connector-r/issues/76"},"comments":{"href":"https://api.github.com/repos/ow2-proactive/connector-r/issues/76/comments"},"review_comments":{"href":"https://api.github.com/repos/ow2-proactive/connector-r/pulls/76/comments"},"review_comment":{"href":"https://api.github.com/repos/ow2-proactive/connector-r/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/ow2-proactive/connector-r/pulls/76/commits"},"statuses":{"href":"https://api.github.com/repos/ow2-proactive/connector-r/statuses/734e66a6b63456135b711796a316c42acb1ee16a"}}}}