summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMichael Hwang <mhwang@research.att.com>2017-02-14 15:10:16 +0000
committerMichael Hwang <mhwang@research.att.com>2017-08-23 13:18:27 -0400
commitac853c1e7186b10e34e392918af31e4ac62b45c2 (patch)
tree5b0acebf2704317cd9fe86545313e68771bad04f /src
parent19488409d66aa5bbbc2856022f1187ce3f563b83 (diff)
Make first commit
Transferring from original dcae project Issue-Id: DCAEGEN2-45 Change-Id: If8500f4a120ec2d27a714c8917f163beb57ee64c Signed-off-by: Michael Hwang <mhwang@research.att.com>
Diffstat (limited to 'src')
-rw-r--r--src/gen/java/io/swagger/api/ApiException.java30
-rw-r--r--src/gen/java/io/swagger/api/ApiOriginFilter.java42
-rw-r--r--src/gen/java/io/swagger/api/ApiResponseMessage.java89
-rw-r--r--src/gen/java/io/swagger/api/DcaeServiceTypesApi.java172
-rw-r--r--src/gen/java/io/swagger/api/DcaeServiceTypesApiService.java43
-rw-r--r--src/gen/java/io/swagger/api/DcaeServicesApi.java178
-rw-r--r--src/gen/java/io/swagger/api/DcaeServicesApiService.java43
-rw-r--r--src/gen/java/io/swagger/api/DcaeServicesGroupbyApi.java59
-rw-r--r--src/gen/java/io/swagger/api/DcaeServicesGroupbyApiService.java31
-rw-r--r--src/gen/java/io/swagger/api/JacksonJsonProvider.java39
-rw-r--r--src/gen/java/io/swagger/api/NotFoundException.java35
-rw-r--r--src/gen/java/io/swagger/api/StringUtil.java62
-rw-r--r--src/gen/java/io/swagger/model/DCAEService.java303
-rw-r--r--src/gen/java/io/swagger/model/DCAEServiceComponent.java249
-rw-r--r--src/gen/java/io/swagger/model/DCAEServiceComponentRequest.java152
-rw-r--r--src/gen/java/io/swagger/model/DCAEServiceGroupByResults.java117
-rw-r--r--src/gen/java/io/swagger/model/DCAEServiceGroupByResultsPropertyValues.java135
-rw-r--r--src/gen/java/io/swagger/model/DCAEServiceRequest.java204
-rw-r--r--src/gen/java/io/swagger/model/DCAEServiceType.java134
-rw-r--r--src/gen/java/io/swagger/model/DCAEServiceTypeRequest.java227
-rw-r--r--src/gen/java/io/swagger/model/InlineResponse200.java137
-rw-r--r--src/gen/java/io/swagger/model/InlineResponse2001.java137
-rw-r--r--src/gen/java/io/swagger/model/InlineResponse200Links.java117
-rw-r--r--src/gen/java/io/swagger/model/Link.java133
-rw-r--r--src/main/java/io/swagger/api/Bootstrap.java51
-rw-r--r--src/main/java/io/swagger/api/factories/DcaeServiceTypesApiServiceFactory.java35
-rw-r--r--src/main/java/io/swagger/api/factories/DcaeServicesApiServiceFactory.java47
-rw-r--r--src/main/java/io/swagger/api/factories/DcaeServicesGroupbyApiServiceFactory.java35
-rw-r--r--src/main/java/io/swagger/api/impl/DcaeServiceTypesApiServiceImpl.java312
-rw-r--r--src/main/java/io/swagger/api/impl/DcaeServicesApiServiceImpl.java401
-rw-r--r--src/main/java/io/swagger/api/impl/DcaeServicesGroupbyApiServiceImpl.java103
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/InventoryApplication.java197
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/InventoryConfiguration.java173
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/LinkSerializer.java52
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/clients/DCAEControllerClient.java222
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/clients/DatabusControllerClient.java91
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/daos/DCAEServiceComponentsDAO.java62
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/daos/DCAEServiceTransactionDAO.java158
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/daos/DCAEServiceTypesDAO.java90
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/daos/DCAEServicesComponentsMapsDAO.java50
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/daos/DCAEServicesDAO.java76
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/daos/InventoryDAO.java29
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/daos/InventoryDAOManager.java181
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/dbthings/StringListArgument.java57
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/dbthings/mappers/DCAEServiceComponentObjectMapper.java48
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/dbthings/mappers/DCAEServiceObjectMapper.java51
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/dbthings/mappers/DCAEServiceTypeObjectMapper.java73
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/dbthings/models/DCAEServiceComponentObject.java146
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/dbthings/models/DCAEServiceObject.java168
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/dbthings/models/DCAEServiceTypeObject.java142
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/exceptions/DCAEControllerClientException.java36
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/exceptions/DCAEControllerConnectionException.java36
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/exceptions/DCAEControllerTimeoutException.java36
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/exceptions/DatabusControllerClientException.java36
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/exceptions/mappers/DBIExceptionMapper.java82
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/exceptions/mappers/DCAEControllerConnectionExceptionMapper.java37
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/exceptions/mappers/DCAEControllerExceptionMapper.java41
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/exceptions/mappers/DCAEControllerTimeoutExceptionMapper.java37
-rw-r--r--src/main/java/org/openecomp/dcae/inventory/providers/NotFoundExceptionMapper.java40
-rw-r--r--src/main/resources/config.json42
-rw-r--r--src/main/resources/config.yml96
-rw-r--r--src/main/resources/logback.xml34
-rw-r--r--src/test/java/DcaeServiceTypesApiServiceImplTests.java220
-rw-r--r--src/test/java/org/openecomp/dcae/inventory/daos/InventoryDAOManagerTests.java44
-rw-r--r--src/test/java/org/openecomp/dcae/inventory/exception/mappers/DBIExceptionMapperTests.java117
65 files changed, 6852 insertions, 0 deletions
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..cdc6162
--- /dev/null
+++ b/src/gen/java/io/swagger/api/ApiException.java
@@ -0,0 +1,30 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package io.swagger.api;
+
+@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..b6f29f2
--- /dev/null
+++ b/src/gen/java/io/swagger/api/ApiOriginFilter.java
@@ -0,0 +1,42 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package io.swagger.api;
+
+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..bf4e13a
--- /dev/null
+++ b/src/gen/java/io/swagger/api/ApiResponseMessage.java
@@ -0,0 +1,89 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package io.swagger.api;
+
+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..72f1f63
--- /dev/null
+++ b/src/gen/java/io/swagger/api/DcaeServiceTypesApi.java
@@ -0,0 +1,172 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package io.swagger.api;
+
+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 typeName, Boolean onlyLatest, Boolean onlyActive,
+ String vnfType, String serviceId, String serviceLocation, String asdcServiceId,
+ String asdcResourceId, Integer offset) {
+ UriBuilder ub = uriInfo.getBaseUriBuilder().path(DcaeServiceTypesApi.class)
+ .path(DcaeServiceTypesApi.class, "dcaeServiceTypesGet");
+
+ if (typeName != null) {
+ ub.queryParam("typeName", typeName);
+ }
+ if (onlyLatest != null) {
+ ub.queryParam("onlyLatest", onlyLatest);
+ }
+ if (onlyActive != null) {
+ ub.queryParam("onlyActive", onlyActive);
+ }
+ if (vnfType != null) {
+ ub.queryParam("vnfType", vnfType);
+ }
+ if (serviceId != null) {
+ ub.queryParam("serviceId", serviceId);
+ }
+ if (serviceLocation != null) {
+ ub.queryParam("serviceLocation", serviceLocation);
+ }
+ if (asdcServiceId != null) {
+ ub.queryParam("asdcServiceId", asdcServiceId);
+ }
+ if (asdcResourceId != null) {
+ ub.queryParam("asdcResourceId", asdcResourceId);
+ }
+ 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 = "Filter by service type name") @QueryParam("typeName") String typeName,
+ @ApiParam(value = "If set to true, query returns just the latest versions of DCAE service types. If set to false, then all versions are returned. Default is true")
+ @DefaultValue("true") @QueryParam("onlyLatest") Boolean onlyLatest,
+ @ApiParam(value = "If set to true, query returns only *active* DCAE service types. If set to false, then all DCAE service types are returned. Default is true")
+ @DefaultValue("true") @QueryParam("onlyActive") Boolean onlyActive,
+ @ApiParam(value = "Filter by associated vnf type. No wildcards, matches are explicit. This field is treated case insensitive.")
+ @QueryParam("vnfType") String vnfType,
+ @ApiParam(value = "Filter by assocaited service id. Instances with service id null or empty is always returned.")
+ @QueryParam("serviceId") String serviceId,
+ @ApiParam(value = "Filter by associated service location. Instances with service location null or empty is always returned.")
+ @QueryParam("serviceLocation") String serviceLocation,
+ @ApiParam(value = "Filter by associated asdc design service id. Setting this to `NONE` will return instances that have asdc service id set to null")
+ @QueryParam("asdcServiceId") String asdcServiceId,
+ @ApiParam(value = "Filter by associated asdc design resource id. Setting this to `NONE` will return instances that have asdc resource id set to null")
+ @QueryParam("asdcResourceId") String asdcResourceId,
+ @ApiParam(value = "Query resultset offset used for pagination (zero-based)") @QueryParam("offset") Integer offset,
+ @Context SecurityContext securityContext)
+ throws NotFoundException {
+ return delegate.dcaeServiceTypesGet(typeName, onlyLatest, onlyActive, vnfType, serviceId, serviceLocation,
+ asdcServiceId, asdcResourceId, offset, uriInfo, securityContext);
+ }
+
+ public static Link buildLinkForGet(UriInfo uriInfo, String rel, String typeId) {
+ // This same method can be used for PUTs as well
+
+ UriBuilder ub = uriInfo.getBaseUriBuilder().path(DcaeServiceTypesApi.class)
+ .path(DcaeServiceTypesApi.class, "dcaeServiceTypesTypeIdGet");
+ Link.Builder lb = Link.fromUri(ub.build(typeId));
+ lb.rel(rel);
+ return lb.build();
+ }
+
+ @GET
+ @Path("/{typeId}")
+ @Consumes({"application/json"})
+ @Produces({"application/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 dcaeServiceTypesTypeIdGet(
+ @ApiParam(value = "", required = true) @PathParam("typeId") String typeId,
+ @Context SecurityContext securityContext)
+ throws NotFoundException {
+ return delegate.dcaeServiceTypesTypeIdGet(typeId, uriInfo, securityContext);
+ }
+
+ @POST
+ @Path("/")
+ @Consumes({"application/json"})
+ @Produces({"application/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) @Valid DCAEServiceTypeRequest request,
+ @Context SecurityContext securityContext)
+ throws NotFoundException {
+ return delegate.dcaeServiceTypesTypeIdPost(request, uriInfo, securityContext);
+ }
+
+ @DELETE
+ @Path("/{typeId}")
+ @io.swagger.annotations.ApiOperation(value = "", notes = "Deactivates existing `DCAEServiceType` instances", response = DCAEServiceType.class, tags = {})
+ @io.swagger.annotations.ApiResponses(value = {
+ @io.swagger.annotations.ApiResponse(code = 200, message = "`DCAEServiceType` has been deactivated", response = ApiResponseMessage.class),
+ @io.swagger.annotations.ApiResponse(code = 404, message = "`DCAEServiceType` not found", response = ApiResponseMessage.class),
+ @io.swagger.annotations.ApiResponse(code = 410, message = "`DCAEServiceType` already gone", response = ApiResponseMessage.class)
+ })
+ public Response dcaeServiceTypesTypeIdDelete(
+ @ApiParam(value = "", required = true) @PathParam("typeId") String typeId,
+ @Context SecurityContext securityContext)
+ throws NotFoundException {
+ return delegate.dcaeServiceTypesTypeIdDelete(typeId, 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..afc7476
--- /dev/null
+++ b/src/gen/java/io/swagger/api/DcaeServiceTypesApiService.java
@@ -0,0 +1,43 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package io.swagger.api;
+
+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 typeName, Boolean onlyLatest, Boolean onlyActive,
+ String vnfType, String serviceId, String serviceLocation,
+ String asdcServiceId, String asdcResourceId,
+ Integer offset, UriInfo uriInfo, SecurityContext securityContext)
+ throws NotFoundException;
+ public abstract Response dcaeServiceTypesTypeIdGet(String typeId, UriInfo uriInfo, SecurityContext securityContext)
+ throws NotFoundException;
+ public abstract Response dcaeServiceTypesTypeIdPost(DCAEServiceTypeRequest request, UriInfo uriInfo,
+ SecurityContext securityContext)
+ throws NotFoundException;
+ public abstract Response dcaeServiceTypesTypeIdDelete(String typeId, 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..55d79f3
--- /dev/null
+++ b/src/gen/java/io/swagger/api/DcaeServicesApi.java
@@ -0,0 +1,178 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package io.swagger.api;
+
+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 buildLinkForGetByTypeId(UriInfo uriInfo, String rel, String typeId) {
+ return buildLinkForGet(uriInfo, rel, typeId, 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 typeId, 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 (typeId != null) {
+ ub.queryParam("typeId", typeId);
+ }
+ 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("typeId") String typeId,
+ @ApiParam(value = "") @QueryParam("vnfId") String vnfId,
+ @ApiParam(value = "Filter by associated vnf type. This field is treated case insensitive.")
+ @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(typeId, 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..99f9f25
--- /dev/null
+++ b/src/gen/java/io/swagger/api/DcaeServicesApiService.java
@@ -0,0 +1,43 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package io.swagger.api;
+
+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 typeId, 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..d108e31
--- /dev/null
+++ b/src/gen/java/io/swagger/api/DcaeServicesGroupbyApi.java
@@ -0,0 +1,59 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package io.swagger.api;
+
+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..bc25d4e
--- /dev/null
+++ b/src/gen/java/io/swagger/api/DcaeServicesGroupbyApiService.java
@@ -0,0 +1,31 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package io.swagger.api;
+
+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..c7a5db2
--- /dev/null
+++ b/src/gen/java/io/swagger/api/JacksonJsonProvider.java
@@ -0,0 +1,39 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package io.swagger.api;
+
+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..3eb483f
--- /dev/null
+++ b/src/gen/java/io/swagger/api/NotFoundException.java
@@ -0,0 +1,35 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package io.swagger.api;
+
+@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..e20f46f
--- /dev/null
+++ b/src/gen/java/io/swagger/api/StringUtil.java
@@ -0,0 +1,62 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package io.swagger.api;
+
+@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..779487c
--- /dev/null
+++ b/src/gen/java/io/swagger/model/DCAEService.java
@@ -0,0 +1,303 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package io.swagger.model;
+
+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 typeId
+ **/
+ public DCAEService typeLink(Link typeLink) {
+ this.typeLink = typeLink;
+ return this;
+ }
+
+
+ @ApiModelProperty(value = "Link.title is typeId")
+ @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..6550c76
--- /dev/null
+++ b/src/gen/java/io/swagger/model/DCAEServiceComponent.java
@@ -0,0 +1,249 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package io.swagger.model;
+
+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..f65bf38
--- /dev/null
+++ b/src/gen/java/io/swagger/model/DCAEServiceComponentRequest.java
@@ -0,0 +1,152 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package io.swagger.model;
+
+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..f8f0449
--- /dev/null
+++ b/src/gen/java/io/swagger/model/DCAEServiceGroupByResults.java
@@ -0,0 +1,117 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package io.swagger.model;
+
+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..0d39b51
--- /dev/null
+++ b/src/gen/java/io/swagger/model/DCAEServiceGroupByResultsPropertyValues.java
@@ -0,0 +1,135 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package io.swagger.model;
+
+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..06f6935
--- /dev/null
+++ b/src/gen/java/io/swagger/model/DCAEServiceRequest.java
@@ -0,0 +1,204 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package io.swagger.model;
+
+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 typeId = 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 typeId(String typeId) {
+ this.typeId = typeId;
+ return this;
+ }
+
+
+ @ApiModelProperty(required = true, value = "Id of the associated DCAE service type")
+ @JsonProperty("typeId")
+ public String getTypeId() {
+ return typeId;
+ }
+ public void setTypeId(String typeId) {
+ this.typeId = typeId;
+ }
+
+ /**
+ **/
+ 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(typeId, dCAEServiceRequest.typeId) &&
+ 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(typeId, vnfId, vnfType, vnfLocation, deploymentRef, components);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class DCAEServiceRequest {\n");
+
+ sb.append(" typeId: ").append(toIndentedString(typeId)).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..5598604
--- /dev/null
+++ b/src/gen/java/io/swagger/model/DCAEServiceType.java
@@ -0,0 +1,134 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package io.swagger.model;
+
+import java.util.Objects;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModelProperty;
+import org.hibernate.validator.constraints.NotEmpty;
+
+import javax.ws.rs.core.Link;
+import java.util.Date;
+
+
+@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-04-18T20:16:22.119Z")
+public final class DCAEServiceType extends DCAEServiceTypeRequest {
+
+ @NotEmpty
+ private String typeId = null;
+ @NotEmpty
+ private Link selfLink = null;
+ @NotEmpty
+ private Date created = null;
+ private Date deactivated = null;
+
+
+ @ApiModelProperty(required = true, value = "Unique identifier for this DCAE service type")
+ @JsonProperty("typeId")
+ public String getTypeId() {
+ return typeId;
+ }
+
+ public void setTypeId(String typeId) {
+ this.typeId = typeId;
+ }
+
+
+ @ApiModelProperty(required = true, value = "Link to self where the Link.title is typeName")
+ @JsonProperty("selfLink")
+ public Link getSelfLink() {
+ return selfLink;
+ }
+
+ public void setSelfLink(Link selfLink) {
+ this.selfLink = selfLink;
+ }
+
+
+ @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;
+ }
+
+
+ @ApiModelProperty(required = false, value = "Deactivated timestamp for this DCAE service type in epoch time")
+ @JsonProperty("deactivated")
+ public Date getDeactivated() {
+ return deactivated;
+ }
+
+ public void setDeactivated(Date deactivated) {
+ this.deactivated = deactivated;
+ }
+
+ @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(typeId, dCAEServiceType.typeId) &&
+ Objects.equals(selfLink, dCAEServiceType.selfLink) &&
+ Objects.equals(created, dCAEServiceType.created) &&
+ Objects.equals(deactivated, dCAEServiceType.deactivated) &&
+ super.equals((DCAEServiceTypeRequest) o);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(typeId, selfLink, created, deactivated) + super.hashCode();
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class DCAEServiceType {\n");
+
+ sb.append(" typeId: ").append(toIndentedString(typeId)).append("\n");
+ sb.append(" selfLink: ").append(toIndentedString(selfLink)).append("\n");
+ sb.append(" created: ").append(toIndentedString(created)).append("\n");
+ sb.append(" deactivated: ").append(toIndentedString(deactivated)).append("\n");
+ sb.append(super.toString()).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..7cd3577
--- /dev/null
+++ b/src/gen/java/io/swagger/model/DCAEServiceTypeRequest.java
@@ -0,0 +1,227 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package io.swagger.model;
+
+import java.util.Objects;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModelProperty;
+import org.hibernate.validator.constraints.NotEmpty;
+
+import javax.validation.constraints.NotNull;
+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 String typeName = null;
+ @NotNull
+ private Integer typeVersion = 1;
+ @NotEmpty
+ private String blueprintTemplate = null;
+
+ // REVIEW: Look to deprecate these depending upon how the ASDC integration goes
+ private List<String> serviceIds = null;
+ private List<String> vnfTypes = new ArrayList<String>();
+
+ private List<String> serviceLocations = null;
+
+ // TODO: This should eventually become required fields
+ private String asdcServiceId = null;
+ private String asdcResourceId = null;
+ private String asdcServiceURL = 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;
+ }
+
+
+ @ApiModelProperty(required = true, value = "Descriptive name for this DCAE service type")
+ @JsonProperty("typeName")
+ public String getTypeName() {
+ return typeName;
+ }
+
+ public void setTypeName(String typeName) {
+ this.typeName = typeName;
+ }
+
+
+ @ApiModelProperty(required = true, value = "Version number for this DCAE service type")
+ @JsonProperty("typeVersion")
+ public Integer getTypeVersion() {
+ return this.typeVersion;
+ }
+
+ public void setTypeVersion(Integer typeVersion) {
+ this.typeVersion = typeVersion;
+ }
+
+ /**
+ **/
+ public DCAEServiceTypeRequest vnfTypes(List<String> vnfTypes) {
+ this.vnfTypes = vnfTypes;
+ return this;
+ }
+
+
+ @ApiModelProperty(required = false, 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;
+ }
+
+ @ApiModelProperty(required = false, value = "Id of service this DCAE service type is associated with. Value source is from ASDC's notification event's field `serviceInvariantUUID`.")
+ @JsonProperty("asdcServiceId")
+ public String getAsdcServiceId() {
+ return asdcServiceId;
+ }
+
+ public void setAsdcServiceId(String asdcServiceId) {
+ this.asdcServiceId = asdcServiceId;
+ }
+
+ @ApiModelProperty(required = false, value = "Id of vf/vnf instance this DCAE service type is associated with. Value source is from ASDC's notification event's field `resourceInvariantUUID`.")
+ @JsonProperty("asdcResourceId")
+ public String getAsdcResourceId() {
+ return asdcResourceId;
+ }
+
+ public void setAsdcResourceId(String asdcResourceId) {
+ this.asdcResourceId = asdcResourceId;
+ }
+
+ @ApiModelProperty(required = false, value = "URL to the ASDC service model")
+ @JsonProperty("asdcServiceURL")
+ public String getAsdcServiceURL() {
+ return asdcServiceURL;
+ }
+
+ public void setAsdcServiceURL(String asdcServiceURL) {
+ this.asdcServiceURL = asdcServiceURL;
+ }
+
+ @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..0c44fdf
--- /dev/null
+++ b/src/gen/java/io/swagger/model/InlineResponse200.java
@@ -0,0 +1,137 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package io.swagger.model;
+
+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..88e3816
--- /dev/null
+++ b/src/gen/java/io/swagger/model/InlineResponse2001.java
@@ -0,0 +1,137 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package io.swagger.model;
+
+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..bff7254
--- /dev/null
+++ b/src/gen/java/io/swagger/model/InlineResponse200Links.java
@@ -0,0 +1,117 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package io.swagger.model;
+
+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..3c69b26
--- /dev/null
+++ b/src/gen/java/io/swagger/model/Link.java
@@ -0,0 +1,133 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package io.swagger.model;
+
+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..5050ed3
--- /dev/null
+++ b/src/main/java/io/swagger/api/Bootstrap.java
@@ -0,0 +1,51 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package io.swagger.api;
+
+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("")
+ .contact(new Contact()
+ .email("dcae@lists.openecomp.org"))
+ .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..fecd8fe
--- /dev/null
+++ b/src/main/java/io/swagger/api/factories/DcaeServiceTypesApiServiceFactory.java
@@ -0,0 +1,35 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package io.swagger.api.factories;
+
+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..47f213d
--- /dev/null
+++ b/src/main/java/io/swagger/api/factories/DcaeServicesApiServiceFactory.java
@@ -0,0 +1,47 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package io.swagger.api.factories;
+
+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() {
+ 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..041fbaf
--- /dev/null
+++ b/src/main/java/io/swagger/api/factories/DcaeServicesGroupbyApiServiceFactory.java
@@ -0,0 +1,35 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package io.swagger.api.factories;
+
+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..34d8a4b
--- /dev/null
+++ b/src/main/java/io/swagger/api/impl/DcaeServiceTypesApiServiceImpl.java
@@ -0,0 +1,312 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package io.swagger.api.impl;
+
+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;
+import java.util.Locale;
+import java.util.UUID;
+
+@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.getTypeId()));
+ serviceType.setTypeId(serviceTypeObject.getTypeId());
+ serviceType.setTypeName(serviceTypeObject.getTypeName());
+ serviceType.setTypeVersion(serviceTypeObject.getTypeVersion());
+ serviceType.setOwner(serviceTypeObject.getOwner());
+ serviceType.setVnfTypes(serviceTypeObject.getVnfTypes());
+ serviceType.setServiceIds(serviceTypeObject.getServiceIds());
+ serviceType.setServiceLocations(serviceTypeObject.getServiceLocations());
+ serviceType.setBlueprintTemplate(serviceTypeObject.getBlueprintTemplate());
+ serviceType.setAsdcServiceId(serviceTypeObject.getAsdcServiceId());
+ serviceType.setAsdcResourceId(serviceTypeObject.getAsdcResourceId());
+ // TODO: Construct ASDC service URL somehow
+ serviceType.setCreated(serviceTypeObject.getCreated().toDate());
+
+ DateTime deactivated = serviceTypeObject.getDeactivated();
+ serviceType.setDeactivated(deactivated == null ? null : deactivated.toDate());
+
+ return serviceType;
+ }
+
+ @Override
+ public Response dcaeServiceTypesGet(String typeName, Boolean onlyLatest, Boolean onlyActive, String vnfType,
+ String serviceId, String serviceLocation, String asdcServiceId,
+ String asdcResourceId, 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 ");
+
+ if (onlyLatest) {
+ // Use the view which filters types that are of only the latest versions
+ sb.append("dcae_service_types_latest");
+ } else {
+ sb.append("dcae_service_types");
+ }
+
+ List<String> whereClauses = new ArrayList<String>();
+
+ if (typeName != null) {
+ whereClauses.add(":typeName = type_name");
+ }
+
+ if (vnfType != null) {
+ whereClauses.add("lower(:vnfType) = any(lower(vnf_types\\:\\:text)\\:\\:text[])");
+ }
+
+ 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)");
+ }
+
+ if (asdcServiceId != null) {
+ if ("NONE".equals(asdcServiceId.toUpperCase(Locale.ENGLISH))) {
+ whereClauses.add("asdc_service_id is null");
+ } else {
+ whereClauses.add(":asdcServiceId = asdc_service_id");
+ }
+ }
+
+ if (asdcResourceId != null) {
+ if ("NONE".equals(asdcResourceId.toUpperCase(Locale.ENGLISH))) {
+ whereClauses.add("asdc_resource_id is null");
+ } else {
+ whereClauses.add(":asdcResourceId = asdc_resource_id");
+ }
+ }
+
+ whereClauses.add("created < :createdCutoff");
+
+ if (onlyActive) {
+ whereClauses.add("deactivated is null");
+ }
+
+ 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 (typeName != null) {
+ query.bind("typeName", typeName);
+ }
+
+ if (vnfType != null) {
+ query.bind("vnfType", vnfType);
+ }
+
+ if (serviceId != null) {
+ query.bind("serviceId", serviceId);
+ }
+
+ if (serviceLocation != null) {
+ query.bind("serviceLocation", serviceLocation);
+ }
+
+ if (asdcServiceId != null && !"NONE".equals(asdcServiceId.toUpperCase(Locale.ENGLISH))) {
+ query.bind("asdcServiceId", asdcServiceId);
+ }
+
+ if (asdcResourceId != null && !"NONE".equals(asdcResourceId.toUpperCase(Locale.ENGLISH))) {
+ query.bind("asdcResourceId", asdcResourceId);
+ }
+
+ 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;
+
+ // TODO: MUST UPDATE THIS LINK NAV CODE
+
+ if (offsetPrev >= 0) {
+ navigationLinks.setPreviousLink(DcaeServiceTypesApi.buildLinkForGet(uriInfo, "prev", typeName, onlyLatest,
+ onlyActive, vnfType, serviceId, serviceLocation, asdcServiceId, asdcResourceId, offsetPrev));
+ }
+
+ Integer offsetNext = offset + PAGINATION_PAGE_SIZE;
+
+ if (offsetNext < totalCount) {
+ navigationLinks.setNextLink(DcaeServiceTypesApi.buildLinkForGet(uriInfo, "next", typeName, onlyLatest,
+ onlyActive, vnfType, serviceId, serviceLocation, asdcServiceId, asdcResourceId, offsetNext));
+ }
+
+ response.setLinks(navigationLinks);
+
+ return Response.ok().entity(response).build();
+ }
+
+ @Override
+ public Response dcaeServiceTypesTypeIdGet(String typeId, UriInfo uriInfo, SecurityContext securityContext)
+ throws NotFoundException {
+ DCAEServiceTypesDAO serviceTypesDAO = InventoryDAOManager.getInstance().getDCAEServiceTypesDAO();
+ DCAEServiceTypeObject serviceTypeObject = serviceTypesDAO.getByTypeId(typeId);
+
+ if (serviceTypeObject == null) {
+ return Response.status(Response.Status.NOT_FOUND).build();
+ }
+
+ return Response.ok().entity(createDCAEServiceType(serviceTypeObject, uriInfo)).build();
+ }
+
+ /**
+ * Create a DCAE service type database object
+ *
+ * Utility method that takes a DCAE service type request body and creates a database object representation
+ * to insert.
+ *
+ * @param typeId
+ * @param request
+ * @return
+ */
+ private static DCAEServiceTypeObject createDCAEServiceTypeDBO(String typeId, DCAEServiceTypeRequest request) {
+ DCAEServiceTypeObject serviceTypeObject = new DCAEServiceTypeObject();
+ serviceTypeObject.setTypeId(typeId);
+ serviceTypeObject.setTypeName(request.getTypeName());
+ serviceTypeObject.setTypeVersion(request.getTypeVersion());
+ serviceTypeObject.setOwner(request.getOwner());
+ serviceTypeObject.setBlueprintTemplate(request.getBlueprintTemplate());
+ serviceTypeObject.setVnfTypes(request.getVnfTypes());
+ serviceTypeObject.setServiceIds(request.getServiceIds());
+ serviceTypeObject.setServiceLocations(request.getServiceLocations());
+ serviceTypeObject.setAsdcServiceId(request.getAsdcServiceId());
+ serviceTypeObject.setAsdcResourceId(request.getAsdcResourceId());
+ serviceTypeObject.setCreated(DateTime.now(DateTimeZone.UTC));
+
+ return serviceTypeObject;
+ }
+
+ @Override
+ public Response dcaeServiceTypesTypeIdPost(DCAEServiceTypeRequest request, UriInfo uriInfo,
+ SecurityContext securityContext) {
+ DCAEServiceTypesDAO serviceTypesDAO = InventoryDAOManager.getInstance().getDCAEServiceTypesDAO();
+ // Must query by the implicit composite key: type name, type version, asdc service id, asdc resource id
+ // Had to split up the queries into two because in SQL selecting by null has to be `some_field is null`
+ //
+ // FIXME: There is a race condition here where there could be multiple records with different ids
+ // for the same implicit composite key. Maybe the answer is to simply add back in a PUT.
+ DCAEServiceTypeObject serviceTypeObject
+ = (request.getAsdcServiceId() == null || request.getAsdcResourceId() == null)
+ ? serviceTypesDAO.getByRequestFromNotASDC(request) : serviceTypesDAO.getByRequestFromASDC(request);
+
+ if (serviceTypeObject == null) {
+ // Generate a new type id
+ String typeId = UUID.randomUUID().toString();
+ serviceTypeObject = createDCAEServiceTypeDBO(typeId, request);
+ serviceTypesDAO.insert(serviceTypeObject);
+ return Response.ok().entity(createDCAEServiceType(serviceTypeObject, uriInfo)).build();
+ }
+
+ // Service type with same composite key already exists so try to update
+
+ String typeId = serviceTypeObject.getTypeId();
+ DCAEServicesDAO servicesDAO = InventoryDAOManager.getInstance().getDCAEServicesDAO();
+ Integer count = servicesDAO.countByType(DCAEServiceObject.DCAEServiceStatus.RUNNING, typeId);
+
+ LOG.info(String.format("Checked num DCAE services running: %s, %d", typeId, 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", typeId, count);
+ ApiResponseMessage entity = new ApiResponseMessage(ApiResponseMessage.ERROR, message);
+ return Response.status(Response.Status.CONFLICT).entity(entity).build();
+ } else {
+ serviceTypeObject = createDCAEServiceTypeDBO(typeId, request);
+ serviceTypesDAO.update(serviceTypeObject);
+ return Response.ok().entity(serviceTypeObject).build();
+ }
+ }
+
+ @Override
+ public Response dcaeServiceTypesTypeIdDelete(String typeId, UriInfo uriInfo, SecurityContext securityContext)
+ throws NotFoundException {
+ DCAEServiceTypesDAO serviceTypesDAO = InventoryDAOManager.getInstance().getDCAEServiceTypesDAO();
+
+ if (serviceTypesDAO.getByTypeId(typeId) == null) {
+ throw new NotFoundException(1, String.format("DCAE service type not found: %s", typeId));
+ } else if (serviceTypesDAO.getByTypeIdActiveOnly(typeId) == null) {
+ return Response.status(Response.Status.GONE).build();
+ }
+
+ serviceTypesDAO.deactivateExisting(typeId);
+ return Response.ok().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..d1e790c
--- /dev/null
+++ b/src/main/java/io/swagger/api/impl/DcaeServicesApiServiceImpl.java
@@ -0,0 +1,401 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package io.swagger.api.impl;
+
+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.getTypeId()));
+ 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(Locale.ENGLISH))) {
+ if (this.dcaeControllerClient != null) {
+ try {
+ DCAEControllerClient.ServiceInstance serviceInstance
+ = this.dcaeControllerClient.getServiceInstance(component.getComponentId());
+ component.setStatus(serviceInstance.getStatus());
+ // There's no specific location rather its inferred from the AIC 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(Locale.ENGLISH))) {
+ if (this.databusControllerClient != null) {
+ 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 typeId, 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 (typeId != null) {
+ whereClauses.add("ds.type_id = :typeId");
+ }
+
+ if (vnfId != null) {
+ whereClauses.add("ds.vnf_id = :vnfId");
+ }
+
+ if (vnfType != null) {
+ whereClauses.add("lower(ds.vnf_type) = lower(: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 (typeId != null) {
+ query.bind("typeId", typeId);
+ }
+
+ 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", typeId, vnfId, vnfType,
+ vnfLocation, componentType, shareable, created, offsetPrev));
+ }
+
+ Integer offsetNext = offset + PAGINATION_PAGE_SIZE;
+
+ if (offsetNext < serviceObjects.size()) {
+ navigationLinks.setNextLink(DcaeServicesApi.buildLinkForGet(uriInfo, "next", typeId, 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().getByTypeIdActiveOnly(request.getTypeId()) == null) {
+ String errorMessage = String.format("DCAE service type does not exist: %s", request.getTypeId());
+ 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..09d3143
--- /dev/null
+++ b/src/main/java/io/swagger/api/impl/DcaeServicesGroupbyApiServiceImpl.java
@@ -0,0 +1,103 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package io.swagger.api.impl;
+
+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_id";
+ 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.buildLinkForGetByTypeId(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..9e78506
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/InventoryApplication.java
@@ -0,0 +1,197 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.openecomp.dcae.inventory;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import io.dropwizard.cli.Cli;
+import io.dropwizard.configuration.ConfigurationFactory;
+import io.dropwizard.configuration.ConfigurationFactoryFactory;
+import io.dropwizard.configuration.JsonConfigurationFactory;
+import io.dropwizard.configuration.UrlConfigurationSourceProvider;
+import io.dropwizard.util.JarLocation;
+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.exceptions.mappers.DBIExceptionMapper;
+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.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.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.servlet.DispatcherType;
+import javax.servlet.FilterRegistration;
+import javax.validation.Validator;
+import javax.ws.rs.client.Client;
+import javax.ws.rs.core.Link;
+import java.util.EnumSet;
+import java.util.Locale;
+
+
+/**
+ * Created by mhwang on 4/11/16.
+ */
+public class InventoryApplication extends Application<InventoryConfiguration> {
+
+ static final Logger LOG = LoggerFactory.getLogger(InventoryApplication.class);
+ static boolean shouldRemoteFetchConfig = false;
+
+ public static void main(String[] args) throws Exception {
+ // This is here to try to fix a "high" issue caught by Fortify. Did this **plus** setting locale for each of the
+ // string comparisons that use `toUpper` because of this StackOverflow post:
+ // http://stackoverflow.com/questions/38308777/fixed-fortify-scan-locale-changes-are-reappearing
+ Locale.setDefault(Locale.ENGLISH);
+
+ if (args.length < 2 && "server".equals(args[0])) {
+ // When the start command is just "server", this will trigger inventory to look for its configuration
+ // from Consul's KV store. The url is hardcoded here which should be used as the "path" variable into
+ // the UrlConfigurationSourceProvider.
+ String[] customArgs = new String[args.length+1];
+ System.arraycopy(args, 0, customArgs, 0, args.length);
+ customArgs[args.length] = "http://consul:8500/v1/kv/inventory?raw=true";
+ shouldRemoteFetchConfig = true;
+
+ new InventoryApplication().run(customArgs);
+ } else {
+ // You are here because you want to use the default way of configuring inventory - YAML file.
+ new InventoryApplication().run(args);
+ }
+ }
+
+ @Override
+ public String getName() {
+ return "dcae-inventory";
+ }
+
+ private static class JsonConfigurationFactoryFactory<T> implements ConfigurationFactoryFactory<T> {
+ @Override
+ public ConfigurationFactory<T> create(Class<T> klass, Validator validator, ObjectMapper objectMapper, String propertyPrefix) {
+ return new JsonConfigurationFactory(klass, validator, objectMapper, propertyPrefix);
+ }
+ }
+
+ @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")
+ .contact(new Contact().email("dcae@lists.openecomp.org"));
+ // Swagger/servlet/jax-rs magic!
+ BeanConfig beanConfig = new BeanConfig();
+ beanConfig.setInfo(info);
+ beanConfig.setResourcePackage("io.swagger.api");
+ beanConfig.setScan(true);
+
+ if (shouldRemoteFetchConfig) {
+ // You are here because the configuration is sitting on a remote server in json format
+ bootstrap.setConfigurationSourceProvider(new UrlConfigurationSourceProvider());
+ bootstrap.setConfigurationFactoryFactory(new JsonConfigurationFactoryFactory<>());
+ }
+ }
+
+ @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()));
+ InventoryDAOManager.getInstance().setup(environment, configuration);
+ InventoryDAOManager.getInstance().initialize();
+
+ // 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
+ if (configuration.getDcaeControllerConnection().getRequired()) {
+ 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);
+
+ LOG.info("Use of DCAE controller client is required. Turned on.");
+ } else {
+ LOG.warn("Use of DCAE controller client is *not* required. Turned off.");
+ }
+
+ // Setup Databus controller client
+ // Used by the dcae-services API
+ if (configuration.getDatabusControllerConnection().getRequired()) {
+ final Client clientDatabusController = new JerseyClientBuilder(environment).using(configuration.getJerseyClientConfiguration())
+ .build("DatabusControllerClient");
+ clientDatabusController.register(HttpAuthenticationFeature.basicBuilder().credentials(
+ configuration.getDatabusControllerConnection().getMechId(),
+ configuration.getDatabusControllerConnection().getPassword()).build());
+ final DatabusControllerClient databusControllerClient = new DatabusControllerClient(clientDatabusController,
+ configuration.getDatabusControllerConnection());
+ DcaeServicesApiServiceFactory.setDatabusControllerClient(databusControllerClient);
+
+ LOG.info("Use of databus controller client is required. Turned on.");
+ } else {
+ LOG.warn("Use of databus controller client is *not* required. Turned off.");
+ }
+
+ environment.jersey().register(NotFoundExceptionMapper.class);
+ environment.jersey().register(DCAEControllerConnectionExceptionMapper.class);
+ environment.jersey().register(DCAEControllerTimeoutExceptionMapper.class);
+ environment.jersey().register(DBIExceptionMapper.UnableToObtainConnectionExceptionMapper.class);
+ environment.jersey().register(DBIExceptionMapper.UnableToExecuteStatementExceptionMapper.class);
+ environment.jersey().register(DBIExceptionMapper.UnableToCreateStatementExceptionMapper.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..55bcca2
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/InventoryConfiguration.java
@@ -0,0 +1,173 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.openecomp.dcae.inventory;
+
+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;
+
+ @JsonProperty
+ private Boolean required = true;
+
+ 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 Boolean getRequired() {
+ return this.required;
+ }
+ }
+
+ public static class DatabusControllerConnectionConfiguration {
+ @NotEmpty
+ @JsonProperty
+ private String host;
+
+ @NotNull
+ @JsonProperty
+ private Integer port;
+
+ @NotNull
+ @JsonProperty
+ private String mechId;
+
+ @NotNull
+ @JsonProperty
+ private String password;
+
+ @JsonProperty
+ private Boolean required = true;
+
+ public String getHost() {
+ return host;
+ }
+
+ public Integer getPort() {
+ return port;
+ }
+
+ public String getMechId() {
+ return mechId;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public Boolean getRequired() {
+ return this.required;
+ }
+ }
+
+ @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..b83697f
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/LinkSerializer.java
@@ -0,0 +1,52 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.openecomp.dcae.inventory;
+
+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..adbe8b7
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/clients/DCAEControllerClient.java
@@ -0,0 +1,222 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.openecomp.dcae.inventory.clients;
+
+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 <dcae controller domain name>: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..9df11d5
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/clients/DatabusControllerClient.java
@@ -0,0 +1,91 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.openecomp.dcae.inventory.clients;
+
+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("https").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);
+ }
+ } else if (response.getStatus() == 401) {
+ // You probably got this because your mech id/password is not authorized
+ throw new DatabusControllerClientException(String.format("Check the mech id/password: %d", response.getStatus()));
+ } else if (response.getStatus() == 403) {
+ throw new DatabusControllerClientException(String.format("Credentials not authorized: %d", response.getStatus()));
+ }
+
+ 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..9a674c9
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/daos/DCAEServiceComponentsDAO.java
@@ -0,0 +1,62 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.openecomp.dcae.inventory.daos;
+
+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..f0fca86
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/daos/DCAEServiceTransactionDAO.java
@@ -0,0 +1,158 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.openecomp.dcae.inventory.daos;
+
+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/DCAEServiceTypesDAO.java b/src/main/java/org/openecomp/dcae/inventory/daos/DCAEServiceTypesDAO.java
new file mode 100644
index 0000000..50b79b2
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/daos/DCAEServiceTypesDAO.java
@@ -0,0 +1,90 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.openecomp.dcae.inventory.daos;
+
+import org.openecomp.dcae.inventory.dbthings.mappers.DCAEServiceTypeObjectMapper;
+
+import org.openecomp.dcae.inventory.dbthings.models.DCAEServiceTypeObject;
+import io.swagger.model.DCAEServiceTypeRequest;
+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 no longer treated immutable because versioning is handled by clients
+ * to DCAE inventory i.e. ASDC. There is field "deactivated" that determines if a service type is active.
+ * Inserts and updates automatically activates a service type while deleting deactivates a service type.
+ *
+ * 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_id varchar not null, type_version integer not null, " +
+ "type_name varchar not null, owner varchar not null, blueprint_template text not null, " +
+ "vnf_types varchar[] not null, service_ids varchar[], service_locations varchar[], " +
+ "asdc_service_id varchar, asdc_resource_id varchar, " +
+ "created timestamp not null, deactivated timestamp, constraint pk_type_created primary key (type_id))")
+ void createTable();
+
+ // REVIEW: asdcServiceId and asdcResourceId is implicitly part of the unique key and thus shouldn't be updated.
+ @SqlUpdate("insert into dcae_service_types(type_id, type_version, type_name, owner, blueprint_template, vnf_types, " +
+ "service_ids, service_locations, asdc_service_id, asdc_resource_id, created, deactivated) " +
+ "values (:typeId, :typeVersion, :typeName, :owner, :blueprintTemplate, :vnfTypes, :serviceIds, " +
+ ":serviceLocations, :asdcServiceId, :asdcResourceId, :created, null)")
+ void insert(@BindBean DCAEServiceTypeObject serviceObject);
+
+ @SqlUpdate("update dcae_service_types set " +
+ "owner = :owner, blueprint_template = :blueprintTemplate, vnf_types = :vnfTypes, " +
+ "service_ids = :serviceIds, service_locations = :serviceLocations, created = :created, " +
+ "deactivated = null where type_id = :typeId")
+ void update(@BindBean DCAEServiceTypeObject serviceObject);
+
+ @SqlUpdate("update dcae_service_types set deactivated = (now() at time zone 'utc') where type_id = :typeId")
+ void deactivateExisting(@Bind("typeId") String typeId);
+
+ @Mapper(DCAEServiceTypeObjectMapper.class)
+ @SqlQuery("select * from dcae_service_types where type_id = :it")
+ DCAEServiceTypeObject getByTypeId(@Bind String typeId);
+
+ @Mapper(DCAEServiceTypeObjectMapper.class)
+ @SqlQuery("select * from dcae_service_types where deactivated is null and type_id = :it")
+ DCAEServiceTypeObject getByTypeIdActiveOnly(@Bind String typeId);
+
+ @Mapper(DCAEServiceTypeObjectMapper.class)
+ @SqlQuery("select * from dcae_service_types where type_name = :typeName and type_version = :typeVersion " +
+ "and asdc_service_id is null and asdc_resource_id is null")
+ DCAEServiceTypeObject getByRequestFromNotASDC(@BindBean DCAEServiceTypeRequest serviceTypeObject);
+
+ @Mapper(DCAEServiceTypeObjectMapper.class)
+ @SqlQuery("select * from dcae_service_types where type_name = :typeName and type_version = :typeVersion " +
+ "and asdc_service_id = :asdcServiceId and asdc_resource_id = :asdcResourceId")
+ DCAEServiceTypeObject getByRequestFromASDC(@BindBean DCAEServiceTypeRequest serviceTypeObject);
+
+}
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..5bfd3cd
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/daos/DCAEServicesComponentsMapsDAO.java
@@ -0,0 +1,50 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.openecomp.dcae.inventory.daos;
+
+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..9200677
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/daos/DCAEServicesDAO.java
@@ -0,0 +1,76 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.openecomp.dcae.inventory.daos;
+
+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_id 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_id, vnf_id, vnf_type, vnf_location, deployment_ref, " +
+ "created, modified, status) values (:serviceId, :typeId, :vnfId, :vnfType, :vnfLocation, :deploymentRef, " +
+ ":created, :modified, :status)")
+ void insert(@BindBean DCAEServiceObject serviceObject);
+
+ @SqlUpdate("update dcae_services set type_id = :typeId, 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_id = :typeId")
+ Integer countByType(@Bind("status") DCAEServiceObject.DCAEServiceStatus status, @Bind("typeId") String typeId);
+
+}
+
+
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..ef2fb8d
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/daos/InventoryDAO.java
@@ -0,0 +1,29 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.openecomp.dcae.inventory.daos;
+
+/**
+ * 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..77611b5
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/daos/InventoryDAOManager.java
@@ -0,0 +1,181 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.openecomp.dcae.inventory.daos;
+
+import org.openecomp.dcae.inventory.InventoryConfiguration;
+import org.openecomp.dcae.inventory.dbthings.StringListArgument;
+import io.dropwizard.jdbi.DBIFactory;
+import io.dropwizard.setup.Environment;
+import org.skife.jdbi.v2.DBI;
+import org.skife.jdbi.v2.Handle;
+import org.skife.jdbi.v2.util.BooleanMapper;
+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;
+ }
+
+ public static class InventoryDAOManagerSetupException extends RuntimeException {
+
+ public InventoryDAOManagerSetupException(String message) {
+ super(message);
+ }
+
+ }
+
+ 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 Environment environment;
+ private InventoryConfiguration configuration;
+
+ private InventoryDAOManager() {
+ }
+
+ /**
+ * Setup the manager
+ *
+ * Saving the Dropwizard environment and configuration which are used to construct the DBI object in a later
+ * initialize call. This method can only be called once to be safe and to avoid runtime problems that could be
+ * caused if the global instance of this class gets into a weird state (Couldn't use Java's `final` qualifier).
+ *
+ * @param environment
+ * @param inventoryConfiguration
+ */
+ public void setup(Environment environment, InventoryConfiguration inventoryConfiguration) {
+ if (this.environment == null && this.configuration == null) {
+ this.environment = environment;
+ this.configuration = inventoryConfiguration;
+ } else {
+ throw new InventoryDAOManagerSetupException("InventoryDAOManager setup can only be called once.");
+ }
+ }
+
+ /**
+ * Initialize the manager
+ *
+ * Create the underlying validated DBI object that is used to manage database connections
+ */
+ public void initialize() {
+ final DBIFactory factory = new DBIFactory();
+ final DBI jdbi = factory.build(this.environment, this.configuration.getDataSourceFactory(), "dcae-database");
+ jdbi.registerArgumentFactory(new StringListArgument());
+
+ 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()));
+ }
+ }
+
+ // CREATE VIEWS
+ // TODO: This doesn't belong here and is not consistent with the above approach. Make it better.
+ try (Handle jdbiHandle = jdbi.open()) {
+ String viewName = "dcae_service_types_latest";
+ String checkQuery = String.format("select exists (select * from information_schema.tables where table_name = '%s')",
+ viewName);
+
+ if (jdbiHandle.createQuery(checkQuery).map(BooleanMapper.FIRST).first()) {
+ LOG.info(String.format("Sql view exists: %s", viewName));
+ } else {
+ StringBuilder sb = new StringBuilder(String.format("create view %s as ", viewName));
+ sb.append("select s.* from dcae_service_types s ");
+ sb.append("join (select type_name, max(type_version) as max_version from dcae_service_types group by type_name) as f ");
+ sb.append("on s.type_name = f.type_name and s.type_version = f.max_version");
+
+ jdbiHandle.execute(sb.toString());
+ LOG.info(String.format("Sql view created: %s", viewName));
+ }
+ } catch (Exception e) {
+ throw new RuntimeException("", e);
+ }
+
+ // Do this assignment at the end after performing table checks to ensure that connection is good
+ this.jdbi = jdbi;
+ }
+
+ 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 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..afd0e78
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/dbthings/StringListArgument.java
@@ -0,0 +1,57 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.openecomp.dcae.inventory.dbthings;
+
+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..23b42b1
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/dbthings/mappers/DCAEServiceComponentObjectMapper.java
@@ -0,0 +1,48 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.openecomp.dcae.inventory.dbthings.mappers;
+
+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..27cb22f
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/dbthings/mappers/DCAEServiceObjectMapper.java
@@ -0,0 +1,51 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.openecomp.dcae.inventory.dbthings.mappers;
+
+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.setTypeId(resultSet.getString("type_id"));
+ 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..dc64423
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/dbthings/mappers/DCAEServiceTypeObjectMapper.java
@@ -0,0 +1,73 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.openecomp.dcae.inventory.dbthings.mappers;
+
+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.sql.Timestamp;
+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.setTypeId(resultSet.getString("type_id"));
+ object.setTypeName(resultSet.getString("type_name"));
+ object.setTypeVersion(resultSet.getInt("type_version"));
+ 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.setAsdcServiceId(resultSet.getString("asdc_service_id"));
+ object.setAsdcResourceId(resultSet.getString("asdc_resource_id"));
+ object.setCreated(new DateTime(resultSet.getTimestamp("created")));
+
+ Timestamp deactivated = resultSet.getTimestamp("deactivated");
+ object.setDeactivated(deactivated == null ? null : new DateTime(deactivated));
+ 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..0ec9c19
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/dbthings/models/DCAEServiceComponentObject.java
@@ -0,0 +1,146 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.openecomp.dcae.inventory.dbthings.models;
+
+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..4374acd
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/dbthings/models/DCAEServiceObject.java
@@ -0,0 +1,168 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.openecomp.dcae.inventory.dbthings.models;
+
+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 typeId = 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 getTypeId() {
+ return typeId;
+ }
+
+ public void setTypeId(String typeId) {
+ this.typeId = typeId;
+ }
+
+ 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.setTypeId(request.getTypeId());
+ 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.setTypeId(updateRequest.getTypeId());
+ 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..b57a28f
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/dbthings/models/DCAEServiceTypeObject.java
@@ -0,0 +1,142 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.openecomp.dcae.inventory.dbthings.models;
+
+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 typeId = null;
+ private String typeName = null;
+ private Integer typeVersion = null;
+ private String blueprintTemplate = null;
+ private String owner = null;
+ private List<String> vnfTypes = null;
+ private List<String> serviceIds = null;
+ private List<String> serviceLocations = null;
+ private String asdcServiceId = null;
+ private String asdcResourceId = null;
+ private DateTime created = null;
+ private DateTime deactivated = null;
+
+ public String getTypeId() {
+ return typeId;
+ }
+
+ public void setTypeId(String typeId) {
+ this.typeId = typeId;
+ }
+
+ public String getTypeName() {
+ return typeName;
+ }
+
+ public void setTypeName(String typeName) {
+ this.typeName = typeName;
+ }
+
+ public Integer getTypeVersion() {
+ return typeVersion;
+ }
+
+ public void setTypeVersion(Integer typeVersion) {
+ this.typeVersion = typeVersion;
+ }
+
+ public String getBlueprintTemplate() {
+ return blueprintTemplate;
+ }
+
+ public void setBlueprintTemplate(String blueprintTemplate) {
+ this.blueprintTemplate = blueprintTemplate;
+ }
+
+ 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 getAsdcServiceId() {
+ return asdcServiceId;
+ }
+
+ public void setAsdcServiceId(String asdcServiceId) {
+ this.asdcServiceId = asdcServiceId;
+ }
+
+ public String getAsdcResourceId() {
+ return asdcResourceId;
+ }
+
+ public void setAsdcResourceId(String asdcResourceId) {
+ this.asdcResourceId = asdcResourceId;
+ }
+
+ public DateTime getCreated() {
+ return created;
+ }
+
+ public void setCreated(DateTime created) {
+ this.created = created;
+ }
+
+ public DateTime getDeactivated() {
+ return deactivated;
+ }
+
+ public void setDeactivated(DateTime deactivated) {
+ this.deactivated = deactivated;
+ }
+}
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..eb30ae7
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/exceptions/DCAEControllerClientException.java
@@ -0,0 +1,36 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.openecomp.dcae.inventory.exceptions;
+
+/**
+ * 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..2b9e6e7
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/exceptions/DCAEControllerConnectionException.java
@@ -0,0 +1,36 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.openecomp.dcae.inventory.exceptions;
+
+/**
+ * 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..8aa9255
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/exceptions/DCAEControllerTimeoutException.java
@@ -0,0 +1,36 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.openecomp.dcae.inventory.exceptions;
+
+/**
+ * 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..6209521
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/exceptions/DatabusControllerClientException.java
@@ -0,0 +1,36 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.openecomp.dcae.inventory.exceptions;
+
+/**
+ * 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/DBIExceptionMapper.java b/src/main/java/org/openecomp/dcae/inventory/exceptions/mappers/DBIExceptionMapper.java
new file mode 100644
index 0000000..5dce2dd
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/exceptions/mappers/DBIExceptionMapper.java
@@ -0,0 +1,82 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.openecomp.dcae.inventory.exceptions.mappers;
+
+import org.openecomp.dcae.inventory.daos.InventoryDAOManager;
+import io.swagger.api.ApiResponseMessage;
+import org.skife.jdbi.v2.exceptions.DBIException;
+import org.skife.jdbi.v2.exceptions.UnableToCreateStatementException;
+import org.skife.jdbi.v2.exceptions.UnableToExecuteStatementException;
+import org.skife.jdbi.v2.exceptions.UnableToObtainConnectionException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.ws.rs.core.Response;
+import javax.ws.rs.ext.ExceptionMapper;
+
+/**
+ * Created by mhwang on 3/6/17.
+ *
+ * Responsible for handling DBIExceptions for Inventory which are raised by database client calls
+ * http://jdbi.org/apidocs/org/skife/jdbi/v2/exceptions/DBIException.html
+ *
+ * This class is intended to be extended to match on specific exceptions that are derived from DBIException
+ */
+public class DBIExceptionMapper<T extends DBIException> implements ExceptionMapper<T> {
+
+ private final static Logger LOG = LoggerFactory.getLogger(DBIExceptionMapper.class);
+
+ /**
+ * Upon a DBIException, this handler will attempt to re-initialize the Inventory's database connection
+ * and craft a specific message telling the client what to do.
+ *
+ * @param exception Derived class of DBIException
+ * @return Returns a Response with a status code of 502 with an ApiResponseMessage object
+ */
+ @Override
+ public Response toResponse(T exception) {
+ LOG.error("", exception);
+ StringBuilder clientMessage = new StringBuilder("There is a database issue.");
+
+ try {
+ InventoryDAOManager.getInstance().initialize();
+ clientMessage.append(" Connection has been successfully reset. Please try again.");
+ } catch(Exception e) {
+ LOG.error(String.format("Failed to re-initialize database connection: %s", e.getMessage()));
+ clientMessage.append(" Connection reset attempt has failed. Please try again soon.");
+ }
+
+ ApiResponseMessage response = new ApiResponseMessage(ApiResponseMessage.ERROR, clientMessage.toString());
+ return Response.status(Response.Status.BAD_GATEWAY).entity(response).build();
+ }
+
+ // Here are the handlers for specific derived DBIException
+
+ public final static class UnableToObtainConnectionExceptionMapper extends DBIExceptionMapper<UnableToObtainConnectionException> {
+ }
+
+ public final static class UnableToCreateStatementExceptionMapper extends DBIExceptionMapper<UnableToCreateStatementException> {
+ }
+
+ public final static class UnableToExecuteStatementExceptionMapper extends DBIExceptionMapper<UnableToExecuteStatementException> {
+ }
+
+}
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..76936e0
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/exceptions/mappers/DCAEControllerConnectionExceptionMapper.java
@@ -0,0 +1,37 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.openecomp.dcae.inventory.exceptions.mappers;
+
+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..b9ffda0
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/exceptions/mappers/DCAEControllerExceptionMapper.java
@@ -0,0 +1,41 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.openecomp.dcae.inventory.exceptions.mappers;
+
+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..9939aee
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/exceptions/mappers/DCAEControllerTimeoutExceptionMapper.java
@@ -0,0 +1,37 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.openecomp.dcae.inventory.exceptions.mappers;
+
+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..0f54b46
--- /dev/null
+++ b/src/main/java/org/openecomp/dcae/inventory/providers/NotFoundExceptionMapper.java
@@ -0,0 +1,40 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.openecomp.dcae.inventory.providers;
+
+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.json b/src/main/resources/config.json
new file mode 100644
index 0000000..436a181
--- /dev/null
+++ b/src/main/resources/config.json
@@ -0,0 +1,42 @@
+{
+ "database": {
+ "driverClass": "org.postgresql.Driver",
+ "user": "postgres",
+ "password": "test123",
+ "url": "jdbc:postgresql://127.0.0.1:5432/dcae_inv",
+ "properties": {
+ "charSet": "UTF-8"
+ },
+ "maxWaitForConnection": "1s",
+ "validationQuery": "/* MyService Health Check */ SELECT 1",
+ "minSize": 2,
+ "maxSize": 8,
+ "initialSize": 2,
+ "checkConnectionWhileIdle": false,
+ "evictionInterval": "10s",
+ "minIdleTime": "1 minute"
+ },
+ "dcaeControllerConnection": {
+ "host": "dcae-controller-hostname",
+ "port": 9998,
+ "basePath": "resources",
+ "user": null,
+ "password": null,
+ "required": false
+ },
+ "databusControllerConnection": {
+ "host": "databus-controller-hostname",
+ "port": 8443,
+ "mechId": null,
+ "password": null,
+ "required": false
+ },
+ "httpClient": {
+ "minThreads": 1,
+ "maxThreads": 128,
+ "gzipEnabled": false,
+ "gzipEnabledForRequests": false,
+ "timeout": "5000milliseconds",
+ "connectionTimeout": "5000milliseconds"
+ }
+}
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
new file mode 100644
index 0000000..505eea5
--- /dev/null
+++ b/src/main/resources/config.yml
@@ -0,0 +1,96 @@
+# 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: 2
+
+ # the maximum number of connections to keep open
+ maxSize: 8
+
+ initialSize: 2
+
+ # 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: dcae-controller-hostname
+ port: 9998
+ # Apparently this is variable parameter amongst DCAE controller instances
+ basePath: resources
+ user:
+ password:
+
+databusControllerConnection:
+ host: databus-controller-hostname
+ port: 8443
+ mechId:
+ password:
+
+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
+
+ # Requests to databus controller were timing out so I bumped it up 4x of default
+ timeout: 5000milliseconds
+ connectionTimeout: 5000milliseconds
+
+server:
+ # requestLog is for those messages you see right when the service handles HTTP requests
+ requestLog:
+ appenders:
+ - type: file
+ currentLogFilename: /opt/logs/DCAE/inventory/audit.log
+ archive: true
+ archivedLogFilenamePattern: /opt/logs/DCAE/inventory/audit-%d.log.gz
+ archivedFileCount: 10
+ - type: console
+
+# Rolling is c.q.l.core.rolling.TimeBasedRollingPolicy
+logging:
+ level: INFO
+ appenders:
+ - type: file
+ currentLogFilename: /opt/logs/DCAE/inventory/audit.log
+ archive: true
+ archivedLogFilenamePattern: /opt/logs/DCAE/inventory/audit-%d.log.gz
+ archivedFileCount: 10
+ - type: console
diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml
new file mode 100644
index 0000000..aa16762
--- /dev/null
+++ b/src/main/resources/logback.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ============LICENSE_START=======================================================
+ dcae-inventory
+ ================================================================================
+ 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=========================================================
+ -->
+
+<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>
diff --git a/src/test/java/DcaeServiceTypesApiServiceImplTests.java b/src/test/java/DcaeServiceTypesApiServiceImplTests.java
new file mode 100644
index 0000000..ce0011b
--- /dev/null
+++ b/src/test/java/DcaeServiceTypesApiServiceImplTests.java
@@ -0,0 +1,220 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+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.models.DCAEServiceObject;
+import org.openecomp.dcae.inventory.dbthings.models.DCAEServiceTypeObject;
+import io.swagger.api.impl.DcaeServiceTypesApiServiceImpl;
+import io.swagger.model.DCAEServiceType;
+import io.swagger.model.DCAEServiceTypeRequest;
+import org.joda.time.DateTime;
+import org.junit.Before;
+import org.junit.Test;
+
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.UriBuilder;
+import javax.ws.rs.core.UriInfo;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.*;
+
+import org.junit.runner.RunWith;
+import org.powermock.api.mockito.PowerMockito;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.powermock.modules.junit4.PowerMockRunner;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Arrays;
+import java.util.Objects;
+
+
+/**
+ * Created by mhwang on 10/27/16.
+ */
+@PrepareForTest({InventoryDAOManager.class})
+@RunWith(PowerMockRunner.class)
+public class DcaeServiceTypesApiServiceImplTests {
+
+ private final static Logger LOG = LoggerFactory.getLogger(DcaeServiceTypesApiServiceImplTests.class);
+
+ private final static String URL_PATH = "http://testing-is-good.com";
+
+ private DcaeServiceTypesApiServiceImpl api = null;
+ private UriInfo uriInfo = null;
+ private DCAEServiceTypesDAO mockTypesDAO = null;
+ private DCAEServicesDAO mockServicesDAO = null;
+
+ @Before
+ public void setupClass() {
+ api = new DcaeServiceTypesApiServiceImpl();
+
+ uriInfo = mock(UriInfo.class);
+ mockTypesDAO = mock(DCAEServiceTypesDAO.class);
+ mockServicesDAO = mock(DCAEServicesDAO.class);
+
+ // PowerMockito does bytecode magic to mock static methods and use final classes
+ PowerMockito.mockStatic(InventoryDAOManager.class);
+ InventoryDAOManager mockDAOManager = mock(InventoryDAOManager.class);
+
+ when(InventoryDAOManager.getInstance()).thenReturn(mockDAOManager);
+ when(mockDAOManager.getDCAEServiceTypesDAO()).thenReturn(mockTypesDAO);
+ when(mockDAOManager.getDCAEServicesDAO()).thenReturn(mockServicesDAO);
+
+ when(uriInfo.getBaseUriBuilder()).thenReturn(UriBuilder.fromPath(URL_PATH));
+ }
+
+ private static boolean matchTypeVsTypeObject(DCAEServiceType serviceType, DCAEServiceTypeObject serviceTypeObject, String prefixPath) {
+ return Objects.equals(serviceType.getTypeId(), serviceTypeObject.getTypeId())
+ && Objects.equals(serviceType.getTypeName(), serviceTypeObject.getTypeName())
+ && Objects.equals(serviceType.getTypeVersion(), serviceTypeObject.getTypeVersion())
+ && Objects.equals(serviceType.getOwner(), serviceTypeObject.getOwner())
+ && Objects.equals(serviceType.getBlueprintTemplate(), serviceTypeObject.getBlueprintTemplate())
+ && Objects.equals(serviceType.getCreated(), serviceTypeObject.getCreated().toDate())
+ && Objects.equals(serviceType.getVnfTypes(), serviceTypeObject.getVnfTypes())
+ && Objects.equals(serviceType.getServiceIds(), serviceTypeObject.getServiceIds())
+ && Objects.equals(serviceType.getServiceLocations(), serviceTypeObject.getServiceLocations())
+ && Objects.equals(serviceType.getAsdcResourceId(), serviceTypeObject.getAsdcResourceId())
+ && Objects.equals(serviceType.getAsdcServiceId(), serviceTypeObject.getAsdcServiceId())
+ && serviceType.getSelfLink().getUri().toString().contains(prefixPath)
+ && serviceType.getSelfLink().getUri().toString().contains(serviceTypeObject.getTypeId());
+ }
+
+ @Test
+ public void testGetSuccess() {
+ DCAEServiceTypeObject minimalFixture = new DCAEServiceTypeObject();
+ minimalFixture.setTypeId("abc:1");
+ minimalFixture.setTypeName("abc");
+ minimalFixture.setTypeVersion(1);
+ minimalFixture.setOwner("tester");
+ minimalFixture.setBlueprintTemplate("{ blueprint template goes here }");
+ minimalFixture.setCreated(DateTime.parse("2016-10-28T00:00"));
+
+ DCAEServiceTypeObject fullFixture = new DCAEServiceTypeObject();
+ fullFixture.setTypeId("def:1");
+ fullFixture.setTypeName("def");
+ fullFixture.setTypeVersion(1);
+ fullFixture.setOwner("tester");
+ fullFixture.setBlueprintTemplate("{ blueprint template goes here }");
+ fullFixture.setCreated(DateTime.parse("2016-10-28T00:00"));
+ fullFixture.setAsdcServiceId("4bb4e740-3920-442d-9ed3-89f15bdbff8a");
+ fullFixture.setAsdcResourceId("3ea9dfae-a00d-4da8-8c87-02a34de8fc02");
+ fullFixture.setVnfTypes(Arrays.asList(new String[] { "vnf-marble", "vnf-granite" }));
+ fullFixture.setServiceIds(Arrays.asList(new String[] { "service-alpha", "service-bravo" }));
+ fullFixture.setServiceLocations(Arrays.asList(new String[] { "New York", "Washington" }));
+
+ for (DCAEServiceTypeObject fixture : new DCAEServiceTypeObject[] {minimalFixture, fullFixture}) {
+ String someTypeId = fixture.getTypeId();
+ when(mockTypesDAO.getByTypeId(someTypeId)).thenReturn(fixture);
+
+ try {
+ Response response = api.dcaeServiceTypesTypeIdGet(someTypeId, uriInfo, null);
+ DCAEServiceType serviceType = (DCAEServiceType) response.getEntity();
+ assertTrue("GET - 200 test case failed", matchTypeVsTypeObject(serviceType, fixture, URL_PATH));
+ } catch (Exception e) {
+ throw new RuntimeException("Unexpected exception: get 200", e);
+ }
+ }
+ }
+
+ @Test
+ public void testGetNotFound() {
+ String someTypeId = "abc:1";
+ when(mockTypesDAO.getByTypeId(someTypeId)).thenReturn(null);
+
+ try {
+ Response response = api.dcaeServiceTypesTypeIdGet(someTypeId, uriInfo, null);
+ assertEquals("GET - 404 test case failed", 404, response.getStatus());
+ } catch(Exception e) {
+ throw new RuntimeException("Unexpected exception: get 404", e);
+ }
+ }
+
+ // TODO: Update this to check type id again. Must mock dao calls deeper.
+ private static boolean matchTypeVsTypeRequest(DCAEServiceType serviceType, DCAEServiceTypeRequest serviceTypeRequest, String prefixPath) {
+ return Objects.equals(serviceType.getTypeName(), serviceTypeRequest.getTypeName())
+ && Objects.equals(serviceType.getTypeVersion(), serviceTypeRequest.getTypeVersion())
+ && Objects.equals(serviceType.getOwner(), serviceTypeRequest.getOwner())
+ && Objects.equals(serviceType.getBlueprintTemplate(), serviceTypeRequest.getBlueprintTemplate())
+ && serviceType.getCreated() != null
+ && Objects.equals(serviceType.getVnfTypes(), serviceTypeRequest.getVnfTypes())
+ && Objects.equals(serviceType.getServiceIds(), serviceTypeRequest.getServiceIds())
+ && Objects.equals(serviceType.getServiceLocations(), serviceTypeRequest.getServiceLocations())
+ && Objects.equals(serviceType.getAsdcResourceId(), serviceTypeRequest.getAsdcResourceId())
+ && Objects.equals(serviceType.getAsdcServiceId(), serviceTypeRequest.getAsdcServiceId())
+ && serviceType.getSelfLink().getUri().toString().contains(prefixPath);
+ }
+
+ // TODO: Need to add tests for repeated POSTs == updates.
+ @Test
+ public void testPost() {
+ DCAEServiceTypeRequest minimalFixture = new DCAEServiceTypeRequest();
+ minimalFixture.setTypeName("abc");
+ minimalFixture.setTypeVersion(1);
+ minimalFixture.setOwner("tester");
+ minimalFixture.setBlueprintTemplate("{ blueprint template goes here }");
+
+ DCAEServiceTypeRequest fullFixture = new DCAEServiceTypeRequest();
+ fullFixture.setTypeName("def");
+ fullFixture.setTypeVersion(1);
+ fullFixture.setOwner("tester");
+ fullFixture.setBlueprintTemplate("{ blueprint template goes here }");
+ fullFixture.setAsdcServiceId("4bb4e740-3920-442d-9ed3-89f15bdbff8a");
+ fullFixture.setAsdcResourceId("3ea9dfae-a00d-4da8-8c87-02a34de8fc02");
+ fullFixture.setVnfTypes(Arrays.asList(new String[] { "vnf-marble", "vnf-granite" }));
+ fullFixture.setServiceIds(Arrays.asList(new String[] { "service-alpha", "service-bravo" }));
+ fullFixture.setServiceLocations(Arrays.asList(new String[] { "New York", "Washington" }));
+
+ for (DCAEServiceTypeRequest fixture : new DCAEServiceTypeRequest[] {minimalFixture, fullFixture}) {
+ try {
+ Response response = api.dcaeServiceTypesTypeIdPost(fixture, uriInfo, null);
+ DCAEServiceType serviceType = (DCAEServiceType) response.getEntity();
+ assertTrue("POST - 200 test case failed", matchTypeVsTypeRequest(serviceType, fixture, URL_PATH));
+ } catch (Exception e) {
+ throw new RuntimeException("Unexpected exception: post new 200", e);
+ }
+ }
+ }
+
+ @Test
+ public void testPostConflict() {
+ DCAEServiceTypeRequest minimalFixture = new DCAEServiceTypeRequest();
+ minimalFixture.setTypeName("abc");
+ minimalFixture.setTypeVersion(1);
+ minimalFixture.setOwner("tester");
+ minimalFixture.setBlueprintTemplate("{ blueprint template goes here }");
+
+ String expectedTypeId = String.format("%s:%s", minimalFixture.getTypeName(), minimalFixture.getTypeVersion());
+
+ when(mockTypesDAO.getByTypeId(expectedTypeId)).thenReturn(new DCAEServiceTypeObject());
+ when(mockServicesDAO.countByType(DCAEServiceObject.DCAEServiceStatus.RUNNING, expectedTypeId)).thenReturn(10);
+
+ try {
+ Response response = api.dcaeServiceTypesTypeIdPost(minimalFixture, uriInfo, null);
+ assertEquals("POST - 401 test case failed", 409, response.getStatus());
+ } catch (Exception e) {
+ throw new RuntimeException("Unexpected exception: post new 200", e);
+ }
+ }
+
+}
diff --git a/src/test/java/org/openecomp/dcae/inventory/daos/InventoryDAOManagerTests.java b/src/test/java/org/openecomp/dcae/inventory/daos/InventoryDAOManagerTests.java
new file mode 100644
index 0000000..16e3688
--- /dev/null
+++ b/src/test/java/org/openecomp/dcae/inventory/daos/InventoryDAOManagerTests.java
@@ -0,0 +1,44 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.openecomp.dcae.inventory.daos;
+
+import org.openecomp.dcae.inventory.InventoryConfiguration;
+import io.dropwizard.setup.Environment;
+import org.junit.Test;
+import static org.mockito.Mockito.mock;
+
+/**
+ * Created by mhwang on 3/8/17.
+ */
+public class InventoryDAOManagerTests {
+
+ @Test(expected=InventoryDAOManager.InventoryDAOManagerSetupException.class)
+ public void testInitializeStrictness() {
+ InventoryDAOManager daoManager = InventoryDAOManager.getInstance();
+ Environment environment = mock(Environment.class);
+ InventoryConfiguration configuration = mock(InventoryConfiguration.class);
+ // This should be ok
+ daoManager.setup(environment, configuration);
+ // Cannot do another call
+ daoManager.setup(environment, configuration);
+ }
+
+}
diff --git a/src/test/java/org/openecomp/dcae/inventory/exception/mappers/DBIExceptionMapperTests.java b/src/test/java/org/openecomp/dcae/inventory/exception/mappers/DBIExceptionMapperTests.java
new file mode 100644
index 0000000..6e72182
--- /dev/null
+++ b/src/test/java/org/openecomp/dcae/inventory/exception/mappers/DBIExceptionMapperTests.java
@@ -0,0 +1,117 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * dcae-inventory
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.openecomp.dcae.inventory.exception.mappers;
+
+import org.openecomp.dcae.inventory.daos.InventoryDAOManager;
+import org.openecomp.dcae.inventory.exceptions.mappers.DBIExceptionMapper;
+import io.swagger.api.ApiResponseMessage;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mockito;
+import org.powermock.api.mockito.PowerMockito;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.powermock.modules.junit4.PowerMockRunner;
+import org.skife.jdbi.v2.exceptions.UnableToCreateStatementException;
+import org.skife.jdbi.v2.exceptions.UnableToExecuteStatementException;
+import org.skife.jdbi.v2.exceptions.UnableToObtainConnectionException;
+
+import javax.ws.rs.core.Response;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+/**
+ * Created by mhwang on 3/8/17.
+ */
+@PrepareForTest({InventoryDAOManager.class})
+@RunWith(PowerMockRunner.class)
+public class DBIExceptionMapperTests {
+
+ @Test
+ public void testReinitializeSuccess() {
+ // PowerMockito does bytecode magic to mock static methods and use final classes
+ PowerMockito.mockStatic(InventoryDAOManager.class);
+ InventoryDAOManager mockDAOManager = mock(InventoryDAOManager.class);
+ when(InventoryDAOManager.getInstance()).thenReturn(mockDAOManager);
+
+ RuntimeException fakeException = new RuntimeException("Spoofing database failure");
+
+ // Test UnableToObtainConnectionExceptionMapper
+
+ DBIExceptionMapper.UnableToObtainConnectionExceptionMapper mapperOne = new DBIExceptionMapper.UnableToObtainConnectionExceptionMapper();
+ Response responseOne = mapperOne.toResponse(new UnableToObtainConnectionException(fakeException));
+ assert responseOne.getStatus() == 502;
+ String messageOne = ((ApiResponseMessage) responseOne.getEntity()).getMessage();
+ assert messageOne.contains("successfully reset");
+
+ // Test UnableToCreateStatementExceptionMapper
+
+ DBIExceptionMapper.UnableToCreateStatementExceptionMapper mapperTwo = new DBIExceptionMapper.UnableToCreateStatementExceptionMapper();
+ Response responseTwo = mapperTwo.toResponse(new UnableToCreateStatementException(fakeException));
+ assert responseTwo.getStatus() == 502;
+ String messageTwo = ((ApiResponseMessage) responseTwo.getEntity()).getMessage();
+ assert messageTwo.contains("successfully reset");
+
+ // Test UnableToExecuteStatementExceptionMapper
+
+ DBIExceptionMapper.UnableToExecuteStatementExceptionMapper mapperThree = new DBIExceptionMapper.UnableToExecuteStatementExceptionMapper();
+ Response responseThree = mapperThree.toResponse(new UnableToExecuteStatementException(fakeException));
+ assert responseThree.getStatus() == 502;
+ String messageThree = ((ApiResponseMessage) responseThree.getEntity()).getMessage();
+ assert messageThree.contains("successfully reset");
+ }
+
+ @Test
+ public void testReinitializeFailed() {
+ // PowerMockito does bytecode magic to mock static methods and use final classes
+ PowerMockito.mockStatic(InventoryDAOManager.class);
+ InventoryDAOManager mockDAOManager = mock(InventoryDAOManager.class);
+ when(InventoryDAOManager.getInstance()).thenReturn(mockDAOManager);
+ Mockito.doThrow(new RuntimeException("Spoof initialization failure")).when(mockDAOManager).initialize();
+
+ RuntimeException fakeException = new RuntimeException("Spoofing database failure");
+
+ // Test UnableToObtainConnectionExceptionMapper
+
+ DBIExceptionMapper.UnableToObtainConnectionExceptionMapper mapperOne = new DBIExceptionMapper.UnableToObtainConnectionExceptionMapper();
+ Response responseOne = mapperOne.toResponse(new UnableToObtainConnectionException(fakeException));
+ assert responseOne.getStatus() == 502;
+ String messageOne = ((ApiResponseMessage) responseOne.getEntity()).getMessage();
+ assert !messageOne.contains("successfully reset");
+
+ // Test UnableToCreateStatementExceptionMapper
+
+ DBIExceptionMapper.UnableToCreateStatementExceptionMapper mapperTwo = new DBIExceptionMapper.UnableToCreateStatementExceptionMapper();
+ Response responseTwo = mapperTwo.toResponse(new UnableToCreateStatementException(fakeException));
+ assert responseTwo.getStatus() == 502;
+ String messageTwo = ((ApiResponseMessage) responseTwo.getEntity()).getMessage();
+ assert !messageTwo.contains("successfully reset");
+
+ // Test UnableToExecuteStatementExceptionMapper
+
+ DBIExceptionMapper.UnableToExecuteStatementExceptionMapper mapperThree = new DBIExceptionMapper.UnableToExecuteStatementExceptionMapper();
+ Response responseThree = mapperThree.toResponse(new UnableToExecuteStatementException(fakeException));
+ assert responseThree.getStatus() == 502;
+ String messageThree = ((ApiResponseMessage) responseThree.getEntity()).getMessage();
+ assert !messageThree.contains("successfully reset");
+ }
+
+}