Introduce useExisting query param for feeds/topics
[dmaap/dbcapi.git] / src / main / java / org / onap / dmaap / dbcapi / service / TopicService.java
index 26def91..6a93a21 100644 (file)
@@ -70,7 +70,9 @@ public class TopicService extends BaseLoggingClass {
                DmaapConfig p = (DmaapConfig)DmaapConfig.getConfig();
                defaultGlobalMrHost = p.getProperty("MR.globalHost", "global.host.not.set");
                centralCname = p.getProperty("MR.CentralCname");
-               logger.info( "TopicService properties: CentralCname=" + centralCname + "   defaultGlobarlMrHost=" + defaultGlobalMrHost );
+               
+               logger.info( "TopicService properties: CentralCname=" + centralCname + 
+                               "   defaultGlobarlMrHost=" + defaultGlobalMrHost  );
        }
        
        public Map<String, Topic> getTopics() {                 
@@ -100,14 +102,19 @@ public class TopicService extends BaseLoggingClass {
                return t;
        }
 
-       public Topic addTopic( Topic topic, ApiError err ) {
+       public Topic addTopic( Topic topic, ApiError err, Boolean useExisting ) {
                logger.info( "Entry: addTopic");
                logger.info( "Topic name=" + topic.getTopicName() + " fqtnStyle=" + topic.getFqtnStyle() );
                String nFqtn =  topic.genFqtn();
                logger.info( "FQTN=" + nFqtn );
-               if ( getTopic( nFqtn, err ) != null ) {
+               Topic pTopic = getTopic( nFqtn, err );
+               if ( pTopic != null ) {
                        String t = "topic already exists: " + nFqtn;
                        logger.info( t );
+                       if (  useExisting ) {
+                               err.setCode(Status.OK.getStatusCode());
+                               return pTopic;
+                       }
                        err.setMessage( t );
                        err.setFields( "fqtn");
                        err.setCode(Status.CONFLICT.getStatusCode());
@@ -116,9 +123,11 @@ public class TopicService extends BaseLoggingClass {
                err.reset();  // err filled with NOT_FOUND is expected case, but don't want to litter...
 
                topic.setFqtn( nFqtn );
-
+               
                AafService aaf = new AafService(ServiceType.AAF_TopicMgr);
-               String t = dmaap.getTopicNsRoot() + "." + dmaap.getDmaapName() + ".mr.topic";
+
+               String t = dmaapSvc.getTopicPerm();
+
                String instance = ":topic." + topic.getFqtn();
 
                String[] actions = { "pub", "sub", "view" };
@@ -247,7 +256,7 @@ public class TopicService extends BaseLoggingClass {
                
                TopicService ts = new TopicService();
                ApiError err = new ApiError();
-               ts.addTopic(bridgeAdminTopic, err);
+               ts.addTopic(bridgeAdminTopic, err, true);
                
                if ( err.is2xx() || err.getCode() == 409 ){
                        err.setCode(200);