<?xml version="1.0" encoding="UTF-8"?>
<!--
 * ============LICENSE_START=======================================================
 * ONAP : CCSDK.apps.sdnr.wt
 * ================================================================================
 * Copyright (C) 2018 highstreet technologies GmbH Intellectual Property. All rights reserved.
 * ================================================================================
 * 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.
 * ============LICENSE_END=========================================================
 -->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.onap.ccsdk.parent</groupId>
        <artifactId>odlparent-lite</artifactId>
        <version>1.5.2-SNAPSHOT</version>
        <relativePath/>
    </parent>

    <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
    <artifactId>sdnr-wt</artifactId>
    <version>0.7.1-SNAPSHOT</version>
    <packaging>pom</packaging>

    <name>ccsdk-features :: ${project.artifactId}</name>
    <description>SDN-R wireless transport micro-services</description>

    <modules>
        <module>common</module>
        <module>apigateway</module>
        <module>websocketmanager2</module>
        <module>helpserver</module>
        <module>data-provider</module>
        <module>netconfnode-state-service</module>
        <!--<module>devicemanager</module>
        <module>devicemanager-onf</module>
        <module>devicemanager-oran</module>
        <module>devicemanager-gran</module>
        <module>mountpoint-state-provider</module> -->
        <module>mountpoint-registrar</module>
        <module>odlux</module>
        <module>featureaggregator</module>
    </modules>
</project>
