diff --git a/app/pom.xml b/app/pom.xml
index 7b94f7f92..805aed5e4 100644
--- a/app/pom.xml
+++ b/app/pom.xml
@@ -1251,6 +1251,12 @@
1.0-SNAPSHOT
provided
+
+
+ com.google.code.gson
+ gson
+ 2.9.0
+
diff --git a/app/src/main/java/com/topcoder/direct/services/kafka/CreateChallengeMessage.java b/app/src/main/java/com/topcoder/direct/services/kafka/CreateChallengeMessage.java
new file mode 100644
index 000000000..b994ffe75
--- /dev/null
+++ b/app/src/main/java/com/topcoder/direct/services/kafka/CreateChallengeMessage.java
@@ -0,0 +1,6 @@
+package com.topcoder.direct.services.kafka;
+
+public class CreateChallengeMessage {
+ public String legacyId;
+ public String topic;
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/topcoder/direct/services/kafka/DirectKafkaProducer.java b/app/src/main/java/com/topcoder/direct/services/kafka/DirectKafkaProducer.java
new file mode 100644
index 000000000..dc49b99f0
--- /dev/null
+++ b/app/src/main/java/com/topcoder/direct/services/kafka/DirectKafkaProducer.java
@@ -0,0 +1,77 @@
+package com.topcoder.direct.services.kafka;
+
+import java.util.Hashtable;
+import com.google.gson.*;
+import java.net.*;
+import java.io.*;
+
+public class DirectKafkaProducer {
+
+ private static DirectKafkaProducer myProducer = null;
+ public static synchronized DirectKafkaProducer getInstance() {
+ if (myProducer == null) { myProducer = new DirectKafkaProducer(); }
+ return myProducer;
+ }
+
+ public final static int CHALLENGE_CREATE = 0;
+
+ private Hashtable topics = null;
+
+ protected DirectKafkaProducer() {
+ topics = new Hashtable();
+ topics.put(CHALLENGE_CREATE, "challenge.notification.create");
+ }
+
+ public void postChallengeCreate(long challengeId)
+ throws IOException/*, MalformedUrlException*/ {
+ CreateChallengeMessage ccm = new CreateChallengeMessage();
+ ccm.legacyId = ""+challengeId;
+ ccm.topic = topics.get(CHALLENGE_CREATE);
+ Gson gson = new Gson();
+ String requestBody = gson.toJson(ccm);
+ postEvent(requestBody);
+ }
+
+ private String getUrl() {
+ // get bus api Url from config
+ return System.getenv("bus.api.url");
+ }
+
+ private void doPost(String url, String json)
+ throws IOException {
+ // make HTTPS POST call to api
+ OutputStream os = null;
+ InputStream is = null;
+ HttpURLConnection con = null;
+ try {
+ URL _url = new URL(url);
+ con = (HttpURLConnection) _url.openConnection();
+ con.setRequestMethod("POST");
+ con.setRequestProperty("Content-Type", "application/json");
+ con.setRequestProperty("Accept", "application/json");
+ os = con.getOutputStream();
+ byte[] input = json.getBytes("utf-8");
+ os.write(input, 0, input.length);
+ os.flush();
+ // read just to be sure it sent
+ is = con.getInputStream();
+ } finally {
+ if (os != null) { try { os.close(); } catch (Throwable t) {} }
+ if (is != null) { try { is.close(); } catch (Throwable t) {} }
+ }
+ }
+
+ private void postEvent(final String json)
+ throws IOException {
+ new Thread(new Runnable() {
+ public void run() {
+ final String url = getUrl();
+ try {
+ doPost(url, json);
+ } catch (IOException ioe) {
+ throw new RuntimeException(ioe);
+ }
+ }
+ }).start();
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/topcoder/direct/services/view/action/contest/launch/SaveDraftContestAction.java b/app/src/main/java/com/topcoder/direct/services/view/action/contest/launch/SaveDraftContestAction.java
index a0f7a66f4..69260aea6 100644
--- a/app/src/main/java/com/topcoder/direct/services/view/action/contest/launch/SaveDraftContestAction.java
+++ b/app/src/main/java/com/topcoder/direct/services/view/action/contest/launch/SaveDraftContestAction.java
@@ -3,6 +3,7 @@
*/
package com.topcoder.direct.services.view.action.contest.launch;
+import com.topcoder.direct.services.kafka.DirectKafkaProducer;
import com.topcoder.catalog.entity.Category;
import com.topcoder.catalog.entity.CompDocumentation;
import com.topcoder.catalog.entity.CompUploadedFile;
@@ -882,6 +883,12 @@ protected void executeAction() throws Exception {
// to make the action robust.
addFieldError("competitionType", "The competition type is unknown");
}
+ try {
+ DirectKafkaProducer.getInstance().postChallengeCreate(softwareCompetition.getId());
+ } catch (Exception e) {
+ e.printStackTrace();
+ // log failure to submit to API
+ }
}
}
diff --git a/services/contest_service_facade/src/main/java/com/topcoder/service/facade/contest/CodeNameUtil.java b/services/contest_service_facade/src/main/java/com/topcoder/service/facade/contest/CodeNameUtil.java
index 31b3df7c3..bad043c02 100644
--- a/services/contest_service_facade/src/main/java/com/topcoder/service/facade/contest/CodeNameUtil.java
+++ b/services/contest_service_facade/src/main/java/com/topcoder/service/facade/contest/CodeNameUtil.java
@@ -11,7 +11,7 @@
import javax.crypto.spec.SecretKeySpec;
import javax.naming.InitialContext;
import javax.naming.NamingException;
-import javax.rmi.PortableRemoteObject;
+//import javax.rmi.PortableRemoteObject;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
diff --git a/token.properties.docker b/token.properties.docker
index 1bf309964..89e1e456e 100644
--- a/token.properties.docker
+++ b/token.properties.docker
@@ -349,4 +349,9 @@ defaultGroupIdForTrial =
# The Topcoder Connect Url to which the projects creation will redirect
TopcoderConnectUrl=https://connect.topcoder-dev.com
-TopcoderNewAuthUrl=https://accounts-auth0.topcoder-dev.com
\ No newline at end of file
+TopcoderNewAuthUrl=https://accounts-auth0.topcoder-dev.com
+
+#####################################
+# Bus API #
+#####################################
+bus.api.url=https://api.topcoder-dev.com/v5/bus/events
\ No newline at end of file