X-Git-Url: https://gerrit.onap.org/r/gitweb?p=dmaap%2Fdbcapi.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Forg%2Fonap%2Fdmaap%2Fdbcapi%2Fmodel%2FTopic.java;h=7c957dc7cdd1a3c29f3dcfffa29ee2d338b3994a;hp=712c2ebca79756dc348732383eec5169c2edce24;hb=0ab116b376402b076b2b8558dedc8e6f88d1a2d5;hpb=6349f10fcf1902c1f41ec58c26e57dd11ea3b78f diff --git a/src/main/java/org/onap/dmaap/dbcapi/model/Topic.java b/src/main/java/org/onap/dmaap/dbcapi/model/Topic.java index 712c2eb..7c957dc 100644 --- a/src/main/java/org/onap/dmaap/dbcapi/model/Topic.java +++ b/src/main/java/org/onap/dmaap/dbcapi/model/Topic.java @@ -26,6 +26,9 @@ import java.util.Date; import javax.xml.bind.annotation.XmlRootElement; + +import org.onap.dmaap.dbcapi.util.DmaapConfig; + import org.onap.dmaap.dbcapi.service.DmaapService; @@ -40,23 +43,57 @@ public class Topic extends DmaapObject { private String formatUuid; private ReplicationType replicationCase; private String globalMrURL; // optional: URL of global MR to replicate to/from + private FqtnType fqtnStyle; + private String version; private ArrayList clients; private static Dmaap dmaap = new DmaapService().getDmaap(); - + + // during unit testing, discovered that presence of dots in some values + // creates an unplanned topic namespace as we compose the FQTN. + // this may create sensitivity (i.e. 403) for subsequent creation of AAF perms, so best to not allow it + private static String removeDots( String source, String def ) { + if ( source == null || source.isEmpty()) { + return def; + } + return source.replaceAll("\\.", "_"); + } // // utility function to generate the FQTN of a topic - public static String genFqtn( String name ) { + public String genFqtn( ) { + DmaapConfig dc = (DmaapConfig)DmaapConfig.getConfig(); + String projectId = dc.getProperty("MR.projectID", "99999"); CharSequence signal = "."; String ret; - if ( name.contains( signal )) { + if ( this.getTopicName().contains( signal )) { // presence of a dot indicates the name is already fully qualified - ret = name; + ret = this.getTopicName(); } else { - ret = dmaap.getTopicNsRoot() + "." + dmaap.getDmaapName() + "." + name; + // these vars may not contain dots + String p = removeDots( projectId, "90909"); + String v = removeDots( this.getVersion(), "v1"); + switch( this.getFqtnStyle() ) { + case FQTN_PROJECTID_VERSION_FORMAT: + + ret = dmaap.getTopicNsRoot() + "." + dmaap.getDmaapName() + "." + p + "-" + this.getTopicName() + "-" + v; + break; + + case FQTN_PROJECTID_FORMAT: + + ret = dmaap.getTopicNsRoot() + "." + dmaap.getDmaapName() + "." + p + "-" + this.getTopicName(); + break; + + case FQTN_LEGACY_FORMAT: + default: // for backwards compatibility + ret = dmaap.getTopicNsRoot() + "." + dmaap.getDmaapName() + "." + this.getTopicName(); + break; + + + } + } return ret; } @@ -83,6 +120,7 @@ public class Topic extends DmaapObject { this.setLastMod(); this.setStatus( DmaapObject_Status.NEW ); this.replicationCase = ReplicationType.Validator("none"); + this.fqtnStyle = FqtnType.Validator("none"); logger.debug( "Topic constructor " + this.getLastMod() ); } public String getFqtn() { @@ -162,7 +200,14 @@ public class Topic extends DmaapObject { public void setReplicationCase(ReplicationType t) { this.replicationCase = t; } + public FqtnType getFqtnStyle() { + return fqtnStyle; + } + + public void setFqtnStyle(FqtnType t) { + this.fqtnStyle = t; + } public String getGlobalMrURL() { return globalMrURL; @@ -176,6 +221,18 @@ public class Topic extends DmaapObject { + public String getVersion() { + return version; + } + + + + public void setVersion(String version) { + this.version = version; + } + + + public String toProvJSON() { StringBuilder str = new StringBuilder(); str.append("{ \"topicName\": \"");