You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2016/07/21 09:32:10 UTC
[2/3] camel git commit: CAMEL-10159: github endpoint to support
creating issues
CAMEL-10159: github endpoint to support creating issues
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/d619bb70
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/d619bb70
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/d619bb70
Branch: refs/heads/master
Commit: d619bb70178968ad7a9a6a67e49d9efab4ddbb19
Parents: 1153beb
Author: Andrea Cosentino <an...@gmail.com>
Authored: Thu Jul 21 11:06:20 2016 +0200
Committer: Andrea Cosentino <an...@gmail.com>
Committed: Thu Jul 21 11:31:04 2016 +0200
----------------------------------------------------------------------
.../camel/component/github/GitHubEndpoint.java | 3 +
.../camel/component/github/GitHubType.java | 2 +-
.../github/producer/CreateIssueProducer.java | 63 ++++++++++++++++
.../producer/CreateIssueProducerTest.java | 79 ++++++++++++++++++++
.../github/services/MockIssueService.java | 19 +++++
5 files changed, 165 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/d619bb70/components/camel-github/src/main/java/org/apache/camel/component/github/GitHubEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-github/src/main/java/org/apache/camel/component/github/GitHubEndpoint.java b/components/camel-github/src/main/java/org/apache/camel/component/github/GitHubEndpoint.java
index a76fee4..2dd757a 100644
--- a/components/camel-github/src/main/java/org/apache/camel/component/github/GitHubEndpoint.java
+++ b/components/camel-github/src/main/java/org/apache/camel/component/github/GitHubEndpoint.java
@@ -24,6 +24,7 @@ import org.apache.camel.component.github.consumer.PullRequestCommentConsumer;
import org.apache.camel.component.github.consumer.PullRequestConsumer;
import org.apache.camel.component.github.consumer.TagConsumer;
import org.apache.camel.component.github.producer.ClosePullRequestProducer;
+import org.apache.camel.component.github.producer.CreateIssueProducer;
import org.apache.camel.component.github.producer.GetCommitFileProducer;
import org.apache.camel.component.github.producer.PullRequestCommentProducer;
import org.apache.camel.component.github.producer.PullRequestFilesProducer;
@@ -97,6 +98,8 @@ public class GitHubEndpoint extends DefaultEndpoint {
return new PullRequestFilesProducer(this);
} else if (type == GitHubType.GETCOMMITFILE) {
return new GetCommitFileProducer(this);
+ } else if (type == GitHubType.CREATEISSUE) {
+ return new CreateIssueProducer(this);
}
throw new IllegalArgumentException("Cannot create producer with type " + type);
}
http://git-wip-us.apache.org/repos/asf/camel/blob/d619bb70/components/camel-github/src/main/java/org/apache/camel/component/github/GitHubType.java
----------------------------------------------------------------------
diff --git a/components/camel-github/src/main/java/org/apache/camel/component/github/GitHubType.java b/components/camel-github/src/main/java/org/apache/camel/component/github/GitHubType.java
index cc831d0..14269f7 100644
--- a/components/camel-github/src/main/java/org/apache/camel/component/github/GitHubType.java
+++ b/components/camel-github/src/main/java/org/apache/camel/component/github/GitHubType.java
@@ -19,6 +19,6 @@ package org.apache.camel.component.github;
public enum GitHubType {
CLOSEPULLREQUEST, PULLREQUESTCOMMENT, COMMIT, PULLREQUEST, TAG, PULLREQUESTSTATE,
- PULLREQUESTFILES, GETCOMMITFILE
+ PULLREQUESTFILES, GETCOMMITFILE, CREATEISSUE
}
http://git-wip-us.apache.org/repos/asf/camel/blob/d619bb70/components/camel-github/src/main/java/org/apache/camel/component/github/producer/CreateIssueProducer.java
----------------------------------------------------------------------
diff --git a/components/camel-github/src/main/java/org/apache/camel/component/github/producer/CreateIssueProducer.java b/components/camel-github/src/main/java/org/apache/camel/component/github/producer/CreateIssueProducer.java
new file mode 100644
index 0000000..337fe54
--- /dev/null
+++ b/components/camel-github/src/main/java/org/apache/camel/component/github/producer/CreateIssueProducer.java
@@ -0,0 +1,63 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.github.producer;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.component.github.GitHubEndpoint;
+import org.apache.camel.spi.Registry;
+import org.apache.camel.util.ObjectHelper;
+import org.eclipse.egit.github.core.Issue;
+import org.eclipse.egit.github.core.service.IssueService;
+
+/**
+ * Producer endpoint that closes a pull request. The endpoint requires the "GitHubPullRequest" header,
+ * identifying the pull request number (integer).
+ */
+public class CreateIssueProducer extends AbstractGitHubProducer {
+
+ private IssueService issueService;
+
+ public CreateIssueProducer(GitHubEndpoint endpoint) throws Exception {
+ super(endpoint);
+
+ Registry registry = endpoint.getCamelContext().getRegistry();
+ Object service = registry.lookupByName("githubIssuesService");
+ if (service != null) {
+ issueService = (IssueService) service;
+ } else {
+ issueService = new IssueService();
+ }
+ initService(issueService);
+ }
+
+ public void process(Exchange exchange) throws Exception {
+ Issue issue = new Issue();
+ String issueTitle = exchange.getIn().getHeader("GitHubIssueTitle", String.class);
+ if (ObjectHelper.isEmpty(issueTitle)) {
+ throw new IllegalArgumentException("Issue Title must be specified to create an issue");
+ }
+ issue.setTitle(issueTitle);
+ issue.setBody(exchange.getIn().getBody(String.class));
+
+ Issue finalIssue = issueService.createIssue(getRepository(), issue);
+
+ // copy the header of in message to the out message
+ exchange.getOut().copyFrom(exchange.getIn());
+ exchange.getOut().setBody(finalIssue);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/d619bb70/components/camel-github/src/test/java/org/apache/camel/component/github/producer/CreateIssueProducerTest.java
----------------------------------------------------------------------
diff --git a/components/camel-github/src/test/java/org/apache/camel/component/github/producer/CreateIssueProducerTest.java b/components/camel-github/src/test/java/org/apache/camel/component/github/producer/CreateIssueProducerTest.java
new file mode 100644
index 0000000..14508a0
--- /dev/null
+++ b/components/camel-github/src/test/java/org/apache/camel/component/github/producer/CreateIssueProducerTest.java
@@ -0,0 +1,79 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.github.producer;
+
+import java.util.Map;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.github.GitHubComponent;
+import org.apache.camel.component.github.GitHubComponentTestBase;
+import org.eclipse.egit.github.core.Issue;
+import org.eclipse.egit.github.core.Repository;
+import org.junit.Test;
+
+public class CreateIssueProducerTest extends GitHubComponentTestBase {
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+
+ @Override
+ public void configure() throws Exception {
+ context.addComponent("github", new GitHubComponent());
+ from("direct:createIssue")
+ .process(new MockPullRequestStateProducerProcessor())
+ .to("github://createissue?state=success&username=someguy&password=apassword&repoOwner=anotherguy&repoName=somerepo");
+ } // end of configure
+
+
+ };
+ }
+
+ @Test
+ public void testCreateIssue() throws Exception {
+ Repository repository = new Repository();
+
+ Endpoint issueProducerEndpoint = getMandatoryEndpoint("direct:createIssue");
+ Exchange exchange = issueProducerEndpoint.createExchange();
+ String issueBody = "There's an error";
+ exchange.getIn().setBody(issueBody);
+ template.send(issueProducerEndpoint, exchange);
+
+ Thread.sleep(1 * 1000);
+
+ // Verify that the mock pull request service received this comment.
+ Issue issue = issueService.getIssue(repository, 1);
+ assertEquals("Error", issue.getTitle());
+ assertEquals("There's an error", issue.getBody());
+ }
+
+
+ public class MockPullRequestStateProducerProcessor implements Processor {
+ @Override
+ public void process(Exchange exchange) throws Exception {
+ Message in = exchange.getIn();
+ Map<String, Object> headers = in.getHeaders();
+ headers.put("GitHubIssueTitle", "Error");
+ }
+ }
+
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/d619bb70/components/camel-github/src/test/java/org/apache/camel/component/github/services/MockIssueService.java
----------------------------------------------------------------------
diff --git a/components/camel-github/src/test/java/org/apache/camel/component/github/services/MockIssueService.java b/components/camel-github/src/test/java/org/apache/camel/component/github/services/MockIssueService.java
index dd7b376..a3565ba 100644
--- a/components/camel-github/src/test/java/org/apache/camel/component/github/services/MockIssueService.java
+++ b/components/camel-github/src/test/java/org/apache/camel/component/github/services/MockIssueService.java
@@ -22,6 +22,7 @@ import java.util.List;
import org.eclipse.egit.github.core.Comment;
import org.eclipse.egit.github.core.IRepositoryIdProvider;
+import org.eclipse.egit.github.core.Issue;
import org.eclipse.egit.github.core.service.IssueService;
public class MockIssueService extends IssueService {
@@ -44,4 +45,22 @@ public class MockIssueService extends IssueService {
Comment addedComment = mockPullRequestService.addComment((long) issueNumber, commentText);
return addedComment;
}
+
+ @Override
+ public Issue createIssue(IRepositoryIdProvider repository, Issue issue) {
+ Issue finalIssue = new Issue();
+ issue.setBody("There's an error");
+ issue.setTitle("Error");
+ issue.setId(1L);
+ return finalIssue;
+ }
+
+ @Override
+ public Issue getIssue(IRepositoryIdProvider repository, String issueNumber) {
+ Issue issue = new Issue();
+ issue.setBody("There's an error");
+ issue.setTitle("Error");
+ issue.setId(1L);
+ return issue;
+ }
}