.. This work is licensed under a Creative Commons Attribution
.. 4.0 International License.
.. http://creativecommons.org/licenses/by/4.0
.. Copyright 2017 AT&T Intellectual Property.  All rights reserved.

.. index:: Developer Guides

.. _doc_onap-developer_guide_projects:

ONAP components and functionalities
===================================
Additional developer level detail is provided for each project below.

Active and Available Inventory
------------------------------

.. toctree::
   :maxdepth: 2
   :titlesonly:

| :ref:`aai aai-common<onap-aai-aai-common:master_index>`
| :ref:`AAI-esr-gui<onap-aai-esr-gui:master_index>`
| :ref:`aai esr-server<onap-aai-esr-server:master_index>`
| :ref:`aai sparky-be<onap-aai-sparky-be:master_index>`
| :ref:`aai event-clientrst<onap-aai-event-client:master_index>`


Application Controller
----------------------

.. toctree::
   :maxdepth: 2
   :titlesonly:

| :ref:`appc deployment<onap-appc-deployment:master_index>`
| :ref:`appc<onap-appc:master_index>`

Application Authorization Framework
-----------------------------------

.. toctree::
   :maxdepth: 2
   :titlesonly:

| :ref:`aaf authz<onap-aaf-authz:master_index>`
| :ref:`Secret Management Service<onap-aaf-sms:master_index>`
| :ref:`Certification Service<onap-aaf-certservice:master_index>`

Command Line Interface
----------------------

.. toctree::
   :maxdepth: 2
   :titlesonly:

:ref:`cli<onap-cli:master_index>`


Control Loop Automation Management Platform
-------------------------------------------

.. toctree::
   :maxdepth: 2
   :titlesonly:

:ref:`clamp<onap-clamp:master_index>`

Common Controller Software Development Kit
------------------------------------------

.. toctree::
   :maxdepth: 2
   :titlesonly:

| :ref:`ccsdk distribution<onap-ccsdk-distribution:master_index>`
| :ref:`ccsdk dashboard<onap-ccsdk-dashboard:master_index>`
| :ref:`ccsdk platform plugins<onap-ccsdk-platform-plugins:master_index>`
| :ref:`ccsdk apps<onap-ccsdk-apps:master_index>`
| :ref:`ccsdk cds<onap-ccsdk-cds:master_index>`

Data Collection, Analysis, and Events
-------------------------------------

.. toctree::
   :maxdepth: 2
   :titlesonly:

:ref:`dcaegen2<onap-dcaegen2:master_index>`

Data Management as a Platform Data Bus Controller
-------------------------------------------------

.. toctree::
   :maxdepth: 1
   :titlesonly:

| :ref:`dmaap dbcapi<onap-dmaap-dbcapi:master_index>`
| :ref:`dmaap buscontroller<onap-dmaap-buscontroller:master_index>`

Data Management as a Platform Data Router
-----------------------------------------

.. toctree::
   :maxdepth: 1
   :titlesonly:

:ref:`dmaap datarouter<onap-dmaap-datarouter:master_index>`

Data Management as a Platform Message Router
--------------------------------------------

.. toctree::
   :maxdepth: 2
   :titlesonly:

:ref:`dmaap messagerouter messageservice<onap-dmaap-messagerouter-messageservice:master_index>`

External API Framework
----------------------

.. toctree::
   :maxdepth: 2
   :titlesonly:

:ref:`externalapi nbi<onap-externalapi-nbi:master_index>`


Holmes
------

.. toctree::
   :maxdepth: 2
   :titlesonly:

| :ref:`Alarm Correlation and Analysis<onap-holmes-engine-management:master_index>`
| :ref:`Architecture and APIs<onap-holmes-rule-management:master_index>`

Integration
-----------

.. toctree::
   :maxdepth: 1
   :titlesonly:

:ref:`integration<onap-integration:master_index>`

Logging Analytics
-----------------

.. toctree::
   :maxdepth: 2
   :titlesonly:

:ref:`logging-analytics<onap-logging-analytics:master_index>`

Micro Services Bus
------------------

.. toctree::
   :maxdepth: 2
   :titlesonly:

:ref:`msb apigateway<onap-msb-apigateway:master_index>`

:ref:`msb swagger-sdk<onap-msb-swagger-sdk:master_index>`


Modeling
--------

.. toctree::
   :maxdepth: 2
   :titlesonly:

:ref:`modeling modelspec<onap-modeling-modelspec:master_index>`

:ref:`modeling etsicatalog<onap-modeling-etsicatalog:master_index>`

MultiVIM Cloud
--------------

.. toctree::
   :maxdepth: 2
   :titlesonly:

:ref:`multicloud framework<onap-multicloud-framework:master_index>`

Music
-----

.. toctree::
   :maxdepth: 2
   :titlesonly:

:ref:`music<onap-music:master_index>`

:ref:`music distributed-kv-store<onap-music-distributed-kv-store:master_index>`

ONAP Operations Manager
-----------------------

.. toctree::
   :maxdepth: 2
   :titlesonly:

:ref:`oom<onap-oom:master_index>`

Optimization Framework
----------------------

.. toctree::
   :maxdepth: 2
   :titlesonly:

| :ref:`optf has<onap-optf-has:master_index>`
| :ref:`optf osdf<onap-optf-osdf:master_index>`
| :ref:`optf cmso<onap-optf-cmso:master_index>`

Policy Framework
----------------

.. toctree::
   :maxdepth: 2
   :titlesonly:

:ref:`policy parent<onap-policy-parent:master_index>`

:ref:`policy engine<onap-policy-engine:master_index>`

Portal Platform
---------------

.. toctree::
   :maxdepth: 2
   :titlesonly:

:ref:`portal<onap-portal:master_index>`

Service Design & Creation
-------------------------

.. toctree::
   :maxdepth: 2
   :titlesonly:

:ref:`sdc<onap-sdc:master_index>`

Service Orchestration
---------------------

.. toctree::
   :maxdepth: 2
   :titlesonly:

:ref:`so<onap-so:master_index>`

:ref:`so libs<onap-so-libs:master_index>`

Software Defined Network Controller
-----------------------------------

.. toctree::
   :maxdepth: 2
   :titlesonly:

:ref:`sdnc oam<onap-sdnc-oam:master_index>`

Software Defined Network Controller for Radio (SDN-R)
-----------------------------------------------------

.. toctree::
   :maxdepth: 2
   :titlesonly:

:ref:`ccsdk features<onap-ccsdk-features:master_index>`

Use Case User Interface
-----------------------

.. toctree::
   :maxdepth: 2
   :titlesonly:

:ref:`usecase-ui<onap-usecase-ui:master_index>`

Virtual Function Controller
---------------------------

.. toctree::
   :maxdepth: 2
   :titlesonly:

:ref:`vfc nfvo lcm<onap-vfc-nfvo-lcm:master_index>`

Virtual Infrastructure Deployment
---------------------------------

.. toctree::
   :maxdepth: 2
   :titlesonly:


:ref:`vid<onap-vid:master_index>`

VNF Software Development Kit
----------------------------

.. toctree::
   :maxdepth: 2
   :titlesonly:

:ref:`vnfsdk model<onap-vnfsdk-model:master_index>`
