{"action":"created","comment":{"url":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/pulls/comments/134721378","pull_request_review_id":58044734,"id":134721378,"diff_hunk":"@@ -0,0 +1,380 @@\n+/*\n+* Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.\n+*\n+* Licensed under the Apache License, Version 2.0 (the \"License\");\n+* you may not use this file except in compliance with the License.\n+* You may obtain a copy of the License at\n+*\n+* http://www.apache.org/licenses/LICENSE-2.0\n+*\n+* Unless required by applicable law or agreed to in writing, software\n+* distributed under the License is distributed on an \"AS IS\" BASIS,\n+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+* See the License for the specific language governing permissions and\n+* limitations under the License.\n+*/\n+\n+package org.wso2.carbon.inbound.poll.dbeventlistener;\n+\n+import org.apache.axiom.om.OMAbstractFactory;\n+import org.apache.axiom.om.OMElement;\n+import org.apache.axiom.om.OMFactory;\n+import org.apache.axiom.om.util.UUIDGenerator;\n+import org.apache.commons.lang.StringUtils;\n+import org.apache.commons.logging.Log;\n+import org.apache.commons.logging.LogFactory;\n+import org.apache.synapse.MessageContext;\n+import org.apache.synapse.core.SynapseEnvironment;\n+import org.apache.synapse.mediators.base.SequenceMediator;\n+import org.wso2.carbon.base.MultitenantConstants;\n+import org.wso2.carbon.context.PrivilegedCarbonContext;\n+import org.wso2.carbon.inbound.endpoint.protocol.generic.GenericPollingConsumer;\n+\n+import java.text.SimpleDateFormat;\n+import java.util.Arrays;\n+import java.util.Calendar;\n+import java.util.List;\n+import java.util.Properties;\n+\n+import java.sql.DatabaseMetaData;\n+import java.sql.SQLException;\n+import java.sql.Connection;\n+import java.sql.ResultSet;\n+import java.sql.ResultSetMetaData;\n+import java.sql.Statement;\n+import java.sql.DriverManager;\n+import java.sql.Types;\n+\n+public class DBEventPollingConsumer extends GenericPollingConsumer {\n+\n+    private static final Log log = LogFactory.getLog(DBEventPollingConsumer.class);\n+    \n+    private String driverClass;\n+    private String dbURL;\n+    private String dbUsername;\n+    private String dbPassword;\n+    private String filteringColumnName;\n+    private String filteringCriteria;\n+    private Connection connection = null;\n+    private MessageContext msgCtx;\n+    private String deleteQuery = null;\n+    private String updateQuery = null;\n+    private String lastProcessedTimestamp = null;\n+    private String registryPath = null;\n+    private String inboundName = null;\n+    private String[] primaryKeysFromConfig = null;\n+    private String connectionValidationQuery = null;\n+\n+    /**\n+     * @param properties\n+     * @param name\n+     * @param synapseEnvironment\n+     * @param scanInterval\n+     * @param injectingSeq\n+     * @param onErrorSeq\n+     * @param coordination\n+     * @param sequential\n+     */\n+    public DBEventPollingConsumer(Properties properties, String name, SynapseEnvironment synapseEnvironment,\n+            long scanInterval, String injectingSeq, String onErrorSeq, boolean coordination, boolean sequential) {\n+        super(properties, name, synapseEnvironment, scanInterval, injectingSeq, onErrorSeq, coordination, sequential);\n+        driverClass = properties.getProperty(DBEventConstants.DB_DRIVER);\n+        dbURL = properties.getProperty(DBEventConstants.DB_URL);\n+        dbUsername = properties.getProperty(DBEventConstants.DB_USERNAME);\n+        dbPassword = properties.getProperty(DBEventConstants.DB_PASSWORD);\n+        filteringCriteria = properties.getProperty(DBEventConstants.DB_FILTERING_CRITERIA);\n+        filteringColumnName = properties.getProperty(DBEventConstants.DB_FILTERING_COLUMN_NAME);\n+        registryPath = properties.getProperty(DBEventConstants.REGISTRY_PATH);\n+        primaryKeysFromConfig = properties.getProperty(DBEventConstants.TABLE_PRIMARY_KEYS).split(\",\");\n+        connectionValidationQuery = properties.getProperty(DBEventConstants.CONNECTION_VALIDATION_QUERY);\n+        if(StringUtils.isEmpty(registryPath)) {\n+            registryPath = name;\n+        }\n+        inboundName = name;\n+    }\n+\n+    /**\n+     * Inject the message to the sequence\n+     *\n+     * @param object\n+     * @return status\n+     */\n+    public boolean inject(OMElement object) {\n+        Statement statement;\n+        DBEventRegistryHandler dbEventListnerRegistryHandler = new DBEventRegistryHandler();\n+        msgCtx = createMessageContext();\n+        if (injectingSeq == null || injectingSeq.equals(\"\")) {\n+            log.error(\"Sequence name not specified. Sequence : \" + injectingSeq\n+                    + \" in the inbound endpoint configuration \" + inboundName);\n+            return false;\n+        }\n+        SequenceMediator seq = (SequenceMediator) synapseEnvironment.getSynapseConfiguration()\n+                .getSequence(injectingSeq);\n+        String query = null;\n+        try {\n+            msgCtx.getEnvelope().getBody().addChild(object);\n+            if (seq != null) {\n+                seq.setErrorHandler(onErrorSeq);\n+                if (log.isDebugEnabled()) {\n+                    log.info(\"injecting message to sequence : \" + injectingSeq);\n+                }\n+                synapseEnvironment.injectInbound(msgCtx, seq, sequential);\n+            } else {\n+                log.error(\"Sequence: \" + injectingSeq + \" not found.\");\n+            }\n+            if (isRollback(msgCtx)) {\n+                return false;\n+            } else {\n+                if (filteringCriteria.equals(DBEventConstants.DB_FILTERING_BY_TIMESTAMP)) {\n+                    dbEventListnerRegistryHandler.writeToRegistry(registryPath, lastProcessedTimestamp);\n+                }\n+                if(!isConnectionAlive()) {\n+                    createConnection();\n+                }\n+                if (StringUtils.isNotEmpty(deleteQuery)) {\n+                    statement = connection.prepareStatement(deleteQuery);\n+                    query = deleteQuery;\n+                    statement.execute(deleteQuery);\n+                } else if (StringUtils.isNotEmpty(updateQuery)) {\n+                    statement = connection.prepareStatement(updateQuery);\n+                    query = updateQuery;\n+                    statement.execute(updateQuery);\n+                }\n+            }\n+        } catch (SQLException e) {\n+            log.error(\"Error while capturing the change data \" + query, e);\n+        }\n+        return true;\n+    }\n+\n+    private MessageContext createMessageContext() {\n+        MessageContext msgCtx = synapseEnvironment.createMessageContext();\n+        org.apache.axis2.context.MessageContext axis2MsgCtx = ((org.apache.synapse.core.axis2.Axis2MessageContext) msgCtx)\n+                .getAxis2MessageContext();\n+        axis2MsgCtx.setServerSide(true);\n+        axis2MsgCtx.setMessageID(UUIDGenerator.getUUID());\n+        msgCtx.setProperty(org.apache.axis2.context.MessageContext.CLIENT_API_NON_BLOCKING, true);\n+        PrivilegedCarbonContext carbonContext = PrivilegedCarbonContext.getThreadLocalCarbonContext();\n+        axis2MsgCtx.setProperty(MultitenantConstants.TENANT_DOMAIN, carbonContext.getTenantDomain());\n+        return msgCtx;\n+    }\n+\n+    /**\n+     * Execute the query to retrieve the records, create each record as OMElement and inject to the sequence\n+     */\n+    private void fetchDataAndInject() {\n+        Statement statement = null;\n+        ResultSet rs = null;\n+        String tableName = properties.getProperty(DBEventConstants.DB_TABLE);\n+        DBEventRegistryHandler dbEventListnerRegistryHandler = new DBEventRegistryHandler();\n+        String lastUpdatedTimestampFromRegistry = null;\n+        if (filteringCriteria.equals(DBEventConstants.DB_FILTERING_BY_TIMESTAMP)) {\n+            lastUpdatedTimestampFromRegistry = dbEventListnerRegistryHandler.readFromRegistry(registryPath).toString();\n+        }\n+        String dbScript = buildQuery(tableName, filteringCriteria,\n+                filteringColumnName, lastUpdatedTimestampFromRegistry);\n+        try {\n+            if(!isConnectionAlive()) {\n+                createConnection();\n+            }\n+            statement = connection.prepareStatement(dbScript);\n+            rs = statement.executeQuery(dbScript);\n+            ResultSetMetaData metaData = rs.getMetaData();\n+            List<String> primaryKeys = Arrays.asList(primaryKeysFromConfig);","path":"src/main/java/org/wso2/carbon/inbound/poll/dbeventlistener/DBEventPollingConsumer.java","position":192,"original_position":183,"commit_id":"b29475e1fb50c9568447c00c725aaad3838abf54","original_commit_id":"ca7b4c263e311277cf8cf5462b232c1b1da27c72","user":{"login":"malakasilva","id":6091878,"avatar_url":"https://avatars3.githubusercontent.com/u/6091878?v=4","gravatar_id":"","url":"https://api.github.com/users/malakasilva","html_url":"https://github.com/malakasilva","followers_url":"https://api.github.com/users/malakasilva/followers","following_url":"https://api.github.com/users/malakasilva/following{/other_user}","gists_url":"https://api.github.com/users/malakasilva/gists{/gist_id}","starred_url":"https://api.github.com/users/malakasilva/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/malakasilva/subscriptions","organizations_url":"https://api.github.com/users/malakasilva/orgs","repos_url":"https://api.github.com/users/malakasilva/repos","events_url":"https://api.github.com/users/malakasilva/events{/privacy}","received_events_url":"https://api.github.com/users/malakasilva/received_events","type":"User","site_admin":false},"body":"Well it may be a edge case :) and I don't think we need to support it for the moment.","created_at":"2017-08-23T11:08:13Z","updated_at":"2017-08-23T11:08:13Z","html_url":"https://github.com/wso2-extensions/esb-inbound-dbevent/pull/1#discussion_r134721378","pull_request_url":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/pulls/1","_links":{"self":{"href":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/pulls/comments/134721378"},"html":{"href":"https://github.com/wso2-extensions/esb-inbound-dbevent/pull/1#discussion_r134721378"},"pull_request":{"href":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/pulls/1"}}},"pull_request":{"url":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/pulls/1","id":137046547,"html_url":"https://github.com/wso2-extensions/esb-inbound-dbevent/pull/1","diff_url":"https://github.com/wso2-extensions/esb-inbound-dbevent/pull/1.diff","patch_url":"https://github.com/wso2-extensions/esb-inbound-dbevent/pull/1.patch","issue_url":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/issues/1","number":1,"state":"open","locked":false,"title":"DB Event listener","user":{"login":"Shakila","id":2033965,"avatar_url":"https://avatars2.githubusercontent.com/u/2033965?v=4","gravatar_id":"","url":"https://api.github.com/users/Shakila","html_url":"https://github.com/Shakila","followers_url":"https://api.github.com/users/Shakila/followers","following_url":"https://api.github.com/users/Shakila/following{/other_user}","gists_url":"https://api.github.com/users/Shakila/gists{/gist_id}","starred_url":"https://api.github.com/users/Shakila/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Shakila/subscriptions","organizations_url":"https://api.github.com/users/Shakila/orgs","repos_url":"https://api.github.com/users/Shakila/repos","events_url":"https://api.github.com/users/Shakila/events{/privacy}","received_events_url":"https://api.github.com/users/Shakila/received_events","type":"User","site_admin":false},"body":"","created_at":"2017-08-22T18:17:36Z","updated_at":"2017-08-23T11:08:13Z","closed_at":null,"merged_at":null,"merge_commit_sha":"f5e3b1a772ae7180c48300fa8100f6c94741c6ce","assignee":null,"assignees":[],"requested_reviewers":[],"milestone":null,"commits_url":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/pulls/1/commits","review_comments_url":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/pulls/1/comments","review_comment_url":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/pulls/comments{/number}","comments_url":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/issues/1/comments","statuses_url":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/statuses/b29475e1fb50c9568447c00c725aaad3838abf54","head":{"label":"Shakila:master","ref":"master","sha":"b29475e1fb50c9568447c00c725aaad3838abf54","user":{"login":"Shakila","id":2033965,"avatar_url":"https://avatars2.githubusercontent.com/u/2033965?v=4","gravatar_id":"","url":"https://api.github.com/users/Shakila","html_url":"https://github.com/Shakila","followers_url":"https://api.github.com/users/Shakila/followers","following_url":"https://api.github.com/users/Shakila/following{/other_user}","gists_url":"https://api.github.com/users/Shakila/gists{/gist_id}","starred_url":"https://api.github.com/users/Shakila/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Shakila/subscriptions","organizations_url":"https://api.github.com/users/Shakila/orgs","repos_url":"https://api.github.com/users/Shakila/repos","events_url":"https://api.github.com/users/Shakila/events{/privacy}","received_events_url":"https://api.github.com/users/Shakila/received_events","type":"User","site_admin":false},"repo":{"id":101093032,"name":"esb-inbound-dbevent","full_name":"Shakila/esb-inbound-dbevent","owner":{"login":"Shakila","id":2033965,"avatar_url":"https://avatars2.githubusercontent.com/u/2033965?v=4","gravatar_id":"","url":"https://api.github.com/users/Shakila","html_url":"https://github.com/Shakila","followers_url":"https://api.github.com/users/Shakila/followers","following_url":"https://api.github.com/users/Shakila/following{/other_user}","gists_url":"https://api.github.com/users/Shakila/gists{/gist_id}","starred_url":"https://api.github.com/users/Shakila/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Shakila/subscriptions","organizations_url":"https://api.github.com/users/Shakila/orgs","repos_url":"https://api.github.com/users/Shakila/repos","events_url":"https://api.github.com/users/Shakila/events{/privacy}","received_events_url":"https://api.github.com/users/Shakila/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/Shakila/esb-inbound-dbevent","description":null,"fork":true,"url":"https://api.github.com/repos/Shakila/esb-inbound-dbevent","forks_url":"https://api.github.com/repos/Shakila/esb-inbound-dbevent/forks","keys_url":"https://api.github.com/repos/Shakila/esb-inbound-dbevent/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Shakila/esb-inbound-dbevent/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Shakila/esb-inbound-dbevent/teams","hooks_url":"https://api.github.com/repos/Shakila/esb-inbound-dbevent/hooks","issue_events_url":"https://api.github.com/repos/Shakila/esb-inbound-dbevent/issues/events{/number}","events_url":"https://api.github.com/repos/Shakila/esb-inbound-dbevent/events","assignees_url":"https://api.github.com/repos/Shakila/esb-inbound-dbevent/assignees{/user}","branches_url":"https://api.github.com/repos/Shakila/esb-inbound-dbevent/branches{/branch}","tags_url":"https://api.github.com/repos/Shakila/esb-inbound-dbevent/tags","blobs_url":"https://api.github.com/repos/Shakila/esb-inbound-dbevent/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Shakila/esb-inbound-dbevent/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Shakila/esb-inbound-dbevent/git/refs{/sha}","trees_url":"https://api.github.com/repos/Shakila/esb-inbound-dbevent/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Shakila/esb-inbound-dbevent/statuses/{sha}","languages_url":"https://api.github.com/repos/Shakila/esb-inbound-dbevent/languages","stargazers_url":"https://api.github.com/repos/Shakila/esb-inbound-dbevent/stargazers","contributors_url":"https://api.github.com/repos/Shakila/esb-inbound-dbevent/contributors","subscribers_url":"https://api.github.com/repos/Shakila/esb-inbound-dbevent/subscribers","subscription_url":"https://api.github.com/repos/Shakila/esb-inbound-dbevent/subscription","commits_url":"https://api.github.com/repos/Shakila/esb-inbound-dbevent/commits{/sha}","git_commits_url":"https://api.github.com/repos/Shakila/esb-inbound-dbevent/git/commits{/sha}","comments_url":"https://api.github.com/repos/Shakila/esb-inbound-dbevent/comments{/number}","issue_comment_url":"https://api.github.com/repos/Shakila/esb-inbound-dbevent/issues/comments{/number}","contents_url":"https://api.github.com/repos/Shakila/esb-inbound-dbevent/contents/{+path}","compare_url":"https://api.github.com/repos/Shakila/esb-inbound-dbevent/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Shakila/esb-inbound-dbevent/merges","archive_url":"https://api.github.com/repos/Shakila/esb-inbound-dbevent/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Shakila/esb-inbound-dbevent/downloads","issues_url":"https://api.github.com/repos/Shakila/esb-inbound-dbevent/issues{/number}","pulls_url":"https://api.github.com/repos/Shakila/esb-inbound-dbevent/pulls{/number}","milestones_url":"https://api.github.com/repos/Shakila/esb-inbound-dbevent/milestones{/number}","notifications_url":"https://api.github.com/repos/Shakila/esb-inbound-dbevent/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Shakila/esb-inbound-dbevent/labels{/name}","releases_url":"https://api.github.com/repos/Shakila/esb-inbound-dbevent/releases{/id}","deployments_url":"https://api.github.com/repos/Shakila/esb-inbound-dbevent/deployments","created_at":"2017-08-22T18:04:07Z","updated_at":"2017-08-22T18:13:14Z","pushed_at":"2017-08-23T07:12:05Z","git_url":"git://github.com/Shakila/esb-inbound-dbevent.git","ssh_url":"git@github.com:Shakila/esb-inbound-dbevent.git","clone_url":"https://github.com/Shakila/esb-inbound-dbevent.git","svn_url":"https://github.com/Shakila/esb-inbound-dbevent","homepage":null,"size":20,"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,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"wso2-extensions:master","ref":"master","sha":"d65cbb84fe8208d51285e6b9a921d48e1c0d9546","user":{"login":"wso2-extensions","id":17171218,"avatar_url":"https://avatars0.githubusercontent.com/u/17171218?v=4","gravatar_id":"","url":"https://api.github.com/users/wso2-extensions","html_url":"https://github.com/wso2-extensions","followers_url":"https://api.github.com/users/wso2-extensions/followers","following_url":"https://api.github.com/users/wso2-extensions/following{/other_user}","gists_url":"https://api.github.com/users/wso2-extensions/gists{/gist_id}","starred_url":"https://api.github.com/users/wso2-extensions/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wso2-extensions/subscriptions","organizations_url":"https://api.github.com/users/wso2-extensions/orgs","repos_url":"https://api.github.com/users/wso2-extensions/repos","events_url":"https://api.github.com/users/wso2-extensions/events{/privacy}","received_events_url":"https://api.github.com/users/wso2-extensions/received_events","type":"Organization","site_admin":false},"repo":{"id":100914183,"name":"esb-inbound-dbevent","full_name":"wso2-extensions/esb-inbound-dbevent","owner":{"login":"wso2-extensions","id":17171218,"avatar_url":"https://avatars0.githubusercontent.com/u/17171218?v=4","gravatar_id":"","url":"https://api.github.com/users/wso2-extensions","html_url":"https://github.com/wso2-extensions","followers_url":"https://api.github.com/users/wso2-extensions/followers","following_url":"https://api.github.com/users/wso2-extensions/following{/other_user}","gists_url":"https://api.github.com/users/wso2-extensions/gists{/gist_id}","starred_url":"https://api.github.com/users/wso2-extensions/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wso2-extensions/subscriptions","organizations_url":"https://api.github.com/users/wso2-extensions/orgs","repos_url":"https://api.github.com/users/wso2-extensions/repos","events_url":"https://api.github.com/users/wso2-extensions/events{/privacy}","received_events_url":"https://api.github.com/users/wso2-extensions/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/wso2-extensions/esb-inbound-dbevent","description":null,"fork":false,"url":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent","forks_url":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/forks","keys_url":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/keys{/key_id}","collaborators_url":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/teams","hooks_url":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/hooks","issue_events_url":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/issues/events{/number}","events_url":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/events","assignees_url":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/assignees{/user}","branches_url":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/branches{/branch}","tags_url":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/tags","blobs_url":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/git/refs{/sha}","trees_url":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/git/trees{/sha}","statuses_url":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/statuses/{sha}","languages_url":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/languages","stargazers_url":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/stargazers","contributors_url":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/contributors","subscribers_url":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/subscribers","subscription_url":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/subscription","commits_url":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/commits{/sha}","git_commits_url":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/git/commits{/sha}","comments_url":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/comments{/number}","issue_comment_url":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/issues/comments{/number}","contents_url":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/contents/{+path}","compare_url":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/compare/{base}...{head}","merges_url":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/merges","archive_url":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/downloads","issues_url":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/issues{/number}","pulls_url":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/pulls{/number}","milestones_url":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/milestones{/number}","notifications_url":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/labels{/name}","releases_url":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/releases{/id}","deployments_url":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/deployments","created_at":"2017-08-21T05:01:48Z","updated_at":"2017-08-21T05:01:48Z","pushed_at":"2017-08-23T07:12:06Z","git_url":"git://github.com/wso2-extensions/esb-inbound-dbevent.git","ssh_url":"git@github.com:wso2-extensions/esb-inbound-dbevent.git","clone_url":"https://github.com/wso2-extensions/esb-inbound-dbevent.git","svn_url":"https://github.com/wso2-extensions/esb-inbound-dbevent","homepage":null,"size":4,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":1,"forks":1,"open_issues":1,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/pulls/1"},"html":{"href":"https://github.com/wso2-extensions/esb-inbound-dbevent/pull/1"},"issue":{"href":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/issues/1"},"comments":{"href":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/issues/1/comments"},"review_comments":{"href":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/pulls/1/comments"},"review_comment":{"href":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/pulls/1/commits"},"statuses":{"href":"https://api.github.com/repos/wso2-extensions/esb-inbound-dbevent/statuses/b29475e1fb50c9568447c00c725aaad3838abf54"}}}}
{"actor":{"display_login":"malakasilva"}}