/*
 * Copyright 2017 Huawei Technologies Co., Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/*
Usage: dot -T png -O onapapidependencies.dot   This cmd will generate a png graph dependency file.
Graphiz is the open source tool used to generate the graph.
Graphiz is available and documented at http://www.graphviz.org
This text file represents the API dependencies between ONAP projects
The relation between producer and consumer is formalized by the following convention:
consumer -> producer; 
*/
 
digraph {
newrank=true;
fontsize = 20;
label="ONAP Projects API Dependencies";
rankdir=TB;
ranksep="1 equally"; 
edge [color=Blue]

aai				[shape=box,label="Active and Available Inventory"]
aaf				[shape=box,label="Application Authorization Framework"]
appc			[shape=box,label="APP-C"]
ccsdk			[shape=box,label="CCSDK"]
clamp			[shape=box,label="CLAMP"]
cli			    [shape=box,label="CLI"]
clamp			[shape=box,label="CLAMP"]
dcaegen2		[shape=box,label="DCAE"]
dmaap			[shape=box,label="Data Movement as Platform"]
extapi			[shape=box,label="External API Framewok"]
holmes			[shape=box,label="Holmes"]
modeling		[shape=box,label="Modeling"]
msb				[shape=box,label="Microservices Bus"]
multicloud		[shape=box,label="Multi VIM/Cloud"]
oom			    [shape=box,label="ONAP Operation Manager"]
policy			[shape=box,label="Policy Framework"]
portal			[shape=box,label="Portal Platform"]
sdc				[shape=box,label="Service Design & Creation"]
sdnc			[shape=box,label="SDNC"]
so				[shape=box,label="Service Orchestrator"]
vfc         	[shape=box,label="VF-C"]
vid  			[shape=box,label="VID"]
usecaseui		[shape=box,label="Use Case UI"]


aai -> dmaap;			//https://wiki.onap.org/pages/viewpage.action?pageId=8227565#A&AIM1ReleasePlanning-APIIncomingDependencies
aai -> msb;
appc -> aai;			//https://wiki.onap.org/pages/viewpage.action?pageId=6593279#APPCM1ReleasePlanning(AmsterdamRelease)-APIIncomingDependencies
appc -> multicloud;
appc -> sdc;
appc -> ccsdk;
appc -> dmaap;
ccsdk -> aai;			//https://wiki.onap.org/display/DW/Release+Planning+Template+%3A+CCSDK+Amsterdam+Release#ReleasePlanningTemplate:CCSDKAmsterdamRelease-APIIncomingDependencies
ccsdk -> sdc;
clamp -> dcaegen2;		//https://wiki.onap.org/display/DW/CLAMP+Release+Planning+M1#CLAMPReleasePlanningM1-APIIncomingDependencies
clamp -> policy;
clamp -> sdc;
cli -> aaf;				//https://wiki.onap.org/display/DW/CLI+Release+Planning#CLIReleasePlanning-APIIncomingDependencies
cli -> aai;
cli -> msb;
dcaegen2 -> dmaap;		//https://wiki.onap.org/display/DW/DCAE+R1+Release+Planning#DCAER1ReleasePlanning-APIIncomingDependencies
dcaegen2 -> multicloud;
dcaegen2 -> policy;
dcaegen2 -> sdc;
dmaap -> aaf;			//https://wiki.onap.org/display/DW/DMaaP+Amsterdam+M1+Release#DMaaPAmsterdamM1Release-APIIncomingDependencies			
extapi -> so;			//https://wiki.onap.org/pages/viewpage.action?pageId=8227006#ExternalAPIFrameworkM1ReleasePlanning(AmsterdamRelease)-APIIncomingDependencies		
extapi -> sdc;
holmes -> aai;			//https://wiki.onap.org/pages/viewpage.action?pageId=6593583#HolmesReleasePlanningforAmsterdam-APIIncomingDependencies		
holmes -> dcaegen2;
holmes -> dmaap;
holmes -> msb;
multicloud -> aai;		//https://wiki.onap.org/pages/viewpage.action?pageId=8225753#MultiVIM/CloudRelease1Planning-APIIncomingDependencies
multicloud -> dcaegen2;
oom -> msb;				//https://wiki.onap.org/display/DW/OOM+M1+Release+Planning+Template#OOMM1ReleasePlanningTemplate-APIIncomingDependencies
policy -> aai;			//https://wiki.onap.org/display/DW/Policy+Framework+R1+-+M1+Release+Planning+Template#PolicyFrameworkR1-M1ReleasePlanningTemplate-APIIncomingDependencies
policy -> appc;
policy -> dcaegen2;
policy -> dmaap;
policy -> vfc;
policy -> so;
portal -> aaf;			//https://wiki.onap.org/pages/viewpage.action?pageId=8227559#PortalPlatformM1ReleasePlanning(AmsterdamRelease)-APIIncomingDependencies
sdnc -> aai;			//https://wiki.onap.org/display/DW/Release+Planning+Template+%3A+SDNC+Amsterdam+Release#ReleasePlanningTemplate:SDNCAmsterdamRelease-APIIncomingDependencies
sdnc -> sdc;
sdnc -> dmaap;
so -> aai;				//https://wiki.onap.org/display/DW/Service+Orchestrator+Release+Planning#ServiceOrchestratorReleasePlanning-APIIncomingDependencies
so -> appc;
so -> multicloud;
so -> sdc;
so -> sdnc;
so -> vfc;
usecaseui -> dcaegen2;	//https://wiki.onap.org/display/DW/Usecase+UI+Release+Planning#UsecaseUIReleasePlanning-APIIncomingDependencies
usecaseui -> msb;
usecaseui -> portal;
usecaseui -> so;
usecaseui -> vfc;
vid -> aai;				//https://wiki.onap.org/display/DW/VID+R1+Amsterdam+Release+Planning#VIDR1AmsterdamReleasePlanning-APIIncomingDependencies
vid -> portal;
vid -> sdc;
vid -> so;
vfc -> aai;				//https://wiki.onap.org/display/DW/VF-C+Release+Planning#VF-CReleasePlanning-APIIncomingDependencies
vfc -> dcaegen2;
vfc -> modeling;
vfc -> multicloud;
vfc -> msb;
vfc -> sdc;
}
