/*
 * 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 onapapidependecies.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;
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;			
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 -> 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;
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;
}
