diff options
Diffstat (limited to 'src/main')
3 files changed, 116 insertions, 77 deletions
diff --git a/src/main/java/org/onap/dmaap/dbcapi/client/DrProvConnection.java b/src/main/java/org/onap/dmaap/dbcapi/client/DrProvConnection.java index cc6f02c..eda3653 100644 --- a/src/main/java/org/onap/dmaap/dbcapi/client/DrProvConnection.java +++ b/src/main/java/org/onap/dmaap/dbcapi/client/DrProvConnection.java @@ -28,6 +28,7 @@ import org.onap.dmaap.dbcapi.model.ApiError; import org.onap.dmaap.dbcapi.model.DR_Sub; import org.onap.dmaap.dbcapi.model.Feed; import org.onap.dmaap.dbcapi.service.DmaapService; +import org.onap.dmaap.dbcapi.util.DmaapConfig; import javax.net.ssl.HttpsURLConnection; import java.io.*; @@ -43,6 +44,10 @@ public class DrProvConnection extends BaseLoggingClass { private String provURL; + private String provApi; + private String behalfHeader; + private String feedContentType; + private String subContentType; private HttpsURLConnection uc; @@ -52,6 +57,13 @@ public class DrProvConnection extends BaseLoggingClass { if ( provURL.length() < 1 ) { errorLogger.error( DmaapbcLogMessageEnum.PREREQ_DMAAP_OBJECT, "getDrProvUrl"); } + DmaapConfig p = (DmaapConfig)DmaapConfig.getConfig(); + provApi = p.getProperty( "DR.provApi", "ONAP" ); + behalfHeader = p.getProperty( "DR.onBehalfHeader", "X-DR-ON-BEHALF-OF"); + feedContentType = p.getProperty( "DR.feedContentType", "application/vnc.dr.feed"); + subContentType = p.getProperty( "DR.subContentType", "application/vnd.dr.subscription"); + logger.info( "provURL=" + provURL + " provApi=" + provApi + " behalfHeader=" + behalfHeader + + " feedContentType=" + feedContentType + " subContentType=" + subContentType ); } @@ -143,9 +155,9 @@ public class DrProvConnection extends BaseLoggingClass { try { logger.info( "uc=" + uc ); uc.setRequestMethod("POST"); - uc.setRequestProperty("Content-Type", "application/vnd.att-dr.feed"); + uc.setRequestProperty("Content-Type", feedContentType); uc.setRequestProperty( "charset", "utf-8"); - uc.setRequestProperty( "X-ATT-DR-ON-BEHALF-OF", postFeed.getOwner() ); + uc.setRequestProperty( behalfHeader, postFeed.getOwner() ); uc.setRequestProperty( "Content-Length", Integer.toString( postData.length )); uc.setUseCaches(false); uc.setDoOutput(true); @@ -231,9 +243,9 @@ public class DrProvConnection extends BaseLoggingClass { try { uc.setRequestMethod("POST"); -// uc.setRequestProperty("Content-Type", "application/vnd.att-dr.feed"); +// uc.setRequestProperty("Content-Type", feedContenType ); // uc.setRequestProperty( "charset", "utf-8"); -// uc.setRequestProperty( "X-ATT-DR-ON-BEHALF-OF", postFeed.getOwner() ); +// uc.setRequestProperty( behalfHeader, postFeed.getOwner() ); // uc.setRequestProperty( "Content-Length", Integer.toString( postData.length )); // uc.setUseCaches(false); // uc.setDoOutput(true); @@ -280,7 +292,7 @@ public class DrProvConnection extends BaseLoggingClass { public String doPostDr_Sub( DR_Sub postSub, ApiError err ) { logger.info( "entry: doPostDr_Sub() " ); - byte[] postData = postSub.getBytes(); + byte[] postData = postSub.getBytes(provApi ); logger.info( "post fields=" + postData ); String responsemessage = null; String responseBody = null; @@ -289,9 +301,9 @@ public class DrProvConnection extends BaseLoggingClass { uc.setRequestMethod("POST"); - uc.setRequestProperty("Content-Type", "application/vnd.att-dr.subscription"); + uc.setRequestProperty("Content-Type", subContentType ); uc.setRequestProperty( "charset", "utf-8"); - uc.setRequestProperty( "X-ATT-DR-ON-BEHALF-OF", "DGL" ); + uc.setRequestProperty( behalfHeader, "DGL" ); uc.setRequestProperty( "Content-Length", Integer.toString( postData.length )); uc.setUseCaches(false); uc.setDoOutput(true); @@ -361,9 +373,9 @@ public class DrProvConnection extends BaseLoggingClass { try { logger.info( "uc=" + uc ); uc.setRequestMethod("PUT"); - uc.setRequestProperty("Content-Type", "application/vnd.att-dr.feed"); + uc.setRequestProperty("Content-Type", feedContentType ); uc.setRequestProperty( "charset", "utf-8"); - uc.setRequestProperty( "X-ATT-DR-ON-BEHALF-OF", putFeed.getOwner() ); + uc.setRequestProperty( behalfHeader, putFeed.getOwner() ); uc.setRequestProperty( "Content-Length", Integer.toString( postData.length )); uc.setUseCaches(false); uc.setDoOutput(true); @@ -445,7 +457,7 @@ public class DrProvConnection extends BaseLoggingClass { } public String doPutDr_Sub(DR_Sub postSub, ApiError err) { logger.info( "entry: doPutDr_Sub() " ); - byte[] postData = postSub.getBytes(); + byte[] postData = postSub.getBytes(provApi); logger.info( "post fields=" + postData ); String responsemessage = null; String responseBody = null; @@ -454,9 +466,9 @@ public class DrProvConnection extends BaseLoggingClass { uc.setRequestMethod("PUT"); - uc.setRequestProperty("Content-Type", "application/vnd.att-dr.subscription"); + uc.setRequestProperty("Content-Type", subContentType ); uc.setRequestProperty( "charset", "utf-8"); - uc.setRequestProperty( "X-ATT-DR-ON-BEHALF-OF", "DGL" ); + uc.setRequestProperty( behalfHeader, "DGL" ); uc.setRequestProperty( "Content-Length", Integer.toString( postData.length )); uc.setUseCaches(false); uc.setDoOutput(true); @@ -531,9 +543,9 @@ public class DrProvConnection extends BaseLoggingClass { uc.setRequestMethod("GET"); - //uc.setRequestProperty("Content-Type", "application/vnd.att-dr.subscription"); + //uc.setRequestProperty("Content-Type", subContentType ); //uc.setRequestProperty( "charset", "utf-8"); - //uc.setRequestProperty( "X-ATT-DR-ON-BEHALF-OF", "DGL" ); + //uc.setRequestProperty( behalfHeader, "DGL" ); //uc.setRequestProperty( "Content-Length", Integer.toString( postData.length )); //uc.setUseCaches(false); //uc.setDoOutput(true); @@ -616,9 +628,9 @@ public class DrProvConnection extends BaseLoggingClass { uc.setRequestMethod("PUT"); - //uc.setRequestProperty("Content-Type", "application/vnd.att-dr.subscription"); + //uc.setRequestProperty("Content-Type", subContentType ); //uc.setRequestProperty( "charset", "utf-8"); - //uc.setRequestProperty( "X-ATT-DR-ON-BEHALF-OF", "DGL" ); + //uc.setRequestProperty( behalfHeader, "DGL" ); //uc.setRequestProperty( "Content-Length", Integer.toString( postData.length )); uc.setUseCaches(false); //uc.setDoOutput(true); @@ -688,9 +700,9 @@ public class DrProvConnection extends BaseLoggingClass { try { logger.info( "uc=" + uc ); uc.setRequestMethod("DELETE"); - uc.setRequestProperty("Content-Type", "application/vnd.att-dr.feed"); + uc.setRequestProperty("Content-Type", feedContentType ); uc.setRequestProperty( "charset", "utf-8"); - uc.setRequestProperty( "X-ATT-DR-ON-BEHALF-OF", putFeed.getOwner() ); + uc.setRequestProperty( behalfHeader, putFeed.getOwner() ); //uc.setRequestProperty( "Content-Length", Integer.toString( postData.length )); uc.setUseCaches(false); uc.setDoOutput(true); @@ -773,7 +785,7 @@ public class DrProvConnection extends BaseLoggingClass { public String doDeleteDr_Sub(DR_Sub delSub, ApiError err) { logger.info( "entry: doDeleteDr_Sub() " ); - byte[] postData = delSub.getBytes(); + byte[] postData = delSub.getBytes(provApi); logger.info( "post fields=" + postData ); String responsemessage = null; String responseBody = null; @@ -782,9 +794,9 @@ public class DrProvConnection extends BaseLoggingClass { uc.setRequestMethod("DELETE"); - uc.setRequestProperty("Content-Type", "application/vnd.att-dr.subscription"); + uc.setRequestProperty("Content-Type", subContentType); uc.setRequestProperty( "charset", "utf-8"); - uc.setRequestProperty( "X-ATT-DR-ON-BEHALF-OF", "DGL" ); + uc.setRequestProperty( behalfHeader, "DGL" ); //uc.setRequestProperty( "Content-Length", Integer.toString( postData.length )); uc.setUseCaches(false); uc.setDoOutput(true); diff --git a/src/main/java/org/onap/dmaap/dbcapi/model/DR_Sub.java b/src/main/java/org/onap/dmaap/dbcapi/model/DR_Sub.java index e089881..a5d9999 100644 --- a/src/main/java/org/onap/dmaap/dbcapi/model/DR_Sub.java +++ b/src/main/java/org/onap/dmaap/dbcapi/model/DR_Sub.java @@ -184,12 +184,35 @@ public class DR_Sub extends DmaapObject { - public byte[] getBytes() { + public byte[] getBytes(String provApi) { + if ( "AT&T".equals(provApi)) { + return toProvJSONforATT().getBytes(StandardCharsets.UTF_8); + } return toProvJSON().getBytes(StandardCharsets.UTF_8); } - // returns the DR_Sub object in JSON that conforms to DR Prov Server expectations - public String toProvJSON() { + // returns the DR_Sub object in JSON that conforms to ONAP DR Prov Server expectations + public String toProvJSON() { + // this is the original DR API that was contributed to ONAP + String postJSON = String.format("{\"suspend\": \"%s\", \"delivery\": " + + "{\"url\": \"%s\", \"user\": \"%s\", \"password\": \"%s\", \"use100\": \"%s\"}" + + ", \"metadataOnly\": %s, \"groupid\": \"%s\", \"follow_redirect\": %s " + + "}", + this.suspended, + this.getDeliveryURL(), + this.getUsername(), + this.getUserpwd(), + this.isUse100(), + "false", + "0", + "true"); + logger.info( postJSON ); + return postJSON; + } + // returns the DR_Sub object in JSON that conforms to AT&T DR Prov Server expectations + // In Jan, 2019, the DR API used internally at AT&T diverged, so this function can be used in + // that runtime environment + public String toProvJSONforATT() { // in DR 3.0, API v2.1 a new groupid field is added. We are not using this required field so just set it to 0. // we send this regardless of DR Release because older versions of DR seem to safely ignore it // and soon those versions won't be around anyway... @@ -197,10 +220,16 @@ public class DR_Sub extends DmaapObject { // We are setting it to "true" because that is the general behavior desired in OpenDCAE. // But it is really a no-op for OpenDCAE because we've deployed DR with the SYSTEM-level parameter for FOLLOW_REDIRECTS set to true. // In the event we abandon that, then setting the sub attribute to true will be a good thing. + // Update Jan, 2019: added guaranteed_delivery and guaranteed_sequence with value false for + // backwards compatibility // TODO: // - introduce Bus Controller API support for these attributes // - store the default values in the DB - String postJSON = String.format("{\"suspend\": \"%s\", \"delivery\": {\"url\": \"%s\", \"user\": \"%s\", \"password\": \"%s\", \"use100\": \"%s\"}, \"metadataOnly\": %s, \"groupid\": \"%s\", \"follow_redirect\": %s }", + String postJSON = String.format("{\"suspend\": \"%s\", \"delivery\": " + + "{\"url\": \"%s\", \"user\": \"%s\", \"password\": \"%s\", \"use100\": \"%s\"}" + + ", \"metadataOnly\": %s, \"groupid\": \"%s\", \"follow_redirect\": %s " + + ", \"guaranteed_delivery\": %s, \"guaranteed_sequence\": %s " + + "}", this.suspended, this.getDeliveryURL(), this.getUsername(), @@ -208,7 +237,9 @@ public class DR_Sub extends DmaapObject { this.isUse100(), "false", "0", - "true"); + "true", + "false", + "false"); logger.info( postJSON ); return postJSON; diff --git a/src/main/java/org/onap/dmaap/dbcapi/model/Feed.java b/src/main/java/org/onap/dmaap/dbcapi/model/Feed.java index b78377b..b3c7332 100644 --- a/src/main/java/org/onap/dmaap/dbcapi/model/Feed.java +++ b/src/main/java/org/onap/dmaap/dbcapi/model/Feed.java @@ -48,52 +48,32 @@ public class Feed extends DmaapObject { private String formatUuid; private ArrayList<DR_Pub> pubs; - private ArrayList<DR_Sub> subs; + private ArrayList<DR_Sub> subs; - - - public boolean isSuspended() { - return suspended; - } - - public void setSuspended(boolean suspended) { - this.suspended = suspended; - } - - public String getSubscribeURL() { - return subscribeURL; - } - public void setSubscribeURL(String subscribeURL) { - this.subscribeURL = subscribeURL; - } - - - public Feed() { - this.pubs = new ArrayList<DR_Pub>(); - this.subs = new ArrayList<DR_Sub>(); + this.pubs = new ArrayList<>(); + this.subs = new ArrayList<>(); this.setStatus( DmaapObject_Status.EMPTY ); - + } - + public Feed( String name, - String version, - String description, - String owner, - String aspr - ) { + String version, + String description, + String owner, + String aspr) { this.feedName = name; this.feedVersion = version; this.feedDescription = description; this.owner = owner; this.asprClassification = aspr; - this.pubs = new ArrayList<DR_Pub>(); - this.subs = new ArrayList<DR_Sub>(); + this.pubs = new ArrayList<>(); + this.subs = new ArrayList<>(); this.setStatus( DmaapObject_Status.NEW ); - + } - + // expects a String in JSON format, with known fields to populate Feed object public Feed ( String json ) { JSONParser parser = new JSONParser(); @@ -101,10 +81,10 @@ public class Feed extends DmaapObject { try { jsonObj = (JSONObject) parser.parse( json ); } catch ( ParseException pe ) { - logger.error( "Error parsing provisioning data: " + json ); - this.setStatus( DmaapObject_Status.INVALID ); - return; - } + logger.error( "Error parsing provisioning data: " + json ); + this.setStatus( DmaapObject_Status.INVALID ); + return; + } this.setFeedName( (String) jsonObj.get("name")); this.setFeedVersion( (String) jsonObj.get("version")); @@ -117,30 +97,48 @@ public class Feed extends DmaapObject { this.setPublishURL( url ); this.setFeedId( url.substring( url.lastIndexOf('/')+1, url.length() )); logger.info( "feedid="+ this.getFeedId() ); - this.setSubscribeURL( (String) links.get("subscribe") ); + this.setSubscribeURL( (String) links.get("subscribe") ); this.setLogURL( (String) links.get("log") ); JSONObject auth = (JSONObject) jsonObj.get("authorization"); this.setAsprClassification( (String) auth.get("classification")); JSONArray pubs = (JSONArray) auth.get( "endpoint_ids"); int i; - ArrayList<DR_Pub> dr_pub = new ArrayList<DR_Pub>(); - this.subs = new ArrayList<DR_Sub>(); + ArrayList<DR_Pub> dr_pub = new ArrayList<>(); + this.subs = new ArrayList<>(); for( i = 0; i < pubs.size(); i++ ) { JSONObject entry = (JSONObject) pubs.get(i); - dr_pub.add( new DR_Pub( "someLocation", - (String) entry.get("id"), - (String) entry.get("password"), - this.getFeedId(), - this.getFeedId() + "." + DR_Pub.nextKey() )); - + dr_pub.add( new DR_Pub( "someLocation", + (String) entry.get("id"), + (String) entry.get("password"), + this.getFeedId(), + this.getFeedId() + "." + DR_Pub.nextKey() )); + } this.setPubs( dr_pub ); - + this.setStatus( DmaapObject_Status.VALID ); } + + + public boolean isSuspended() { + return suspended; + } + + public void setSuspended(boolean suspended) { + this.suspended = suspended; + } + + public String getSubscribeURL() { + return subscribeURL; + } + + public void setSubscribeURL(String subscribeURL) { + this.subscribeURL = subscribeURL; + } + public String getFeedId() { return feedId; } @@ -218,8 +216,7 @@ public class Feed extends DmaapObject { // returns the Feed object in JSON that conforms to DR Prov Server expectations public String toProvJSON() { - ArrayList<DR_Pub> pubs = this.getPubs(); - String postJSON = String.format("{\"name\": \"%s\", \"version\": \"%s\", \"description\": \"%s\", \"suspend\": %s, \"authorization\": { \"classification\": \"%s\", ", + String postJSON = String.format("{\"name\": \"%s\", \"version\": \"%s\", \"description\": \"%s\", \"suspend\": %s, \"authorization\": { \"classification\": \"%s\", ", this.getFeedName(), this.getFeedVersion(), this.getFeedDescription(), @@ -264,8 +261,7 @@ public class Feed extends DmaapObject { } public static String getSubProvURL( String feedId ) { - String ret = new DmaapService().getDmaap().getDrProvUrl() + "/subscribe/" + feedId ; - return ret; + return new DmaapService().getDmaap().getDrProvUrl() + "/subscribe/" + feedId; } @Override |