aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore18
-rw-r--r--.gitreview4
-rw-r--r--CHANGELOG.md11
-rw-r--r--LICENSE.txt22
-rw-r--r--README.md49
-rw-r--r--docs/API.adoc623
-rw-r--r--docs/DatabaseTables.md97
-rw-r--r--docs/Deployment.md39
-rw-r--r--docs/Design.md142
-rw-r--r--docs/Upgrade.md13
-rw-r--r--docs/images/dcae_inventory_communication.pngbin0 -> 36079 bytes
-rw-r--r--license/pom.xml29
-rw-r--r--license/src/main/resources/licenses/att_license/header.txt4
-rw-r--r--license/src/main/resources/licenses/att_license/license.txt2
-rw-r--r--license/src/main/resources/licenses/licenses.properties1
-rw-r--r--pom.xml377
-rw-r--r--src/gen/java/io/swagger/api/ApiException.java33
-rw-r--r--src/gen/java/io/swagger/api/ApiOriginFilter.java45
-rw-r--r--src/gen/java/io/swagger/api/ApiResponseMessage.java92
-rw-r--r--src/gen/java/io/swagger/api/DcaeServiceTypesApi.java124
-rw-r--r--src/gen/java/io/swagger/api/DcaeServiceTypesApiService.java42
-rw-r--r--src/gen/java/io/swagger/api/DcaeServicesApi.java180
-rw-r--r--src/gen/java/io/swagger/api/DcaeServicesApiService.java46
-rw-r--r--src/gen/java/io/swagger/api/DcaeServicesGroupbyApi.java62
-rw-r--r--src/gen/java/io/swagger/api/DcaeServicesGroupbyApiService.java34
-rw-r--r--src/gen/java/io/swagger/api/JacksonJsonProvider.java42
-rw-r--r--src/gen/java/io/swagger/api/NotFoundException.java38
-rw-r--r--src/gen/java/io/swagger/api/StringUtil.java65
-rw-r--r--src/gen/java/io/swagger/model/DCAEService.java306
-rw-r--r--src/gen/java/io/swagger/model/DCAEServiceComponent.java252
-rw-r--r--src/gen/java/io/swagger/model/DCAEServiceComponentRequest.java155
-rw-r--r--src/gen/java/io/swagger/model/DCAEServiceGroupByResults.java120
-rw-r--r--src/gen/java/io/swagger/model/DCAEServiceGroupByResultsPropertyValues.java138
-rw-r--r--src/gen/java/io/swagger/model/DCAEServiceRequest.java207
-rw-r--r--src/gen/java/io/swagger/model/DCAEServiceType.java222
-rw-r--r--src/gen/java/io/swagger/model/DCAEServiceTypeRequest.java163
-rw-r--r--src/gen/java/io/swagger/model/InlineResponse200.java140
-rw-r--r--src/gen/java/io/swagger/model/InlineResponse2001.java140
-rw-r--r--src/gen/java/io/swagger/model/InlineResponse200Links.java120
-rw-r--r--src/gen/java/io/swagger/model/Link.java136
-rw-r--r--src/main/java/io/swagger/api/Bootstrap.java52
-rw-r--r--src/main/java/io/swagger/api/factories/DcaeServiceTypesApiServiceFactory.java38
-rw-r--r--src/main/java/io/swagger/api/factories/DcaeServicesApiServiceFactory.java57
-rw-r--r--src/main/java/io/swagger/api/factories/DcaeServicesGroupbyApiServiceFactory.java38
-rw-r--r--src/main/java/io/swagger/api/impl/DcaeServiceTypesApiServiceImpl.java222
-rw-r--r--src/main/java/io/swagger/api/impl/DcaeServicesApiServiceImpl.java400
-rw-r--r--src/main/java/io/swagger/api/impl/DcaeServicesGroupbyApiServiceImpl.java106
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/InventoryApplication.java144
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/InventoryConfiguration.java146
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/LinkSerializer.java55
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/clients/DCAEControllerClient.java225
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/clients/DatabusControllerClient.java89
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/daos/DCAEServiceComponentsDAO.java65
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/daos/DCAEServiceTransactionDAO.java161
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/daos/DCAEServiceTypeTransactionDAO.java43
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/daos/DCAEServiceTypesDAO.java68
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/daos/DCAEServicesComponentsMapsDAO.java53
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/daos/DCAEServicesDAO.java77
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/daos/InventoryDAO.java32
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/daos/InventoryDAOManager.java122
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/dbthings/StringListArgument.java60
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/dbthings/mappers/DCAEServiceComponentObjectMapper.java51
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/dbthings/mappers/DCAEServiceObjectMapper.java54
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/dbthings/mappers/DCAEServiceTypeObjectMapper.java68
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/dbthings/models/DCAEServiceComponentObject.java149
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/dbthings/models/DCAEServiceObject.java171
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/dbthings/models/DCAEServiceTypeObject.java101
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/exceptions/DCAEControllerClientException.java39
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/exceptions/DCAEControllerConnectionException.java39
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/exceptions/DCAEControllerTimeoutException.java39
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/exceptions/DatabusControllerClientException.java39
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/exceptions/mappers/DCAEControllerConnectionExceptionMapper.java40
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/exceptions/mappers/DCAEControllerExceptionMapper.java44
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/exceptions/mappers/DCAEControllerTimeoutExceptionMapper.java40
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/providers/NotFoundExceptionMapper.java43
-rw-r--r--src/main/resources/config.yml66
-rw-r--r--src/main/resources/logback.xml27
77 files changed, 7596 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..c2e5138
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,18 @@
+*.class
+
+# Mobile Tools for Java (J2ME)
+.mtj.tmp/
+
+# Package Files #
+*.jar
+*.war
+*.ear
+
+# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
+hs_err_pid*
+
+# Intellij IDE
+.idea
+*.iml
+
+target
diff --git a/.gitreview b/.gitreview
new file mode 100644
index 0000000..79a0944
--- /dev/null
+++ b/.gitreview
@@ -0,0 +1,4 @@
+[gerrit]
+host=gerrit.openecomp.org
+port=29418
+project=dcae/dcae-inventory.git
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..d615560
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,11 @@
+# Change Log
+
+## 1.0.0
+
+2016-08-22
+
+Changes:
+
+* DCAE service type resource's data model expanded to have the fields: `serviceIds` and `serviceLocations`
+* Underlying Postgres table `dcae_service_types` schema changed to store the new fields
+* `GET /dcae-service-types` query interface expanded have the query parameters: `serviceId` and `serviceLocation`.
diff --git a/LICENSE.txt b/LICENSE.txt
new file mode 100644
index 0000000..ae12da2
--- /dev/null
+++ b/LICENSE.txt
@@ -0,0 +1,22 @@
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright © 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..92c9c3d
--- /dev/null
+++ b/README.md
@@ -0,0 +1,49 @@
+# DCAE Inventory
+
+DCAE Inventory is a web service that provides a REST-API to obtain DCAE service and DCAE service type information. You can find the design documentation [here](docs/Design.md).
+
+## Usage
+
+### Build Docker image
+
+The following Maven command will build the Uber JAR, build the Docker image to the local machine registry and then push the same image to the specified remote registry.
+
+```
+mvn clean package docker:build -DpushImageTag
+```
+
+The image will be tagged with the project version found in the `pom.xml`.
+
+### Run via Docker
+
+Execute this to run.
+
+```
+docker run -p 8080:8080 -d -v <some local directory>/config.yml:/opt/config.yml --name dcae-inventory <docker registry>/dcae-inventory:<version>
+```
+
+#### Running local Dockerized Postgres
+
+The following is the docker command used to run a container of a postgres 9.5.2 image from the official repository:
+
+```
+ docker run --name dcae-postgres -e POSTGRES_PASSWORD=test123 -e PGDATA=/var/lib/postgresql/data/pgdata -v <local directory>:/var/lib/postgresql/data/pgdata -p 5432:5432 -d postgres:9.5.2
+ ```
+
+The central postgres instance for 1607 will be using 9.5.2.
+
+## Swagger
+
+To view the running service's swagger specification, execute the following:
+
+```
+curl <hostname>:8080/swagger.json
+```
+
+or
+
+```
+curl <hostname>:8080/swagger.yaml
+```
+
+To view it offline, an AsciiDoctor version is available [here](docs/API.adoc).
diff --git a/docs/API.adoc b/docs/API.adoc
new file mode 100644
index 0000000..ea837e6
--- /dev/null
+++ b/docs/API.adoc
@@ -0,0 +1,623 @@
+= DCAE Inventory API
+
+
+[[_overview]]
+== Overview
+DCAE Inventory is a web service that provides the following:
+
+. Real-time data on all DCAE services and their components
+. Comprehensive details on available DCAE service types
+
+
+=== Version information
+[%hardbreaks]
+_Version_ : 1.0.0
+
+
+
+
+[[_paths]]
+== Paths
+
+[[_dcaeservicetypesget]]
+=== GET /dcae-service-types
+
+==== Description
+Get a list of `DCAEServiceType` objects.
+
+
+==== Parameters
+
+[options="header", cols=".^2,.^3,.^9,.^4,.^2"]
+|===
+|Type|Name|Description|Schema|Default
+|*Query*|*offset* +
+_optional_|Query resultset offset used for pagination (zero-based)|integer(int32)|
+|*Query*|*serviceId* +
+_optional_||string|
+|*Query*|*serviceLocation* +
+_optional_||string|
+|*Query*|*vnfType* +
+_optional_||string|
+|===
+
+
+==== Responses
+
+[options="header", cols=".^2,.^14,.^4"]
+|===
+|HTTP Code|Description|Schema
+|*200*|List of `DCAEServiceType` objects|<<_inlineresponse200,InlineResponse200>>
+|===
+
+
+==== Consumes
+
+* `application/json`
+* `application/vnd.dcae.inventory.v1+json`
+
+
+==== Produces
+
+* `application/json`
+* `application/vnd.dcae.inventory.v1+json`
+
+
+[[_dcaeservicetypestypenameget]]
+=== GET /dcae-service-types/{typeName}
+
+==== Description
+Get a `DCAEServiceType` object.
+
+
+==== Parameters
+
+[options="header", cols=".^2,.^3,.^9,.^4,.^2"]
+|===
+|Type|Name|Description|Schema|Default
+|*Path*|*typeName* +
+_required_||string|
+|===
+
+
+==== Responses
+
+[options="header", cols=".^2,.^14,.^4"]
+|===
+|HTTP Code|Description|Schema
+|*200*|Single `DCAEServiceType` object|<<_dcaeservicetype,DCAEServiceType>>
+|*404*|Resource not found|<<_dcaeservicetype,DCAEServiceType>>
+|===
+
+
+==== Consumes
+
+* `application/json`
+* `application/vnd.dcae.inventory.v1+json`
+
+
+==== Produces
+
+* `application/json`
+* `application/vnd.dcae.inventory.v1+json`
+
+
+[[_dcaeservicetypestypenameput]]
+=== PUT /dcae-service-types/{typeName}
+
+==== Description
+Inserts a new `DCAEServiceType` or updates an existing instance. Updates are only allowed iff there are no running DCAE services of the requested type,
+
+
+==== Parameters
+
+[options="header", cols=".^2,.^3,.^9,.^4,.^2"]
+|===
+|Type|Name|Description|Schema|Default
+|*Path*|*typeName* +
+_required_||string|
+|*Body*|*body* +
+_required_||<<_dcaeservicetyperequest,DCAEServiceTypeRequest>>|
+|===
+
+
+==== Responses
+
+[options="header", cols=".^2,.^14,.^4"]
+|===
+|HTTP Code|Description|Schema
+|*200*|Single `DCAEServiceType` object.|<<_dcaeservicetype,DCAEServiceType>>
+|*400*|Bad request provided.|<<_apiresponsemessage,ApiResponseMessage>>
+|*409*|Failed to update because there are still DCAE services of the requested type running.|<<_apiresponsemessage,ApiResponseMessage>>
+|===
+
+
+==== Consumes
+
+* `application/json`
+* `application/vnd.dcae.inventory.v1+json`
+
+
+==== Produces
+
+* `application/json`
+* `application/vnd.dcae.inventory.v1+json`
+
+
+[[_dcaeservicesget]]
+=== GET /dcae-services
+
+==== Description
+Get a list of `DCAEService` objects.
+
+
+==== Parameters
+
+[options="header", cols=".^2,.^3,.^9,.^4,.^2"]
+|===
+|Type|Name|Description|Schema|Default
+|*Query*|*componentType* +
+_optional_|Use to filter by a specific DCAE service component type|string|
+|*Query*|*created* +
+_optional_|Use to filter by created time|string|
+|*Query*|*offset* +
+_optional_|Query resultset offset used for pagination (zero-based)|integer(int32)|
+|*Query*|*shareable* +
+_optional_|Use to filter by DCAE services that have shareable components or not|boolean|
+|*Query*|*typeName* +
+_optional_|DCAE service type name|string|
+|*Query*|*vnfId* +
+_optional_||string|
+|*Query*|*vnfLocation* +
+_optional_||string|
+|*Query*|*vnfType* +
+_optional_||string|
+|===
+
+
+==== Responses
+
+[options="header", cols=".^2,.^14,.^4"]
+|===
+|HTTP Code|Description|Schema
+|*200*|List of `DCAEService` objects|<<_inlineresponse2001,InlineResponse2001>>
+|*502*|Bad response from DCAE controller|<<_apiresponsemessage,ApiResponseMessage>>
+|*504*|Failed to connect with DCAE controller|<<_apiresponsemessage,ApiResponseMessage>>
+|===
+
+
+==== Consumes
+
+* `application/json`
+* `application/vnd.dcae.inventory.v1+json`
+
+
+==== Produces
+
+* `application/json`
+* `application/vnd.dcae.inventory.v1+json`
+
+
+[[_dcaeservicesgroupbypropertynameget]]
+=== GET /dcae-services-groupby/{propertyName}
+
+==== Description
+Get a list of unique values for the given `propertyName`
+
+
+==== Parameters
+
+[options="header", cols=".^2,.^3,.^9,.^4,.^2"]
+|===
+|Type|Name|Description|Schema|Default
+|*Path*|*propertyName* +
+_required_|Property to find unique values. Restricted to `type`, `vnfType`, `vnfLocation`|string|
+|===
+
+
+==== Responses
+
+[options="header", cols=".^2,.^14,.^4"]
+|===
+|HTTP Code|Description|Schema
+|*200*|List of unique property values|<<_dcaeservicegroupbyresults,DCAEServiceGroupByResults>>
+|===
+
+
+==== Consumes
+
+* `application/json`
+* `application/vnd.dcae.inventory.v1+json`
+
+
+==== Produces
+
+* `application/json`
+* `application/vnd.dcae.inventory.v1+json`
+
+
+[[_dcaeservicesserviceidget]]
+=== GET /dcae-services/{serviceId}
+
+==== Description
+Get a `DCAEService` object.
+
+
+==== Parameters
+
+[options="header", cols=".^2,.^3,.^9,.^4,.^2"]
+|===
+|Type|Name|Description|Schema|Default
+|*Path*|*serviceId* +
+_required_||string|
+|===
+
+
+==== Responses
+
+[options="header", cols=".^2,.^14,.^4"]
+|===
+|HTTP Code|Description|Schema
+|*200*|Single `DCAEService` object|<<_dcaeservice,DCAEService>>
+|*404*|DCAE service not found|<<_apiresponsemessage,ApiResponseMessage>>
+|*502*|Bad response from DCAE controller|<<_apiresponsemessage,ApiResponseMessage>>
+|*504*|Failed to connect with DCAE controller|<<_apiresponsemessage,ApiResponseMessage>>
+|===
+
+
+==== Consumes
+
+* `application/json`
+* `application/vnd.dcae.inventory.v1+json`
+
+
+==== Produces
+
+* `application/json`
+* `application/vnd.dcae.inventory.v1+json`
+
+
+[[_dcaeservicesserviceidput]]
+=== PUT /dcae-services/{serviceId}
+
+==== Description
+Put a new or update an existing `DCAEService` object.
+
+
+==== Parameters
+
+[options="header", cols=".^2,.^3,.^9,.^4,.^2"]
+|===
+|Type|Name|Description|Schema|Default
+|*Path*|*serviceId* +
+_required_||string|
+|*Body*|*body* +
+_required_||<<_dcaeservicerequest,DCAEServiceRequest>>|
+|===
+
+
+==== Responses
+
+[options="header", cols=".^2,.^14,.^4"]
+|===
+|HTTP Code|Description|Schema
+|*200*|Single `DCAEService` object|<<_dcaeservice,DCAEService>>
+|*422*|Bad request provided|<<_apiresponsemessage,ApiResponseMessage>>
+|===
+
+
+==== Consumes
+
+* `application/json`
+* `application/vnd.dcae.inventory.v1+json`
+
+
+==== Produces
+
+* `application/json`
+* `application/vnd.dcae.inventory.v1+json`
+
+
+[[_dcaeservicesserviceiddelete]]
+=== DELETE /dcae-services/{serviceId}
+
+==== Description
+Remove an existing `DCAEService` object.
+
+
+==== Parameters
+
+[options="header", cols=".^2,.^3,.^9,.^4,.^2"]
+|===
+|Type|Name|Description|Schema|Default
+|*Path*|*serviceId* +
+_required_||string|
+|===
+
+
+==== Responses
+
+[options="header", cols=".^2,.^14,.^4"]
+|===
+|HTTP Code|Description|Schema
+|*200*|DCAE service has been removed|No Content
+|*404*|Unknown DCAE service|<<_apiresponsemessage,ApiResponseMessage>>
+|===
+
+
+==== Consumes
+
+* `application/vnd.dcae.inventory.v1+json`
+* `application/json`
+
+
+==== Produces
+
+* `application/json`
+* `application/vnd.dcae.inventory.v1+json`
+
+
+
+
+[[_definitions]]
+== Definitions
+
+[[_apiresponsemessage]]
+=== ApiResponseMessage
+
+[options="header", cols=".^3,.^11,.^4"]
+|===
+|Name|Description|Schema
+|*code* +
+_optional_||integer(int32)
+|*message* +
+_optional_||string
+|*type* +
+_optional_||string
+|===
+
+
+[[_dcaeservice]]
+=== DCAEService
+
+[options="header", cols=".^3,.^11,.^4"]
+|===
+|Name|Description|Schema
+|*components* +
+_optional_||< <<_dcaeservicecomponent,DCAEServiceComponent>> > array
+|*created* +
+_optional_||string(date-time)
+|*deploymentRef* +
+_optional_|Reference to a Cloudify deployment|string
+|*modified* +
+_optional_||string(date-time)
+|*selfLink* +
+_optional_|Link.title is serviceId|<<_link,Link>>
+|*serviceId* +
+_optional_||string
+|*typeLink* +
+_optional_|Link.title is typeName|<<_link,Link>>
+|*vnfId* +
+_optional_||string
+|*vnfLink* +
+_optional_|Link.title is vnfId|<<_link,Link>>
+|*vnfLocation* +
+_optional_|Location information of the associated VNF|string
+|*vnfType* +
+_optional_||string
+|===
+
+
+[[_dcaeservicecomponent]]
+=== DCAEServiceComponent
+
+[options="header", cols=".^3,.^11,.^4"]
+|===
+|Name|Description|Schema
+|*componentId* +
+_required_|The id format is unique to the source|string
+|*componentLink* +
+_required_|Link to the underlying resource of this component|<<_link,Link>>
+|*componentSource* +
+_required_|Specifies the name of the underying source service that is responsible for this components|enum (DCAEController, DMaaPController)
+|*componentType* +
+_required_||string
+|*created* +
+_required_||string(date-time)
+|*location* +
+_optional_|Location information of the component|string
+|*modified* +
+_required_||string(date-time)
+|*shareable* +
+_required_|Used to determine if this component can be shared amongst different DCAE services|integer(int32)
+|*status* +
+_optional_||string
+|===
+
+
+[[_dcaeservicecomponentrequest]]
+=== DCAEServiceComponentRequest
+
+[options="header", cols=".^3,.^11,.^4"]
+|===
+|Name|Description|Schema
+|*componentId* +
+_required_|The id format is unique to the source|string
+|*componentSource* +
+_required_|Specifies the name of the underying source service that is responsible for this components|enum (DCAEController, DMaaPController)
+|*componentType* +
+_required_||string
+|*shareable* +
+_required_|Used to determine if this component can be shared amongst different DCAE services|integer(int32)
+|===
+
+
+[[_dcaeservicegroupbyresults]]
+=== DCAEServiceGroupByResults
+
+[options="header", cols=".^3,.^11,.^4"]
+|===
+|Name|Description|Schema
+|*propertyName* +
+_optional_|Property name of DCAE service that the group by operation was performed on|string
+|*propertyValues* +
+_optional_||< <<_dcaeservicegroupbyresultspropertyvalues,DCAEServiceGroupByResultsPropertyValues>> > array
+|===
+
+
+[[_dcaeservicegroupbyresultspropertyvalues]]
+=== DCAEServiceGroupByResultsPropertyValues
+
+[options="header", cols=".^3,.^11,.^4"]
+|===
+|Name|Description|Schema
+|*count* +
+_optional_||integer(int32)
+|*dcaeServiceQueryLink* +
+_optional_|Link.title is the DCAE service property value. Following this link will provide a list of DCAE services that all have this property value.|<<_link,Link>>
+|*propertyValue* +
+_optional_||string
+|===
+
+
+[[_dcaeservicerequest]]
+=== DCAEServiceRequest
+
+[options="header", cols=".^3,.^11,.^4"]
+|===
+|Name|Description|Schema
+|*components* +
+_required_|List of DCAE service components that this service is composed of|< <<_dcaeservicecomponentrequest,DCAEServiceComponentRequest>> > array
+|*deploymentRef* +
+_optional_|Reference to a Cloudify deployment|string
+|*typeName* +
+_required_|Name of the associated DCAE service type|string
+|*vnfId* +
+_required_|Id of the associated VNF that this service is monitoring|string
+|*vnfLocation* +
+_required_|Location identifier of the associated VNF that this service is monitoring|string
+|*vnfType* +
+_required_|The type of the associated VNF that this service is monitoring|string
+|===
+
+
+[[_dcaeservicetype]]
+=== DCAEServiceType
+
+[options="header", cols=".^3,.^11,.^4"]
+|===
+|Name|Description|Schema
+|*blueprintTemplate* +
+_required_|String representation of a Cloudify blueprint with unbound variables|string
+|*created* +
+_required_|Created timestamp for this DCAE service type in epoch time|string(date-time)
+|*owner* +
+_required_|Name of the owner of this DCAE service type|string
+|*selfLink* +
+_optional_|Link.title is typeName|<<_link,Link>>
+|*serviceIds* +
+_optional_|List of service ids that are associated with this DCAE service type|< string > array
+|*serviceLocations* +
+_optional_|List of service locations that are associated with this DCAE service type|< string > array
+|*typeName* +
+_required_|Unique name for this DCAE service type|string
+|*vnfTypes* +
+_required_|List of VNF types associated with this DCAE service type|< string > array
+|===
+
+
+[[_dcaeservicetyperequest]]
+=== DCAEServiceTypeRequest
+
+[options="header", cols=".^3,.^11,.^4"]
+|===
+|Name|Description|Schema
+|*blueprintTemplate* +
+_required_|String representation of a Cloudify blueprint with unbound variables|string
+|*owner* +
+_required_||string
+|*serviceIds* +
+_optional_|List of service ids that are used to associate with DCAE service type. DCAE service types with this propery as null or empty means them apply for every service id.|< string > array
+|*serviceLocations* +
+_optional_|List of service locations that are used to associate with DCAE service type. DCAE service types with this propery as null or empty means them apply for every service location.|< string > array
+|*vnfTypes* +
+_required_||< string > array
+|===
+
+
+[[_inlineresponse200]]
+=== InlineResponse200
+
+[options="header", cols=".^3,.^11,.^4"]
+|===
+|Name|Description|Schema
+|*items* +
+_optional_||< <<_dcaeservicetype,DCAEServiceType>> > array
+|*links* +
+_optional_||<<_inlineresponse200links,InlineResponse200Links>>
+|*totalCount* +
+_optional_||integer(int32)
+|===
+
+
+[[_inlineresponse2001]]
+=== InlineResponse2001
+
+[options="header", cols=".^3,.^11,.^4"]
+|===
+|Name|Description|Schema
+|*items* +
+_optional_||< <<_dcaeservice,DCAEService>> > array
+|*links* +
+_optional_||<<_inlineresponse200links,InlineResponse200Links>>
+|*totalCount* +
+_optional_||integer(int32)
+|===
+
+
+[[_inlineresponse200links]]
+=== InlineResponse200Links
+Pagination links
+
+
+[options="header", cols=".^3,.^11,.^4"]
+|===
+|Name|Description|Schema
+|*nextLink* +
+_optional_||<<_link,Link>>
+|*previousLink* +
+_optional_||<<_link,Link>>
+|===
+
+
+[[_link]]
+=== Link
+
+[options="header", cols=".^3,.^11,.^4"]
+|===
+|Name|Description|Schema
+|*params* +
+_optional_||< string, string > map
+|*rel* +
+_optional_||string
+|*rels* +
+_optional_||< string > array
+|*title* +
+_optional_||string
+|*type* +
+_optional_||string
+|*uri* +
+_optional_||string
+|*uriBuilder* +
+_optional_||<<_uribuilder,UriBuilder>>
+|===
+
+
+[[_uribuilder]]
+=== UriBuilder
+_Type_ : object
+
+
+
+
+
diff --git a/docs/DatabaseTables.md b/docs/DatabaseTables.md
new file mode 100644
index 0000000..f3df9e1
--- /dev/null
+++ b/docs/DatabaseTables.md
@@ -0,0 +1,97 @@
+# Database Tables
+
+As of version 0.12.0.
+
+## `dcae_service_types`
+
+### Relationships
+
+* 1:1 - `dcae_services`
+
+### Schema
+
+```
+ Table "public.dcae_service_types"
+ Column | Type | Modifiers
+--------------------+-----------------------------+-----------
+ type_name | character varying | not null
+ owner | character varying | not null
+ vnf_types | character varying[] | not null
+ service_ids | character varying[] |
+ service_locations | character varying[] |
+ blueprint_template | text | not null
+ created | timestamp without time zone | not null
+ is_active | boolean | not null
+Indexes:
+ "pk_type_created" PRIMARY KEY, btree (type_name, created)
+```
+
+## `dcae_services`
+
+### Relationships
+
+* 1:1 - `dcae_service_types`
+* N:N - `dcae_service_components` mapped through `dcae_services_components_maps`
+
+### Schema
+
+```
+ Table "public.dcae_services"
+ Column | Type | Modifiers
+----------------+-----------------------------+-----------
+ service_id | character varying | not null
+ type_name | character varying | not null
+ vnf_id | character varying | not null
+ vnf_type | character varying | not null
+ vnf_location | character varying | not null
+ deployment_ref | character varying |
+ created | timestamp without time zone | not null
+ modified | timestamp without time zone | not null
+ status | character varying | not null
+Indexes:
+ "dcae_services_pkey" PRIMARY KEY, btree (service_id)
+Referenced by:
+ TABLE "dcae_services_components_maps" CONSTRAINT "dcae_services_components_maps_service_id_fkey" FOREIGN KEY (service_id) REFERENCES dcae_services(service_id)
+```
+
+## `dcae_service_components`
+
+### Relationships
+
+* N:N - `dcae_services` mapped through `dcae_services_components_maps`
+
+### Schema
+
+```
+ Table "public.dcae_service_components"
+ Column | Type | Modifiers
+------------------+-----------------------------+-----------
+ component_id | character varying | not null
+ component_type | character varying | not null
+ component_source | character varying | not null
+ shareable | integer | default 0
+ created | timestamp without time zone | not null
+ modified | timestamp without time zone | not null
+Indexes:
+ "dcae_service_components_pkey" PRIMARY KEY, btree (component_id)
+Referenced by:
+ TABLE "dcae_services_components_maps" CONSTRAINT "dcae_services_components_maps_component_id_fkey" FOREIGN KEY (component_id) REFERENCES dcae_service_components(component_id)
+```
+
+## `dcae_services_components_maps`
+
+### Schema
+
+```
+ Table "public.dcae_services_components_maps"
+ Column | Type | Modifiers
+--------------+-----------------------------+-----------
+ service_id | character varying | not null
+ component_id | character varying | not null
+ created | timestamp without time zone | not null
+Indexes:
+ "dcae_services_components_maps_pkey" PRIMARY KEY, btree (service_id, component_id)
+Foreign-key constraints:
+ "dcae_services_components_maps_component_id_fkey" FOREIGN KEY (component_id) REFERENCES dcae_service_components(component_id)
+ "dcae_services_components_maps_service_id_fkey" FOREIGN KEY (service_id) REFERENCES dcae_services(service_id)
+```
diff --git a/docs/Deployment.md b/docs/Deployment.md
new file mode 100644
index 0000000..762af85
--- /dev/null
+++ b/docs/Deployment.md
@@ -0,0 +1,39 @@
+# Deployment Guide - DCAE Inventory
+*Last update: 2016-11-04*
+
+## Requirements
+
+### Network
+
+Requires ports 8080 to be open for inbound traffic on the machine that the service is hosted on.
+
+The DCAE Inventory relies on connectivity to a Postgres database, a DCAE Controller service instance, and a Databus Controller service instance all of which are configurable through the configuration file. The DCAE Inventory makes client-side calls to these external services.
+
+DCAE Inventory supports both HTTP and HTTPS through configuration setup.
+
+### Configuration
+
+The DCAE Inventory requires a configuration file and requires three groups of environment-dependent dynamic configuration information:
+
+1. Postgres database connection details
+ - `user`
+ - `password`
+ - `url`
+2. DCAE controller connection details
+ - `host`
+ - `port`
+ - `basePath`
+ - `user`
+ - `password`
+3. DMaaP controller connection details
+ - `host`
+
+In order for HTTPS to be enabled for DCAE Inventory, an HTTPS `applicationConnectors` need to be added to the configuration file. Details of this can be found [here](http://www.dropwizard.io/0.7.1/docs/manual/configuration.html#https). What is required at deployment time is a valide key store file (e.g. `PKCS12`) (i.e. set via `keyStorePath` parameter in the config) with the accompanying password (i.e. set via `keyStorePassword` parameter in the config).
+
+## Run Command
+
+The DCAE Inventory has been developed and tested using Java 8. Here is a sample run command:
+
+```
+java -jar dcae-inventory-1.0.0.jar server /opt/config.yml
+```
diff --git a/docs/Design.md b/docs/Design.md
new file mode 100644
index 0000000..4ce24d7
--- /dev/null
+++ b/docs/Design.md
@@ -0,0 +1,142 @@
+# DCAE Inventory: Design
+
+The DCAE Inventory is a web service that is responsible for managing DCAE service and DCAE service type information.
+
+## Terminology
+
+#### VNF
+
+"Virtual Network Function"
+
+Services that are customer facing and require monitoring.
+
+#### DCAE
+
+"Data Collections Analytics Events"
+
+A system responsible for monitoring and characterizing performance and behavior of running VNF services. DCAE emits events that are used by operations and to possibly change the policy of the managed VNF service.
+
+#### DCAE service component
+
+Applications and services that are built to be connected together to make up a DCAE service. These applications and services fall into the following categories:
+
+* Collectors
+* Analytics
+* Storage
+* Data buses
+
+#### DCAE service type
+
+Contains:
+
+* Composition details of a network of DCAE service components in the form of a Cloudify blueprint template
+* Metadata used to describe the DCAE service type
+* Relationship information - how it relates to associated services and VNF types
+
+Cloudify blueprint template refers to a Cloudify blueprint that has unbound variables that is to be resolved before use for orchestration.
+
+DCAE service type has a tight coupling with DCAE services where all DCAE services must be associated with a single existing DCAE service type. This is reinforced by the DCAE Inventory.
+
+#### DCAE service
+
+A fully composed, running instance of a DCAE service type. The DCAE service is intended to collect data and to perform a set number of pre-defined analysis on a running VNF. A single DCAE service is associated with a single running VNF.
+
+DCAE service is a resource with a representation that is provided by DCAE Inventory.
+
+## What is DCAE Inventory
+
+DCAE Inventory is a web service that provides the following:
+
+1. Real-time data on all DCAE services and their components
+2. Comprehensive details on available DCAE service types
+
+DCAE Inventory is a composite API that relies on other APIs to obtain resources on underlying components and uses these resources to compose a DCAE service resource. In addition, DCAE Inventory will store data that is unique to the DCAE service level including:
+
+* DCAE service metadata
+* DCAE service type description and composition details
+* Relationships between DCAE service and DCAE service types and their respective VNF and VNF types
+
+DCAE Inventory has a REST interface to service client requests. It has a well-defined query interface that would filter result sets based upon resource attributes.
+
+### API
+
+The full REST API reference can be found [here](API.adoc) (Careful! It's in AsciiDoc format). The DCAE Inventory service has been built to use [Swagger.io](http://swagger.io/) to document the API. The running service provides a YAML or JSON version of the specification of the DCAE Inventory API. Make the following curl call to fetch the YAML version:
+
+```
+curl <DCAE Inventory hostname>:8080/swagger.yaml
+```
+
+#### Using Swagger UI
+
+Use the following Swagger UI [chrome extension](https://chrome.google.com/webstore/detail/swagger-ui-console/ljlmonadebogfjabhkppkoohjkjclfai?hl=en) to view the specification in a nice view. Enter the URL you used in the above example `<DCAE Inventory hostname>:8080/swagger.yaml` into the input box of the Swagger UI page and hit *Explore*. You should see the complete API under *default*.
+
+## What DCAE Inventory is not
+
+* Not an inventory nor a catalog for VNFs
+* Not a catalog for DCAE components
+* Not the Data Bus controller's database
+* Not an orchestrator nor does it do DCAE service creation
+
+## Use cases
+
+### Closed-loop orchestration
+
+The DCAE platform makes DCAE system changes upon change triggers from A&AI.
+
+A&AI emits events upon the creation and the destruction of a VNF. These events contain information on what sort of change occurred and the VNF associated with the change. These events are handled by DCAE Orchestrator and triggers the process of orchestrating the deployment or the undeployment of a DCAE service associated with the VNF. DCAE Orchestrator makes queries to DCAE Inventory who then provides the information to ultimately answer the question "given this VNF, what DCAE service should be deployed or be undeployed?"
+
+During the orchestration process, DCAE Orchestrator pushes details of the deployed/undeployed DCAE services. These runtime details are stored and managed by the DCAE Inventory.
+
+### DCAE services dashboard
+
+The DCAE dashboard provides visibility into running DCAE services for operational purposes. It queries the DCAE Inventory for aggregate details on all the running DCAE services and for getting up-to-date status information on DCAE services and their components.
+
+## Service dependencies
+
+DCAE Inventory relies on several APIs to construct its composite resource in addition to the data that DCAE Inventory stores.
+
+The following is a communication diagram of how the data flows between the DCAE Inventory and its dependencies:
+
+![Communication diagram](images/dcae_inventory_communication.png)
+
+### DCAE Controller
+
+DCAE Inventory queries the DCAE controller to obtain an up-to-date projection of the state data per DCAE service component including their status i.e. DEPLOYED, RUNNING.
+
+### Data Bus Controller
+
+DCAE Inventory queries the Data Bus controller to obtain feed/topic details including the connection relationship between DCAE service components.
+
+### DCAE Orchestrator
+
+DCAE Inventory relies on the DCAE Orchestrator to push details of a DCAE service during the orchestration process particularly the DCAE service component runtime configuration information.
+
+### Camunda (Closed Loop)
+
+Camunda is a workflow design tool that creates and edits DCAE service types. In order to do DCAE service type updates, Camunda via a proxy service:
+
+1. Queries the DCAE Inventory for existing DCAE services for the given DCAE service type
+2. Undeploys all those DCAE services
+3. PUTs the new version of the DCAE service type
+
+The DCAE service types are associated with closed loop specific VNFs.
+
+## Technical implementation
+
+### Database
+
+DCAE Inventory uses the central Postgres as its database to store and to query its DCAE Inventory unique datasets. You can find the current table schemas for the DCAE Inventory tables [here](DatabaseTables.md).
+
+### Resiliency
+
+The central Postgres database has site-to-site replication to a redundant DCAE central location so the DCAE Inventory datasets are covered. The DCAE Inventory service is designed to be state-less and requires just the proper configuration information to be able to service requests. Configuration information includes:
+
+* Database connection details
+* DCAE controller connection details
+* Data bus controller connection details
+
+The chance of complete service outages is minimized by having redundancy. This requires load balancers for traffic management which does periodic health checks on all the instances to see if they are alive.
+
+### Security
+
+TBD
diff --git a/docs/Upgrade.md b/docs/Upgrade.md
new file mode 100644
index 0000000..11d2466
--- /dev/null
+++ b/docs/Upgrade.md
@@ -0,0 +1,13 @@
+# Upgrade Guide - DCAE Inventory
+*Last update: 2016-08-19*
+
+## 0.13.0 -> 1.0.0
+
+Requires a database table alteration if you wish to reuse an existing database table generated by DCAE inventory v0.13.0. The new schema is backwards compatible and safe for v0.13.0 records.
+
+Run the following SQL commands for the target Postgres DCAE inventory database:
+
+```
+alter table dcae_service_types add column service_ids varchar[];
+alter table dcae_service_types add column service_locations varchar[];
+```
diff --git a/docs/images/dcae_inventory_communication.png b/docs/images/dcae_inventory_communication.png
new file mode 100644
index 0000000..409f515
--- /dev/null
+++ b/docs/images/dcae_inventory_communication.png
Binary files differ
diff --git a/license/pom.xml b/license/pom.xml
new file mode 100644
index 0000000..5715a37
--- /dev/null
+++ b/license/pom.xml
@@ -0,0 +1,29 @@
+<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>
+ <groupId>org.openecomp.dcae.dcae-inventory</groupId>
+ <artifactId>license</artifactId>
+ <name>dcae-inventory</name>
+ <description>This Maven artifact is meant to provide licensing to all modules and submodules using the licensing
+ maven plugin.
+ </description>
+ <version>1.0.0</version>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>2.4</version>
+ <configuration>
+ <jarname>license</jarname>
+ <archive>
+ <manifest>
+ <addClasspath>true</addClasspath>
+ </manifest>
+ </archive>
+ </configuration>
+ </plugin>
+ </plugins>
+ <finalName>license</finalName>
+ </build>
+</project>
diff --git a/license/src/main/resources/licenses/att_license/header.txt b/license/src/main/resources/licenses/att_license/header.txt
new file mode 100644
index 0000000..dbff902
--- /dev/null
+++ b/license/src/main/resources/licenses/att_license/header.txt
@@ -0,0 +1,4 @@
+This code is licensed under the Apache License, Version 2.0; you may
+not use this code for any purpose except in compliance with the Apache
+License. You may obtain a copy of the License at
+ http://www.att.com/legal/openecomp.html
diff --git a/license/src/main/resources/licenses/att_license/license.txt b/license/src/main/resources/licenses/att_license/license.txt
new file mode 100644
index 0000000..5df403b
--- /dev/null
+++ b/license/src/main/resources/licenses/att_license/license.txt
@@ -0,0 +1,2 @@
+You may obtain a copy of the License at
+ http://www.att.com/legal/openecomp.html
diff --git a/license/src/main/resources/licenses/licenses.properties b/license/src/main/resources/licenses/licenses.properties
new file mode 100644
index 0000000..df0558d
--- /dev/null
+++ b/license/src/main/resources/licenses/licenses.properties
@@ -0,0 +1 @@
+att_license=ATT License
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..29aa564
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,377 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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>
+
+ <groupId>org.openecomp.dcae.inventory</groupId>
+ <artifactId>dcae-inventory</artifactId>
+ <version>1.0.0</version>
+
+ <properties>
+ <dropwizard.version>0.9.2</dropwizard.version>
+ <logback.version>1.1.3</logback.version>
+ <swagger-core.version>1.5.8</swagger-core.version>
+
+ <!-- For licensing -->
+ <ecomp.inceptionYear>2017</ecomp.inceptionYear>
+ <ecomp.organizationName>AT&amp;T Intellectual Property. All rights reserved.</ecomp.organizationName>
+ </properties>
+
+ <pluginRepositories>
+ <!-- Black Duck plugin dependencies -->
+ <pluginRepository>
+ <id>JCenter</id>
+ <name>JCenter Repository</name>
+ <url>http://jcenter.bintray.com</url>
+ </pluginRepository>
+
+ <pluginRepository>
+ <id>Restlet</id>
+ <name>Restlet Repository</name>
+ <url>http://maven.restlet.com</url>
+ </pluginRepository>
+ </pluginRepositories>
+
+
+ <dependencies>
+ <dependency>
+ <groupId>io.dropwizard</groupId>
+ <artifactId>dropwizard-core</artifactId>
+ <version>${dropwizard.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>io.dropwizard</groupId>
+ <artifactId>dropwizard-jdbi</artifactId>
+ <version>${dropwizard.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>io.dropwizard</groupId>
+ <artifactId>dropwizard-client</artifactId>
+ <version>${dropwizard.version}</version>
+ </dependency>
+ <dependency>
+ <!-- REVIEW: This is an unfortunate work around because 4.5.1 (which dropwizard-client:0.9.2 depends upon)
+ is malformed in the internal Maven central. -->
+ <groupId>org.apache.httpcomponents</groupId>
+ <artifactId>httpclient</artifactId>
+ <version>4.5.2</version>
+ </dependency>
+ <dependency>
+ <groupId>ch.qos.logback</groupId>
+ <artifactId>logback-classic</artifactId>
+ <version>${logback.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.postgresql</groupId>
+ <artifactId>postgresql</artifactId>
+ <version>9.4.1207</version>
+ </dependency>
+ <dependency>
+ <groupId>io.swagger</groupId>
+ <artifactId>swagger-jersey2-jaxrs</artifactId>
+ <version>${swagger-core.version}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>io.swagger</groupId>
+ <artifactId>swagger-models</artifactId>
+ <version>${swagger-core.version}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>io.swagger</groupId>
+ <artifactId>swagger-annotations</artifactId>
+ <version>${swagger-core.version}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>io.swagger</groupId>
+ <artifactId>swagger-core</artifactId>
+ <version>${swagger-core.version}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>io.swagger</groupId>
+ <artifactId>swagger-jaxrs</artifactId>
+ <version>${swagger-core.version}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.reflections</groupId>
+ <artifactId>reflections</artifactId>
+ <version>0.9.10</version>
+ </dependency>
+ <dependency>
+ <groupId>com.google.guava</groupId>
+ <artifactId>guava</artifactId>
+ <version>19.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.glassfish.jersey.media</groupId>
+ <artifactId>jersey-media-multipart</artifactId>
+ <version>2.22.1</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <!-- blackduck maven plugin -->
+ <plugin>
+ <groupId>com.blackducksoftware.integration</groupId>
+ <artifactId>hub-maven-plugin</artifactId>
+ <version>1.4.0</version>
+ <inherited>false</inherited>
+ <configuration>
+ <hubProjectName>${project.name}</hubProjectName>
+ <outputDirectory>${project.basedir}</outputDirectory>
+ </configuration>
+ <executions>
+ <execution>
+ <id>create-bdio-file</id>
+ <phase>package</phase>
+ <goals>
+ <goal>createHubOutput</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>3.5</version>
+ <configuration>
+ <source>1.8</source>
+ <target>1.8</target>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>build-helper-maven-plugin</artifactId>
+ <version>1.9.1</version>
+ <executions>
+ <execution>
+ <id>add-source</id>
+ <phase>generate-sources</phase>
+ <goals>
+ <goal>add-source</goal>
+ </goals>
+ <configuration>
+ <sources>
+ <source>src/gen/java</source>
+ </sources>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <!-- Package an Uber jar -->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-shade-plugin</artifactId>
+ <version>2.4.3</version>
+ <executions>
+ <!-- Run shade goal on package phase -->
+ <execution>
+ <phase>package</phase>
+ <goals>
+ <goal>shade</goal>
+ </goals>
+ <configuration>
+ <transformers>
+ <!-- NOTE: Need the following transformer else gets "Could not resolve type id 'https' into a subtype" error
+ Solution found from here:
+ http://stackoverflow.com/questions/27543060/why-does-dropwizard-configuration-is-not-working
+ Some more context here:
+ https://github.com/dropwizard/dropwizard/issues/455 -->
+ <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
+ <!-- add Main-Class to manifest file -->
+ <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
+ <mainClass>org.openecomp.dcae.inventory.InventoryApplication</mainClass>
+ </transformer>
+ </transformers>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <!-- This plugin may go away in favor of a custom Dockerfile provided by Carsten and co. -->
+ <plugin>
+ <groupId>com.spotify</groupId>
+ <artifactId>docker-maven-plugin</artifactId>
+ <version>0.4.5</version>
+ <configuration>
+ <!-- LOOK! Need to fill in registry here -->
+ <imageName>dcae-inventory</imageName>
+ <imageTags>
+ <imageTag>${project.version}</imageTag>
+ </imageTags>
+ <baseImage>openjdk:8-jre</baseImage>
+ <entryPoint>["java", "-jar", "/opt/${project.build.finalName}.jar", "server", "/opt/config.yml"]</entryPoint>
+ <!-- copy the service's jar file from target into the root directory of the image -->
+ <resources>
+ <resource>
+ <targetPath>/opt</targetPath>
+ <directory>${project.build.directory}</directory>
+ <include>${project.build.finalName}.jar</include>
+ </resource>
+ </resources>
+ </configuration>
+ </plugin>
+
+ <!-- license plugin -->
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>license-maven-plugin</artifactId>
+ <version>1.10</version>
+ <configuration>
+ <addJavaLicenseAfterPackage>false</addJavaLicenseAfterPackage>
+ <processStartTag>============LICENSE_START=======================================================</processStartTag>
+ <processEndTag>============LICENSE_END=========================================================</processEndTag>
+ <sectionDelimiter>================================================================================</sectionDelimiter>
+ <licenseName>apache_v2</licenseName>
+ <inceptionYear>2017</inceptionYear>
+ <organizationName>AT&amp;T Intellectual Property. All rights reserved.</organizationName>
+ <projectName>PROJECT</projectName>
+ <canUpdateCopyright>true</canUpdateCopyright>
+ <canUpdateDescription>true</canUpdateDescription>
+ <canUpdateLicense>true</canUpdateLicense>
+ <emptyLineAfterHeader>true</emptyLineAfterHeader>
+ </configuration>
+ <executions>
+ <execution>
+ <id>first</id>
+ <goals>
+ <goal>update-file-header</goal>
+ </goals>
+ <phase>process-sources</phase>
+ </execution>
+ </executions>
+<!--
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>license-maven-plugin</artifactId>
+ <version>1.10</version>
+ <configuration>
+ <licenseName>att_license</licenseName>
+ <licenseResolver>classpath://licenses</licenseResolver>
+ <inceptionYear>2016</inceptionYear>
+ <organizationName>AT&amp;T</organizationName>
+ <projectName>dcae-inventory</projectName>
+-->
+ <!-- NOTE: Once you have established the tags and delimiter, they cannot be changed -->
+<!-- <processStartTag>============LICENSE_START===========</processStartTag>
+ <processEndTag>============LICENSE_END===========</processEndTag>
+ <sectionDelimiter>==================================</sectionDelimiter>
+ <canUpdateCopyright>true</canUpdateCopyright>
+ <canUpdateDescription>true</canUpdateDescription>
+ <canUpdateLicense>true</canUpdateLicense>
+ <emptyLineAfterHeader>true</emptyLineAfterHeader>
+
+ <excludes>
+--> <!--
+ Files which are to be excluded. The pom.xml is excluded because
+ the start/end tags and the delimiters are in the body of the file.
+ This confuses the algorithm. So, this file must be manually updated
+ with a license header.
+ -->
+<!-- <exclude>*.xml</exclude>
+ <exclude>target/*</exclude>
+ <exclude>*.png</exclude>
+ <exclude>*.md</exclude>
+ <exclude>*.yml</exclude>
+ <exclude>*.yaml</exclude>
+ </excludes>
+ </configuration>
+ <dependencies>
+ <dependency>
+ <groupId>org.openecomp.dcae.dcae-inventory</groupId>
+ <artifactId>license</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ </dependencies>
+ <executions>
+ <execution>
+ <id>first</id>
+ <goals>
+ <goal>update-file-header</goal>
+ </goals>
+ <phase>process-sources</phase>
+ </execution>
+ </executions>
+-->
+ </plugin>
+
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-site-plugin</artifactId>
+ <version>3.6</version>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-webdav-jackrabbit</artifactId>
+ <version>2.10</version>
+ </dependency>
+ </dependencies>
+ </plugin>
+
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>sonar-maven-plugin</artifactId>
+ <version>3.2</version>
+ </plugin>
+ </plugins>
+ </build>
+
+ <!-- Below was added from the instructions from Open eCOMP wiki page on p load javadoc to nexus -->
+
+ <reporting>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <version>2.10.4</version>
+ <configuration>
+ <failOnError>false</failOnError>
+ <doclet>org.umlgraph.doclet.UmlGraphDoc</doclet>
+ <docletArtifact>
+ <groupId>org.umlgraph</groupId>
+ <artifactId>umlgraph</artifactId>
+ <version>5.6</version>
+ </docletArtifact>
+ <additionalparam>-views</additionalparam>
+ <useStandardDocletOptions>true</useStandardDocletOptions>
+ </configuration>
+ </plugin>
+ </plugins>
+ </reporting>
+
+ <distributionManagement>
+ <site>
+ <id>dcae-inventory-javadoc</id>
+ <url>dav:https://ecomp-nexus:8443/repository/dcae-javadoc/dcae-inventory/${project.version}</url>
+ </site>
+ </distributionManagement>
+</project>
diff --git a/src/gen/java/io/swagger/api/ApiException.java b/src/gen/java/io/swagger/api/ApiException.java
new file mode 100644
index 0000000..a2be1d8
--- /dev/null
+++ b/src/gen/java/io/swagger/api/ApiException.java
@@ -0,0 +1,33 @@
+package io.swagger.api;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-04-18T20:16:22.119Z")
+public class ApiException extends Exception{
+ private int code;
+ public ApiException (int code, String msg) {
+ super(msg);
+ this.code = code;
+ }
+}
diff --git a/src/gen/java/io/swagger/api/ApiOriginFilter.java b/src/gen/java/io/swagger/api/ApiOriginFilter.java
new file mode 100644
index 0000000..b449d84
--- /dev/null
+++ b/src/gen/java/io/swagger/api/ApiOriginFilter.java
@@ -0,0 +1,45 @@
+package io.swagger.api;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import java.io.IOException;
+
+import javax.servlet.*;
+import javax.servlet.http.HttpServletResponse;
+
+@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-04-18T20:16:22.119Z")
+public class ApiOriginFilter implements javax.servlet.Filter {
+ public void doFilter(ServletRequest request, ServletResponse response,
+ FilterChain chain) throws IOException, ServletException {
+ HttpServletResponse res = (HttpServletResponse) response;
+ res.addHeader("Access-Control-Allow-Origin", "*");
+ res.addHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");
+ res.addHeader("Access-Control-Allow-Headers", "Content-Type");
+ chain.doFilter(request, response);
+ }
+
+ public void destroy() {}
+
+ public void init(FilterConfig filterConfig) throws ServletException {}
+}
diff --git a/src/gen/java/io/swagger/api/ApiResponseMessage.java b/src/gen/java/io/swagger/api/ApiResponseMessage.java
new file mode 100644
index 0000000..018a208
--- /dev/null
+++ b/src/gen/java/io/swagger/api/ApiResponseMessage.java
@@ -0,0 +1,92 @@
+package io.swagger.api;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import javax.xml.bind.annotation.XmlTransient;
+
+@javax.xml.bind.annotation.XmlRootElement
+@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-04-18T20:16:22.119Z")
+public class ApiResponseMessage {
+ public static final int ERROR = 1;
+ public static final int WARNING = 2;
+ public static final int INFO = 3;
+ public static final int OK = 4;
+ public static final int TOO_BUSY = 5;
+
+ int code;
+ String type;
+ String message;
+
+ public ApiResponseMessage(){}
+
+ public ApiResponseMessage(int code, String message){
+ this.code = code;
+ switch(code){
+ case ERROR:
+ setType("error");
+ break;
+ case WARNING:
+ setType("warning");
+ break;
+ case INFO:
+ setType("info");
+ break;
+ case OK:
+ setType("ok");
+ break;
+ case TOO_BUSY:
+ setType("too busy");
+ break;
+ default:
+ setType("unknown");
+ break;
+ }
+ this.message = message;
+ }
+
+ @XmlTransient
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+}
diff --git a/src/gen/java/io/swagger/api/DcaeServiceTypesApi.java b/src/gen/java/io/swagger/api/DcaeServiceTypesApi.java
new file mode 100644
index 0000000..f8604b8
--- /dev/null
+++ b/src/gen/java/io/swagger/api/DcaeServiceTypesApi.java
@@ -0,0 +1,124 @@
+package io.swagger.api;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import io.swagger.api.factories.DcaeServiceTypesApiServiceFactory;
+
+import io.swagger.annotations.ApiParam;
+
+import io.swagger.model.InlineResponse200;
+import io.swagger.model.DCAEServiceType;
+import io.swagger.model.DCAEServiceTypeRequest;
+
+import javax.validation.Valid;
+import javax.ws.rs.core.*;
+import javax.ws.rs.*;
+
+@Path("/dcae-service-types")
+@Consumes({"application/json", "application/vnd.dcae.inventory.v1+json"})
+@Produces({"application/json", "application/vnd.dcae.inventory.v1+json"})
+@io.swagger.annotations.Api(description = "the dcae-service-types API")
+@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-04-18T20:16:22.119Z")
+public class DcaeServiceTypesApi {
+ private final DcaeServiceTypesApiService delegate = DcaeServiceTypesApiServiceFactory.getDcaeServiceTypesApi();
+
+ @Context
+ UriInfo uriInfo;
+
+ public static Link buildLinkForGet(UriInfo uriInfo, String rel, String vnfType, Integer offset) {
+ UriBuilder ub = uriInfo.getBaseUriBuilder().path(DcaeServiceTypesApi.class)
+ .path(DcaeServiceTypesApi.class, "dcaeServiceTypesGet");
+
+ if (vnfType != null) {
+ ub.queryParam("vnfType", vnfType);
+ }
+ if (offset != null) {
+ ub.queryParam("offset", offset);
+ }
+
+ Link.Builder lb = Link.fromUri(ub.build());
+ lb.rel(rel);
+ return lb.build();
+ }
+
+ @GET
+ @Path("/")
+ @Consumes({"application/json", "application/vnd.dcae.inventory.v1+json"})
+ @Produces({"application/json", "application/vnd.dcae.inventory.v1+json"})
+ @io.swagger.annotations.ApiOperation(value = "", notes = "Get a list of `DCAEServiceType` objects.", response = InlineResponse200.class, tags = {})
+ @io.swagger.annotations.ApiResponses(value = {
+ @io.swagger.annotations.ApiResponse(code = 200, message = "List of `DCAEServiceType` objects", response = InlineResponse200.class)})
+ public Response dcaeServiceTypesGet(
+ @ApiParam(value = "") @QueryParam("vnfType") String vnfType,
+ @ApiParam(value = "") @QueryParam("serviceId") String serviceId,
+ @ApiParam(value = "") @QueryParam("serviceLocation") String serviceLocation,
+ @ApiParam(value = "Query resultset offset used for pagination (zero-based)") @QueryParam("offset") Integer offset,
+ @Context SecurityContext securityContext)
+ throws NotFoundException {
+ return delegate.dcaeServiceTypesGet(vnfType, serviceId, serviceLocation, offset, uriInfo, securityContext);
+ }
+
+ public static Link buildLinkForGet(UriInfo uriInfo, String rel, String typeName) {
+ // This same method can be used for PUTs as well
+
+ UriBuilder ub = uriInfo.getBaseUriBuilder().path(DcaeServiceTypesApi.class)
+ .path(DcaeServiceTypesApi.class, "dcaeServiceTypesTypeNameGet");
+ Link.Builder lb = Link.fromUri(ub.build(typeName));
+ lb.rel(rel);
+ return lb.build();
+ }
+
+ @GET
+ @Path("/{typeName}")
+ @Consumes({"application/json", "application/vnd.dcae.inventory.v1+json"})
+ @Produces({"application/json", "application/vnd.dcae.inventory.v1+json"})
+ @io.swagger.annotations.ApiOperation(value = "", notes = "Get a `DCAEServiceType` object.", response = DCAEServiceType.class, tags = {})
+ @io.swagger.annotations.ApiResponses(value = {
+ @io.swagger.annotations.ApiResponse(code = 200, message = "Single `DCAEServiceType` object", response = DCAEServiceType.class),
+ @io.swagger.annotations.ApiResponse(code = 404, message = "Resource not found", response = DCAEServiceType.class)})
+ public Response dcaeServiceTypesTypeNameGet(
+ @ApiParam(value = "", required = true) @PathParam("typeName") String typeName,
+ @Context SecurityContext securityContext)
+ throws NotFoundException {
+ return delegate.dcaeServiceTypesTypeNameGet(typeName, uriInfo, securityContext);
+ }
+
+ @PUT
+ @Path("/{typeName}")
+ @Consumes({"application/json", "application/vnd.dcae.inventory.v1+json"})
+ @Produces({"application/json", "application/vnd.dcae.inventory.v1+json"})
+ @io.swagger.annotations.ApiOperation(value = "", notes = "Inserts a new `DCAEServiceType` or updates an existing instance. Updates are only allowed iff there are no running DCAE services of the requested type,",
+ response = DCAEServiceType.class, tags = {})
+ @io.swagger.annotations.ApiResponses(value = {
+ @io.swagger.annotations.ApiResponse(code = 200, message = "Single `DCAEServiceType` object.", response = DCAEServiceType.class),
+ @io.swagger.annotations.ApiResponse(code = 400, message = "Bad request provided.", response = ApiResponseMessage.class),
+ @io.swagger.annotations.ApiResponse(code = 409, message = "Failed to update because there are still DCAE services of the requested type running.", response = ApiResponseMessage.class)})
+ public Response dcaeServiceTypesTypeNamePut(
+ @ApiParam(value = "", required = true) @PathParam("typeName") String typeName,
+ @ApiParam(value = "", required = true) @Valid DCAEServiceTypeRequest request,
+ @Context SecurityContext securityContext)
+ throws NotFoundException {
+ return delegate.dcaeServiceTypesTypeNamePut(typeName, request, uriInfo, securityContext);
+ }
+}
diff --git a/src/gen/java/io/swagger/api/DcaeServiceTypesApiService.java b/src/gen/java/io/swagger/api/DcaeServiceTypesApiService.java
new file mode 100644
index 0000000..60fee9c
--- /dev/null
+++ b/src/gen/java/io/swagger/api/DcaeServiceTypesApiService.java
@@ -0,0 +1,42 @@
+package io.swagger.api;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import io.swagger.model.DCAEServiceTypeRequest;
+
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.SecurityContext;
+import javax.ws.rs.core.UriInfo;
+
+@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-04-18T20:16:22.119Z")
+public abstract class DcaeServiceTypesApiService {
+ public abstract Response dcaeServiceTypesGet(String vnfType, String serviceId, String serviceLocation, Integer offset,
+ UriInfo uriInfo, SecurityContext securityContext)
+ throws NotFoundException;
+ public abstract Response dcaeServiceTypesTypeNameGet(String typeName, UriInfo uriInfo, SecurityContext securityContext)
+ throws NotFoundException;
+ public abstract Response dcaeServiceTypesTypeNamePut(String typeName, DCAEServiceTypeRequest request, UriInfo uriInfo,
+ SecurityContext securityContext)
+ throws NotFoundException;
+}
diff --git a/src/gen/java/io/swagger/api/DcaeServicesApi.java b/src/gen/java/io/swagger/api/DcaeServicesApi.java
new file mode 100644
index 0000000..81715d4
--- /dev/null
+++ b/src/gen/java/io/swagger/api/DcaeServicesApi.java
@@ -0,0 +1,180 @@
+package io.swagger.api;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import io.dropwizard.jersey.params.DateTimeParam;
+import io.swagger.api.factories.DcaeServicesApiServiceFactory;
+
+import io.swagger.annotations.ApiParam;
+
+import io.swagger.model.InlineResponse2001;
+import io.swagger.model.DCAEService;
+import io.swagger.model.DCAEServiceRequest;
+import org.joda.time.DateTime;
+
+import javax.validation.Valid;
+import javax.ws.rs.core.*;
+import javax.ws.rs.*;
+
+@Path("/dcae-services")
+@Consumes({"application/json", "application/vnd.dcae.inventory.v1+json"})
+@Produces({"application/json", "application/vnd.dcae.inventory.v1+json"})
+@io.swagger.annotations.Api(description = "the dcae-services API")
+@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-04-18T20:16:22.119Z")
+public class DcaeServicesApi {
+ private final DcaeServicesApiService delegate = DcaeServicesApiServiceFactory.getDcaeServicesApi();
+
+ @Context
+ UriInfo uriInfo;
+
+ public static Link buildLinkForGetByTypeName(UriInfo uriInfo, String rel, String typeName) {
+ return buildLinkForGet(uriInfo, rel, typeName, null, null, null, null, null, null, null);
+ }
+
+ public static Link buildLinkForGetByVnfType(UriInfo uriInfo, String rel, String vnfType) {
+ return buildLinkForGet(uriInfo, rel, null, null, vnfType, null, null, null, null, null);
+ }
+
+ public static Link buildLinkForGetByVnfLocation(UriInfo uriInfo, String rel, String vnfLocation) {
+ return buildLinkForGet(uriInfo, rel, null, null, null, vnfLocation, null, null, null, null);
+ }
+
+ public static Link buildLinkForGet(UriInfo uriInfo, String rel, String typeName, String vnfId, String vnfType,
+ String vnfLocation, String componentType, Boolean shareable, DateTime created,
+ Integer offset) {
+ UriBuilder ub = uriInfo.getBaseUriBuilder().path(DcaeServicesApi.class)
+ .path(DcaeServicesApi.class, "dcaeServicesGet");
+
+ if (typeName != null) {
+ ub.queryParam("typeName", typeName);
+ }
+ if (vnfId != null) {
+ ub.queryParam("vnfId", vnfId);
+ }
+ if (vnfType != null) {
+ ub.queryParam("vnfType", vnfType);
+ }
+ if (vnfLocation != null) {
+ ub.queryParam("vnfLocation", vnfLocation);
+ }
+ if (componentType != null) {
+ ub.queryParam("componentType", componentType);
+ }
+ if (shareable != null) {
+ ub.queryParam("shareable", shareable.toString());
+ }
+ if (created != null) {
+ ub.queryParam("created", created.toString());
+ }
+ if (offset != null) {
+ ub.queryParam("offset", offset);
+ }
+
+ Link.Builder lb = Link.fromUri(ub.build());
+ lb.rel(rel);
+ return lb.build();
+ }
+
+ @GET
+ @Path("/")
+ @Consumes({"application/json", "application/vnd.dcae.inventory.v1+json"})
+ @Produces({"application/json", "application/vnd.dcae.inventory.v1+json"})
+ @io.swagger.annotations.ApiOperation(value = "", notes = "Get a list of `DCAEService` objects.", response = InlineResponse2001.class, tags = {})
+ @io.swagger.annotations.ApiResponses(value = {
+ @io.swagger.annotations.ApiResponse(code = 200, message = "List of `DCAEService` objects", response = InlineResponse2001.class),
+ @io.swagger.annotations.ApiResponse(code = 502, message = "Bad response from DCAE controller", response = ApiResponseMessage.class),
+ @io.swagger.annotations.ApiResponse(code = 504, message = "Failed to connect with DCAE controller", response = ApiResponseMessage.class)})
+ public Response dcaeServicesGet(
+ @ApiParam(value = "DCAE service type name") @QueryParam("typeName") String typeName,
+ @ApiParam(value = "") @QueryParam("vnfId") String vnfId,
+ @ApiParam(value = "") @QueryParam("vnfType") String vnfType,
+ @ApiParam(value = "") @QueryParam("vnfLocation") String vnfLocation,
+ @ApiParam(value = "Use to filter by a specific DCAE service component type") @QueryParam("componentType") String componentType,
+ @ApiParam(value = "Use to filter by DCAE services that have shareable components or not") @QueryParam("shareable") Boolean shareable,
+ @ApiParam(value = "Use to filter by created time") @QueryParam("created") DateTimeParam created,
+ @ApiParam(value = "Query resultset offset used for pagination (zero-based)") @QueryParam("offset") Integer offset,
+ @Context SecurityContext securityContext)
+ throws NotFoundException {
+ return delegate.dcaeServicesGet(typeName, vnfId, vnfType, vnfLocation, componentType, shareable,
+ (created == null ? null : created.get()), offset, uriInfo, securityContext);
+ }
+
+ public static Link buildLinkForGet(UriInfo uriInfo, String rel, String serviceId) {
+ // This same method can be used for PUTs as well
+
+ UriBuilder ub = uriInfo.getBaseUriBuilder().path(DcaeServicesApi.class)
+ .path(DcaeServicesApi.class, "dcaeServicesServiceIdGet");
+ Link.Builder lb = Link.fromUri(ub.build(serviceId));
+ lb.rel(rel);
+ return lb.build();
+ }
+
+ @GET
+ @Path("/{serviceId}")
+ @Consumes({"application/json", "application/vnd.dcae.inventory.v1+json"})
+ @Produces({"application/json", "application/vnd.dcae.inventory.v1+json"})
+ @io.swagger.annotations.ApiOperation(value = "", notes = "Get a `DCAEService` object.", response = DCAEService.class, tags = {})
+ @io.swagger.annotations.ApiResponses(value = {
+ @io.swagger.annotations.ApiResponse(code = 200, message = "Single `DCAEService` object", response = DCAEService.class),
+ @io.swagger.annotations.ApiResponse(code = 404, message = "DCAE service not found", response = ApiResponseMessage.class),
+ @io.swagger.annotations.ApiResponse(code = 502, message = "Bad response from DCAE controller", response = ApiResponseMessage.class),
+ @io.swagger.annotations.ApiResponse(code = 504, message = "Failed to connect with DCAE controller", response = ApiResponseMessage.class)})
+ public Response dcaeServicesServiceIdGet(
+ @ApiParam(value = "", required = true) @PathParam("serviceId") String serviceId,
+ @Context SecurityContext securityContext)
+ throws NotFoundException {
+ return delegate.dcaeServicesServiceIdGet(serviceId, uriInfo, securityContext);
+ }
+
+ @PUT
+ @Path("/{serviceId}")
+ @Consumes({"application/json", "application/vnd.dcae.inventory.v1+json"})
+ @Produces({"application/json", "application/vnd.dcae.inventory.v1+json"})
+ @io.swagger.annotations.ApiOperation(value = "", notes = "Put a new or update an existing `DCAEService` object.", response = DCAEService.class, tags = {})
+ @io.swagger.annotations.ApiResponses(value = {
+ @io.swagger.annotations.ApiResponse(code = 200, message = "Single `DCAEService` object", response = DCAEService.class),
+ @io.swagger.annotations.ApiResponse(code = 422, message = "Bad request provided", response = ApiResponseMessage.class)})
+ public Response dcaeServicesServiceIdPut(
+ @ApiParam(value = "", required = true) @PathParam("serviceId") String serviceId,
+ @ApiParam(value = "", required = true) @Valid DCAEServiceRequest request,
+ @Context SecurityContext securityContext)
+ throws NotFoundException {
+ return delegate.dcaeServicesServiceIdPut(serviceId, request, uriInfo, securityContext);
+ }
+
+ @DELETE
+ @Path("/{serviceId}")
+ @Produces({"application/json", "application/vnd.dcae.inventory.v1+json"})
+ @io.swagger.annotations.ApiOperation(value = "", notes = "Remove an existing `DCAEService` object.", tags = {})
+ @io.swagger.annotations.ApiResponses(value = {
+ @io.swagger.annotations.ApiResponse(code = 200, message = "DCAE service has been removed"),
+ @io.swagger.annotations.ApiResponse(code = 404, message = "Unknown DCAE service", response = ApiResponseMessage.class)})
+ public Response dcaeServicesServiceIdDelete(
+ @ApiParam(value = "", required = true) @PathParam("serviceId") String serviceId,
+ @Context SecurityContext securityContext)
+ throws NotFoundException
+ {
+ return delegate.dcaeServicesServiceIdDelete(serviceId, securityContext);
+ }
+}
diff --git a/src/gen/java/io/swagger/api/DcaeServicesApiService.java b/src/gen/java/io/swagger/api/DcaeServicesApiService.java
new file mode 100644
index 0000000..4b4aa38
--- /dev/null
+++ b/src/gen/java/io/swagger/api/DcaeServicesApiService.java
@@ -0,0 +1,46 @@
+package io.swagger.api;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import io.swagger.model.DCAEServiceRequest;
+import org.joda.time.DateTime;
+
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.SecurityContext;
+import javax.ws.rs.core.UriInfo;
+
+@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-04-18T20:16:22.119Z")
+public abstract class DcaeServicesApiService {
+ public abstract Response dcaeServicesGet(String typeName, String vnfId, String vnfType, String vnfLocation,
+ String componentType, Boolean shareable, DateTime created, Integer offset,
+ UriInfo uriInfo, SecurityContext securityContext)
+ throws NotFoundException;
+ public abstract Response dcaeServicesServiceIdGet(String serviceId, UriInfo uriInfo, SecurityContext securityContext)
+ throws NotFoundException;
+ public abstract Response dcaeServicesServiceIdPut(String serviceId, DCAEServiceRequest request, UriInfo uriInfo,
+ SecurityContext securityContext)
+ throws NotFoundException;
+ public abstract Response dcaeServicesServiceIdDelete(String serviceId, SecurityContext securityContext)
+ throws NotFoundException;
+}
diff --git a/src/gen/java/io/swagger/api/DcaeServicesGroupbyApi.java b/src/gen/java/io/swagger/api/DcaeServicesGroupbyApi.java
new file mode 100644
index 0000000..db0ab69
--- /dev/null
+++ b/src/gen/java/io/swagger/api/DcaeServicesGroupbyApi.java
@@ -0,0 +1,62 @@
+package io.swagger.api;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import io.swagger.api.factories.DcaeServicesGroupbyApiServiceFactory;
+
+import io.swagger.annotations.ApiParam;
+
+import io.swagger.model.DCAEServiceGroupByResults;
+
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.SecurityContext;
+import javax.ws.rs.*;
+import javax.ws.rs.core.UriInfo;
+
+@Path("/dcae-services-groupby")
+@Consumes({"application/json", "application/vnd.dcae.inventory.v1+json"})
+@Produces({"application/json", "application/vnd.dcae.inventory.v1+json"})
+@io.swagger.annotations.Api(description = "the dcae-services-groupby API")
+@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-04-18T20:16:22.119Z")
+public class DcaeServicesGroupbyApi {
+ private final DcaeServicesGroupbyApiService delegate = DcaeServicesGroupbyApiServiceFactory.getDcaeServicesGroupbyApi();
+
+ @Context
+ UriInfo uriInfo;
+
+ @GET
+ @Path("/{propertyName}")
+ @Consumes({"application/json", "application/vnd.dcae.inventory.v1+json"})
+ @Produces({"application/json", "application/vnd.dcae.inventory.v1+json"})
+ @io.swagger.annotations.ApiOperation(value = "", notes = "Get a list of unique values for the given `propertyName`", response = DCAEServiceGroupByResults.class, tags = {})
+ @io.swagger.annotations.ApiResponses(value = {
+ @io.swagger.annotations.ApiResponse(code = 200, message = "List of unique property values", response = DCAEServiceGroupByResults.class)})
+ public Response dcaeServicesGroupbyPropertyNameGet(
+ @ApiParam(value = "Property to find unique values. Restricted to `type`, `vnfType`, `vnfLocation`", required = true) @PathParam("propertyName") String propertyName,
+ @Context SecurityContext securityContext)
+ throws NotFoundException {
+ return delegate.dcaeServicesGroupbyPropertyNameGet(propertyName, uriInfo, securityContext);
+ }
+}
diff --git a/src/gen/java/io/swagger/api/DcaeServicesGroupbyApiService.java b/src/gen/java/io/swagger/api/DcaeServicesGroupbyApiService.java
new file mode 100644
index 0000000..d842c46
--- /dev/null
+++ b/src/gen/java/io/swagger/api/DcaeServicesGroupbyApiService.java
@@ -0,0 +1,34 @@
+package io.swagger.api;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.SecurityContext;
+import javax.ws.rs.core.UriInfo;
+
+@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-04-18T20:16:22.119Z")
+public abstract class DcaeServicesGroupbyApiService {
+ public abstract Response dcaeServicesGroupbyPropertyNameGet(String propertyName, UriInfo uriInfo, SecurityContext securityContext)
+ throws NotFoundException;
+}
diff --git a/src/gen/java/io/swagger/api/JacksonJsonProvider.java b/src/gen/java/io/swagger/api/JacksonJsonProvider.java
new file mode 100644
index 0000000..2e1affb
--- /dev/null
+++ b/src/gen/java/io/swagger/api/JacksonJsonProvider.java
@@ -0,0 +1,42 @@
+package io.swagger.api;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider;
+import io.swagger.util.Json;
+
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.ext.Provider;
+
+@Provider
+@Produces({MediaType.APPLICATION_JSON})
+public class JacksonJsonProvider extends JacksonJaxbJsonProvider {
+ private static ObjectMapper commonMapper = Json.mapper();
+
+ public JacksonJsonProvider() {
+ super.setMapper(commonMapper);
+ }
+}
diff --git a/src/gen/java/io/swagger/api/NotFoundException.java b/src/gen/java/io/swagger/api/NotFoundException.java
new file mode 100644
index 0000000..f3bde83
--- /dev/null
+++ b/src/gen/java/io/swagger/api/NotFoundException.java
@@ -0,0 +1,38 @@
+package io.swagger.api;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-04-18T20:16:22.119Z")
+public class NotFoundException extends ApiException {
+ private int code;
+
+ public int getCode() {
+ return this.code;
+ }
+
+ public NotFoundException (int code, String msg) {
+ super(code, msg);
+ this.code = code;
+ }
+}
diff --git a/src/gen/java/io/swagger/api/StringUtil.java b/src/gen/java/io/swagger/api/StringUtil.java
new file mode 100644
index 0000000..04cb0e4
--- /dev/null
+++ b/src/gen/java/io/swagger/api/StringUtil.java
@@ -0,0 +1,65 @@
+package io.swagger.api;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-04-18T20:16:22.119Z")
+public class StringUtil {
+ /**
+ * Check if the given array contains the given value (with case-insensitive comparison).
+ *
+ * @param array The array
+ * @param value The value to search
+ * @return true if the array contains the value
+ */
+ public static boolean containsIgnoreCase(String[] array, String value) {
+ for (String str : array) {
+ if (value == null && str == null) return true;
+ if (value != null && value.equalsIgnoreCase(str)) return true;
+ }
+ return false;
+ }
+
+ /**
+ * Join an array of strings with the given separator.
+ * <p>
+ * Note: This might be replaced by utility method from commons-lang or guava someday
+ * if one of those libraries is added as dependency.
+ * </p>
+ *
+ * @param array The array of strings
+ * @param separator The separator
+ * @return the resulting string
+ */
+ public static String join(String[] array, String separator) {
+ int len = array.length;
+ if (len == 0) return "";
+
+ StringBuilder out = new StringBuilder();
+ out.append(array[0]);
+ for (int i = 1; i < len; i++) {
+ out.append(separator).append(array[i]);
+ }
+ return out.toString();
+ }
+}
diff --git a/src/gen/java/io/swagger/model/DCAEService.java b/src/gen/java/io/swagger/model/DCAEService.java
new file mode 100644
index 0000000..b70919f
--- /dev/null
+++ b/src/gen/java/io/swagger/model/DCAEService.java
@@ -0,0 +1,306 @@
+package io.swagger.model;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.model.DCAEServiceComponent;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import javax.ws.rs.core.Link;
+
+
+
+
+
+@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-04-18T20:16:22.119Z")
+public class DCAEService {
+
+ private String serviceId = null;
+ private Link selfLink = null;
+ private Date created = null;
+ private Date modified = null;
+ private Link typeLink = null;
+ private String vnfId = null;
+ private Link vnfLink = null;
+ private String vnfType = null;
+ private String vnfLocation = null;
+ private String deploymentRef = null;
+ private List<DCAEServiceComponent> components = new ArrayList<DCAEServiceComponent>();
+
+ /**
+ **/
+ public DCAEService serviceId(String serviceId) {
+ this.serviceId = serviceId;
+ return this;
+ }
+
+
+ @ApiModelProperty(value = "")
+ @JsonProperty("serviceId")
+ public String getServiceId() {
+ return serviceId;
+ }
+ public void setServiceId(String serviceId) {
+ this.serviceId = serviceId;
+ }
+
+ /**
+ * Link.title is serviceId
+ **/
+ public DCAEService selfLink(Link selfLink) {
+ this.selfLink = selfLink;
+ return this;
+ }
+
+
+ @ApiModelProperty(value = "Link.title is serviceId")
+ @JsonProperty("selfLink")
+ public Link getSelfLink() {
+ return selfLink;
+ }
+ public void setSelfLink(Link selfLink) {
+ this.selfLink = selfLink;
+ }
+
+ /**
+ **/
+ public DCAEService created(Date created) {
+ this.created = created;
+ return this;
+ }
+
+
+ @ApiModelProperty(value = "")
+ @JsonProperty("created")
+ public Date getCreated() {
+ return created;
+ }
+ public void setCreated(Date created) {
+ this.created = created;
+ }
+
+ /**
+ **/
+ public DCAEService modified(Date modified) {
+ this.modified = modified;
+ return this;
+ }
+
+
+ @ApiModelProperty(value = "")
+ @JsonProperty("modified")
+ public Date getModified() {
+ return modified;
+ }
+ public void setModified(Date modified) {
+ this.modified = modified;
+ }
+
+ /**
+ * Link.title is typeName
+ **/
+ public DCAEService typeLink(Link typeLink) {
+ this.typeLink = typeLink;
+ return this;
+ }
+
+
+ @ApiModelProperty(value = "Link.title is typeName")
+ @JsonProperty("typeLink")
+ public Link getTypeLink() {
+ return typeLink;
+ }
+ public void setTypeLink(Link typeLink) {
+ this.typeLink = typeLink;
+ }
+
+ /**
+ **/
+ public DCAEService vnfId(String vnfId) {
+ this.vnfId = vnfId;
+ return this;
+ }
+
+
+ @ApiModelProperty(value = "")
+ @JsonProperty("vnfId")
+ public String getVnfId() {
+ return vnfId;
+ }
+ public void setVnfId(String vnfId) {
+ this.vnfId = vnfId;
+ }
+
+ /**
+ * Link.title is vnfId
+ **/
+ public DCAEService vnfLink(Link vnfLink) {
+ this.vnfLink = vnfLink;
+ return this;
+ }
+
+
+ @ApiModelProperty(value = "Link.title is vnfId")
+ @JsonProperty("vnfLink")
+ public Link getVnfLink() {
+ return vnfLink;
+ }
+ public void setVnfLink(Link vnfLink) {
+ this.vnfLink = vnfLink;
+ }
+
+ /**
+ **/
+ public DCAEService vnfType(String vnfType) {
+ this.vnfType = vnfType;
+ return this;
+ }
+
+
+ @ApiModelProperty(value = "")
+ @JsonProperty("vnfType")
+ public String getVnfType() {
+ return vnfType;
+ }
+ public void setVnfType(String vnfType) {
+ this.vnfType = vnfType;
+ }
+
+ /**
+ * Location information of the associated VNF
+ **/
+ public DCAEService vnfLocation(String vnfLocation) {
+ this.vnfLocation = vnfLocation;
+ return this;
+ }
+
+
+ @ApiModelProperty(value = "Location information of the associated VNF")
+ @JsonProperty("vnfLocation")
+ public String getVnfLocation() {
+ return vnfLocation;
+ }
+ public void setVnfLocation(String vnfLocation) {
+ this.vnfLocation = vnfLocation;
+ }
+
+ /**
+ * Reference to a Cloudify deployment
+ **/
+ public DCAEService deploymentRef(String deploymentRef) {
+ this.deploymentRef = deploymentRef;
+ return this;
+ }
+
+
+ @ApiModelProperty(value = "Reference to a Cloudify deployment")
+ @JsonProperty("deploymentRef")
+ public String getDeploymentRef() {
+ return deploymentRef;
+ }
+ public void setDeploymentRef(String deploymentRef) {
+ this.deploymentRef = deploymentRef;
+ }
+
+ /**
+ **/
+ public DCAEService components(List<DCAEServiceComponent> components) {
+ this.components = components;
+ return this;
+ }
+
+
+ @ApiModelProperty(value = "")
+ @JsonProperty("components")
+ public List<DCAEServiceComponent> getComponents() {
+ return components;
+ }
+ public void setComponents(List<DCAEServiceComponent> components) {
+ this.components = components;
+ }
+
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ DCAEService dCAEService = (DCAEService) o;
+ return Objects.equals(serviceId, dCAEService.serviceId) &&
+ Objects.equals(selfLink, dCAEService.selfLink) &&
+ Objects.equals(created, dCAEService.created) &&
+ Objects.equals(modified, dCAEService.modified) &&
+ Objects.equals(typeLink, dCAEService.typeLink) &&
+ Objects.equals(vnfId, dCAEService.vnfId) &&
+ Objects.equals(vnfLink, dCAEService.vnfLink) &&
+ Objects.equals(vnfType, dCAEService.vnfType) &&
+ Objects.equals(vnfLocation, dCAEService.vnfLocation) &&
+ Objects.equals(deploymentRef, dCAEService.deploymentRef) &&
+ Objects.equals(components, dCAEService.components);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(serviceId, selfLink, created, modified, typeLink, vnfId, vnfLink, vnfType, vnfLocation, deploymentRef, components);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class DCAEService {\n");
+
+ sb.append(" serviceId: ").append(toIndentedString(serviceId)).append("\n");
+ sb.append(" selfLink: ").append(toIndentedString(selfLink)).append("\n");
+ sb.append(" created: ").append(toIndentedString(created)).append("\n");
+ sb.append(" modified: ").append(toIndentedString(modified)).append("\n");
+ sb.append(" typeLink: ").append(toIndentedString(typeLink)).append("\n");
+ sb.append(" vnfId: ").append(toIndentedString(vnfId)).append("\n");
+ sb.append(" vnfLink: ").append(toIndentedString(vnfLink)).append("\n");
+ sb.append(" vnfType: ").append(toIndentedString(vnfType)).append("\n");
+ sb.append(" vnfLocation: ").append(toIndentedString(vnfLocation)).append("\n");
+ sb.append(" deploymentRef: ").append(toIndentedString(deploymentRef)).append("\n");
+ sb.append(" components: ").append(toIndentedString(components)).append("\n");
+ sb.append("}");
+ return sb.toString();
+ }
+
+ /**
+ * Convert the given object to string with each line indented by 4 spaces
+ * (except the first line).
+ */
+ private String toIndentedString(Object o) {
+ if (o == null) {
+ return "null";
+ }
+ return o.toString().replace("\n", "\n ");
+ }
+}
+
diff --git a/src/gen/java/io/swagger/model/DCAEServiceComponent.java b/src/gen/java/io/swagger/model/DCAEServiceComponent.java
new file mode 100644
index 0000000..34c81a8
--- /dev/null
+++ b/src/gen/java/io/swagger/model/DCAEServiceComponent.java
@@ -0,0 +1,252 @@
+package io.swagger.model;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModelProperty;
+import java.util.Date;
+import javax.ws.rs.core.Link;
+
+
+
+
+
+@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-04-18T20:16:22.119Z")
+public class DCAEServiceComponent {
+
+ private String componentId = null;
+ private Link componentLink = null;
+ private Date created = null;
+ private Date modified = null;
+ private String componentType = null;
+ private String componentSource = null;
+ private String status = null;
+ private String location = null;
+ private Integer shareable = null;
+
+ /**
+ **/
+ public DCAEServiceComponent componentId(String componentId) {
+ this.componentId = componentId;
+ return this;
+ }
+
+
+ @ApiModelProperty(value = "The id format is unique to the source", required = true)
+ @JsonProperty("componentId")
+ public String getComponentId() {
+ return componentId;
+ }
+ public void setComponentId(String componentId) {
+ this.componentId = componentId;
+ }
+
+ /**
+ * Link.title is componentId
+ **/
+ public DCAEServiceComponent componentLink(Link componentLink) {
+ this.componentLink = componentLink;
+ return this;
+ }
+
+
+ @ApiModelProperty(value = "Link to the underlying resource of this component", required = true)
+ @JsonProperty("componentLink")
+ public Link getComponentLink() {
+ return componentLink;
+ }
+ public void setComponentLink(Link componentLink) {
+ this.componentLink = componentLink;
+ }
+
+ /**
+ **/
+ public DCAEServiceComponent created(Date created) {
+ this.created = created;
+ return this;
+ }
+
+
+ @ApiModelProperty(value = "", required = true)
+ @JsonProperty("created")
+ public Date getCreated() {
+ return created;
+ }
+ public void setCreated(Date created) {
+ this.created = created;
+ }
+
+ /**
+ **/
+ public DCAEServiceComponent modified(Date modified) {
+ this.modified = modified;
+ return this;
+ }
+
+
+ @ApiModelProperty(value = "", required = true)
+ @JsonProperty("modified")
+ public Date getModified() {
+ return modified;
+ }
+ public void setModified(Date modified) {
+ this.modified = modified;
+ }
+
+ /**
+ **/
+ public DCAEServiceComponent componentType(String componentType) {
+ this.componentType = componentType;
+ return this;
+ }
+
+
+ @ApiModelProperty(value = "", required = true)
+ @JsonProperty("componentType")
+ public String getComponentType() {
+ return componentType;
+ }
+ public void setComponentType(String componentType) {
+ this.componentType = componentType;
+ }
+
+
+ @ApiModelProperty(value = "Specifies the name of the underying source service that is responsible for this components", required = true,
+ allowableValues = "DCAEController, DMaaPController")
+ @JsonProperty("componentSource")
+ public String getComponentSource() {
+ return componentSource;
+ }
+ public void setComponentSource(String componentSource) {
+ this.componentSource = componentSource;
+ }
+
+ /**
+ **/
+ public DCAEServiceComponent status(String status) {
+ this.status = status;
+ return this;
+ }
+
+
+ @ApiModelProperty(value = "")
+ @JsonProperty("status")
+ public String getStatus() {
+ return status;
+ }
+ public void setStatus(String status) {
+ this.status = status;
+ }
+
+ /**
+ * Location information of the component
+ **/
+ public DCAEServiceComponent location(String location) {
+ this.location = location;
+ return this;
+ }
+
+
+ @ApiModelProperty(value = "Location information of the component")
+ @JsonProperty("location")
+ public String getLocation() {
+ return location;
+ }
+ public void setLocation(String location) {
+ this.location = location;
+ }
+
+ /**
+ * Used to determine if this component can be shared amongst different DCAE services
+ **/
+ public DCAEServiceComponent shareable(Integer shareable) {
+ this.shareable = shareable;
+ return this;
+ }
+
+
+ @ApiModelProperty(value = "Used to determine if this component can be shared amongst different DCAE services", required = true)
+ @JsonProperty("shareable")
+ public Integer getShareable() {
+ return shareable;
+ }
+ public void setShareable(Integer shareable) {
+ this.shareable = shareable;
+ }
+
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ DCAEServiceComponent dCAEServiceComponent = (DCAEServiceComponent) o;
+ return Objects.equals(componentId, dCAEServiceComponent.componentId) &&
+ Objects.equals(componentLink, dCAEServiceComponent.componentLink) &&
+ Objects.equals(created, dCAEServiceComponent.created) &&
+ Objects.equals(modified, dCAEServiceComponent.modified) &&
+ Objects.equals(componentType, dCAEServiceComponent.componentType) &&
+ Objects.equals(status, dCAEServiceComponent.status) &&
+ Objects.equals(location, dCAEServiceComponent.location) &&
+ Objects.equals(shareable, dCAEServiceComponent.shareable);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(componentId, componentLink, created, modified, componentType, status, location, shareable);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class DCAEServiceComponent {\n");
+
+ sb.append(" componentId: ").append(toIndentedString(componentId)).append("\n");
+ sb.append(" componentLink: ").append(toIndentedString(componentLink)).append("\n");
+ sb.append(" created: ").append(toIndentedString(created)).append("\n");
+ sb.append(" modified: ").append(toIndentedString(modified)).append("\n");
+ sb.append(" componentType: ").append(toIndentedString(componentType)).append("\n");
+ sb.append(" status: ").append(toIndentedString(status)).append("\n");
+ sb.append(" location: ").append(toIndentedString(location)).append("\n");
+ sb.append(" shareable: ").append(toIndentedString(shareable)).append("\n");
+ sb.append("}");
+ return sb.toString();
+ }
+
+ /**
+ * Convert the given object to string with each line indented by 4 spaces
+ * (except the first line).
+ */
+ private String toIndentedString(Object o) {
+ if (o == null) {
+ return "null";
+ }
+ return o.toString().replace("\n", "\n ");
+ }
+}
+
diff --git a/src/gen/java/io/swagger/model/DCAEServiceComponentRequest.java b/src/gen/java/io/swagger/model/DCAEServiceComponentRequest.java
new file mode 100644
index 0000000..1f0913f
--- /dev/null
+++ b/src/gen/java/io/swagger/model/DCAEServiceComponentRequest.java
@@ -0,0 +1,155 @@
+package io.swagger.model;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import org.hibernate.validator.constraints.NotEmpty;
+
+import javax.validation.constraints.NotNull;
+
+
+@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-04-18T20:16:22.119Z")
+public class DCAEServiceComponentRequest {
+
+ @NotEmpty
+ private String componentId = null;
+ @NotEmpty
+ private String componentType = null;
+ @NotEmpty
+ private String componentSource = null;
+ @NotNull
+ private Integer shareable = null;
+
+ /**
+ **/
+ public DCAEServiceComponentRequest componentId(String componentId) {
+ this.componentId = componentId;
+ return this;
+ }
+
+
+ @ApiModelProperty(value = "The id format is unique to the source", required = true)
+ @JsonProperty("componentId")
+ public String getComponentId() {
+ return componentId;
+ }
+ public void setComponentId(String componentId) {
+ this.componentId = componentId;
+ }
+
+ /**
+ **/
+ public DCAEServiceComponentRequest componentType(String componentType) {
+ this.componentType = componentType;
+ return this;
+ }
+
+
+ @ApiModelProperty(value = "", required = true)
+ @JsonProperty("componentType")
+ public String getComponentType() {
+ return componentType;
+ }
+ public void setComponentType(String componentType) {
+ this.componentType = componentType;
+ }
+
+
+ @ApiModelProperty(value = "Specifies the name of the underying source service that is responsible for this components", required = true,
+ allowableValues = "DCAEController, DMaaPController")
+ @JsonProperty("componentSource")
+ public String getComponentSource() {
+ return componentSource;
+ }
+ public void setComponentSource(String componentSource) {
+ this.componentSource = componentSource;
+ }
+
+
+ /**
+ * Used to determine if this component can be shared amongst different DCAE services
+ **/
+ public DCAEServiceComponentRequest shareable(Integer shareable) {
+ this.shareable = shareable;
+ return this;
+ }
+
+
+ @ApiModelProperty(value = "Used to determine if this component can be shared amongst different DCAE services", required = true)
+ @JsonProperty("shareable")
+ public Integer getShareable() {
+ return shareable;
+ }
+ public void setShareable(Integer shareable) {
+ this.shareable = shareable;
+ }
+
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ DCAEServiceComponentRequest dCAEServiceComponentRequest = (DCAEServiceComponentRequest) o;
+ return Objects.equals(componentId, dCAEServiceComponentRequest.componentId) &&
+ Objects.equals(componentType, dCAEServiceComponentRequest.componentType) &&
+ Objects.equals(shareable, dCAEServiceComponentRequest.shareable);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(componentId, componentType, shareable);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class DCAEServiceComponentRequest {\n");
+
+ sb.append(" componentId: ").append(toIndentedString(componentId)).append("\n");
+ sb.append(" componentType: ").append(toIndentedString(componentType)).append("\n");
+ sb.append(" componentSource: ").append(toIndentedString(componentSource)).append("\n");
+ sb.append(" shareable: ").append(toIndentedString(shareable)).append("\n");
+ sb.append("}");
+ return sb.toString();
+ }
+
+ /**
+ * Convert the given object to string with each line indented by 4 spaces
+ * (except the first line).
+ */
+ private String toIndentedString(Object o) {
+ if (o == null) {
+ return "null";
+ }
+ return o.toString().replace("\n", "\n ");
+ }
+}
+
diff --git a/src/gen/java/io/swagger/model/DCAEServiceGroupByResults.java b/src/gen/java/io/swagger/model/DCAEServiceGroupByResults.java
new file mode 100644
index 0000000..b9f0d34
--- /dev/null
+++ b/src/gen/java/io/swagger/model/DCAEServiceGroupByResults.java
@@ -0,0 +1,120 @@
+package io.swagger.model;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.model.DCAEServiceGroupByResultsPropertyValues;
+import java.util.ArrayList;
+import java.util.List;
+
+
+
+
+
+@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-04-18T20:16:22.119Z")
+public class DCAEServiceGroupByResults {
+
+ private String propertyName = null;
+ private List<DCAEServiceGroupByResultsPropertyValues> propertyValues = new ArrayList<DCAEServiceGroupByResultsPropertyValues>();
+
+ /**
+ * Property name of DCAE service that the group by operation was performed on
+ **/
+ public DCAEServiceGroupByResults propertyName(String propertyName) {
+ this.propertyName = propertyName;
+ return this;
+ }
+
+
+ @ApiModelProperty(value = "Property name of DCAE service that the group by operation was performed on")
+ @JsonProperty("propertyName")
+ public String getPropertyName() {
+ return propertyName;
+ }
+ public void setPropertyName(String propertyName) {
+ this.propertyName = propertyName;
+ }
+
+ /**
+ **/
+ public DCAEServiceGroupByResults propertyValues(List<DCAEServiceGroupByResultsPropertyValues> propertyValues) {
+ this.propertyValues = propertyValues;
+ return this;
+ }
+
+
+ @ApiModelProperty(value = "")
+ @JsonProperty("propertyValues")
+ public List<DCAEServiceGroupByResultsPropertyValues> getPropertyValues() {
+ return propertyValues;
+ }
+ public void setPropertyValues(List<DCAEServiceGroupByResultsPropertyValues> propertyValues) {
+ this.propertyValues = propertyValues;
+ }
+
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ DCAEServiceGroupByResults dCAEServiceGroupByResults = (DCAEServiceGroupByResults) o;
+ return Objects.equals(propertyName, dCAEServiceGroupByResults.propertyName) &&
+ Objects.equals(propertyValues, dCAEServiceGroupByResults.propertyValues);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(propertyName, propertyValues);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class DCAEServiceGroupByResults {\n");
+
+ sb.append(" propertyName: ").append(toIndentedString(propertyName)).append("\n");
+ sb.append(" propertyValues: ").append(toIndentedString(propertyValues)).append("\n");
+ sb.append("}");
+ return sb.toString();
+ }
+
+ /**
+ * Convert the given object to string with each line indented by 4 spaces
+ * (except the first line).
+ */
+ private String toIndentedString(Object o) {
+ if (o == null) {
+ return "null";
+ }
+ return o.toString().replace("\n", "\n ");
+ }
+}
+
diff --git a/src/gen/java/io/swagger/model/DCAEServiceGroupByResultsPropertyValues.java b/src/gen/java/io/swagger/model/DCAEServiceGroupByResultsPropertyValues.java
new file mode 100644
index 0000000..76d69a0
--- /dev/null
+++ b/src/gen/java/io/swagger/model/DCAEServiceGroupByResultsPropertyValues.java
@@ -0,0 +1,138 @@
+package io.swagger.model;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import javax.ws.rs.core.Link;
+
+
+
+
+
+@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-04-18T20:16:22.119Z")
+public class DCAEServiceGroupByResultsPropertyValues {
+
+ private Integer count = null;
+ private String propertyValue = null;
+ private Link dcaeServiceQueryLink = null;
+
+ /**
+ **/
+ public DCAEServiceGroupByResultsPropertyValues count(Integer count) {
+ this.count = count;
+ return this;
+ }
+
+
+ @ApiModelProperty(value = "")
+ @JsonProperty("count")
+ public Integer getCount() {
+ return count;
+ }
+ public void setCount(Integer count) {
+ this.count = count;
+ }
+
+ /**
+ **/
+ public DCAEServiceGroupByResultsPropertyValues propertyValue(String propertyValue) {
+ this.propertyValue = propertyValue;
+ return this;
+ }
+
+
+ @ApiModelProperty(value = "")
+ @JsonProperty("propertyValue")
+ public String getPropertyValue() {
+ return propertyValue;
+ }
+ public void setPropertyValue(String propertyValue) {
+ this.propertyValue = propertyValue;
+ }
+
+ /**
+ * Link.title is the DCAE service property value. Following this link will provide a list of DCAE services that all have this property value.
+ **/
+ public DCAEServiceGroupByResultsPropertyValues dcaeServiceQueryLink(Link dcaeServiceQueryLink) {
+ this.dcaeServiceQueryLink = dcaeServiceQueryLink;
+ return this;
+ }
+
+
+ @ApiModelProperty(value = "Link.title is the DCAE service property value. Following this link will provide a list of DCAE services that all have this property value.")
+ @JsonProperty("dcaeServiceQueryLink")
+ public Link getDcaeServiceQueryLink() {
+ return dcaeServiceQueryLink;
+ }
+ public void setDcaeServiceQueryLink(Link dcaeServiceQueryLink) {
+ this.dcaeServiceQueryLink = dcaeServiceQueryLink;
+ }
+
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ DCAEServiceGroupByResultsPropertyValues dCAEServiceGroupByResultsPropertyValues = (DCAEServiceGroupByResultsPropertyValues) o;
+ return Objects.equals(count, dCAEServiceGroupByResultsPropertyValues.count) &&
+ Objects.equals(propertyValue, dCAEServiceGroupByResultsPropertyValues.propertyValue) &&
+ Objects.equals(dcaeServiceQueryLink, dCAEServiceGroupByResultsPropertyValues.dcaeServiceQueryLink);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(count, propertyValue, dcaeServiceQueryLink);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class DCAEServiceGroupByResultsPropertyValues {\n");
+
+ sb.append(" count: ").append(toIndentedString(count)).append("\n");
+ sb.append(" propertyValue: ").append(toIndentedString(propertyValue)).append("\n");
+ sb.append(" dcaeServiceQueryLink: ").append(toIndentedString(dcaeServiceQueryLink)).append("\n");
+ sb.append("}");
+ return sb.toString();
+ }
+
+ /**
+ * Convert the given object to string with each line indented by 4 spaces
+ * (except the first line).
+ */
+ private String toIndentedString(Object o) {
+ if (o == null) {
+ return "null";
+ }
+ return o.toString().replace("\n", "\n ");
+ }
+}
+
diff --git a/src/gen/java/io/swagger/model/DCAEServiceRequest.java b/src/gen/java/io/swagger/model/DCAEServiceRequest.java
new file mode 100644
index 0000000..f9f9083
--- /dev/null
+++ b/src/gen/java/io/swagger/model/DCAEServiceRequest.java
@@ -0,0 +1,207 @@
+package io.swagger.model;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModelProperty;
+import org.hibernate.validator.constraints.NotEmpty;
+
+import javax.validation.Valid;
+import java.util.ArrayList;
+import java.util.List;
+
+
+
+
+
+@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-04-18T20:16:22.119Z")
+public class DCAEServiceRequest {
+
+ @NotEmpty
+ private String typeName = null;
+ @NotEmpty
+ private String vnfId = null;
+ @NotEmpty
+ private String vnfType = null;
+ @NotEmpty
+ private String vnfLocation = null;
+ private String deploymentRef = null;
+ @NotEmpty
+ @Valid
+ private List<DCAEServiceComponentRequest> components = new ArrayList<DCAEServiceComponentRequest>();
+
+ /**
+ **/
+ public DCAEServiceRequest typeName(String typeName) {
+ this.typeName = typeName;
+ return this;
+ }
+
+
+ @ApiModelProperty(required = true, value = "Name of the associated DCAE service type")
+ @JsonProperty("typeName")
+ public String getTypeName() {
+ return typeName;
+ }
+ public void setTypeName(String typeName) {
+ this.typeName = typeName;
+ }
+
+ /**
+ **/
+ public DCAEServiceRequest vnfId(String vnfId) {
+ this.vnfId = vnfId;
+ return this;
+ }
+
+
+ @ApiModelProperty(required = true, value = "Id of the associated VNF that this service is monitoring")
+ @JsonProperty("vnfId")
+ public String getVnfId() {
+ return vnfId;
+ }
+ public void setVnfId(String vnfId) {
+ this.vnfId = vnfId;
+ }
+
+ /**
+ **/
+ public DCAEServiceRequest vnfType(String vnfType) {
+ this.vnfType = vnfType;
+ return this;
+ }
+
+
+ @ApiModelProperty(required = true, value = "The type of the associated VNF that this service is monitoring")
+ @JsonProperty("vnfType")
+ public String getVnfType() {
+ return vnfType;
+ }
+ public void setVnfType(String vnfType) {
+ this.vnfType = vnfType;
+ }
+
+ /**
+ **/
+ public DCAEServiceRequest vnfLocation(String vnfLocation) {
+ this.vnfLocation = vnfLocation;
+ return this;
+ }
+
+
+ @ApiModelProperty(required = true, value = "Location identifier of the associated VNF that this service is monitoring")
+ @JsonProperty("vnfLocation")
+ public String getVnfLocation() {
+ return vnfLocation;
+ }
+ public void setVnfLocation(String vnfLocation) {
+ this.vnfLocation = vnfLocation;
+ }
+
+ /**
+ * Reference to a Cloudify deployment
+ **/
+ public DCAEServiceRequest deploymentRef(String deploymentRef) {
+ this.deploymentRef = deploymentRef;
+ return this;
+ }
+
+
+ @ApiModelProperty(value = "Reference to a Cloudify deployment")
+ @JsonProperty("deploymentRef")
+ public String getDeploymentRef() {
+ return deploymentRef;
+ }
+ public void setDeploymentRef(String deploymentRef) {
+ this.deploymentRef = deploymentRef;
+ }
+
+ /**
+ **/
+ public DCAEServiceRequest components(List<DCAEServiceComponentRequest> components) {
+ this.components = components;
+ return this;
+ }
+
+
+ @ApiModelProperty(required = true, value = "List of DCAE service components that this service is composed of")
+ @JsonProperty("components")
+ public List<DCAEServiceComponentRequest> getComponents() {
+ return components;
+ }
+ public void setComponents(List<DCAEServiceComponentRequest> components) {
+ this.components = components;
+ }
+
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ DCAEServiceRequest dCAEServiceRequest = (DCAEServiceRequest) o;
+ return Objects.equals(typeName, dCAEServiceRequest.typeName) &&
+ Objects.equals(vnfId, dCAEServiceRequest.vnfId) &&
+ Objects.equals(vnfType, dCAEServiceRequest.vnfType) &&
+ Objects.equals(vnfLocation, dCAEServiceRequest.vnfLocation) &&
+ Objects.equals(deploymentRef, dCAEServiceRequest.deploymentRef) &&
+ Objects.equals(components, dCAEServiceRequest.components);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(typeName, vnfId, vnfType, vnfLocation, deploymentRef, components);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class DCAEServiceRequest {\n");
+
+ sb.append(" typeName: ").append(toIndentedString(typeName)).append("\n");
+ sb.append(" vnfId: ").append(toIndentedString(vnfId)).append("\n");
+ sb.append(" vnfType: ").append(toIndentedString(vnfType)).append("\n");
+ sb.append(" vnfLocation: ").append(toIndentedString(vnfLocation)).append("\n");
+ sb.append(" deploymentRef: ").append(toIndentedString(deploymentRef)).append("\n");
+ sb.append(" components: ").append(toIndentedString(components)).append("\n");
+ sb.append("}");
+ return sb.toString();
+ }
+
+ /**
+ * Convert the given object to string with each line indented by 4 spaces
+ * (except the first line).
+ */
+ private String toIndentedString(Object o) {
+ if (o == null) {
+ return "null";
+ }
+ return o.toString().replace("\n", "\n ");
+ }
+}
+
diff --git a/src/gen/java/io/swagger/model/DCAEServiceType.java b/src/gen/java/io/swagger/model/DCAEServiceType.java
new file mode 100644
index 0000000..abe5930
--- /dev/null
+++ b/src/gen/java/io/swagger/model/DCAEServiceType.java
@@ -0,0 +1,222 @@
+package io.swagger.model;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import javax.ws.rs.core.Link;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+
+
+
+
+@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-04-18T20:16:22.119Z")
+public class DCAEServiceType {
+
+ private String typeName = null;
+ private Link selfLink = null;
+ private Date created = null;
+ private String owner = null;
+ private List<String> vnfTypes = new ArrayList<String>();
+ private List<String> serviceIds = null;
+ private List<String> serviceLocations = null;
+ private String blueprintTemplate = null;
+
+ /**
+ **/
+ public DCAEServiceType typeName(String typeName) {
+ this.typeName = typeName;
+ return this;
+ }
+
+
+ @ApiModelProperty(required = true, value = "Unique name for this DCAE service type")
+ @JsonProperty("typeName")
+ public String getTypeName() {
+ return typeName;
+ }
+ public void setTypeName(String typeName) {
+ this.typeName = typeName;
+ }
+
+ /**
+ * Link.title is typeName
+ **/
+ public DCAEServiceType selfLink(Link selfLink) {
+ this.selfLink = selfLink;
+ return this;
+ }
+
+
+ @ApiModelProperty(value = "Link.title is typeName")
+ @JsonProperty("selfLink")
+ public Link getSelfLink() {
+ return selfLink;
+ }
+ public void setSelfLink(Link selfLink) {
+ this.selfLink = selfLink;
+ }
+
+ /**
+ **/
+ public DCAEServiceType created(Date created) {
+ this.created = created;
+ return this;
+ }
+
+
+ @ApiModelProperty(required = true, value = "Created timestamp for this DCAE service type in epoch time")
+ @JsonProperty("created")
+ public Date getCreated() {
+ return created;
+ }
+ public void setCreated(Date created) {
+ this.created = created;
+ }
+
+ /**
+ **/
+ public DCAEServiceType owner(String owner) {
+ this.owner = owner;
+ return this;
+ }
+
+
+ @ApiModelProperty(required = true, value = "Name of the owner of this DCAE service type")
+ @JsonProperty("owner")
+ public String getOwner() {
+ return owner;
+ }
+ public void setOwner(String owner) {
+ this.owner = owner;
+ }
+
+ /**
+ **/
+ public DCAEServiceType vnfTypes(List<String> vnfTypes) {
+ this.vnfTypes = vnfTypes;
+ return this;
+ }
+
+
+ @ApiModelProperty(required = true, value = "List of VNF types associated with this DCAE service type")
+ @JsonProperty("vnfTypes")
+ public List<String> getVnfTypes() {
+ return vnfTypes;
+ }
+ public void setVnfTypes(List<String> vnfTypes) {
+ this.vnfTypes = vnfTypes;
+ }
+
+ @ApiModelProperty(required = false, value = "List of service ids that are associated with this DCAE service type")
+ @JsonProperty("serviceIds")
+ public List<String> getServiceIds() {
+ return serviceIds;
+ }
+ public void setServiceIds(List<String> serviceIds) {
+ this.serviceIds = serviceIds;
+ }
+
+ @ApiModelProperty(required = false, value = "List of service locations that are associated with this DCAE service type")
+ @JsonProperty("serviceLocations")
+ public List<String> getServiceLocations() {
+ return serviceLocations;
+ }
+ public void setServiceLocations(List<String> serviceLocations) {
+ this.serviceLocations = serviceLocations;
+ }
+
+ /**
+ * String representation of a Cloudify blueprint with unbound variables
+ **/
+ public DCAEServiceType blueprintTemplate(String blueprintTemplate) {
+ this.blueprintTemplate = blueprintTemplate;
+ return this;
+ }
+
+
+ @ApiModelProperty(required = true, value = "String representation of a Cloudify blueprint with unbound variables")
+ @JsonProperty("blueprintTemplate")
+ public String getBlueprintTemplate() {
+ return blueprintTemplate;
+ }
+ public void setBlueprintTemplate(String blueprintTemplate) {
+ this.blueprintTemplate = blueprintTemplate;
+ }
+
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ DCAEServiceType dCAEServiceType = (DCAEServiceType) o;
+ return Objects.equals(typeName, dCAEServiceType.typeName) &&
+ Objects.equals(selfLink, dCAEServiceType.selfLink) &&
+ Objects.equals(created, dCAEServiceType.created) &&
+ Objects.equals(owner, dCAEServiceType.owner) &&
+ Objects.equals(vnfTypes, dCAEServiceType.vnfTypes) &&
+ Objects.equals(blueprintTemplate, dCAEServiceType.blueprintTemplate);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(typeName, selfLink, created, owner, vnfTypes, blueprintTemplate);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class DCAEServiceType {\n");
+
+ sb.append(" typeName: ").append(toIndentedString(typeName)).append("\n");
+ sb.append(" selfLink: ").append(toIndentedString(selfLink)).append("\n");
+ sb.append(" created: ").append(toIndentedString(created)).append("\n");
+ sb.append(" owner: ").append(toIndentedString(owner)).append("\n");
+ sb.append(" vnfTypes: ").append(toIndentedString(vnfTypes)).append("\n");
+ sb.append(" blueprintTemplate: ").append(toIndentedString(blueprintTemplate)).append("\n");
+ sb.append("}");
+ return sb.toString();
+ }
+
+ /**
+ * Convert the given object to string with each line indented by 4 spaces
+ * (except the first line).
+ */
+ private String toIndentedString(Object o) {
+ if (o == null) {
+ return "null";
+ }
+ return o.toString().replace("\n", "\n ");
+ }
+}
+
diff --git a/src/gen/java/io/swagger/model/DCAEServiceTypeRequest.java b/src/gen/java/io/swagger/model/DCAEServiceTypeRequest.java
new file mode 100644
index 0000000..3e94c24
--- /dev/null
+++ b/src/gen/java/io/swagger/model/DCAEServiceTypeRequest.java
@@ -0,0 +1,163 @@
+package io.swagger.model;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModelProperty;
+import org.hibernate.validator.constraints.NotEmpty;
+
+import java.util.ArrayList;
+import java.util.List;
+
+
+
+
+
+@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-04-18T20:16:22.119Z")
+public class DCAEServiceTypeRequest {
+
+ @NotEmpty
+ private String owner = null;
+ @NotEmpty
+ private List<String> vnfTypes = new ArrayList<String>();
+ @NotEmpty
+ private String blueprintTemplate = null;
+ private List<String> serviceLocations = null;
+ private List<String> serviceIds = null;
+
+ /**
+ **/
+ public DCAEServiceTypeRequest owner(String owner) {
+ this.owner = owner;
+ return this;
+ }
+
+
+ @ApiModelProperty(required = true, value = "")
+ @JsonProperty("owner")
+ public String getOwner() {
+ return owner;
+ }
+ public void setOwner(String owner) {
+ this.owner = owner;
+ }
+
+ /**
+ **/
+ public DCAEServiceTypeRequest vnfTypes(List<String> vnfTypes) {
+ this.vnfTypes = vnfTypes;
+ return this;
+ }
+
+
+ @ApiModelProperty(required = true, value = "")
+ @JsonProperty("vnfTypes")
+ public List<String> getVnfTypes() {
+ return vnfTypes;
+ }
+ public void setVnfTypes(List<String> vnfTypes) {
+ this.vnfTypes = vnfTypes;
+ }
+
+ /**
+ * String representation of a Cloudify blueprint with unbound variables
+ **/
+ public DCAEServiceTypeRequest blueprintTemplate(String blueprintTemplate) {
+ this.blueprintTemplate = blueprintTemplate;
+ return this;
+ }
+
+
+ @ApiModelProperty(required = true, value = "String representation of a Cloudify blueprint with unbound variables")
+ @JsonProperty("blueprintTemplate")
+ public String getBlueprintTemplate() {
+ return blueprintTemplate;
+ }
+ public void setBlueprintTemplate(String blueprintTemplate) {
+ this.blueprintTemplate = blueprintTemplate;
+ }
+
+ @ApiModelProperty(required = false, value = "List of service locations that are used to associate with DCAE service type. DCAE service types with this propery as null or empty means them apply for every service location.")
+ @JsonProperty("serviceLocations")
+ public List<String> getServiceLocations() {
+ return this.serviceLocations;
+ }
+ public void setServiceLocations(List<String> serviceLocations) {
+ this.serviceLocations = serviceLocations;
+ }
+
+ @ApiModelProperty(required = false, value = "List of service ids that are used to associate with DCAE service type. DCAE service types with this propery as null or empty means them apply for every service id.")
+ @JsonProperty("serviceIds")
+ public List<String> getServiceIds() {
+ return this.serviceIds;
+ }
+ public void setServiceIds(List<String> serviceIds) {
+ this.serviceIds = serviceIds;
+ }
+
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ DCAEServiceTypeRequest dCAEServiceTypeRequest = (DCAEServiceTypeRequest) o;
+ return Objects.equals(owner, dCAEServiceTypeRequest.owner) &&
+ Objects.equals(vnfTypes, dCAEServiceTypeRequest.vnfTypes) &&
+ Objects.equals(blueprintTemplate, dCAEServiceTypeRequest.blueprintTemplate);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(owner, vnfTypes, blueprintTemplate);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class DCAEServiceTypeRequest {\n");
+
+ sb.append(" owner: ").append(toIndentedString(owner)).append("\n");
+ sb.append(" vnfTypes: ").append(toIndentedString(vnfTypes)).append("\n");
+ sb.append(" blueprintTemplate: ").append(toIndentedString(blueprintTemplate)).append("\n");
+ sb.append("}");
+ return sb.toString();
+ }
+
+ /**
+ * Convert the given object to string with each line indented by 4 spaces
+ * (except the first line).
+ */
+ private String toIndentedString(Object o) {
+ if (o == null) {
+ return "null";
+ }
+ return o.toString().replace("\n", "\n ");
+ }
+}
+
diff --git a/src/gen/java/io/swagger/model/InlineResponse200.java b/src/gen/java/io/swagger/model/InlineResponse200.java
new file mode 100644
index 0000000..c5ffdf8
--- /dev/null
+++ b/src/gen/java/io/swagger/model/InlineResponse200.java
@@ -0,0 +1,140 @@
+package io.swagger.model;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.model.DCAEServiceType;
+import io.swagger.model.InlineResponse200Links;
+import java.util.ArrayList;
+import java.util.List;
+
+
+
+
+
+@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-04-18T20:16:22.119Z")
+public class InlineResponse200 {
+
+ private InlineResponse200Links links = null;
+ private Integer totalCount = null;
+ private List<DCAEServiceType> items = new ArrayList<DCAEServiceType>();
+
+ /**
+ **/
+ public InlineResponse200 links(InlineResponse200Links links) {
+ this.links = links;
+ return this;
+ }
+
+
+ @ApiModelProperty(value = "")
+ @JsonProperty("links")
+ public InlineResponse200Links getLinks() {
+ return links;
+ }
+ public void setLinks(InlineResponse200Links links) {
+ this.links = links;
+ }
+
+ /**
+ **/
+ public InlineResponse200 totalCount(Integer totalCount) {
+ this.totalCount = totalCount;
+ return this;
+ }
+
+
+ @ApiModelProperty(value = "")
+ @JsonProperty("totalCount")
+ public Integer getTotalCount() {
+ return totalCount;
+ }
+ public void setTotalCount(Integer totalCount) {
+ this.totalCount = totalCount;
+ }
+
+ /**
+ **/
+ public InlineResponse200 items(List<DCAEServiceType> items) {
+ this.items = items;
+ return this;
+ }
+
+
+ @ApiModelProperty(value = "")
+ @JsonProperty("items")
+ public List<DCAEServiceType> getItems() {
+ return items;
+ }
+ public void setItems(List<DCAEServiceType> items) {
+ this.items = items;
+ }
+
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ InlineResponse200 inlineResponse200 = (InlineResponse200) o;
+ return Objects.equals(links, inlineResponse200.links) &&
+ Objects.equals(totalCount, inlineResponse200.totalCount) &&
+ Objects.equals(items, inlineResponse200.items);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(links, totalCount, items);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class InlineResponse200 {\n");
+
+ sb.append(" links: ").append(toIndentedString(links)).append("\n");
+ sb.append(" totalCount: ").append(toIndentedString(totalCount)).append("\n");
+ sb.append(" items: ").append(toIndentedString(items)).append("\n");
+ sb.append("}");
+ return sb.toString();
+ }
+
+ /**
+ * Convert the given object to string with each line indented by 4 spaces
+ * (except the first line).
+ */
+ private String toIndentedString(Object o) {
+ if (o == null) {
+ return "null";
+ }
+ return o.toString().replace("\n", "\n ");
+ }
+}
+
diff --git a/src/gen/java/io/swagger/model/InlineResponse2001.java b/src/gen/java/io/swagger/model/InlineResponse2001.java
new file mode 100644
index 0000000..26cf3be
--- /dev/null
+++ b/src/gen/java/io/swagger/model/InlineResponse2001.java
@@ -0,0 +1,140 @@
+package io.swagger.model;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.model.DCAEService;
+import io.swagger.model.InlineResponse200Links;
+import java.util.ArrayList;
+import java.util.List;
+
+
+
+
+
+@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-04-20T02:21:09.269Z")
+public class InlineResponse2001 {
+
+ private InlineResponse200Links links = null;
+ private Integer totalCount = null;
+ private List<DCAEService> items = new ArrayList<DCAEService>();
+
+ /**
+ **/
+ public InlineResponse2001 links(InlineResponse200Links links) {
+ this.links = links;
+ return this;
+ }
+
+
+ @ApiModelProperty(value = "")
+ @JsonProperty("links")
+ public InlineResponse200Links getLinks() {
+ return links;
+ }
+ public void setLinks(InlineResponse200Links links) {
+ this.links = links;
+ }
+
+ /**
+ **/
+ public InlineResponse2001 totalCount(Integer totalCount) {
+ this.totalCount = totalCount;
+ return this;
+ }
+
+
+ @ApiModelProperty(value = "")
+ @JsonProperty("totalCount")
+ public Integer getTotalCount() {
+ return totalCount;
+ }
+ public void setTotalCount(Integer totalCount) {
+ this.totalCount = totalCount;
+ }
+
+ /**
+ **/
+ public InlineResponse2001 items(List<DCAEService> items) {
+ this.items = items;
+ return this;
+ }
+
+
+ @ApiModelProperty(value = "")
+ @JsonProperty("items")
+ public List<DCAEService> getItems() {
+ return items;
+ }
+ public void setItems(List<DCAEService> items) {
+ this.items = items;
+ }
+
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ InlineResponse2001 inlineResponse2001 = (InlineResponse2001) o;
+ return Objects.equals(links, inlineResponse2001.links) &&
+ Objects.equals(totalCount, inlineResponse2001.totalCount) &&
+ Objects.equals(items, inlineResponse2001.items);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(links, totalCount, items);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class InlineResponse2001 {\n");
+
+ sb.append(" links: ").append(toIndentedString(links)).append("\n");
+ sb.append(" totalCount: ").append(toIndentedString(totalCount)).append("\n");
+ sb.append(" items: ").append(toIndentedString(items)).append("\n");
+ sb.append("}");
+ return sb.toString();
+ }
+
+ /**
+ * Convert the given object to string with each line indented by 4 spaces
+ * (except the first line).
+ */
+ private String toIndentedString(Object o) {
+ if (o == null) {
+ return "null";
+ }
+ return o.toString().replace("\n", "\n ");
+ }
+}
+
diff --git a/src/gen/java/io/swagger/model/InlineResponse200Links.java b/src/gen/java/io/swagger/model/InlineResponse200Links.java
new file mode 100644
index 0000000..ffcb51a
--- /dev/null
+++ b/src/gen/java/io/swagger/model/InlineResponse200Links.java
@@ -0,0 +1,120 @@
+package io.swagger.model;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import javax.ws.rs.core.Link;
+
+
+
+/**
+ * Pagination links
+ **/
+
+@ApiModel(description = "Pagination links")
+@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-04-18T20:16:22.119Z")
+public class InlineResponse200Links {
+
+ private Link previousLink = null;
+ private Link nextLink = null;
+
+ /**
+ **/
+ public InlineResponse200Links previousLink(Link previousLink) {
+ this.previousLink = previousLink;
+ return this;
+ }
+
+
+ @ApiModelProperty(value = "")
+ @JsonProperty("previousLink")
+ public Link getPreviousLink() {
+ return previousLink;
+ }
+ public void setPreviousLink(Link previousLink) {
+ this.previousLink = previousLink;
+ }
+
+ /**
+ **/
+ public InlineResponse200Links nextLink(Link nextLink) {
+ this.nextLink = nextLink;
+ return this;
+ }
+
+
+ @ApiModelProperty(value = "")
+ @JsonProperty("nextLink")
+ public Link getNextLink() {
+ return nextLink;
+ }
+ public void setNextLink(Link nextLink) {
+ this.nextLink = nextLink;
+ }
+
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ InlineResponse200Links inlineResponse200Links = (InlineResponse200Links) o;
+ return Objects.equals(previousLink, inlineResponse200Links.previousLink) &&
+ Objects.equals(nextLink, inlineResponse200Links.nextLink);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(previousLink, nextLink);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class InlineResponse200Links {\n");
+
+ sb.append(" previousLink: ").append(toIndentedString(previousLink)).append("\n");
+ sb.append(" nextLink: ").append(toIndentedString(nextLink)).append("\n");
+ sb.append("}");
+ return sb.toString();
+ }
+
+ /**
+ * Convert the given object to string with each line indented by 4 spaces
+ * (except the first line).
+ */
+ private String toIndentedString(Object o) {
+ if (o == null) {
+ return "null";
+ }
+ return o.toString().replace("\n", "\n ");
+ }
+}
+
diff --git a/src/gen/java/io/swagger/model/Link.java b/src/gen/java/io/swagger/model/Link.java
new file mode 100644
index 0000000..56a6f95
--- /dev/null
+++ b/src/gen/java/io/swagger/model/Link.java
@@ -0,0 +1,136 @@
+package io.swagger.model;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+
+
+
+
+@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-04-18T20:16:22.119Z")
+public class Link {
+
+ private String title = null;
+ private String rel = null;
+ private String href = null;
+
+ /**
+ **/
+ public Link title(String title) {
+ this.title = title;
+ return this;
+ }
+
+
+ @ApiModelProperty(value = "")
+ @JsonProperty("title")
+ public String getTitle() {
+ return title;
+ }
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ /**
+ **/
+ public Link rel(String rel) {
+ this.rel = rel;
+ return this;
+ }
+
+
+ @ApiModelProperty(value = "")
+ @JsonProperty("rel")
+ public String getRel() {
+ return rel;
+ }
+ public void setRel(String rel) {
+ this.rel = rel;
+ }
+
+ /**
+ **/
+ public Link href(String href) {
+ this.href = href;
+ return this;
+ }
+
+
+ @ApiModelProperty(value = "")
+ @JsonProperty("href")
+ public String getHref() {
+ return href;
+ }
+ public void setHref(String href) {
+ this.href = href;
+ }
+
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ Link link = (Link) o;
+ return Objects.equals(title, link.title) &&
+ Objects.equals(rel, link.rel) &&
+ Objects.equals(href, link.href);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(title, rel, href);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class Link {\n");
+
+ sb.append(" title: ").append(toIndentedString(title)).append("\n");
+ sb.append(" rel: ").append(toIndentedString(rel)).append("\n");
+ sb.append(" href: ").append(toIndentedString(href)).append("\n");
+ sb.append("}");
+ return sb.toString();
+ }
+
+ /**
+ * Convert the given object to string with each line indented by 4 spaces
+ * (except the first line).
+ */
+ private String toIndentedString(Object o) {
+ if (o == null) {
+ return "null";
+ }
+ return o.toString().replace("\n", "\n ");
+ }
+}
+
diff --git a/src/main/java/io/swagger/api/Bootstrap.java b/src/main/java/io/swagger/api/Bootstrap.java
new file mode 100644
index 0000000..71be330
--- /dev/null
+++ b/src/main/java/io/swagger/api/Bootstrap.java
@@ -0,0 +1,52 @@
+package io.swagger.api;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import io.swagger.jaxrs.config.SwaggerContextService;
+import io.swagger.models.*;
+
+import io.swagger.models.auth.*;
+
+import javax.servlet.http.HttpServlet;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletException;
+
+public class Bootstrap extends HttpServlet {
+ @Override
+ public void init(ServletConfig config) throws ServletException {
+ Info info = new Info()
+ .title("Swagger Server")
+ .description("DCAE Inventory is a web service that provides the following:\n\n1. Real-time data on all DCAE services and their components\n2. Comprehensive details on available DCAE service types\n")
+ .termsOfService("")
+ .license(new License()
+ .name("")
+ .url(""));
+
+ ServletContext context = config.getServletContext();
+ Swagger swagger = new Swagger().info(info);
+
+ new SwaggerContextService().withServletConfig(config).updateSwagger(swagger);
+ }
+}
diff --git a/src/main/java/io/swagger/api/factories/DcaeServiceTypesApiServiceFactory.java b/src/main/java/io/swagger/api/factories/DcaeServiceTypesApiServiceFactory.java
new file mode 100644
index 0000000..ba583b8
--- /dev/null
+++ b/src/main/java/io/swagger/api/factories/DcaeServiceTypesApiServiceFactory.java
@@ -0,0 +1,38 @@
+package io.swagger.api.factories;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import io.swagger.api.DcaeServiceTypesApiService;
+import io.swagger.api.impl.DcaeServiceTypesApiServiceImpl;
+
+@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-04-18T20:16:22.119Z")
+public class DcaeServiceTypesApiServiceFactory {
+
+ private final static DcaeServiceTypesApiService service = new DcaeServiceTypesApiServiceImpl();
+
+ public static DcaeServiceTypesApiService getDcaeServiceTypesApi()
+ {
+ return service;
+ }
+}
diff --git a/src/main/java/io/swagger/api/factories/DcaeServicesApiServiceFactory.java b/src/main/java/io/swagger/api/factories/DcaeServicesApiServiceFactory.java
new file mode 100644
index 0000000..6bd06a0
--- /dev/null
+++ b/src/main/java/io/swagger/api/factories/DcaeServicesApiServiceFactory.java
@@ -0,0 +1,57 @@
+package io.swagger.api.factories;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import org.openecomp.dcae.inventory.clients.DCAEControllerClient;
+import org.openecomp.dcae.inventory.clients.DatabusControllerClient;
+import io.swagger.api.DcaeServicesApiService;
+import io.swagger.api.impl.DcaeServicesApiServiceImpl;
+
+@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-04-18T20:16:22.119Z")
+public class DcaeServicesApiServiceFactory {
+
+ // Yes I agree this code is not great and I blame for Swagger for putting me in this spot.
+ private static DCAEControllerClient dcaeControllerClient;
+ private static DatabusControllerClient databusControllerClient;
+
+ public static void setDcaeControllerClient(DCAEControllerClient dcaeControllerClient) {
+ DcaeServicesApiServiceFactory.dcaeControllerClient = dcaeControllerClient;
+ }
+
+ public static void setDatabusControllerClient(DatabusControllerClient databusControllerClient) {
+ DcaeServicesApiServiceFactory.databusControllerClient = databusControllerClient;
+ }
+
+ public static DcaeServicesApiService getDcaeServicesApi() {
+ // TODO: Hide these exceptions behind a custom exception. This should be fatal.
+ if (dcaeControllerClient == null) {
+ throw new RuntimeException("DCAE controller client not configured");
+ }
+ if (databusControllerClient == null) {
+ throw new RuntimeException("Databus controller client not configured");
+ }
+ return new DcaeServicesApiServiceImpl(dcaeControllerClient, databusControllerClient);
+ }
+
+}
diff --git a/src/main/java/io/swagger/api/factories/DcaeServicesGroupbyApiServiceFactory.java b/src/main/java/io/swagger/api/factories/DcaeServicesGroupbyApiServiceFactory.java
new file mode 100644
index 0000000..43cdcb6
--- /dev/null
+++ b/src/main/java/io/swagger/api/factories/DcaeServicesGroupbyApiServiceFactory.java
@@ -0,0 +1,38 @@
+package io.swagger.api.factories;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import io.swagger.api.DcaeServicesGroupbyApiService;
+import io.swagger.api.impl.DcaeServicesGroupbyApiServiceImpl;
+
+@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-04-18T20:16:22.119Z")
+public class DcaeServicesGroupbyApiServiceFactory {
+
+ private final static DcaeServicesGroupbyApiService service = new DcaeServicesGroupbyApiServiceImpl();
+
+ public static DcaeServicesGroupbyApiService getDcaeServicesGroupbyApi()
+ {
+ return service;
+ }
+}
diff --git a/src/main/java/io/swagger/api/impl/DcaeServiceTypesApiServiceImpl.java b/src/main/java/io/swagger/api/impl/DcaeServiceTypesApiServiceImpl.java
new file mode 100644
index 0000000..261f52c
--- /dev/null
+++ b/src/main/java/io/swagger/api/impl/DcaeServiceTypesApiServiceImpl.java
@@ -0,0 +1,222 @@
+package io.swagger.api.impl;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import org.openecomp.dcae.inventory.daos.DCAEServiceTypesDAO;
+import org.openecomp.dcae.inventory.daos.DCAEServicesDAO;
+import org.openecomp.dcae.inventory.daos.InventoryDAOManager;
+import org.openecomp.dcae.inventory.dbthings.mappers.DCAEServiceTypeObjectMapper;
+import org.openecomp.dcae.inventory.dbthings.models.DCAEServiceObject;
+import org.openecomp.dcae.inventory.dbthings.models.DCAEServiceTypeObject;
+import io.swagger.api.*;
+import io.swagger.model.*;
+
+import io.swagger.api.NotFoundException;
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
+import org.skife.jdbi.v2.Handle;
+import org.skife.jdbi.v2.Query;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.SecurityContext;
+import javax.ws.rs.core.UriInfo;
+import java.util.ArrayList;
+import java.util.List;
+
+@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-04-18T20:16:22.119Z")
+public class DcaeServiceTypesApiServiceImpl extends DcaeServiceTypesApiService {
+
+ private final static Logger LOG = LoggerFactory.getLogger(DcaeServiceTypesApiServiceImpl.class);
+ private static int PAGINATION_PAGE_SIZE = 25;
+
+ private DCAEServiceType createDCAEServiceType(DCAEServiceTypeObject serviceTypeObject, UriInfo uriInfo) {
+ DCAEServiceType serviceType = new DCAEServiceType();
+ serviceType.setSelfLink(DcaeServiceTypesApi.buildLinkForGet(uriInfo, "self", serviceTypeObject.getTypeName()));
+ serviceType.setTypeName(serviceTypeObject.getTypeName());
+ serviceType.setOwner(serviceTypeObject.getOwner());
+ serviceType.setVnfTypes(serviceTypeObject.getVnfTypes());
+ serviceType.setServiceIds(serviceTypeObject.getServiceIds());
+ serviceType.setServiceLocations(serviceTypeObject.getServiceLocations());
+ serviceType.setBlueprintTemplate(serviceTypeObject.getBlueprintTemplate());
+ serviceType.created(serviceTypeObject.getCreated().toDate());
+
+ return serviceType;
+ }
+
+ @Override
+ public Response dcaeServiceTypesGet(String vnfType, String serviceId, String serviceLocation, Integer offset, UriInfo uriInfo,
+ SecurityContext securityContext)
+ throws NotFoundException {
+ List<DCAEServiceTypeObject> serviceTypeObjects = new ArrayList<>();
+
+ // TODO: Make this variable also a URL parameter.
+ DateTime createdCutoff = DateTime.now(DateTimeZone.UTC);
+
+ try (Handle jdbiHandle = InventoryDAOManager.getInstance().getHandle()) {
+ StringBuilder sb = new StringBuilder("select * from dcae_service_types");
+
+ List<String> whereClauses = new ArrayList<String>();
+
+ if (vnfType != null) {
+ whereClauses.add(":vnfType = any(vnf_types)");
+ }
+
+ if (serviceId != null) {
+ whereClauses.add("(:serviceId = any(service_ids) or service_ids = \'{}\' or service_ids is null)");
+ }
+
+ if (serviceLocation != null) {
+ whereClauses.add("(:serviceLocation = any(service_locations) or service_locations = \'{}\' or service_locations is null)");
+ }
+
+ whereClauses.add("created < :createdCutoff");
+ // We only want the active service types
+ whereClauses.add("is_active = TRUE");
+
+ if (!whereClauses.isEmpty()) {
+ sb.append(" where ");
+ sb.append(String.join(" and ", whereClauses));
+ }
+
+ // Sort by created timestamp - always descending.
+ sb.append(" order by created desc");
+
+ Query<DCAEServiceTypeObject> query = jdbiHandle.createQuery(sb.toString()).map(new DCAEServiceTypeObjectMapper());
+
+ if (vnfType != null) {
+ query.bind("vnfType", vnfType);
+ }
+
+ if (serviceId != null) {
+ query.bind("serviceId", serviceId);
+ }
+
+ if (serviceLocation != null) {
+ query.bind("serviceLocation", serviceLocation);
+ }
+
+ query.bind("createdCutoff", createdCutoff);
+
+ serviceTypeObjects = query.list();
+ }
+
+ offset = (offset == null) ? 0 : offset;
+
+ Integer totalCount = serviceTypeObjects.size();
+
+ // See comment in DcaeServicesApiServiceImpl.java above similar code.
+ Integer endpoint = Math.min(offset + PAGINATION_PAGE_SIZE, totalCount);
+ List<DCAEServiceTypeObject> serviceTypeObjectsSliced = serviceTypeObjects.subList(offset, endpoint);
+
+ List<DCAEServiceType> serviceTypes = new ArrayList<>();
+
+ for (DCAEServiceTypeObject serviceTypeObject : serviceTypeObjectsSliced) {
+ serviceTypes.add(createDCAEServiceType(serviceTypeObject, uriInfo));
+ }
+
+ InlineResponse200 response = new InlineResponse200();
+ response.setItems(serviceTypes);
+ response.setTotalCount(totalCount);
+
+ InlineResponse200Links navigationLinks = new InlineResponse200Links();
+ Integer offsetPrev = offset - PAGINATION_PAGE_SIZE;
+
+ if (offsetPrev >= 0) {
+ navigationLinks.setPreviousLink(DcaeServiceTypesApi.buildLinkForGet(uriInfo, "prev", vnfType, offsetPrev));
+ }
+
+ Integer offsetNext = offset + PAGINATION_PAGE_SIZE;
+
+ if (offsetNext < totalCount) {
+ navigationLinks.setNextLink(DcaeServiceTypesApi.buildLinkForGet(uriInfo, "next", vnfType, offsetNext));
+ }
+
+ response.setLinks(navigationLinks);
+
+ return Response.ok().entity(response).build();
+ }
+
+ @Override
+ public Response dcaeServiceTypesTypeNameGet(String typeName, UriInfo uriInfo, SecurityContext securityContext)
+ throws NotFoundException {
+ DCAEServiceTypesDAO serviceTypesDAO = InventoryDAOManager.getInstance().getDCAEServiceTypesDAO();
+ DCAEServiceTypeObject serviceTypeObject = serviceTypesDAO.getByTypeName(typeName);
+
+ if (serviceTypeObject == null) {
+ return Response.status(Response.Status.NOT_FOUND).build();
+ }
+
+ return Response.ok().entity(createDCAEServiceType(serviceTypeObject, uriInfo)).build();
+ }
+
+ @Override
+ public Response dcaeServiceTypesTypeNamePut(String typeName, DCAEServiceTypeRequest request, UriInfo uriInfo,
+ SecurityContext securityContext) {
+ DCAEServiceTypesDAO serviceTypesDAO = InventoryDAOManager.getInstance().getDCAEServiceTypesDAO();
+ DCAEServiceTypeObject serviceTypeObject = serviceTypesDAO.getByTypeName(typeName);
+
+ if (serviceTypeObject == null) {
+ // Create object from request
+ serviceTypeObject = new DCAEServiceTypeObject();
+ serviceTypeObject.setTypeName(typeName);
+ serviceTypeObject.setOwner(request.getOwner());
+ serviceTypeObject.setVnfTypes(request.getVnfTypes());
+ serviceTypeObject.setServiceIds(request.getServiceIds());
+ serviceTypeObject.setServiceLocations(request.getServiceLocations());
+ serviceTypeObject.setBlueprintTemplate(request.getBlueprintTemplate());
+ serviceTypeObject.setCreated(DateTime.now(DateTimeZone.UTC));
+
+ serviceTypesDAO.insertNewerVersion(serviceTypeObject);
+
+ return Response.ok().entity(createDCAEServiceType(serviceTypeObject, uriInfo)).build();
+ }
+
+ DCAEServicesDAO servicesDAO = InventoryDAOManager.getInstance().getDCAEServicesDAO();
+ Integer count = servicesDAO.countByType(DCAEServiceObject.DCAEServiceStatus.RUNNING, typeName);
+
+ LOG.info(String.format("Checked num DCAE services running: %s, %d", typeName, count));
+
+ // Allow the updating of an existing DCAE service type IFF there are no running DCAE services for this type
+
+ if (count > 0) {
+ String message = String.format("DCAE services of type %s are still running: %d", typeName, count);
+ ApiResponseMessage entity = new ApiResponseMessage(ApiResponseMessage.ERROR, message);
+ return Response.status(Response.Status.CONFLICT).entity(entity).build();
+ } else {
+ serviceTypeObject.setOwner(request.getOwner());
+ serviceTypeObject.setVnfTypes(request.getVnfTypes());
+ serviceTypeObject.setServiceIds(request.getServiceIds());
+ serviceTypeObject.setServiceLocations(request.getServiceLocations());
+ serviceTypeObject.setBlueprintTemplate(request.getBlueprintTemplate());
+ serviceTypeObject.setCreated(DateTime.now(DateTimeZone.UTC));
+
+ InventoryDAOManager.getInstance().getDCAEServiceTypeTransactionDAO().upsert(serviceTypeObject);
+
+ return Response.ok().entity(serviceTypeObject).build();
+ }
+ }
+
+}
diff --git a/src/main/java/io/swagger/api/impl/DcaeServicesApiServiceImpl.java b/src/main/java/io/swagger/api/impl/DcaeServicesApiServiceImpl.java
new file mode 100644
index 0000000..1861688
--- /dev/null
+++ b/src/main/java/io/swagger/api/impl/DcaeServicesApiServiceImpl.java
@@ -0,0 +1,400 @@
+package io.swagger.api.impl;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import org.openecomp.dcae.inventory.clients.DCAEControllerClient;
+import org.openecomp.dcae.inventory.clients.DatabusControllerClient;
+import org.openecomp.dcae.inventory.daos.DCAEServiceComponentsDAO;
+import org.openecomp.dcae.inventory.daos.DCAEServiceTransactionDAO;
+import org.openecomp.dcae.inventory.daos.DCAEServicesDAO;
+import org.openecomp.dcae.inventory.daos.InventoryDAOManager;
+import org.openecomp.dcae.inventory.dbthings.mappers.DCAEServiceObjectMapper;
+import org.openecomp.dcae.inventory.dbthings.models.DCAEServiceComponentObject;
+import org.openecomp.dcae.inventory.dbthings.models.DCAEServiceObject;
+import org.openecomp.dcae.inventory.exceptions.DCAEControllerClientException;
+import org.openecomp.dcae.inventory.exceptions.DatabusControllerClientException;
+import io.swagger.api.*;
+import io.swagger.model.*;
+
+import io.swagger.api.NotFoundException;
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
+import org.skife.jdbi.v2.Handle;
+import org.skife.jdbi.v2.Query;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.ws.rs.core.*;
+import javax.ws.rs.core.Link;
+import java.util.*;
+
+@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-04-18T20:16:22.119Z")
+public class DcaeServicesApiServiceImpl extends DcaeServicesApiService {
+
+ private final static Logger LOG = LoggerFactory.getLogger(DcaeServicesApiServiceImpl.class);
+ private static int PAGINATION_PAGE_SIZE = 25;
+ private static String COMPONENT_SOURCE_DCAE_CONTROLLER = "DCAECONTROLLER";
+ private static String COMPONENT_SOURCE_DATA_BUS_CONTROLLER = "DMAAPCONTROLLER";
+
+ private final DCAEControllerClient dcaeControllerClient;
+ private final DatabusControllerClient databusControllerClient;
+
+ private DCAEService createDCAEService(DCAEServiceObject serviceObject, Collection<DCAEServiceComponentObject> componentObjects,
+ UriInfo uriInfo) {
+ // TODO: Complete links: come back and do links for vnf
+ DCAEService service = new DCAEService();
+ service.setServiceId(serviceObject.getServiceId());
+ service.setSelfLink(DcaeServicesApi.buildLinkForGet(uriInfo, "self", serviceObject.getServiceId()));
+ service.setTypeLink(DcaeServiceTypesApi.buildLinkForGet(uriInfo, "type", serviceObject.getTypeName()));
+ service.setCreated(serviceObject.getCreated().toDate());
+ service.setModified(serviceObject.getModified().toDate());
+ service.setVnfId(serviceObject.getVnfId());
+ //service.setVnfLink(vnfLink);
+ service.setVnfType(serviceObject.getVnfType());
+ service.setVnfLocation(serviceObject.getVnfLocation());
+ service.setDeploymentRef(serviceObject.getDeploymentRef());
+
+ List<DCAEServiceComponent> serviceComponents = new ArrayList<DCAEServiceComponent>();
+
+ for (DCAEServiceComponentObject sco : componentObjects) {
+ DCAEServiceComponent component = new DCAEServiceComponent();
+ component.setComponentId(sco.getComponentId());
+ component.setComponentType(sco.getComponentType());
+ component.setComponentSource(sco.getComponentSource());
+ component.setShareable(sco.getShareable());
+ component.setCreated(sco.getCreated().toDate());
+ component.setModified(sco.getModified().toDate());
+
+ // TODO: When putting together the components fail. Should this be a 500 case?
+ // For now, this is just logged as a warning.
+
+ if (COMPONENT_SOURCE_DCAE_CONTROLLER.equals(sco.getComponentSource().toUpperCase())) {
+ try {
+ DCAEControllerClient.ServiceInstance serviceInstance
+ = this.dcaeControllerClient.getServiceInstance(component.getComponentId());
+ component.setStatus(serviceInstance.getStatus());
+ // There's no specific location rather its inferred from the tenant
+ component.setLocation(this.dcaeControllerClient.getLocation(serviceInstance));
+ Link componentLink = Link.fromUri(this.dcaeControllerClient.constructResourceURI(sco.getComponentId()))
+ .rel("component").title(component.getComponentId()).build();
+ component.setComponentLink(componentLink);
+ } catch (DCAEControllerClientException e) {
+ LOG.warn(String.format("%s, %s", e.getMessage(), sco.toString()));
+ }
+ } else if (COMPONENT_SOURCE_DATA_BUS_CONTROLLER.equals(sco.getComponentSource().toUpperCase())) {
+ try {
+ if (this.databusControllerClient.isExists(sco.getComponentId())) {
+ Link componentLink = Link.fromUri(this.databusControllerClient.constructResourceURI(sco.getComponentId()))
+ .rel("component").title(component.getComponentId()).build();
+ component.setComponentLink(componentLink);
+ } else {
+ LOG.warn(String.format("Feed/topic does not exist: %s", sco.getComponentId()));
+ }
+ } catch (DatabusControllerClientException e) {
+ LOG.warn(String.format("%s, %s", e.getMessage(), sco.toString()));
+ }
+ } else {
+ LOG.warn(String.format("Handling unknown component source: %s", sco.getComponentSource()));
+ }
+
+ serviceComponents.add(component);
+ }
+
+ service.components(serviceComponents);
+
+ return service;
+ }
+
+ @Override
+ public Response dcaeServicesGet(String typeName, String vnfId, String vnfType, String vnfLocation,
+ String componentType, Boolean shareable, DateTime created, Integer offset,
+ UriInfo uriInfo, SecurityContext securityContext) {
+ List<DCAEServiceObject> serviceObjects = new ArrayList<>();
+ DateTime createdCutoff = (created == null ? DateTime.now(DateTimeZone.UTC) : created);
+
+ LOG.info(String.format("Create time upper bound cutoff: %s", createdCutoff.toString()));
+
+ // Offset is zero-based index
+ offset = (offset == null) ? 0 : offset;
+ LOG.info(String.format("Query offset: %d", offset));
+
+ try (Handle jdbiHandle = InventoryDAOManager.getInstance().getHandle()) {
+ // WATCH! There is the use of "distinct" here.
+ StringBuilder sb = new StringBuilder("select distinct ds.* from dcae_services ds");
+ sb.append(" join dcae_services_components_maps m on ds.service_id = m.service_id ");
+ sb.append(" join dcae_service_components dsc on m.component_id = dsc.component_id");
+
+ List<String> whereClauses = new ArrayList<String>();
+
+ if (typeName != null) {
+ whereClauses.add("ds.type_name = :typeName");
+ }
+
+ if (vnfId != null) {
+ whereClauses.add("ds.vnf_id = :vnfId");
+ }
+
+ if (vnfType != null) {
+ whereClauses.add("ds.vnf_type = :vnfType");
+ }
+
+ if (vnfLocation != null) {
+ whereClauses.add("ds.vnf_location = :vnfLocation");
+ }
+
+ if (componentType != null) {
+ whereClauses.add("dsc.component_type = :componentType");
+ }
+
+ if (shareable != null) {
+ whereClauses.add("dsc.shareable = :shareable");
+ }
+
+ whereClauses.add("ds.created < :createdCutoff");
+ whereClauses.add("ds.status = :serviceStatus");
+
+ if (!whereClauses.isEmpty()) {
+ sb.append(" where ");
+ sb.append(String.join(" and ", whereClauses));
+ }
+
+ // Sort by created timestamp - always descending.
+ sb.append(" order by created desc");
+
+ Query<DCAEServiceObject> query = jdbiHandle.createQuery(sb.toString()).map(new DCAEServiceObjectMapper());
+
+ if (typeName != null) {
+ query.bind("typeName", typeName);
+ }
+
+ if (vnfId != null) {
+ query.bind("vnfId", vnfId);
+ }
+
+ if (vnfType != null) {
+ query.bind("vnfType", vnfType);
+ }
+
+ if (vnfLocation != null) {
+ query.bind("vnfLocation", vnfLocation);
+ }
+
+ if (componentType != null) {
+ query.bind("componentType", componentType);
+ }
+
+ if (shareable != null) {
+ // NOTE: That the shareable field in the database is actually an integer.
+ query.bind("shareable", (shareable ? 1 : 0));
+ }
+
+ query.bind("createdCutoff", createdCutoff);
+ // NOTE: This is hardcoded because service status is only used internally.
+ query.bind("serviceStatus", DCAEServiceObject.DCAEServiceStatus.RUNNING);
+
+ serviceObjects = query.list();
+ }
+
+ // NOTE: Chose to do the pagination via in code here rather than in SQL using LIMIT and OFFSET constraints
+ // because of the need for the global total number of result items. SQL approach would require two queries.
+ // Going forward, I think the better approach is using SQL because the resultsets may become very large.
+ // For now I think this approach is OK and actually we do less SQL querying.
+ Integer endpoint = Math.min(offset + PAGINATION_PAGE_SIZE, serviceObjects.size());
+ List<DCAEServiceObject> serviceObjectsSliced = serviceObjects.subList(offset, endpoint);
+
+ DCAEServiceComponentsDAO componentsDAO = InventoryDAOManager.getInstance().getDCAEServiceComponentsDAO();
+ List<DCAEService> services = new ArrayList<DCAEService>();
+
+ for (DCAEServiceObject so : serviceObjectsSliced) {
+ List<DCAEServiceComponentObject> components = componentsDAO.getByServiceId(so.getServiceId());
+ services.add(createDCAEService(so, components, uriInfo));
+ }
+
+ InlineResponse2001 response = new InlineResponse2001();
+ response.setItems(services);
+ response.setTotalCount(serviceObjects.size());
+ // TODO: Show the total count of items in this response i.e. local count?
+
+ InlineResponse200Links navigationLinks = new InlineResponse200Links();
+ Integer offsetPrev = offset - PAGINATION_PAGE_SIZE;
+
+ if (offsetPrev >= 0) {
+ navigationLinks.setPreviousLink(DcaeServicesApi.buildLinkForGet(uriInfo, "prev", typeName, vnfId, vnfType,
+ vnfLocation, componentType, shareable, created, offsetPrev));
+ }
+
+ Integer offsetNext = offset + PAGINATION_PAGE_SIZE;
+
+ if (offsetNext < serviceObjects.size()) {
+ navigationLinks.setNextLink(DcaeServicesApi.buildLinkForGet(uriInfo, "next", typeName, vnfId, vnfType,
+ vnfLocation, componentType, shareable, created, offsetNext));
+ }
+
+ response.setLinks(navigationLinks);
+
+ return Response.ok().entity(response).build();
+ }
+
+ @Override
+ public Response dcaeServicesServiceIdGet(String serviceId, UriInfo uriInfo, SecurityContext securityContext)
+ throws NotFoundException {
+ DCAEServicesDAO servicesDAO = InventoryDAOManager.getInstance().getDCAEServicesDAO();
+ DCAEServiceComponentsDAO componentsDAO = InventoryDAOManager.getInstance().getDCAEServiceComponentsDAO();
+
+ DCAEServiceObject serviceObject = servicesDAO.getByServiceId(DCAEServiceObject.DCAEServiceStatus.RUNNING, serviceId);
+
+ if (serviceObject == null) {
+ throw new NotFoundException(1, String.format("DCAEService not found: %s", serviceId));
+ }
+
+ List<DCAEServiceComponentObject> componentObjects = componentsDAO.getByServiceId(serviceId);
+ DCAEService service = createDCAEService(serviceObject, componentObjects, uriInfo);
+
+ return Response.ok().entity(service).build();
+ }
+
+ @Override
+ public Response dcaeServicesServiceIdPut(String serviceId, DCAEServiceRequest request, UriInfo uriInfo,
+ SecurityContext securityContext) {
+ // Check to make sure that the DCAE service type exists
+ if (InventoryDAOManager.getInstance().getDCAEServiceTypesDAO().getByTypeName(request.getTypeName()) == null) {
+ String errorMessage = String.format("DCAE service type does not exist: %s", request.getTypeName());
+ ApiResponseMessage message = new ApiResponseMessage(ApiResponseMessage.ERROR, errorMessage);
+ return Response.status(422).entity(message).build();
+ }
+
+ // TODO: Check DCAE service components against source services i.e. DCAE controller and data bus controller
+ // Possibly refuse to process if that check fails.
+
+ DCAEServicesDAO servicesDAO = InventoryDAOManager.getInstance().getDCAEServicesDAO();
+ DCAEServiceComponentsDAO componentsDAO = InventoryDAOManager.getInstance().getDCAEServiceComponentsDAO();
+
+ // NOTE: 1607 is using Postgres v9.3 which does NOT have the upgrade to the INSERT operation that allows for UPSERTs
+ // Challenge here is make this entire PUT operation atomic.
+ // TODO: 1607 we are actually using v9.5 which has the UPSERT. Migrate this code to use the UPSERT.
+
+ // Watch! We have to query for services regardless of status because we need to account for "removed" instances
+ // that get resurrected.
+ final DCAEServiceObject serviceObjectFromStore = servicesDAO.getByServiceId(serviceId);
+ final Map<String, DCAEServiceComponentObject> componentObjectsFromStore = new HashMap<String, DCAEServiceComponentObject>();
+
+ for (DCAEServiceComponentObject componentObject : componentsDAO.getByServiceId(serviceId)) {
+ componentObjectsFromStore.put(componentObject.getComponentId(), componentObject);
+ }
+
+ DateTime modified = DateTime.now(DateTimeZone.UTC);
+
+ DCAEServiceTransactionDAO.DCAEServiceTransactionContext transactionContext
+ = new DCAEServiceTransactionDAO.DCAEServiceTransactionContext(serviceId, modified);
+
+ // 1) Insert/update for DCAEServiceObject
+
+ DCAEServiceObject serviceObjectToSendBack = serviceObjectFromStore;
+
+ if (serviceObjectFromStore == null) {
+ serviceObjectToSendBack = new DCAEServiceObject(serviceId, request);
+ serviceObjectToSendBack.setModified(modified);
+ transactionContext.setServiceObjectToInsert(serviceObjectToSendBack);
+ } else {
+ LOG.info(String.format("DCAEServiceObject already exists - updating: %s, %s",
+ serviceObjectFromStore.getCreated().toString(),
+ serviceObjectFromStore.getModified().toString()));
+
+ serviceObjectToSendBack = new DCAEServiceObject(serviceObjectFromStore, request);
+ serviceObjectToSendBack.setModified(modified);
+ transactionContext.setServiceObjectToUpdate(serviceObjectToSendBack);
+ }
+
+ // 2) Insert/update DCAEServiceComponentObjects. Components exist independent of the associated DCAE service.
+
+ Map<String, DCAEServiceComponentObject> componentObjectsToSendBack = new HashMap<String, DCAEServiceComponentObject>();
+
+ for (DCAEServiceComponentRequest requestComponent : request.getComponents()) {
+ // Have to query the database rather than checking the result of getting by service id because of the
+ // independence of components and services. A component may already exist even though from a service
+ // perspective it is seen as "new".
+ final DCAEServiceComponentObject coExisting = componentsDAO.getByComponentId(requestComponent.getComponentId());
+ DCAEServiceComponentObject coToSendBack = null;
+
+ if (coExisting == null) {
+ // Add new component
+ coToSendBack = new DCAEServiceComponentObject(requestComponent);
+ coToSendBack.setModified(modified);
+ transactionContext.addComponentObjectToInsert(coToSendBack);
+ } else {
+ // TODO: Check if the mutable fields have changed before doing the update.
+ // Update existing component
+ coToSendBack = new DCAEServiceComponentObject(coExisting, requestComponent);
+ coToSendBack.setModified(modified);
+ transactionContext.addComponentObjectToUpdate(coToSendBack);
+ }
+
+ if (coToSendBack != null) {
+ componentObjectsToSendBack.put(coToSendBack.getComponentId(), coToSendBack);
+ }
+ }
+
+ // 3) Update relationships: add ones that don't exist, delete ones that do exist but no longer should not
+
+ // Add relationships that didn't exist before
+ for (String componentId : componentObjectsToSendBack.keySet()) {
+ if (!componentObjectsFromStore.containsKey(componentId)) {
+ transactionContext.addMappingsToInsert(componentId);
+ }
+ }
+
+ // Remove relationships that have been removed
+ for (String componentId : componentObjectsFromStore.keySet()) {
+ if (!componentObjectsToSendBack.containsKey(componentId)) {
+ transactionContext.addMappingsToDelete(componentId);
+ }
+ }
+
+ DCAEServiceTransactionDAO transactionDAO = InventoryDAOManager.getInstance().getDCAEServiceTransactionDAO();
+ transactionDAO.insert(transactionContext);
+
+ DCAEService service = createDCAEService(serviceObjectToSendBack, componentObjectsToSendBack.values(), uriInfo);
+
+ return Response.ok().entity(service).build();
+ }
+
+ public Response dcaeServicesServiceIdDelete(String serviceId, SecurityContext securityContext) throws NotFoundException {
+ DCAEServicesDAO servicesDAO = InventoryDAOManager.getInstance().getDCAEServicesDAO();
+
+ if (servicesDAO.getByServiceId(DCAEServiceObject.DCAEServiceStatus.RUNNING, serviceId) == null) {
+ throw new NotFoundException(ApiResponseMessage.ERROR, String.format("DCAE service not found: %s", serviceId));
+ }
+
+ servicesDAO.updateStatusByServiceId(DateTime.now(DateTimeZone.UTC), DCAEServiceObject.DCAEServiceStatus.REMOVED,
+ serviceId);
+
+ return Response.ok().build();
+ }
+
+ public DcaeServicesApiServiceImpl(DCAEControllerClient dcaeControllerClient, DatabusControllerClient databusControllerClient) {
+ this.dcaeControllerClient = dcaeControllerClient;
+ this.databusControllerClient = databusControllerClient;
+ }
+
+}
diff --git a/src/main/java/io/swagger/api/impl/DcaeServicesGroupbyApiServiceImpl.java b/src/main/java/io/swagger/api/impl/DcaeServicesGroupbyApiServiceImpl.java
new file mode 100644
index 0000000..10bd7fa
--- /dev/null
+++ b/src/main/java/io/swagger/api/impl/DcaeServicesGroupbyApiServiceImpl.java
@@ -0,0 +1,106 @@
+package io.swagger.api.impl;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import org.openecomp.dcae.inventory.daos.InventoryDAOManager;
+import org.openecomp.dcae.inventory.dbthings.models.DCAEServiceObject;
+import io.swagger.api.*;
+import io.swagger.model.DCAEServiceGroupByResults;
+import io.swagger.model.DCAEServiceGroupByResultsPropertyValues;
+import org.skife.jdbi.v2.Handle;
+
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.SecurityContext;
+import javax.ws.rs.core.UriInfo;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-04-18T20:16:22.119Z")
+public class DcaeServicesGroupbyApiServiceImpl extends DcaeServicesGroupbyApiService {
+
+ @Override
+ public Response dcaeServicesGroupbyPropertyNameGet(String propertyName, UriInfo uriInfo, SecurityContext securityContext) {
+ String columnName = "";
+
+ switch (propertyName) {
+ case "type":
+ columnName = "type_name";
+ break;
+ case "vnfLocation":
+ columnName = "vnf_location";
+ break;
+ case "vnfType":
+ columnName = "vnf_type";
+ break;
+ default:
+ return Response.status(Response.Status.BAD_REQUEST).build();
+ }
+
+ List<Map<String, Object>> results = new ArrayList<>();
+
+ try (Handle jdbiHandle = InventoryDAOManager.getInstance().getHandle()) {
+ StringBuilder sb = new StringBuilder();
+ sb.append(String.format("select %s, count(1) as num ", columnName));
+ sb.append(" from dcae_services where status = :serviceStatus");
+ sb.append(String.format(" group by %s order by count(1) desc", columnName));
+ String queryString = sb.toString();
+
+ // NOTE: This is hardcoded because service status is only used internally.
+ results = jdbiHandle.createQuery(queryString).bind("serviceStatus", DCAEServiceObject.DCAEServiceStatus.RUNNING)
+ .list();
+ }
+
+ DCAEServiceGroupByResults response = new DCAEServiceGroupByResults();
+ response.setPropertyName(propertyName);
+
+ for (Map<String, Object> result : results) {
+ DCAEServiceGroupByResultsPropertyValues value = new DCAEServiceGroupByResultsPropertyValues();
+ value.setCount(((Long) result.get("num")).intValue());
+ String propertyValue = (String) result.get(columnName);
+ value.setPropertyValue(propertyValue);
+
+ switch (propertyName) {
+ case "type":
+ value.setDcaeServiceQueryLink(DcaeServicesApi.buildLinkForGetByTypeName(uriInfo, "dcae_services",
+ propertyValue));
+ break;
+ case "vnfLocation":
+ value.setDcaeServiceQueryLink(DcaeServicesApi.buildLinkForGetByVnfLocation(uriInfo, "dcae_services",
+ propertyValue));
+ break;
+ case "vnfType":
+ value.setDcaeServiceQueryLink(DcaeServicesApi.buildLinkForGetByVnfType(uriInfo, "dcae_services",
+ propertyValue));
+ break;
+ default:
+ return Response.status(Response.Status.BAD_REQUEST).build();
+ }
+
+ response.getPropertyValues().add(value);
+ }
+
+ return Response.ok().entity(response).build();
+ }
+}
diff --git a/src/main/java/org/openecomp/dcae/inventory/InventoryApplication.java b/src/main/java/org/openecomp/dcae/inventory/InventoryApplication.java
new file mode 100644
index 0000000..9a16331
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/InventoryApplication.java
@@ -0,0 +1,144 @@
+package org.openecomp.dcae.inventory;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import org.openecomp.dcae.inventory.clients.DCAEControllerClient;
+import org.openecomp.dcae.inventory.clients.DatabusControllerClient;
+import org.openecomp.dcae.inventory.daos.InventoryDAOManager;
+import org.openecomp.dcae.inventory.dbthings.StringListArgument;
+import org.openecomp.dcae.inventory.exceptions.mappers.DCAEControllerConnectionExceptionMapper;
+import org.openecomp.dcae.inventory.exceptions.mappers.DCAEControllerTimeoutExceptionMapper;
+import org.openecomp.dcae.inventory.providers.NotFoundExceptionMapper;
+import com.fasterxml.jackson.databind.module.SimpleModule;
+import io.dropwizard.Application;
+import io.dropwizard.client.JerseyClientBuilder;
+import io.dropwizard.jdbi.DBIFactory;
+import io.dropwizard.setup.Bootstrap;
+import io.dropwizard.setup.Environment;
+import io.swagger.api.DcaeServiceTypesApi;
+import io.swagger.api.DcaeServicesApi;
+import io.swagger.api.DcaeServicesGroupbyApi;
+import io.swagger.api.factories.DcaeServicesApiServiceFactory;
+import io.swagger.jaxrs.config.BeanConfig;
+import io.swagger.jaxrs.listing.ApiListingResource;
+import io.swagger.jaxrs.listing.SwaggerSerializers;
+import io.swagger.models.Contact;
+import io.swagger.models.Info;
+import org.eclipse.jetty.servlets.CrossOriginFilter;
+import org.glassfish.jersey.client.authentication.HttpAuthenticationFeature;
+import org.skife.jdbi.v2.DBI;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.servlet.DispatcherType;
+import javax.servlet.FilterRegistration;
+import javax.ws.rs.client.Client;
+import javax.ws.rs.core.Link;
+import java.util.EnumSet;
+
+
+/**
+ * Created by mhwang on 4/11/16.
+ */
+public class InventoryApplication extends Application<InventoryConfiguration> {
+
+ static final Logger LOG = LoggerFactory.getLogger(InventoryApplication.class);
+
+ public static void main(String[] args) throws Exception {
+ new InventoryApplication().run(args);
+ }
+
+ @Override
+ public String getName() {
+ return "dcae-inventory";
+ }
+
+ @Override
+ public void initialize(Bootstrap<InventoryConfiguration> bootstrap) {
+ // This Info object was lifted from the Swagger generated io.swagger.api.Bootstrap file. Although it was not generated
+ // correctly.
+ Info info = new Info().title("DCAE Inventory API").version("0.8.0")
+ .description("DCAE Inventory is a web service that provides the following:\n\n1. Real-time data on all DCAE services and their components\n2. Comprehensive details on available DCAE service types\n");
+ // Swagger/servlet/jax-rs magic!
+ BeanConfig beanConfig = new BeanConfig();
+ beanConfig.setInfo(info);
+ beanConfig.setResourcePackage("io.swagger.api");
+ beanConfig.setScan(true);
+ }
+
+ @Override
+ public void run(InventoryConfiguration configuration, Environment environment) {
+ LOG.info("Starting DCAE inventory application");
+ LOG.info(String.format("DB driver properties: %s", configuration.getDataSourceFactory().getProperties().toString()));
+ final DBIFactory factory = new DBIFactory();
+ final DBI jdbi = factory.build(environment, configuration.getDataSourceFactory(), "dcae-database");
+ jdbi.registerArgumentFactory(new StringListArgument());
+ InventoryDAOManager.getInstance().init(jdbi);
+
+ // Add filter for CORS support for DCAE dashboard
+ // http://jitterted.com/tidbits/2014/09/12/cors-for-dropwizard-0-7-x/
+ // https://gist.github.com/yunspace/07d80a9ac32901f1e149#file-dropwizardjettycrossoriginintegrationtest-java-L11
+ FilterRegistration.Dynamic filter = environment.servlets().addFilter("CORSFilter", CrossOriginFilter.class);
+ filter.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), false, "/*");
+ filter.setInitParameter(CrossOriginFilter.ALLOWED_ORIGINS_PARAM, "*");
+ filter.setInitParameter(CrossOriginFilter.ALLOWED_HEADERS_PARAM, "Content-Type,Authorization,X-Requested-With,Content-Length,Accept,Origin");
+ filter.setInitParameter(CrossOriginFilter.ALLOWED_METHODS_PARAM, "GET,PUT,POST,DELETE,OPTIONS");
+ filter.setInitParameter(CrossOriginFilter.ACCESS_CONTROL_ALLOW_ORIGIN_HEADER, "*");
+
+ // Want to serialize Link in a way we like
+ SimpleModule simpleModule = new SimpleModule();
+ simpleModule.addSerializer(Link.class, new LinkSerializer());
+ environment.getObjectMapper().registerModule(simpleModule);
+
+ // Setup DCAE controller client
+ // Used by the dcae-services API
+ final Client clientDCAEController = new JerseyClientBuilder(environment).using(configuration.getJerseyClientConfiguration())
+ .build("DCAEControllerClient");
+ HttpAuthenticationFeature feature = HttpAuthenticationFeature.basicBuilder().build();
+ clientDCAEController.register(feature);
+ final DCAEControllerClient dcaeControllerClient = new DCAEControllerClient(clientDCAEController, configuration.getDcaeControllerConnection());
+ DcaeServicesApiServiceFactory.setDcaeControllerClient(dcaeControllerClient);
+
+ // Setup Databus controller client
+ // Used by the dcae-services API
+ final Client clientDatabusController = new JerseyClientBuilder(environment).using(configuration.getJerseyClientConfiguration())
+ .build("DatabusControllerClient");
+ final DatabusControllerClient databusControllerClient = new DatabusControllerClient(clientDatabusController,
+ configuration.getDatabusControllerConnection());
+ DcaeServicesApiServiceFactory.setDatabusControllerClient(databusControllerClient);
+
+ environment.jersey().register(NotFoundExceptionMapper.class);
+ environment.jersey().register(DCAEControllerConnectionExceptionMapper.class);
+ environment.jersey().register(DCAEControllerTimeoutExceptionMapper.class);
+
+ environment.jersey().register(new DcaeServicesApi());
+ environment.jersey().register(new DcaeServiceTypesApi());
+ environment.jersey().register(new DcaeServicesGroupbyApi());
+
+ // https://github.com/swagger-api/swagger-core/wiki/Swagger-Core-Jersey-2.X-Project-Setup-1.5
+ environment.jersey().register(new ApiListingResource());
+ environment.jersey().register(new SwaggerSerializers());
+ }
+
+}
diff --git a/src/main/java/org/openecomp/dcae/inventory/InventoryConfiguration.java b/src/main/java/org/openecomp/dcae/inventory/InventoryConfiguration.java
new file mode 100644
index 0000000..54370ee
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/InventoryConfiguration.java
@@ -0,0 +1,146 @@
+package org.openecomp.dcae.inventory;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.dropwizard.Configuration;
+import io.dropwizard.client.JerseyClientConfiguration;
+import io.dropwizard.db.DataSourceFactory;
+import org.hibernate.validator.constraints.NotEmpty;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+
+/**
+ * Created by mhwang on 4/11/16.
+ */
+public class InventoryConfiguration extends Configuration {
+
+ public static class DCAEControllerConnectionConfiguration {
+ @NotEmpty
+ @JsonProperty
+ private String host;
+
+ @NotNull
+ @JsonProperty
+ private Integer port;
+
+ @NotEmpty
+ @JsonProperty
+ private String basePath;
+
+ @NotEmpty
+ @JsonProperty
+ private String user;
+
+ @NotEmpty
+ @JsonProperty
+ private String password;
+
+ public String getHost() {
+ return this.host;
+ }
+
+ public Integer getPort() {
+ return this.port;
+ }
+
+ public String getBasePath() {
+ return this.basePath;
+ }
+
+ public String getUser() {
+ return this.user;
+ }
+
+ public String getPassword() {
+ return this.password;
+ }
+ }
+
+ public static class DatabusControllerConnectionConfiguration {
+ @NotEmpty
+ @JsonProperty
+ private String host;
+
+ @NotNull
+ @JsonProperty
+ private Integer port;
+
+ public String getHost() {
+ return host;
+ }
+
+ public Integer getPort() {
+ return port;
+ }
+ }
+
+ @NotEmpty
+ private String defaultName = "DCAEInventory";
+
+ @Valid
+ @NotNull
+ @JsonProperty
+ private DataSourceFactory database = new DataSourceFactory();
+
+ @NotNull
+ @JsonProperty
+ private DCAEControllerConnectionConfiguration dcaeControllerConnection = new DCAEControllerConnectionConfiguration();
+
+ @NotNull
+ @JsonProperty
+ private DatabusControllerConnectionConfiguration databusControllerConnection = new DatabusControllerConnectionConfiguration();
+
+ @NotNull
+ @JsonProperty
+ private JerseyClientConfiguration httpClient = new JerseyClientConfiguration();
+
+ @JsonProperty
+ public String getDefaultName() {
+ return defaultName;
+ }
+
+ @JsonProperty
+ public void setDefaultName(String name) {
+ this.defaultName = name;
+ }
+
+ public DataSourceFactory getDataSourceFactory() {
+ return this.database;
+ }
+
+ public DCAEControllerConnectionConfiguration getDcaeControllerConnection() {
+ return this.dcaeControllerConnection;
+ }
+
+ public DatabusControllerConnectionConfiguration getDatabusControllerConnection() {
+ return databusControllerConnection;
+ }
+
+ public JerseyClientConfiguration getJerseyClientConfiguration() {
+ return httpClient;
+ }
+
+}
diff --git a/src/main/java/org/openecomp/dcae/inventory/LinkSerializer.java b/src/main/java/org/openecomp/dcae/inventory/LinkSerializer.java
new file mode 100644
index 0000000..8cf07db
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/LinkSerializer.java
@@ -0,0 +1,55 @@
+package org.openecomp.dcae.inventory;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonSerializer;
+import com.fasterxml.jackson.databind.SerializerProvider;
+
+import javax.ws.rs.core.Link;
+import java.io.IOException;
+
+/**
+ * Lifted from
+ * http://stackoverflow.com/questions/26989004/how-to-serialize-declarative-links-jersey-with-jackson
+ *
+ * Created by mhwang on 5/10/16.
+ */
+public class LinkSerializer extends JsonSerializer<Link> {
+
+ @Override
+ public void serialize(Link link, JsonGenerator jg, SerializerProvider sp) throws IOException {
+ jg.writeStartObject();
+
+ if (link.getTitle() != null) {
+ jg.writeStringField("title", link.getTitle());
+ }
+
+ jg.writeStringField("rel", link.getRel());
+ jg.writeStringField("href", link.getUri().toString());
+ jg.writeEndObject();
+ }
+
+}
diff --git a/src/main/java/org/openecomp/dcae/inventory/clients/DCAEControllerClient.java b/src/main/java/org/openecomp/dcae/inventory/clients/DCAEControllerClient.java
new file mode 100644
index 0000000..23e05fd
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/clients/DCAEControllerClient.java
@@ -0,0 +1,225 @@
+package org.openecomp.dcae.inventory.clients;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import org.openecomp.dcae.inventory.InventoryConfiguration;
+import org.openecomp.dcae.inventory.exceptions.DCAEControllerClientException;
+import org.openecomp.dcae.inventory.exceptions.DCAEControllerConnectionException;
+import org.openecomp.dcae.inventory.exceptions.DCAEControllerTimeoutException;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.ws.rs.ProcessingException;
+import javax.ws.rs.client.Client;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.UriBuilder;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URI;
+
+import static org.glassfish.jersey.client.authentication.HttpAuthenticationFeature.*;
+
+/**
+ * Created by mhwang on 5/12/16.
+ */
+public class DCAEControllerClient {
+
+ /**
+ * Used for JSON objects of the form:
+ * "hostService": {"$ref": "/services/vm-docker-host-2/instances/mtl2"}
+ */
+ public static class Reference {
+
+ @JsonProperty("$ref")
+ private String ref;
+
+ public String getRef() {
+ return ref;
+ }
+
+ public void setRef(String ref) {
+ this.ref = ref;
+ }
+
+ }
+
+ /**
+ * Used for the JSON objects returned from /services/{service id}/instances/{instance id}
+ * calls.
+ */
+ @JsonIgnoreProperties(ignoreUnknown = true)
+ public static class ServiceInstance {
+
+ @JsonProperty("status")
+ private String status;
+
+ /**
+ * Property points to the Docker host this Docker container runs on.
+ * This service instance is an application to be run as a Docker container if this value is not null.
+ */
+ @JsonProperty("hostService")
+ @JsonInclude(JsonInclude.Include.NON_ABSENT)
+ private Reference hostService;
+
+ /**
+ * Property points to the CDAP cluster this CDAP application is deployed on.
+ * This service instance is a CDAP application if this value is not null.
+ */
+ @JsonProperty("clusterService")
+ @JsonInclude(JsonInclude.Include.NON_ABSENT)
+ private Reference clusterService;
+
+ /**
+ * Property points to the location resource that this instance is associated with.
+ * This property is not null when the service instance is a "pure" VM.
+ */
+ @JsonProperty("location")
+ @JsonInclude(JsonInclude.Include.NON_ABSENT)
+ private Reference location;
+
+ public String getStatus() {
+ return status;
+ }
+
+ public void setStatus(String status) {
+ this.status = status;
+ }
+
+ public Reference getHostService() {
+ return hostService;
+ }
+
+ public void setHostService(Reference hostService) {
+ this.hostService = hostService;
+ }
+
+ public Reference getClusterService() {
+ return clusterService;
+ }
+
+ public void setClusterService(Reference clusterService) {
+ this.clusterService = clusterService;
+ }
+
+ public Reference getLocation() {
+ return location;
+ }
+
+ public void setLocation(Reference location) {
+ this.location = location;
+ }
+
+ }
+
+ private final static Logger LOG = LoggerFactory.getLogger(DCAEControllerClient.class);
+
+ private final Client client;
+ private final InventoryConfiguration.DCAEControllerConnectionConfiguration connectionConfiguration;
+
+ public URI constructResourceURI(String resourcePath) {
+ // TODO: Better way to construct this?
+
+ // Make sure that the resource path has a "/" because the UriBuilder sucks and doesn't do it for us.
+ if (resourcePath.charAt(0) != '/') {
+ resourcePath = (new StringBuilder("/")).append(resourcePath).toString();
+ }
+
+ StringBuilder actualPath = new StringBuilder("/");
+ actualPath.append(this.connectionConfiguration.getBasePath());
+ actualPath.append(resourcePath);
+
+ return UriBuilder.fromPath(actualPath.toString()).scheme("http").host(this.connectionConfiguration.getHost())
+ .port(this.connectionConfiguration.getPort()).build();
+ }
+
+ public ServiceInstance getServiceInstance(String componentId) throws DCAEControllerClientException {
+ URI uri = constructResourceURI(componentId);
+ Response response = null;
+
+ try {
+ response = client.target(uri).request(MediaType.APPLICATION_JSON_TYPE)
+ .header("Content-Type", "application/json")
+ .property(HTTP_AUTHENTICATION_BASIC_USERNAME, connectionConfiguration.getUser())
+ .property(HTTP_AUTHENTICATION_BASIC_PASSWORD, connectionConfiguration.getPassword()).get();
+ } catch (ProcessingException e) {
+ // Apparently the exceptions are wrapped which is not ideal because many different types of errors are embedded
+ // in single exception. TODO: May want to come back to split up the errors.
+ // Example:
+ // javax.ws.rs.ProcessingException: org.apache.http.conn.ConnectTimeoutException: Connect to aaa.bbb.ccc:9998
+ String message = "Connecting with DCAE controller probably timed out";
+ LOG.error(message, e);
+ String exceptionMessage = String.format("%s: %s", message, e.getMessage());
+ throw new DCAEControllerTimeoutException(exceptionMessage);
+ } catch (Exception e) {
+ String message = "Unexpected connection issue with DCAE controller";
+ LOG.error(message, e);
+ String exceptionMessage = String.format("%s: %s", message, e.getMessage());
+ throw new DCAEControllerConnectionException(exceptionMessage);
+ }
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug(String.format("Received response from DCAE controller: %d", response.getStatus()));
+ }
+
+ if (response.getStatus() == 200) {
+ ObjectMapper om = new ObjectMapper();
+
+ try {
+ return om.readValue((InputStream) response.getEntity(), ServiceInstance.class);
+ } catch (IOException e) {
+ throw new DCAEControllerClientException(e);
+ }
+ }
+
+ throw new DCAEControllerClientException(String.format("Unexpected error from DCAE controller: %d", response.getStatus()));
+ }
+
+ public String getLocation(ServiceInstance serviceInstance) {
+ if (serviceInstance.getLocation() != null) {
+ return serviceInstance.getLocation().getRef();
+ } else if (serviceInstance.getClusterService() != null) {
+ // Drill down: Location is on the underlying CDAP cluster service instance
+ String cdapClusterRef = serviceInstance.getClusterService().getRef();
+ return getLocation(getServiceInstance(cdapClusterRef));
+ } else if (serviceInstance.getHostService() != null) {
+ // Drill down: Location is on the underlying Docker host service instance
+ String dockerHostRef = serviceInstance.getHostService().getRef();
+ return getLocation(getServiceInstance(dockerHostRef));
+ } else {
+ throw new DCAEControllerClientException("No valid location for service instance");
+ }
+ }
+
+ public DCAEControllerClient(Client client,
+ InventoryConfiguration.DCAEControllerConnectionConfiguration connectionConfiguration) {
+ this.client = client;
+ this.connectionConfiguration = connectionConfiguration;
+ }
+
+}
diff --git a/src/main/java/org/openecomp/dcae/inventory/clients/DatabusControllerClient.java b/src/main/java/org/openecomp/dcae/inventory/clients/DatabusControllerClient.java
new file mode 100644
index 0000000..ac3bbf1
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/clients/DatabusControllerClient.java
@@ -0,0 +1,89 @@
+package org.openecomp.dcae.inventory.clients;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import org.openecomp.dcae.inventory.InventoryConfiguration;
+import org.openecomp.dcae.inventory.exceptions.DatabusControllerClientException;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import javax.ws.rs.client.Client;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.UriBuilder;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URI;
+import java.util.Map;
+
+/**
+ * Created by mhwang on 5/25/16.
+ */
+public class DatabusControllerClient {
+
+ private final Client client;
+ private final InventoryConfiguration.DatabusControllerConnectionConfiguration connectionConfiguration;
+
+ public URI constructResourceURI(String resourcePath) {
+ // Make sure that the resource path has a "/" because the UriBuilder sucks and doesn't do it for us.
+ if (resourcePath.charAt(0) != '/') {
+ resourcePath = (new StringBuilder("/")).append(resourcePath).toString();
+ }
+
+ return UriBuilder.fromPath(resourcePath.toString()).scheme("http").host(this.connectionConfiguration.getHost())
+ .port(this.connectionConfiguration.getPort()).build();
+ }
+
+ // TODO: Actually model the JSON objects so that they can be returned to be used for providing useful information
+ // and thus change this to a "get".
+ public boolean isExists(String componentId) throws DatabusControllerClientException {
+ URI uri = constructResourceURI(componentId);
+
+ Response response = client.target(uri).request(MediaType.APPLICATION_JSON_TYPE)
+ .header("Content-Type", "application/json").get();
+
+ if (response.getStatus() == 200) {
+ ObjectMapper om = new ObjectMapper();
+
+ try {
+ Map<String, Object> entity = om.readValue((InputStream) response.getEntity(),
+ new TypeReference<Map<String, Object>>() {});
+
+ return (entity != null && entity.size() > 0) ? true : false;
+ } catch (IOException e) {
+ throw new DatabusControllerClientException(e);
+ }
+ }
+
+ throw new DatabusControllerClientException(String.format("Unexpected error from databus controller: %d",
+ response.getStatus()));
+ }
+
+ public DatabusControllerClient(Client client,
+ InventoryConfiguration.DatabusControllerConnectionConfiguration connectionConfiguration) {
+ this.client = client;
+ this.connectionConfiguration = connectionConfiguration;
+ }
+
+}
diff --git a/src/main/java/org/openecomp/dcae/inventory/daos/DCAEServiceComponentsDAO.java b/src/main/java/org/openecomp/dcae/inventory/daos/DCAEServiceComponentsDAO.java
new file mode 100644
index 0000000..d1b5ec0
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/daos/DCAEServiceComponentsDAO.java
@@ -0,0 +1,65 @@
+package org.openecomp.dcae.inventory.daos;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import org.openecomp.dcae.inventory.dbthings.mappers.DCAEServiceComponentObjectMapper;
+import org.openecomp.dcae.inventory.dbthings.models.DCAEServiceComponentObject;
+import org.skife.jdbi.v2.sqlobject.Bind;
+import org.skife.jdbi.v2.sqlobject.BindBean;
+import org.skife.jdbi.v2.sqlobject.SqlQuery;
+import org.skife.jdbi.v2.sqlobject.SqlUpdate;
+import org.skife.jdbi.v2.sqlobject.customizers.Mapper;
+
+import java.util.List;
+
+/**
+ * Created by mhwang on 4/19/16.
+ */
+public interface DCAEServiceComponentsDAO extends InventoryDAO {
+
+ @SqlQuery("select exists (select * from information_schema.tables where table_name = \'dcae_service_components\')")
+ Boolean checkIfTableExists();
+
+ @SqlUpdate("create table dcae_service_components (component_id varchar not null primary key, component_type varchar not null, " +
+ "component_source varchar not null, shareable integer default 0, created timestamp not null, modified timestamp not null)")
+ void createTable();
+
+ @SqlUpdate("insert into dcae_service_components (component_id, component_type, component_source, shareable, created, modified) " +
+ "values (:componentId, :componentType, :componentSource, :shareable, :created, :modified)")
+ void insert(@BindBean DCAEServiceComponentObject componentObject);
+
+ @SqlUpdate("update dcae_service_components set component_type = :componentType, component_source = :componentSource, " +
+ "shareable = :shareable, modified = :modified where component_id = :componentId")
+ void update(@BindBean DCAEServiceComponentObject componentObject);
+
+ @Mapper(DCAEServiceComponentObjectMapper.class)
+ @SqlQuery("select c.* from dcae_services_components_maps m join dcae_service_components c " +
+ "on m.component_id = c.component_id where m.service_id = :it")
+ List<DCAEServiceComponentObject> getByServiceId(@Bind String serviceId);
+
+ @Mapper(DCAEServiceComponentObjectMapper.class)
+ @SqlQuery("select c.* from dcae_service_components c where c.component_id = :it")
+ DCAEServiceComponentObject getByComponentId(@Bind String componentId);
+
+}
diff --git a/src/main/java/org/openecomp/dcae/inventory/daos/DCAEServiceTransactionDAO.java b/src/main/java/org/openecomp/dcae/inventory/daos/DCAEServiceTransactionDAO.java
new file mode 100644
index 0000000..dc3d6b3
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/daos/DCAEServiceTransactionDAO.java
@@ -0,0 +1,161 @@
+package org.openecomp.dcae.inventory.daos;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import org.openecomp.dcae.inventory.dbthings.models.DCAEServiceComponentObject;
+import org.openecomp.dcae.inventory.dbthings.models.DCAEServiceObject;
+import org.joda.time.DateTime;
+import org.skife.jdbi.v2.sqlobject.CreateSqlObject;
+import org.skife.jdbi.v2.sqlobject.Transaction;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * This is based-off of this blog post.
+ * http://manikandan-k.github.io/2015/05/10/Transactions_in_jdbi.html
+ *
+ * Created by mhwang on 4/21/16.
+ */
+public abstract class DCAEServiceTransactionDAO {
+
+ public static class DCAEServiceTransactionContext {
+
+ private final String serviceId;
+ private final DateTime modified;
+ private DCAEServiceObject serviceObjectToInsert;
+ private DCAEServiceObject serviceObjectToUpdate;
+ private List<DCAEServiceComponentObject> componentObjectsToInsert;
+ private List<DCAEServiceComponentObject> componentObjectsToUpdate;
+ private List<String> mappingsToInsert;
+ private List<String> mappingsToDelete;
+
+ public String getServiceId() {
+ return serviceId;
+ }
+
+ public DateTime getModified() {
+ return modified;
+ }
+
+ public DCAEServiceObject getServiceObjectToInsert() {
+ return serviceObjectToInsert;
+ }
+
+ public void setServiceObjectToInsert(DCAEServiceObject serviceObjectToInsert) {
+ this.serviceObjectToInsert = serviceObjectToInsert;
+ }
+
+ public DCAEServiceObject getServiceObjectToUpdate() {
+ return serviceObjectToUpdate;
+ }
+
+ public void setServiceObjectToUpdate(DCAEServiceObject serviceObjectToUpdate) {
+ this.serviceObjectToUpdate = serviceObjectToUpdate;
+ }
+
+ public List<DCAEServiceComponentObject> getComponentObjectsToInsert() {
+ return componentObjectsToInsert;
+ }
+
+ public List<DCAEServiceComponentObject> addComponentObjectToInsert(DCAEServiceComponentObject componentObject) {
+ this.componentObjectsToInsert.add(componentObject);
+ return this.componentObjectsToInsert;
+ }
+
+ public List<DCAEServiceComponentObject> getComponentObjectsToUpdate() {
+ return componentObjectsToUpdate;
+ }
+
+ public List<DCAEServiceComponentObject> addComponentObjectToUpdate(DCAEServiceComponentObject componentObject) {
+ this.componentObjectsToUpdate.add(componentObject);
+ return this.componentObjectsToUpdate;
+ }
+
+ public List<String> getMappingsToInsert() {
+ return mappingsToInsert;
+ }
+
+ public List<String> addMappingsToInsert(String componentId) {
+ this.mappingsToInsert.add(componentId);
+ return this.mappingsToInsert;
+ }
+
+ public List<String> getMappingsToDelete() {
+ return mappingsToDelete;
+ }
+
+ public List<String> addMappingsToDelete(String componentId) {
+ this.mappingsToDelete.add(componentId);
+ return this.mappingsToDelete;
+ }
+
+ public DCAEServiceTransactionContext(String serviceId, DateTime modified) {
+ this.serviceId = serviceId;
+ this.modified = modified;
+ this.componentObjectsToInsert = new ArrayList<>();
+ this.componentObjectsToUpdate = new ArrayList<>();
+ this.mappingsToInsert = new ArrayList<>();
+ this.mappingsToDelete = new ArrayList<>();
+ }
+
+ }
+
+ @CreateSqlObject
+ abstract DCAEServicesDAO getServicesDAO();
+
+ @CreateSqlObject
+ abstract DCAEServicesComponentsMapsDAO getServicesComponentsMappingDAO();
+
+ @CreateSqlObject
+ abstract DCAEServiceComponentsDAO getComponentsDAO();
+
+ @Transaction
+ public void insert(DCAEServiceTransactionContext context) {
+ if (context.getServiceObjectToInsert() != null) {
+ this.getServicesDAO().insert(context.getServiceObjectToInsert());
+ }
+
+ if (context.getServiceObjectToUpdate() != null) {
+ this.getServicesDAO().update(context.getServiceObjectToUpdate());
+ }
+
+ for (DCAEServiceComponentObject sco : context.getComponentObjectsToInsert()) {
+ this.getComponentsDAO().insert(sco);
+ }
+
+ for (DCAEServiceComponentObject sco : context.getComponentObjectsToUpdate()) {
+ this.getComponentsDAO().update(sco);
+ }
+
+ for (String componentId : context.getMappingsToInsert()) {
+ this.getServicesComponentsMappingDAO().insert(context.getServiceId(), componentId, context.getModified());
+ }
+
+ for (String componentId : context.getMappingsToDelete()) {
+ this.getServicesComponentsMappingDAO().delete(context.serviceId, componentId);
+ }
+ }
+
+}
diff --git a/src/main/java/org/openecomp/dcae/inventory/daos/DCAEServiceTypeTransactionDAO.java b/src/main/java/org/openecomp/dcae/inventory/daos/DCAEServiceTypeTransactionDAO.java
new file mode 100644
index 0000000..c3c65e2
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/daos/DCAEServiceTypeTransactionDAO.java
@@ -0,0 +1,43 @@
+package org.openecomp.dcae.inventory.daos;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import org.openecomp.dcae.inventory.dbthings.models.DCAEServiceTypeObject;
+import org.skife.jdbi.v2.sqlobject.CreateSqlObject;
+
+/**
+ * Created by mhwang on 5/19/16.
+ */
+public abstract class DCAEServiceTypeTransactionDAO {
+
+ @CreateSqlObject
+ abstract DCAEServiceTypesDAO getServiceTypesDAO();
+
+ public void upsert(DCAEServiceTypeObject newerVersion) {
+ // Order of operation is important here!
+ this.getServiceTypesDAO().deactivateExisting(newerVersion.getTypeName());
+ this.getServiceTypesDAO().insertNewerVersion(newerVersion);
+ }
+
+}
diff --git a/src/main/java/org/openecomp/dcae/inventory/daos/DCAEServiceTypesDAO.java b/src/main/java/org/openecomp/dcae/inventory/daos/DCAEServiceTypesDAO.java
new file mode 100644
index 0000000..5c961f9
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/daos/DCAEServiceTypesDAO.java
@@ -0,0 +1,68 @@
+package org.openecomp.dcae.inventory.daos;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import org.openecomp.dcae.inventory.dbthings.mappers.DCAEServiceTypeObjectMapper;
+import org.openecomp.dcae.inventory.dbthings.models.DCAEServiceTypeObject;
+import org.skife.jdbi.v2.sqlobject.Bind;
+import org.skife.jdbi.v2.sqlobject.BindBean;
+import org.skife.jdbi.v2.sqlobject.SqlQuery;
+import org.skife.jdbi.v2.sqlobject.SqlUpdate;
+import org.skife.jdbi.v2.sqlobject.customizers.Mapper;
+
+/**
+ * DCAE service type records are treated immutable. Newer versions are added with the flag "is_active" set to TRUE.
+ * The responsibility of managing the active version on the caller of this DAO.
+ *
+ * Currently the "is_active" flag is hidden to the application except in this DAO.
+ *
+ * Created by mhwang on 4/19/16.
+ */
+public interface DCAEServiceTypesDAO extends InventoryDAO {
+
+ @SqlQuery("select exists (select * from information_schema.tables where table_name = \'dcae_service_types\')")
+ Boolean checkIfTableExists();
+
+ /**
+ * Note that service_ids and service_locations are nullable fields. This might not be the right decision but because
+ * the resource model allows for nulls, thought it should consistent.
+ */
+ @SqlUpdate("create table dcae_service_types (type_name varchar not null, owner varchar not null," +
+ "vnf_types varchar[] not null, service_ids varchar[], service_locations varchar[], blueprint_template text not null, " +
+ "created timestamp not null, is_active boolean not null, constraint pk_type_created primary key (type_name, created))")
+ void createTable();
+
+ @SqlUpdate("insert into dcae_service_types(type_name, owner, vnf_types, service_ids, service_locations, " +
+ "blueprint_template, created, is_active) values (:typeName, :owner, :vnfTypes, :serviceIds, :serviceLocations, " +
+ ":blueprintTemplate, :created, TRUE)")
+ void insertNewerVersion(@BindBean DCAEServiceTypeObject serviceObject);
+
+ @SqlUpdate("update dcae_service_types set is_active = FALSE where type_name = :typeName and is_active = TRUE")
+ void deactivateExisting(@Bind("typeName") String typeName);
+
+ @Mapper(DCAEServiceTypeObjectMapper.class)
+ @SqlQuery("select * from dcae_service_types where is_active = TRUE and type_name = :it")
+ DCAEServiceTypeObject getByTypeName(@Bind String typeName);
+
+}
diff --git a/src/main/java/org/openecomp/dcae/inventory/daos/DCAEServicesComponentsMapsDAO.java b/src/main/java/org/openecomp/dcae/inventory/daos/DCAEServicesComponentsMapsDAO.java
new file mode 100644
index 0000000..405476d
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/daos/DCAEServicesComponentsMapsDAO.java
@@ -0,0 +1,53 @@
+package org.openecomp.dcae.inventory.daos;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import org.joda.time.DateTime;
+import org.skife.jdbi.v2.sqlobject.Bind;
+import org.skife.jdbi.v2.sqlobject.SqlQuery;
+import org.skife.jdbi.v2.sqlobject.SqlUpdate;
+
+/**
+ * This class manages the joining table called "dcae_services_components_maps" which maps the many-to-many relationship
+ * between DCAE services and DCAE service components.
+ *
+ * Created by mhwang on 4/19/16.
+ */
+public interface DCAEServicesComponentsMapsDAO extends InventoryDAO {
+
+ @SqlQuery("select exists (select * from information_schema.tables where table_name = \'dcae_services_components_maps\')")
+ Boolean checkIfTableExists();
+
+ @SqlUpdate("create table dcae_services_components_maps (service_id varchar not null references dcae_services (service_id), " +
+ "component_id varchar not null references dcae_service_components (component_id), " +
+ "created timestamp not null, primary key (service_id, component_id))")
+ void createTable();
+
+ @SqlUpdate("insert into dcae_services_components_maps (service_id, component_id, created) values (:serviceId, :componentId, :created)")
+ void insert(@Bind("serviceId") String serviceId, @Bind("componentId") String componentId, @Bind("created") DateTime created);
+
+ @SqlUpdate("delete from dcae_services_components_maps where service_id = :serviceId and component_id = :componentId")
+ void delete(@Bind("serviceId") String serviceId, @Bind("componentId") String componentId);
+
+}
diff --git a/src/main/java/org/openecomp/dcae/inventory/daos/DCAEServicesDAO.java b/src/main/java/org/openecomp/dcae/inventory/daos/DCAEServicesDAO.java
new file mode 100644
index 0000000..e40b8b5
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/daos/DCAEServicesDAO.java
@@ -0,0 +1,77 @@
+package org.openecomp.dcae.inventory.daos;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import org.openecomp.dcae.inventory.dbthings.mappers.DCAEServiceObjectMapper;
+import org.openecomp.dcae.inventory.dbthings.models.DCAEServiceObject;
+import org.joda.time.DateTime;
+import org.skife.jdbi.v2.sqlobject.Bind;
+import org.skife.jdbi.v2.sqlobject.BindBean;
+import org.skife.jdbi.v2.sqlobject.SqlQuery;
+import org.skife.jdbi.v2.sqlobject.SqlUpdate;
+import org.skife.jdbi.v2.sqlobject.customizers.Mapper;
+import org.skife.jdbi.v2.util.IntegerMapper;
+
+
+/**
+ * Created by mhwang on 4/19/16.
+ */
+public interface DCAEServicesDAO extends InventoryDAO {
+
+ @SqlQuery("select exists (select * from information_schema.tables where table_name = \'dcae_services\')")
+ Boolean checkIfTableExists();
+
+ @SqlUpdate("create table dcae_services (service_id varchar not null primary key, type_name varchar not null, " +
+ "vnf_id varchar not null, vnf_type varchar not null, vnf_location varchar not null, deployment_ref varchar, " +
+ "created timestamp not null, modified timestamp not null, status varchar not null)")
+ void createTable();
+
+ @SqlUpdate("insert into dcae_services(service_id, type_name, vnf_id, vnf_type, vnf_location, deployment_ref, " +
+ "created, modified, status) values (:serviceId, :typeName, :vnfId, :vnfType, :vnfLocation, :deploymentRef, " +
+ ":created, :modified, :status)")
+ void insert(@BindBean DCAEServiceObject serviceObject);
+
+ @SqlUpdate("update dcae_services set type_name = :typeName, vnf_id = :vnfId, vnf_type = :vnfType, " +
+ "vnf_location = :vnfLocation, deployment_ref = :deploymentRef, modified = :modified, status = :status " +
+ "where service_id = :serviceId")
+ void update(@BindBean DCAEServiceObject serviceObject);
+
+ @Mapper(DCAEServiceObjectMapper.class)
+ @SqlQuery("select * from dcae_services where status = :status and service_id = :serviceId")
+ DCAEServiceObject getByServiceId(@Bind("status") DCAEServiceObject.DCAEServiceStatus status, @Bind("serviceId") String serviceId);
+
+ @Mapper(DCAEServiceObjectMapper.class)
+ @SqlQuery("select * from dcae_services where service_id = :serviceId")
+ DCAEServiceObject getByServiceId(@Bind("serviceId") String serviceId);
+
+ @SqlUpdate("update dcae_services set modified = :modified, status = :status where service_id = :serviceId")
+ void updateStatusByServiceId(@Bind("modified") DateTime modified,
+ @Bind("status") DCAEServiceObject.DCAEServiceStatus status,
+ @Bind("serviceId") String serviceId);
+
+ @Mapper(IntegerMapper.class)
+ @SqlQuery("select count(1) from dcae_services where status = :status and type_name = :typeName")
+ Integer countByType(@Bind("status") DCAEServiceObject.DCAEServiceStatus status, @Bind("typeName") String typeName);
+
+}
diff --git a/src/main/java/org/openecomp/dcae/inventory/daos/InventoryDAO.java b/src/main/java/org/openecomp/dcae/inventory/daos/InventoryDAO.java
new file mode 100644
index 0000000..6205d2c
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/daos/InventoryDAO.java
@@ -0,0 +1,32 @@
+package org.openecomp.dcae.inventory.daos;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+/**
+ * Created by mhwang on 4/19/16.
+ */
+public interface InventoryDAO {
+ Boolean checkIfTableExists();
+ void createTable();
+}
diff --git a/src/main/java/org/openecomp/dcae/inventory/daos/InventoryDAOManager.java b/src/main/java/org/openecomp/dcae/inventory/daos/InventoryDAOManager.java
new file mode 100644
index 0000000..fd4d2eb
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/daos/InventoryDAOManager.java
@@ -0,0 +1,122 @@
+package org.openecomp.dcae.inventory.daos;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import org.skife.jdbi.v2.DBI;
+import org.skife.jdbi.v2.Handle;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Reluctantly made this into a singleton in order to have access to the DAOs in the request handling code. Didn't
+ * want to change the interface on the handlers because they are generated by Swagger and I wanted to flexibility
+ * to swap in changes easily. This meant sacrificing dependency injection which is preferred.
+ *
+ * Created by mhwang on 4/19/16.
+ */
+public final class InventoryDAOManager {
+
+ private static InventoryDAOManager instance;
+
+ public static InventoryDAOManager getInstance() {
+ if (instance == null) {
+ instance = new InventoryDAOManager();
+ }
+
+ return instance;
+ }
+
+ private final static Logger LOG = LoggerFactory.getLogger(InventoryDAOManager.class);
+ // WATCH! Table creation order matters where mapping tables refer to other tables for foreign keys.
+ private final static List<Class> DAO_CLASSES = Arrays.asList(DCAEServiceTypesDAO.class, DCAEServicesDAO.class,
+ DCAEServiceComponentsDAO.class, DCAEServicesComponentsMapsDAO.class);
+
+ private DBI jdbi;
+
+ private InventoryDAOManager() {
+ }
+
+ public void init(DBI jdbi) {
+ this.jdbi = jdbi;
+
+ for (Class<? extends InventoryDAO> daoClass : DAO_CLASSES) {
+ final InventoryDAO dao = jdbi.onDemand(daoClass);
+
+ if (dao.checkIfTableExists()) {
+ LOG.info(String.format("Sql table exists: %s", daoClass.getSimpleName()));
+ } else {
+ dao.createTable();
+ LOG.info(String.format("Sql table created: %s", daoClass.getSimpleName()));
+ }
+ }
+ }
+
+ private InventoryDAO getDAO(Class<? extends InventoryDAO> klass) {
+ if (jdbi == null) {
+ throw new RuntimeException("InventoryDAOManager has not been initialized!");
+ }
+
+ // Using this approach to constructing the DAO, the client is not responsible for closing the handle.
+ // http://jdbi.org/sql_object_overview/
+ // > In this case we do not need to (and in fact shouldn’t) ever take action to close the handle the sql object uses.
+ return jdbi.onDemand(klass);
+ }
+
+ public DCAEServicesDAO getDCAEServicesDAO() {
+ return (DCAEServicesDAO) this.getDAO(DCAEServicesDAO.class);
+ }
+
+ public DCAEServiceComponentsDAO getDCAEServiceComponentsDAO() {
+ return (DCAEServiceComponentsDAO) this.getDAO(DCAEServiceComponentsDAO.class);
+ }
+
+ public DCAEServicesComponentsMapsDAO getDCAEServicesComponentsDAO() {
+ return (DCAEServicesComponentsMapsDAO) this.getDAO(DCAEServicesComponentsMapsDAO.class);
+ }
+
+ public DCAEServiceTransactionDAO getDCAEServiceTransactionDAO() {
+ return jdbi.onDemand(DCAEServiceTransactionDAO.class);
+ }
+
+ public DCAEServiceTypeTransactionDAO getDCAEServiceTypeTransactionDAO() {
+ return jdbi.onDemand(DCAEServiceTypeTransactionDAO.class);
+ }
+
+ public DCAEServiceTypesDAO getDCAEServiceTypesDAO() {
+ return (DCAEServiceTypesDAO) this.getDAO(DCAEServiceTypesDAO.class);
+ }
+
+ /**
+ * Must close the handle that is returned here. It is AutoCloseable so just use it as a try-with-resource.
+ *
+ * @return
+ */
+ public Handle getHandle() {
+ return this.jdbi.open();
+ }
+
+}
diff --git a/src/main/java/org/openecomp/dcae/inventory/dbthings/StringListArgument.java b/src/main/java/org/openecomp/dcae/inventory/dbthings/StringListArgument.java
new file mode 100644
index 0000000..11c77fd
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/dbthings/StringListArgument.java
@@ -0,0 +1,60 @@
+package org.openecomp.dcae.inventory.dbthings;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import org.skife.jdbi.v2.StatementContext;
+import org.skife.jdbi.v2.tweak.Argument;
+import org.skife.jdbi.v2.tweak.ArgumentFactory;
+
+import java.sql.Array;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+import java.util.List;
+
+/**
+ * This class if needed for jdbi queries to be able to properly bind List<String> objects.
+ *
+ * http://stackoverflow.com/questions/33062516/insert-2d-array-into-postresql-db-using-jdbi
+ *
+ * Created by mhwang on 5/4/16.
+ */
+public class StringListArgument implements ArgumentFactory<List<String>> {
+
+ @Override
+ public boolean accepts(Class<?> expectedType, Object value, StatementContext statementContext) {
+ return value != null && List.class.isAssignableFrom(value.getClass());
+ }
+
+ @Override
+ public Argument build(Class<?> expectedType, List<String> value, StatementContext statementContext) {
+ return new Argument() {
+ @Override
+ public void apply(int position, PreparedStatement statement, StatementContext ctx) throws SQLException {
+ Array values = statement.getConnection().createArrayOf("varchar", value.toArray());
+ statement.setArray(position, values);
+ }
+ };
+ }
+
+}
diff --git a/src/main/java/org/openecomp/dcae/inventory/dbthings/mappers/DCAEServiceComponentObjectMapper.java b/src/main/java/org/openecomp/dcae/inventory/dbthings/mappers/DCAEServiceComponentObjectMapper.java
new file mode 100644
index 0000000..ee0602f
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/dbthings/mappers/DCAEServiceComponentObjectMapper.java
@@ -0,0 +1,51 @@
+package org.openecomp.dcae.inventory.dbthings.mappers;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import org.openecomp.dcae.inventory.dbthings.models.DCAEServiceComponentObject;
+import org.joda.time.DateTime;
+import org.skife.jdbi.v2.StatementContext;
+import org.skife.jdbi.v2.tweak.ResultSetMapper;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+/**
+ * Created by mhwang on 4/19/16.
+ */
+public class DCAEServiceComponentObjectMapper implements ResultSetMapper<DCAEServiceComponentObject> {
+
+ @Override
+ public DCAEServiceComponentObject map(int i, ResultSet resultSet, StatementContext statementContext) throws SQLException {
+ DCAEServiceComponentObject object = new DCAEServiceComponentObject();
+ object.setComponentId(resultSet.getString("component_id"));
+ object.setComponentType(resultSet.getString("component_type"));
+ object.setComponentSource(resultSet.getString("component_source"));
+ object.setShareable(resultSet.getInt("shareable"));
+ object.setCreated(new DateTime(resultSet.getTimestamp("created")));
+ object.setModified(new DateTime(resultSet.getTimestamp("modified")));
+ return object;
+ }
+
+}
diff --git a/src/main/java/org/openecomp/dcae/inventory/dbthings/mappers/DCAEServiceObjectMapper.java b/src/main/java/org/openecomp/dcae/inventory/dbthings/mappers/DCAEServiceObjectMapper.java
new file mode 100644
index 0000000..7cff043
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/dbthings/mappers/DCAEServiceObjectMapper.java
@@ -0,0 +1,54 @@
+package org.openecomp.dcae.inventory.dbthings.mappers;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import org.openecomp.dcae.inventory.dbthings.models.DCAEServiceObject;
+import org.joda.time.DateTime;
+import org.skife.jdbi.v2.StatementContext;
+import org.skife.jdbi.v2.tweak.ResultSetMapper;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+/**
+ * Created by mhwang on 4/19/16.
+ */
+public class DCAEServiceObjectMapper implements ResultSetMapper<DCAEServiceObject> {
+
+ @Override
+ public DCAEServiceObject map(int i, ResultSet resultSet, StatementContext statementContext) throws SQLException {
+ DCAEServiceObject object = new DCAEServiceObject();
+ object.setServiceId(resultSet.getString("service_id"));
+ object.setTypeName(resultSet.getString("type_name"));
+ object.setVnfId(resultSet.getString("vnf_id"));
+ object.setVnfType(resultSet.getString("vnf_type"));
+ object.setVnfLocation(resultSet.getString("vnf_location"));
+ object.setDeploymentRef(resultSet.getString("deployment_ref"));
+ object.setCreated(new DateTime(resultSet.getTimestamp("created")));
+ object.setModified(new DateTime(resultSet.getTimestamp("modified")));
+ object.setStatus(DCAEServiceObject.DCAEServiceStatus.valueOf(resultSet.getString("status")));
+ return object;
+ }
+
+}
diff --git a/src/main/java/org/openecomp/dcae/inventory/dbthings/mappers/DCAEServiceTypeObjectMapper.java b/src/main/java/org/openecomp/dcae/inventory/dbthings/mappers/DCAEServiceTypeObjectMapper.java
new file mode 100644
index 0000000..bbd9903
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/dbthings/mappers/DCAEServiceTypeObjectMapper.java
@@ -0,0 +1,68 @@
+package org.openecomp.dcae.inventory.dbthings.mappers;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import org.openecomp.dcae.inventory.dbthings.models.DCAEServiceTypeObject;
+import org.joda.time.DateTime;
+import org.skife.jdbi.v2.StatementContext;
+import org.skife.jdbi.v2.tweak.ResultSetMapper;
+
+import java.sql.Array;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Arrays;
+
+/**
+ * Created by mhwang on 5/3/16.
+ */
+public class DCAEServiceTypeObjectMapper implements ResultSetMapper<DCAEServiceTypeObject> {
+
+ @Override
+ public DCAEServiceTypeObject map(int i, ResultSet resultSet, StatementContext statementContext) throws SQLException {
+ DCAEServiceTypeObject object = new DCAEServiceTypeObject();
+ object.setTypeName(resultSet.getString("type_name"));
+ object.setOwner(resultSet.getString("owner"));
+ String[] vnfTypes = (String[]) resultSet.getArray("vnf_types").getArray();
+ object.setVnfTypes(Arrays.asList(vnfTypes));
+
+ Array serviceIdsArray = resultSet.getArray("service_ids");
+
+ if (serviceIdsArray != null) {
+ String[] serviceIds = (String[]) serviceIdsArray.getArray();
+ object.setServiceIds(Arrays.asList(serviceIds));
+ }
+
+ Array serviceLocationsArray = resultSet.getArray("service_locations");
+
+ if (serviceLocationsArray != null) {
+ String[] serviceLocations = (String[]) serviceLocationsArray.getArray();
+ object.setServiceLocations(Arrays.asList(serviceLocations));
+ }
+
+ object.setBlueprintTemplate(resultSet.getString("blueprint_template"));
+ object.setCreated(new DateTime(resultSet.getTimestamp("created")));
+ return object;
+ }
+
+}
diff --git a/src/main/java/org/openecomp/dcae/inventory/dbthings/models/DCAEServiceComponentObject.java b/src/main/java/org/openecomp/dcae/inventory/dbthings/models/DCAEServiceComponentObject.java
new file mode 100644
index 0000000..f7b783e
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/dbthings/models/DCAEServiceComponentObject.java
@@ -0,0 +1,149 @@
+package org.openecomp.dcae.inventory.dbthings.models;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import io.swagger.model.DCAEServiceComponentRequest;
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
+
+/**
+ * Created by mhwang on 4/19/16.
+ */
+public class DCAEServiceComponentObject {
+
+ private String componentId = null;
+ private DateTime created = null;
+ private DateTime modified = null;
+ private String componentType = null;
+ private String componentSource = null;
+ private Integer shareable = null;
+
+ public String getComponentId() {
+ return componentId;
+ }
+
+ public void setComponentId(String componentId) {
+ this.componentId = componentId;
+ }
+
+ public DateTime getCreated() {
+ return created;
+ }
+
+ public void setCreated(DateTime created) {
+ this.created = created;
+ }
+
+ public DateTime getModified() {
+ return modified;
+ }
+
+ public void setModified(DateTime modified) {
+ this.modified = modified;
+ }
+
+ public String getComponentType() {
+ return componentType;
+ }
+
+ public void setComponentType(String componentType) {
+ this.componentType = componentType;
+ }
+
+ public String getComponentSource() {
+ return componentSource;
+ }
+
+ public void setComponentSource(String componentSource) {
+ this.componentSource = componentSource;
+ }
+
+ public Integer getShareable() {
+ return shareable;
+ }
+
+ public void setShareable(Integer shareable) {
+ this.shareable = shareable;
+ }
+
+ public DCAEServiceComponentObject() {
+ }
+
+ /**
+ * Intended to be used for inserts - new objects.
+ *
+ * @param request
+ */
+ public DCAEServiceComponentObject(DCAEServiceComponentRequest request) {
+ DateTime now = DateTime.now(DateTimeZone.UTC);
+ this.setComponentId(request.getComponentId());
+ this.setComponentType(request.getComponentType());
+ this.setComponentSource(request.getComponentSource());
+ this.setCreated(now);
+ this.setModified(now);
+ this.setShareable(request.getShareable());
+ }
+
+ /**
+ * Intended to be used for updates - some fields should not be updated.
+ *
+ * @param source
+ * @param updateRequest
+ */
+ public DCAEServiceComponentObject(DCAEServiceComponentObject source, DCAEServiceComponentRequest updateRequest) {
+ // Immutable fields
+ this.setComponentId(source.getComponentId());
+ this.setCreated(source.getCreated());
+
+ // Mutable fields
+ this.setComponentType(updateRequest.getComponentType());
+ this.setComponentSource(updateRequest.getComponentSource());
+ this.setShareable(updateRequest.getShareable());
+ this.setModified(DateTime.now(DateTimeZone.UTC));
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class DCAEServiceComponentObject {\n");
+
+ sb.append(" componentId: ").append(toIndentedString(componentId)).append("\n");
+ sb.append(" componentType: ").append(toIndentedString(componentType)).append("\n");
+ sb.append(" componentSource: ").append(toIndentedString(componentSource)).append("\n");
+ sb.append(" shareable: ").append(toIndentedString(shareable)).append("\n");
+ sb.append("}");
+ return sb.toString();
+ }
+
+ /**
+ * Convert the given object to string with each line indented by 4 spaces
+ * (except the first line).
+ */
+ private String toIndentedString(Object o) {
+ if (o == null) {
+ return "null";
+ }
+ return o.toString().replace("\n", "\n ");
+ }
+}
diff --git a/src/main/java/org/openecomp/dcae/inventory/dbthings/models/DCAEServiceObject.java b/src/main/java/org/openecomp/dcae/inventory/dbthings/models/DCAEServiceObject.java
new file mode 100644
index 0000000..5defd46
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/dbthings/models/DCAEServiceObject.java
@@ -0,0 +1,171 @@
+package org.openecomp.dcae.inventory.dbthings.models;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import io.swagger.model.DCAEServiceRequest;
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
+
+/**
+ * Created by mhwang on 4/19/16.
+ */
+public class DCAEServiceObject {
+
+ public static enum DCAEServiceStatus {
+ RUNNING,
+ REMOVED
+ }
+
+ private String serviceId = null;
+ private String typeName = null;
+ private DateTime created = null;
+ private DateTime modified = null;
+ private String vnfId = null;
+ private String vnfType = null;
+ private String vnfLocation = null;
+ private String deploymentRef = null;
+
+ // These properties are meant to be used internally in the service only
+ private DCAEServiceStatus status = null;
+
+ public String getServiceId() {
+ return serviceId;
+ }
+
+ public void setServiceId(String serviceId) {
+ this.serviceId = serviceId;
+ }
+
+ public String getTypeName() {
+ return typeName;
+ }
+
+ public void setTypeName(String typeName) {
+ this.typeName = typeName;
+ }
+
+ public DateTime getCreated() {
+ return created;
+ }
+
+ public void setCreated(DateTime created) {
+ this.created = created;
+ }
+
+ public DateTime getModified() {
+ return modified;
+ }
+
+ public void setModified(DateTime modified) {
+ this.modified = modified;
+ }
+
+ public DCAEServiceStatus getStatus() {
+ return status;
+ }
+
+ public void setStatus(DCAEServiceStatus status) {
+ this.status = status;
+ }
+
+ public String getVnfId() {
+ return vnfId;
+ }
+
+ public void setVnfId(String vnfId) {
+ this.vnfId = vnfId;
+ }
+
+ public String getVnfType() {
+ return vnfType;
+ }
+
+ public void setVnfType(String vnfType) {
+ this.vnfType = vnfType;
+ }
+
+ public String getVnfLocation() {
+ return vnfLocation;
+ }
+
+ public void setVnfLocation(String vnfLocation) {
+ this.vnfLocation = vnfLocation;
+ }
+
+ public String getDeploymentRef() {
+ return deploymentRef;
+ }
+
+ public void setDeploymentRef(String deploymentRef) {
+ this.deploymentRef = deploymentRef;
+ }
+
+ public DCAEServiceObject() {
+ }
+
+ // TODO: Move the constructors functionality below out into the actual handlers.
+
+ /**
+ * Intended to be used for inserts - new objects.
+ *
+ * @param serviceId
+ * @param request
+ */
+ public DCAEServiceObject(String serviceId, DCAEServiceRequest request) {
+ DateTime now = DateTime.now(DateTimeZone.UTC);
+ this.setServiceId(serviceId);
+ this.setTypeName(request.getTypeName());
+ this.setVnfId(request.getVnfId());
+ this.setVnfType(request.getVnfType());
+ this.setVnfLocation(request.getVnfLocation());
+ this.setDeploymentRef(request.getDeploymentRef());
+ this.setCreated(now);
+ this.setModified(now);
+ // Assumption here is that you are here from the PUT which means that the service is RUNNING.
+ this.setStatus(DCAEServiceStatus.RUNNING);
+ }
+
+ /**
+ * Intended to be used for updates - some fields should not be updated.
+ *
+ * @param source
+ * @param updateRequest
+ */
+ public DCAEServiceObject(DCAEServiceObject source, DCAEServiceRequest updateRequest) {
+ // Immutable fields
+ this.setServiceId(source.getServiceId());
+ this.setCreated(source.getCreated());
+
+ // Mutable fields
+ this.setTypeName(updateRequest.getTypeName());
+ this.setVnfId(updateRequest.getVnfId());
+ this.setVnfType(updateRequest.getVnfType());
+ this.setVnfLocation(updateRequest.getVnfLocation());
+ this.setDeploymentRef(updateRequest.getDeploymentRef());
+ this.setModified(DateTime.now(DateTimeZone.UTC));
+ // Assumption here is that you are here from the PUT which means that the service is RUNNING.
+ this.setStatus(DCAEServiceStatus.RUNNING);
+ }
+
+}
diff --git a/src/main/java/org/openecomp/dcae/inventory/dbthings/models/DCAEServiceTypeObject.java b/src/main/java/org/openecomp/dcae/inventory/dbthings/models/DCAEServiceTypeObject.java
new file mode 100644
index 0000000..1213207
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/dbthings/models/DCAEServiceTypeObject.java
@@ -0,0 +1,101 @@
+package org.openecomp.dcae.inventory.dbthings.models;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import org.joda.time.DateTime;
+
+import java.util.List;
+
+/**
+ * POJO representation of a record in dcae_service_types table.
+ *
+ * Created by mhwang on 5/3/16.
+ */
+public class DCAEServiceTypeObject {
+
+ private String typeName = null;
+ private String owner = null;
+ private List<String> vnfTypes = null;
+ private List<String> serviceIds = null;
+ private List<String> serviceLocations = null;
+ private String blueprintTemplate = null;
+ private DateTime created = null;
+
+ public String getTypeName() {
+ return typeName;
+ }
+
+ public void setTypeName(String typeName) {
+ this.typeName = typeName;
+ }
+
+ public String getOwner() {
+ return owner;
+ }
+
+ public void setOwner(String owner) {
+ this.owner = owner;
+ }
+
+ public List<String> getVnfTypes() {
+ return vnfTypes;
+ }
+
+ public void setVnfTypes(List<String> vnfTypes) {
+ this.vnfTypes = vnfTypes;
+ }
+
+ public List<String> getServiceIds() {
+ return serviceIds;
+ }
+
+ public void setServiceIds(List<String> serviceIds) {
+ this.serviceIds = serviceIds;
+ }
+
+ public List<String> getServiceLocations() {
+ return serviceLocations;
+ }
+
+ public void setServiceLocations(List<String> serviceLocations) {
+ this.serviceLocations = serviceLocations;
+ }
+
+ public String getBlueprintTemplate() {
+ return blueprintTemplate;
+ }
+
+ public void setBlueprintTemplate(String blueprintTemplate) {
+ this.blueprintTemplate = blueprintTemplate;
+ }
+
+ public DateTime getCreated() {
+ return created;
+ }
+
+ public void setCreated(DateTime created) {
+ this.created = created;
+ }
+
+}
diff --git a/src/main/java/org/openecomp/dcae/inventory/exceptions/DCAEControllerClientException.java b/src/main/java/org/openecomp/dcae/inventory/exceptions/DCAEControllerClientException.java
new file mode 100644
index 0000000..5fde36b
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/exceptions/DCAEControllerClientException.java
@@ -0,0 +1,39 @@
+package org.openecomp.dcae.inventory.exceptions;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+/**
+ * Created by mhwang on 5/13/16.
+ */
+public class DCAEControllerClientException extends RuntimeException {
+
+ public DCAEControllerClientException(String message) {
+ super(message);
+ }
+
+ public DCAEControllerClientException(Throwable e) {
+ super(e);
+ }
+
+}
diff --git a/src/main/java/org/openecomp/dcae/inventory/exceptions/DCAEControllerConnectionException.java b/src/main/java/org/openecomp/dcae/inventory/exceptions/DCAEControllerConnectionException.java
new file mode 100644
index 0000000..b901915
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/exceptions/DCAEControllerConnectionException.java
@@ -0,0 +1,39 @@
+package org.openecomp.dcae.inventory.exceptions;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+/**
+ * Created by mhwang on 8/23/16.
+ */
+public class DCAEControllerConnectionException extends RuntimeException {
+
+ public DCAEControllerConnectionException(String message) {
+ super(message);
+ }
+
+ public DCAEControllerConnectionException(Throwable e) {
+ super(e);
+ }
+
+}
diff --git a/src/main/java/org/openecomp/dcae/inventory/exceptions/DCAEControllerTimeoutException.java b/src/main/java/org/openecomp/dcae/inventory/exceptions/DCAEControllerTimeoutException.java
new file mode 100644
index 0000000..5d76de6
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/exceptions/DCAEControllerTimeoutException.java
@@ -0,0 +1,39 @@
+package org.openecomp.dcae.inventory.exceptions;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+/**
+ * Created by mhwang on 8/23/16.
+ */
+public class DCAEControllerTimeoutException extends RuntimeException {
+
+ public DCAEControllerTimeoutException(String message) {
+ super(message);
+ }
+
+ public DCAEControllerTimeoutException(Throwable e) {
+ super(e);
+ }
+
+}
diff --git a/src/main/java/org/openecomp/dcae/inventory/exceptions/DatabusControllerClientException.java b/src/main/java/org/openecomp/dcae/inventory/exceptions/DatabusControllerClientException.java
new file mode 100644
index 0000000..dbc3e3b
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/exceptions/DatabusControllerClientException.java
@@ -0,0 +1,39 @@
+package org.openecomp.dcae.inventory.exceptions;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+/**
+ * Created by mhwang on 5/25/16.
+ */
+public class DatabusControllerClientException extends RuntimeException {
+
+ public DatabusControllerClientException(String message) {
+ super(message);
+ }
+
+ public DatabusControllerClientException(Throwable e) {
+ super(e);
+ }
+
+}
diff --git a/src/main/java/org/openecomp/dcae/inventory/exceptions/mappers/DCAEControllerConnectionExceptionMapper.java b/src/main/java/org/openecomp/dcae/inventory/exceptions/mappers/DCAEControllerConnectionExceptionMapper.java
new file mode 100644
index 0000000..f5efd77
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/exceptions/mappers/DCAEControllerConnectionExceptionMapper.java
@@ -0,0 +1,40 @@
+package org.openecomp.dcae.inventory.exceptions.mappers;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import org.openecomp.dcae.inventory.exceptions.DCAEControllerConnectionException;
+
+import javax.ws.rs.core.Response;
+
+/**
+ * Created by mhwang on 8/23/16.
+ */
+public class DCAEControllerConnectionExceptionMapper extends DCAEControllerExceptionMapper<DCAEControllerConnectionException> {
+
+ @Override
+ protected Response.Status getStatus() {
+ return Response.Status.BAD_GATEWAY;
+ }
+
+}
diff --git a/src/main/java/org/openecomp/dcae/inventory/exceptions/mappers/DCAEControllerExceptionMapper.java b/src/main/java/org/openecomp/dcae/inventory/exceptions/mappers/DCAEControllerExceptionMapper.java
new file mode 100644
index 0000000..5647b75
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/exceptions/mappers/DCAEControllerExceptionMapper.java
@@ -0,0 +1,44 @@
+package org.openecomp.dcae.inventory.exceptions.mappers;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import io.swagger.api.ApiResponseMessage;
+
+import javax.ws.rs.core.Response;
+import javax.ws.rs.ext.ExceptionMapper;
+
+/**
+ * Created by mhwang on 8/23/16.
+ */
+public abstract class DCAEControllerExceptionMapper<T extends RuntimeException> implements ExceptionMapper<T> {
+
+ abstract protected Response.Status getStatus();
+
+ @Override
+ public Response toResponse(T e) {
+ ApiResponseMessage response = new ApiResponseMessage(ApiResponseMessage.ERROR, e.getMessage());
+ return Response.status(this.getStatus()).entity(response).build();
+ }
+
+}
diff --git a/src/main/java/org/openecomp/dcae/inventory/exceptions/mappers/DCAEControllerTimeoutExceptionMapper.java b/src/main/java/org/openecomp/dcae/inventory/exceptions/mappers/DCAEControllerTimeoutExceptionMapper.java
new file mode 100644
index 0000000..2b850ff
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/exceptions/mappers/DCAEControllerTimeoutExceptionMapper.java
@@ -0,0 +1,40 @@
+package org.openecomp.dcae.inventory.exceptions.mappers;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import org.openecomp.dcae.inventory.exceptions.DCAEControllerTimeoutException;
+
+import javax.ws.rs.core.Response;
+
+/**
+ * Created by mhwang on 8/23/16.
+ */
+public class DCAEControllerTimeoutExceptionMapper extends DCAEControllerExceptionMapper<DCAEControllerTimeoutException> {
+
+ @Override
+ protected Response.Status getStatus() {
+ return Response.Status.GATEWAY_TIMEOUT;
+ }
+
+}
diff --git a/src/main/java/org/openecomp/dcae/inventory/providers/NotFoundExceptionMapper.java b/src/main/java/org/openecomp/dcae/inventory/providers/NotFoundExceptionMapper.java
new file mode 100644
index 0000000..ce5a55a
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/providers/NotFoundExceptionMapper.java
@@ -0,0 +1,43 @@
+package org.openecomp.dcae.inventory.providers;
+
+/*
+ * ============LICENSE_START==========================================
+ * ===================================================================
+ * Copyright (c) 2017 AT&T 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============================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ *
+ */
+
+import io.swagger.api.ApiResponseMessage;
+import io.swagger.api.NotFoundException;
+
+import javax.ws.rs.core.Response;
+import javax.ws.rs.ext.ExceptionMapper;
+
+/**
+ * Created by mhwang on 5/18/16.
+ */
+public class NotFoundExceptionMapper implements ExceptionMapper<NotFoundException> {
+
+ @Override
+ public Response toResponse(NotFoundException e) {
+ ApiResponseMessage entity = new ApiResponseMessage(e.getCode(), e.getMessage());
+ return Response.status(Response.Status.NOT_FOUND).entity(entity).build();
+ }
+
+}
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
new file mode 100644
index 0000000..bb5e513
--- /dev/null
+++ b/src/main/resources/config.yml
@@ -0,0 +1,66 @@
+# The database config was lifted from https://dropwizard.github.io/dropwizard/0.7.1/docs/manual/jdbi.html
+database:
+ # the name of your JDBC driver
+ driverClass: org.postgresql.Driver
+
+ # the username
+ user: postgres
+
+ # the password
+ password: test123
+
+ # the JDBC URL
+ # TODO: Probably want to programmatically set the database name.
+ url: jdbc:postgresql://127.0.0.1:5432/dcae_inv
+
+ # any properties specific to your JDBC driver:
+ properties:
+ charSet: UTF-8
+
+ # the maximum amount of time to wait on an empty pool before throwing an exception
+ maxWaitForConnection: 1s
+
+ # the SQL query to run when validating a connection's liveness
+ validationQuery: "/* MyService Health Check */ SELECT 1"
+
+ # the minimum number of connections to keep open
+ minSize: 8
+
+ # the maximum number of connections to keep open
+ maxSize: 32
+
+ # whether or not idle connections should be validated
+ checkConnectionWhileIdle: false
+
+ # the amount of time to sleep between runs of the idle connection validation, abandoned cleaner and idle pool resizing
+ evictionInterval: 10s
+
+ # the minimum amount of time an connection must sit idle in the pool before it is eligible for eviction
+ minIdleTime: 1 minute
+
+dcaeControllerConnection:
+ host:
+ port: 9998
+ # Apparently this is variable parameter amongst DCAE controller instances
+ basePath: resources
+ user:
+ password:
+
+databusControllerConnection:
+ host:
+ port: 8080
+
+httpClient:
+ # The minimum number of threads to use for asynchronous calls.
+ minThreads: 1
+
+ # The maximum number of threads to use for asynchronous calls.
+ maxThreads: 128
+
+ # If true, the client will automatically decode response entities
+ # with gzip content encoding.
+ gzipEnabled: false
+
+ # If true, the client will encode request entities with gzip
+ # content encoding. (Requires gzipEnabled to be true).
+ gzipEnabledForRequests: false
diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml
new file mode 100644
index 0000000..9e3f5bc
--- /dev/null
+++ b/src/main/resources/logback.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ============LICENSE_START===========
+ dcae-inventory
+ ==================================
+ Copyright (C) 2016 AT&T
+ ==================================
+ This code is licensed under the Apache License, Version 2.0; you may
+ not use this code for any purpose except in compliance with the Apache
+ License. You may obtain a copy of the License at
+ http://www.att.com/legal/openecomp.html
+ ============LICENSE_END===========
+ -->
+
+<configuration>
+ <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+ <layout class="ch.qos.logback.classic.PatternLayout">
+ <Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern>
+ </layout>
+ </appender>
+
+ <logger name="com" level="INFO"/>
+
+ <root level="debug">
+ <appender-ref ref="STDOUT" />
+ </root>
+</configuration>