* org.onap.dmaap
* ================================================================================
* Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ *
+ * Modifications Copyright (C) 2019 IBM.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
package org.onap.dmaap.dbcapi.service;
import java.util.ArrayList;
-
-
-
-
-
-
-
-
-
-
import org.onap.dmaap.dbcapi.aaf.AafService;
+import org.onap.dmaap.dbcapi.aaf.AafServiceImpl;
import org.onap.dmaap.dbcapi.aaf.DmaapGrant;
import org.onap.dmaap.dbcapi.aaf.DmaapPerm;
import org.onap.dmaap.dbcapi.aaf.AafService.ServiceType;
-import org.onap.dmaap.dbcapi.aaf.authentication.ApiPerms;
-import org.onap.dmaap.dbcapi.aaf.database.DatabaseClass;
+import org.onap.dmaap.dbcapi.authentication.ApiPerms;
+import org.onap.dmaap.dbcapi.authentication.ApiPolicy;
+import org.onap.dmaap.dbcapi.database.DatabaseClass;
import org.onap.dmaap.dbcapi.logging.BaseLoggingClass;
import org.onap.dmaap.dbcapi.logging.DmaapbcLogMessageEnum;
import org.onap.dmaap.dbcapi.model.ApiError;
private Singleton<Dmaap> dmaapholder = DatabaseClass.getDmaap();
+ private static String noEnvironmentPrefix;
+
- // TODO put these in properties file
String topicFactory; // = "org.openecomp.dcae.dmaap.topicFactory";
String topicMgrRole; // = "org.openecomp.dmaapBC.TopicMgr";
- // TODO confirm this is equivalent to dmaap.getTopicNsRoot() so we can retire it
- String dcaeTopicNs; // = "org.openecomp.dcae.dmaap";
+ private boolean multiSite;
public DmaapService() {
DmaapConfig p = (DmaapConfig)DmaapConfig.getConfig();
topicFactory = p.getProperty("MR.TopicFactoryNS", "MR.topicFactoryNS.not.set");
topicMgrRole = p.getProperty("MR.TopicMgrRole", "MR.TopicMgrRole.not.set" );
- dcaeTopicNs = dmaapholder.get().getTopicNsRoot();
+
+ multiSite = "true".equalsIgnoreCase(p.getProperty("MR.multisite", "true"));
+ noEnvironmentPrefix = p.getProperty( "AAF.NoEnvironmentPrefix", "org.onap");
+
+ logger.info( "DmaapService settings: " +
+ " topicFactory=" + topicFactory +
+ " topicMgrRole=" + topicMgrRole +
+
+ " multisite=" + multiSite +
+ " noEnvironmentPrefix=" + noEnvironmentPrefix
+ );
}
nd.setLastMod();
dmaapholder.update(nd);
-
- AafService aaf = new AafService( ServiceType.AAF_Admin);
- ApiPerms p = new ApiPerms();
- p.setEnvMap();
- boolean anythingWrong = setTopicMgtPerms( nd, aaf ) || createMmaTopic();
+
+ AafService aaf = new AafServiceImpl( ServiceType.AAF_Admin);
+ ApiPolicy apiPolicy = new ApiPolicy();
+ if ( apiPolicy.isPermissionClassSet() ) {
+ ApiPerms p = new ApiPerms();
+ p.setEnvMap();
+ }
+ boolean anythingWrong = false;
+
+ if ( multiSite ) {
+ anythingWrong = setTopicMgtPerms( nd, aaf ) || createMmaTopic();
+ }
if ( anythingWrong ) {
dmaap.setStatus(DmaapObject_Status.INVALID);
if ( ! dmaap.isStatusValid() || ! nd.getDmaapName().equals(dmaap.getDmaapName()) || dmaap.getVersion().equals( "0") ) {
nd.setLastMod();
dmaapholder.update(nd); //need to set this so the following perms will pick up any new vals.
- ApiPerms p = new ApiPerms();
- p.setEnvMap();
- AafService aaf = new AafService( ServiceType.AAF_Admin);
- anythingWrong = setTopicMgtPerms( nd, aaf ) || createMmaTopic();
+ //dcaeTopicNs = dmaapholder.get().getTopicNsRoot();
+ ApiPolicy apiPolicy = new ApiPolicy();
+ if ( apiPolicy.isPermissionClassSet()) {
+ ApiPerms p = new ApiPerms();
+ p.setEnvMap();
+ }
+ AafService aaf = new AafServiceImpl( ServiceType.AAF_Admin);
+ if ( multiSite ) {
+ anythingWrong = setTopicMgtPerms( nd, aaf ) || createMmaTopic();
+ }
}
if ( anythingWrong ) {
}
public String getTopicPerm( String val ) {
Dmaap dmaap = dmaapholder.get();
- return dmaap.getTopicNsRoot() + "." + val + ".mr.topic";
+ String nsRoot = dmaap.getTopicNsRoot();
+ if ( nsRoot == null ) { return null; }
+
+ String t;
+ // in ONAP Casablanca, we assume no distinction of environments reflected in topic namespace
+ if ( nsRoot.startsWith(noEnvironmentPrefix) ) {
+ t = nsRoot + ".mr.topic";
+ } else {
+ t = nsRoot + "." + val + ".mr.topic";
+ }
+ return t;
}
public String getBridgeAdminFqtn(){
private boolean setTopicMgtPerms( Dmaap nd, AafService aaf ){
String[] actions = { "create", "destroy" };
- String instance = ":" + dcaeTopicNs + "." + nd.getDmaapName() + ".mr.topic:" + dcaeTopicNs + "." + nd.getDmaapName();
+ String instance = ":" + nd.getTopicNsRoot() + "." + nd.getDmaapName() + ".mr.topic:" + nd.getTopicNsRoot() + "." + nd.getDmaapName();
for( String action : actions ) {
}
}
- String t = dcaeTopicNs +"." + nd.getDmaapName() + ".mr.topic";
+ String t = nd.getTopicNsRoot() +"." + nd.getDmaapName() + ".mr.topic";
String[] s = { "view", "pub", "sub" };
actions = s;
instance = "*";
clients.add( nClient );
// initialize Topic
- Topic mmaTopic = new Topic();
+ Topic mmaTopic = new Topic().init();
mmaTopic.setTopicName(dmaap.getBridgeAdminTopic());
mmaTopic.setClients(clients);
mmaTopic.setOwner("BusController");
mmaTopic.setTopicDescription("topic reserved for MirrorMaker Administration");
mmaTopic.setTnxEnabled("false");
+ mmaTopic.setPartitionCount("1"); // a single partition should guarantee message order
+
ApiError err = new ApiError();
TopicService svc = new TopicService();
try {
@SuppressWarnings("unused")
- Topic nTopic = svc.addTopic(mmaTopic, err);
+ Topic nTopic = svc.addTopic(mmaTopic, err, true);
if ( err.is2xx() || err.getCode() == 409 ) {
return false;
}