Allow POST dr_sub using FeedName 55/79655/1
authordglFromAtt <dgl@research.att.com>
Mon, 4 Mar 2019 21:04:11 +0000 (16:04 -0500)
committerdglFromAtt <dgl@research.att.com>
Mon, 4 Mar 2019 21:04:18 +0000 (16:04 -0500)
Change-Id: I7237755d265fc14205d3c04173d170c250be4817
Signed-off-by: dglFromAtt <dgl@research.att.com>
Issue-ID: DMAAP-1045

src/main/java/org/onap/dmaap/dbcapi/client/DrProvConnection.java
src/main/java/org/onap/dmaap/dbcapi/model/DR_Pub.java
src/main/java/org/onap/dmaap/dbcapi/model/DR_Sub.java
src/main/java/org/onap/dmaap/dbcapi/resources/DR_PubResource.java
src/main/java/org/onap/dmaap/dbcapi/resources/DR_SubResource.java
src/main/java/org/onap/dmaap/dbcapi/service/ApiService.java
src/main/java/org/onap/dmaap/dbcapi/service/DR_SubService.java
src/test/java/org/onap/dmaap/dbcapi/resources/DR_PubResourceTest.java
src/test/java/org/onap/dmaap/dbcapi/resources/DR_SubResourceTest.java

index 441596a..3cb3d67 100644 (file)
@@ -411,7 +411,7 @@ public class DrProvConnection extends BaseLoggingClass {
             if (rc >= 200 && rc < 300 ) {
                        responseBody = bodyToString( uc.getInputStream() );
                        logger.info( "responseBody=" + responseBody );
             if (rc >= 200 && rc < 300 ) {
                        responseBody = bodyToString( uc.getInputStream() );
                        logger.info( "responseBody=" + responseBody );
-
+                       err.setCode( rc );
             } else if ( rc == 404 ) {
                err.setCode( rc );
                err.setFields( "feedid");
             } else if ( rc == 404 ) {
                err.setCode( rc );
                err.setFields( "feedid");
index 06598f7..0d146b7 100644 (file)
@@ -32,6 +32,10 @@ public class DR_Pub extends DmaapObject {
        private String userpwd;
        private String feedId;
        private String pubId;
        private String userpwd;
        private String feedId;
        private String pubId;
+       
+       // NOTE: the following fields are optional in the API but not stored in the DB
+       private String  feedName;
+       private String  feedVersion;
 
        
        public DR_Pub() {
 
        
        public DR_Pub() {
@@ -114,6 +118,22 @@ public class DR_Pub extends DmaapObject {
        public void setNextPubId() {
                this.pubId = this.feedId + "." +  DR_Pub.nextKey();
        }
        public void setNextPubId() {
                this.pubId = this.feedId + "." +  DR_Pub.nextKey();
        }
+       
+       public String getFeedName() {
+               return feedName;
+       }
+
+       public void setFeedName(String feedName) {
+               this.feedName = feedName;
+       }
+
+       public String getFeedVersion() {
+               return feedVersion;
+       }
+
+       public void setFeedVersion(String feedVersion) {
+               this.feedVersion = feedVersion;
+       }
 
        public DR_Pub setRandomUserName() {
                RandomString r = new RandomString(15);
 
        public DR_Pub setRandomUserName() {
                RandomString r = new RandomString(15);
index dd0b85d..9b6e2d7 100644 (file)
@@ -45,6 +45,10 @@ public class DR_Sub extends DmaapObject {
        private boolean guaranteedDelivery;
        private boolean guaranteedSequence;
        private boolean privilegedSubscriber;
        private boolean guaranteedDelivery;
        private boolean guaranteedSequence;
        private boolean privilegedSubscriber;
+       
+       // NOTE: the following fields are optional in the API but not stored in the DB
+       private String  feedName;
+       private String  feedVersion;
 
        public DR_Sub() {
 
 
        public DR_Sub() {
 
@@ -230,6 +234,24 @@ public class DR_Sub extends DmaapObject {
        public void setPrivilegedSubscriber(boolean privilegedSubscriber) {
                this.privilegedSubscriber = privilegedSubscriber;
        }
        public void setPrivilegedSubscriber(boolean privilegedSubscriber) {
                this.privilegedSubscriber = privilegedSubscriber;
        }
+       
+       
+
+       public String getFeedName() {
+               return feedName;
+       }
+
+       public void setFeedName(String feedName) {
+               this.feedName = feedName;
+       }
+
+       public String getFeedVersion() {
+               return feedVersion;
+       }
+
+       public void setFeedVersion(String feedVersion) {
+               this.feedVersion = feedVersion;
+       }
 
        public byte[] getBytes(String provApi) {
                if ( "AT&T".equals(provApi)) {
 
        public byte[] getBytes(String provApi) {
                if ( "AT&T".equals(provApi)) {
index bcdb4b3..1673857 100644 (file)
@@ -91,21 +91,42 @@ public class DR_PubResource extends BaseLoggingClass {
                        DR_Pub pub
                        ) {
                ApiService resp = new ApiService();
                        DR_Pub pub
                        ) {
                ApiService resp = new ApiService();
+               FeedService feeds = new FeedService();
+               Feed fnew = null;
 
                logger.info( "Entry: POST /dr_pubs");
 
                try {
                        resp.required( "feedId", pub.getFeedId(), "");
 
                logger.info( "Entry: POST /dr_pubs");
 
                try {
                        resp.required( "feedId", pub.getFeedId(), "");
+               } catch ( RequiredFieldException rfe ) {
+                       try {
+                               resp.required( "feedName", pub.getFeedName(), "");
+                       }catch ( RequiredFieldException rfe2 ) {
+                               logger.debug( resp.toString() );
+                               return resp.error();
+                       }
+                       // if we found a FeedName instead of a FeedId then try to look it up.
+                       List<Feed> nfeeds =  feeds.getAllFeeds( pub.getFeedName(), pub.getFeedVersion(), "equals");
+                       if ( nfeeds.size() != 1 ) {
+                               logger.debug( "Attempt to match "+ pub.getFeedName() + " ver="+pub.getFeedVersion() + " matched " + nfeeds.size() );
+                               return resp.error();
+                       }
+                       fnew = nfeeds.get(0);
+               }
+               try {
                        resp.required( "dcaeLocationName", pub.getDcaeLocationName(), "");
                } catch ( RequiredFieldException rfe ) {
                        logger.debug( resp.getErr().toString() );
                        return resp.error();    
                }
 
                        resp.required( "dcaeLocationName", pub.getDcaeLocationName(), "");
                } catch ( RequiredFieldException rfe ) {
                        logger.debug( resp.getErr().toString() );
                        return resp.error();    
                }
 
-               FeedService feeds = new FeedService();
-               Feed fnew = feeds.getFeed( pub.getFeedId(), resp.getErr() );
+
+               // we may have fnew already if located by FeedName
                if ( fnew == null ) {
                if ( fnew == null ) {
-                       logger.info( "Specified feed " + pub.getFeedId() + " not known to Bus Controller");     
+                       fnew = feeds.getFeed( pub.getFeedId(), resp.getErr() );
+               }
+               if ( fnew == null ) {
+                       logger.info( "Specified feed " + pub.getFeedId() + " or " + pub.getFeedName() + " not known to Bus Controller");        
                        return resp.error();    
                }
 
                        return resp.error();    
                }
 
index 28bfdc5..498454e 100644 (file)
@@ -92,24 +92,41 @@ public class DR_SubResource extends BaseLoggingClass {
                        ) {
        
                ApiService resp = new ApiService();
                        ) {
        
                ApiService resp = new ApiService();
-
+               FeedService feeds = new FeedService();
+               Feed fnew = null;
                try {
                        resp.required( "feedId", sub.getFeedId(), "");
                try {
                        resp.required( "feedId", sub.getFeedId(), "");
+               } catch ( RequiredFieldException rfe ) {
+                       try {
+                               resp.required( "feedName", sub.getFeedName(), "");
+                       }catch ( RequiredFieldException rfe2 ) {
+                               logger.debug( resp.toString() );
+                               return resp.error();
+                       }
+                       // if we found a FeedName instead of a FeedId then try to look it up.
+                       List<Feed> nfeeds =  feeds.getAllFeeds( sub.getFeedName(), sub.getFeedVersion(), "equals");
+                       if ( nfeeds.size() != 1 ) {
+                               logger.debug( "Attempt to match "+ sub.getFeedName() + " ver="+sub.getFeedVersion() + " matched " + nfeeds.size() );
+                               return resp.error();
+                       }
+                       fnew = nfeeds.get(0);
+               }
+                       
+               try {
                        resp.required( "dcaeLocationName", sub.getDcaeLocationName(), "");
                        resp.required( "dcaeLocationName", sub.getDcaeLocationName(), "");
-       
                } catch ( RequiredFieldException rfe ) {
                        logger.debug( resp.toString() );
                        return resp.error();    
                }
                } catch ( RequiredFieldException rfe ) {
                        logger.debug( resp.toString() );
                        return resp.error();    
                }
-               
-               FeedService feeds = new FeedService();
-               Feed fnew = feeds.getFeed( sub.getFeedId(), resp.getErr() );
+               // we may have fnew already if located by FeedName
                if ( fnew == null ) {
                if ( fnew == null ) {
-                       logger.warn( "Specified feed " + sub.getFeedId() + " not known to Bus Controller");
+                       fnew = feeds.getFeed( sub.getFeedId(), resp.getErr() );
+               }
+               if ( fnew == null ) {
+                       logger.warn( "Specified feed " + sub.getFeedId() + " or " + sub.getFeedName() + " not known to Bus Controller");
                        resp.setCode(Status.NOT_FOUND.getStatusCode());
                        return resp.error();
                }
                        resp.setCode(Status.NOT_FOUND.getStatusCode());
                        return resp.error();
                }
-
                DR_SubService dr_subService = new DR_SubService( fnew.getSubscribeURL());
                ArrayList<DR_Sub> subs = fnew.getSubs();
                logger.info( "num existing subs before = " + subs.size() );
                DR_SubService dr_subService = new DR_SubService( fnew.getSubscribeURL());
                ArrayList<DR_Sub> subs = fnew.getSubs();
                logger.info( "num existing subs before = " + subs.size() );
@@ -157,7 +174,7 @@ public class DR_SubResource extends BaseLoggingClass {
                        logger.warn( "Specified feed " + sub.getFeedId() + " not known to Bus Controller");
                        return resp.error();
                }
                        logger.warn( "Specified feed " + sub.getFeedId() + " not known to Bus Controller");
                        return resp.error();
                }
-               
+
                DR_SubService dr_subService = new DR_SubService();
                sub.setSubId(name);
                DR_Sub nsub = dr_subService.updateDr_Sub(sub, resp.getErr() );
                DR_SubService dr_subService = new DR_SubService();
                sub.setSubId(name);
                DR_Sub nsub = dr_subService.updateDr_Sub(sub, resp.getErr() );
index 6ae639d..48f81db 100644 (file)
@@ -165,6 +165,7 @@ public class ApiService extends BaseLoggingClass {
 
        // test for presence of a required field
        public void required( String name, Object val, String expr ) throws RequiredFieldException {
 
        // test for presence of a required field
        public void required( String name, Object val, String expr ) throws RequiredFieldException {
+               err.setCode(0);
                if ( val == null  ) {
                        err.setCode(Status.BAD_REQUEST.getStatusCode());
                        err.setMessage("missing required field");
                if ( val == null  ) {
                        err.setCode(Status.BAD_REQUEST.getStatusCode());
                        err.setMessage("missing required field");
index 99c8f31..9d233a5 100644 (file)
@@ -98,7 +98,7 @@ public class DR_SubService extends BaseLoggingClass {
                String resp = prov.doPostDr_Sub( sub, apiError );
                if ( "Yes".equals(unit_test) ) {
                        resp = simulateResp( sub, "POST" );
                String resp = prov.doPostDr_Sub( sub, apiError );
                if ( "Yes".equals(unit_test) ) {
                        resp = simulateResp( sub, "POST" );
-                       apiError.setCode(200);
+                       apiError.setCode(201);
                }
                logger.debug( "addDr_Sub resp=" + resp );
 
                }
                logger.debug( "addDr_Sub resp=" + resp );
 
@@ -110,7 +110,7 @@ public class DR_SubService extends BaseLoggingClass {
                        snew.setLastMod();
                        addEgressRoute( snew, apiError );
                        dr_subs.put( snew.getSubId(), snew );   
                        snew.setLastMod();
                        addEgressRoute( snew, apiError );
                        dr_subs.put( snew.getSubId(), snew );   
-                       apiError.setCode(200);
+                       apiError.setCode(201);
                } else {
                        apiError.setCode(400);
                }
                } else {
                        apiError.setCode(400);
                }
index 42c8014..d4f71bb 100644 (file)
@@ -98,6 +98,18 @@ public class DR_PubResourceTest extends JerseyTest{
                return dr_pub;
        }
        
                return dr_pub;
        }
        
+       private DR_Pub addPubByName( String d, String un, String up, String feedName) {
+               DR_Pub dr_pub = new DR_Pub( d, un, up, null, "" );
+               dr_pub.setFeedName(feedName);
+               Entity<DR_Pub> reqEntity2 = Entity.entity( dr_pub, MediaType.APPLICATION_JSON);
+               Response resp = target( "dr_pubs").request().post( reqEntity2, Response.class);
+               System.out.println( "POST dr_pubs resp=" + resp.getStatus() );
+               assertTrue( resp.getStatus() == 201 );
+               dr_pub = resp.readEntity( DR_Pub.class );
+               
+               return dr_pub;
+       }
+       
        @Test
        public void GetTest() {
                Response resp = target( "dr_pubs").request().get( Response.class );
        @Test
        public void GetTest() {
                Response resp = target( "dr_pubs").request().get( Response.class );
@@ -119,6 +131,20 @@ public class DR_PubResourceTest extends JerseyTest{
 
                DR_Pub dr_pub = addPub( d, un, up, feed.getFeedId() );
        }
 
                DR_Pub dr_pub = addPub( d, un, up, feed.getFeedId() );
        }
+       
+       @Test
+       public void PostTestByName() {
+
+               Feed feed = addFeed( "pubPostTest2", "post unit test" );
+               System.out.println( "fpubPostTest: feedId=" + feed.getFeedId());
+               
+               String d, un, up;
+               d = "central-onap";
+               un = "user1";
+               up = "secretW0rd";
+
+               DR_Pub dr_pub = addPubByName( d, un, up, "pubPostTest2" );      
+       }
 
        @Test
        public void PutTest() {
 
        @Test
        public void PutTest() {
index 917507f..2227870 100644 (file)
@@ -129,7 +129,21 @@ public class DR_SubResourceTest extends JerseyTest{
                
                return dr_sub;
        }
                
                return dr_sub;
        }
-       
+       private DR_Sub addSubByName( String d, String un, String up, String feedName ) {
+               DR_Sub dr_sub = new DR_Sub( d, un, up, null, 
+                               "https://subscriber.onap.org/foo", "https://dr-prov/sublog", true );
+               
+               dr_sub.setFeedName(feedName);
+
+               Entity<DR_Sub> reqEntity2 = Entity.entity( dr_sub, MediaType.APPLICATION_JSON);
+               Response resp = target( "dr_subs").request().post( reqEntity2, Response.class);
+               System.out.println( "POST dr_subs resp=" + resp.getStatus() );
+               assertTrue( resp.getStatus() == 201 );
+               dr_sub = resp.readEntity( DR_Sub.class );
+               
+               return dr_sub;
+       }
+
        @Test
        public void GetTest() {
                Response resp = target( "dr_subs").request().get( Response.class );
        @Test
        public void GetTest() {
                Response resp = target( "dr_subs").request().get( Response.class );
@@ -152,6 +166,20 @@ public class DR_SubResourceTest extends JerseyTest{
                DR_Sub dr_pub = addSub( d, un, up, feed.getFeedId() );
        }
 
                DR_Sub dr_pub = addSub( d, un, up, feed.getFeedId() );
        }
 
+       @Test
+       public void PostTestByName() {
+
+               Feed feed = addFeed( "subPostTest2", "post unit test" );
+               System.out.println( "subPostTest2: feedId=" + feed.getFeedId());
+               
+               String d, un, up;
+               d = "central-onap";
+               un = "user1";
+               up = "secretW0rd";
+
+               DR_Sub dr_pub = addSubByName( d, un, up, feed.getFeedName() );
+       }
+
        @Test
        public void PutTest() {
 
        @Test
        public void PutTest() {
 
@@ -172,6 +200,7 @@ public class DR_SubResourceTest extends JerseyTest{
                System.out.println( "PUT dr_subs resp=" + resp.getStatus() );
                assertTrue( resp.getStatus() == 200 );
        }
                System.out.println( "PUT dr_subs resp=" + resp.getStatus() );
                assertTrue( resp.getStatus() == 200 );
        }
+
 /*
  * TODO: figure out how to check delete() response
        @Test
 /*
  * TODO: figure out how to check delete() response
        @Test