aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/org/onap/nbi/apis/hub
diff options
context:
space:
mode:
authorNicolasLaplaud <nicolas.laplaud@orange.com>2018-07-17 10:32:42 +0200
committerQuoc-Nghia Nguyen <quocnghia.nguyen@orange.com>2018-07-18 16:49:44 +0200
commit9dc24ae6efc0d070ae446b87c6268bb3cd353034 (patch)
tree9fa843e72c78f432af443fedd1bb9b117b616491 /src/main/java/org/onap/nbi/apis/hub
parent04ec0d3d8dbce788be1ec1fec405bd77c0d39bf4 (diff)
HUB Resource
- Adding DELETE, GET, FIND operations on subscriptions Change-Id: If0c326ffc6a3d0ec456e5258a04b3110bb8df583 Issue-ID: EXTAPI-96 Signed-off-by: NicolasLaplaud <nicolas.laplaud@orange.com>
Diffstat (limited to 'src/main/java/org/onap/nbi/apis/hub')
-rw-r--r--src/main/java/org/onap/nbi/apis/hub/HubConfig.java29
-rwxr-xr-xsrc/main/java/org/onap/nbi/apis/hub/HubResource.java67
-rwxr-xr-xsrc/main/java/org/onap/nbi/apis/hub/model/Event.java2
-rwxr-xr-xsrc/main/java/org/onap/nbi/apis/hub/model/Subscriber.java3
-rwxr-xr-xsrc/main/java/org/onap/nbi/apis/hub/model/Subscription.java36
-rwxr-xr-xsrc/main/java/org/onap/nbi/apis/hub/service/CriteriaBuilderServiceOrder.java8
-rw-r--r--src/main/java/org/onap/nbi/apis/hub/service/SubscriptionService.java47
7 files changed, 131 insertions, 61 deletions
diff --git a/src/main/java/org/onap/nbi/apis/hub/HubConfig.java b/src/main/java/org/onap/nbi/apis/hub/HubConfig.java
deleted file mode 100644
index 693e628..0000000
--- a/src/main/java/org/onap/nbi/apis/hub/HubConfig.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Copyright (c) 2018 Orange
- *
- * 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.
- */
-package org.onap.nbi.apis.hub;
-
-import org.onap.nbi.apis.hub.service.CriteriaBuilder;
-import org.onap.nbi.apis.hub.service.CriteriaBuilderServiceOrder;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-@Configuration
-public class HubConfig {
- @Bean
- CriteriaBuilder criteriaBuilder() {
- return new CriteriaBuilderServiceOrder();
- }
-}
diff --git a/src/main/java/org/onap/nbi/apis/hub/HubResource.java b/src/main/java/org/onap/nbi/apis/hub/HubResource.java
index 54e9001..811dd51 100755
--- a/src/main/java/org/onap/nbi/apis/hub/HubResource.java
+++ b/src/main/java/org/onap/nbi/apis/hub/HubResource.java
@@ -17,44 +17,87 @@ package org.onap.nbi.apis.hub;
import org.onap.nbi.apis.hub.model.Subscriber;
import org.onap.nbi.apis.hub.model.Subscription;
-import org.onap.nbi.apis.hub.repository.SubscriberRepository;
+import org.onap.nbi.apis.hub.service.SubscriptionService;
+import org.onap.nbi.commons.JsonRepresentation;
+import org.onap.nbi.commons.MultiCriteriaRequestBuilder;
+import org.onap.nbi.commons.ResourceManagement;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.scheduling.annotation.EnableScheduling;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
import java.net.URI;
+import java.util.List;
@RestController
@RequestMapping("/hub")
@EnableScheduling
-public class HubResource {
+public class HubResource extends ResourceManagement {
Logger logger = LoggerFactory.getLogger(HubResource.class);
@Autowired
- SubscriberRepository subscriberRepository;
+ MongoTemplate mongoTemplate;
+
+ @Autowired
+ SubscriptionService subscriptionService;
+
+ @Autowired
+ MultiCriteriaRequestBuilder multiCriteriaRequestBuilder;
@PostMapping(consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Subscriber> createEventSubscription(@RequestBody Subscription subscription) {
- logger.debug("Received subscription request: {}", subscription);
+ logger.debug("POST request for subscription : {}", subscription);
- Subscriber sub = Subscriber.createFromRequest(subscription);
- sub = subscriberRepository.save(sub);
+ Subscriber subscriber = subscriptionService.createSubscription(subscription);
URI location = ServletUriComponentsBuilder
.fromCurrentRequest()
- .path("{id}")
- .buildAndExpand(sub.getId())
+ .path("/{id}")
+ .buildAndExpand(subscriber.getId())
.toUri();
return ResponseEntity.created(location).build();
}
+
+ @GetMapping(value = "/{subscriptionId}", produces = MediaType.APPLICATION_JSON_VALUE)
+ public ResponseEntity<Subscription> getSubscription(@PathVariable String subscriptionId) {
+
+ Subscriber subscriber = subscriptionService.findSubscriptionById(subscriptionId);
+ if (subscriber == null) {
+ return ResponseEntity.notFound().build();
+ }
+ return ResponseEntity.ok(Subscription.createFromSubscriber(subscriber));
+ }
+
+ @GetMapping(value = "", produces = MediaType.APPLICATION_JSON_VALUE)
+ public ResponseEntity<Object> findSubscribers(@RequestParam MultiValueMap<String, String> params) {
+
+ Query query = multiCriteriaRequestBuilder.buildRequest(params);
+ List<Subscriber> subscribers = mongoTemplate.find(query, Subscriber.class);
+ JsonRepresentation filter = new JsonRepresentation(params);
+ long totalCount = subscriptionService.countSubscription();
+ HttpHeaders headers = new HttpHeaders();
+ headers.add("X-Total-Count", String.valueOf(totalCount));
+ headers.add("X-Result-Count", String.valueOf(subscribers.size()));
+
+ return this.findResponse(subscribers, filter, headers);
+
+ }
+
+ @DeleteMapping("/{subscriptionId}")
+ @ResponseStatus(HttpStatus.NO_CONTENT)
+ public void deleteSubscription(@PathVariable String subscriptionId) {
+ logger.debug("DELETE request for subscription id #{}", subscriptionId);
+ subscriptionService.deleteSubscription(subscriptionId);
+ }
}
diff --git a/src/main/java/org/onap/nbi/apis/hub/model/Event.java b/src/main/java/org/onap/nbi/apis/hub/model/Event.java
index e68d322..4c8ae79 100755
--- a/src/main/java/org/onap/nbi/apis/hub/model/Event.java
+++ b/src/main/java/org/onap/nbi/apis/hub/model/Event.java
@@ -27,7 +27,7 @@ public class Event {
private LocalDateTime eventDate;
@NotNull
- private String eventType;
+ private String eventType = "string";
@NotNull
private JsonNode event;
diff --git a/src/main/java/org/onap/nbi/apis/hub/model/Subscriber.java b/src/main/java/org/onap/nbi/apis/hub/model/Subscriber.java
index a18833e..afb9472 100755
--- a/src/main/java/org/onap/nbi/apis/hub/model/Subscriber.java
+++ b/src/main/java/org/onap/nbi/apis/hub/model/Subscriber.java
@@ -15,6 +15,7 @@
*/
package org.onap.nbi.apis.hub.model;
+import org.onap.nbi.commons.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.annotation.Id;
@@ -26,7 +27,7 @@ import java.util.stream.Stream;
@Document
-public class Subscriber {
+public class Subscriber implements Resource {
private static final Logger logger = LoggerFactory.getLogger(Subscriber.class);
@Id
diff --git a/src/main/java/org/onap/nbi/apis/hub/model/Subscription.java b/src/main/java/org/onap/nbi/apis/hub/model/Subscription.java
index 70b50b4..53f33ab 100755
--- a/src/main/java/org/onap/nbi/apis/hub/model/Subscription.java
+++ b/src/main/java/org/onap/nbi/apis/hub/model/Subscription.java
@@ -15,11 +15,13 @@
*/
package org.onap.nbi.apis.hub.model;
-import java.util.Objects;
+import java.util.stream.Collectors;
public class Subscription {
+ private String id;
+
private String callback;
private String query;
@@ -28,11 +30,20 @@ public class Subscription {
}
- public Subscription(String callback, String query) {
+ public Subscription(String id, String callback, String query) {
+ this.id = id;
this.callback = callback;
this.query = query;
}
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
public String getCallback() {
return callback;
}
@@ -49,18 +60,17 @@ public class Subscription {
this.query = query;
}
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
- Subscription that = (Subscription) o;
- return Objects.equals(callback, that.callback) &&
- Objects.equals(query, that.query);
- }
+ public static Subscription createFromSubscriber(Subscriber subscriber) {
+ Subscription sub = new Subscription();
+ sub.setId(subscriber.getId());
+ sub.setCallback(subscriber.getCallback());
- @Override
- public int hashCode() {
+ String query = subscriber.getQuery().entrySet()
+ .stream()
+ .map(entry -> entry.getKey()+ "=" + String.join(" ",entry.getValue()))
+ .collect(Collectors.joining());
- return Objects.hash(callback, query);
+ sub.setQuery(query);
+ return sub;
}
}
diff --git a/src/main/java/org/onap/nbi/apis/hub/service/CriteriaBuilderServiceOrder.java b/src/main/java/org/onap/nbi/apis/hub/service/CriteriaBuilderServiceOrder.java
index 31f0839..4a780a5 100755
--- a/src/main/java/org/onap/nbi/apis/hub/service/CriteriaBuilderServiceOrder.java
+++ b/src/main/java/org/onap/nbi/apis/hub/service/CriteriaBuilderServiceOrder.java
@@ -34,10 +34,9 @@ public class CriteriaBuilderServiceOrder implements CriteriaBuilder {
if (stateNode.isValueNode())
return base.orOperator(
Criteria.where("query.serviceOrder__state").exists(false),
- Criteria.where("query.serviceOrder__state").in(event.getEvent().path("state").textValue())
+ Criteria.where("query.serviceOrder__state").in(stateNode.textValue())
);
- else
- return base.and("query.serviceOrder__state").exists(false);
+ break;
case "ServiceOrderItemStateChangeNotification":
Object[] states = getStates(event);
@@ -46,8 +45,7 @@ public class CriteriaBuilderServiceOrder implements CriteriaBuilder {
Criteria.where("query.serviceOrder__serviceOrderItem__state").exists(false),
Criteria.where("query.serviceOrder__serviceOrderItem__state").in(states)
);
- else
- return base.and("query.serviceOrder__serviceOrderItem__state").exists(false);
+ break;
}
return base;
diff --git a/src/main/java/org/onap/nbi/apis/hub/service/SubscriptionService.java b/src/main/java/org/onap/nbi/apis/hub/service/SubscriptionService.java
new file mode 100644
index 0000000..65eaea3
--- /dev/null
+++ b/src/main/java/org/onap/nbi/apis/hub/service/SubscriptionService.java
@@ -0,0 +1,47 @@
+/**
+ * Copyright (c) 2018 Orange
+ *
+ * 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.
+ */
+package org.onap.nbi.apis.hub.service;
+
+import org.onap.nbi.apis.hub.model.Subscriber;
+import org.onap.nbi.apis.hub.model.Subscription;
+import org.onap.nbi.apis.hub.repository.SubscriberRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class SubscriptionService {
+
+ @Autowired
+ SubscriberRepository subscriberRepository;
+
+ public Subscriber findSubscriptionById(String subscriptionId){
+ return subscriberRepository.findOne(subscriptionId);
+ }
+
+ public Subscriber createSubscription(Subscription subscription){
+ Subscriber sub = Subscriber.createFromRequest(subscription);
+ return subscriberRepository.save(sub);
+ }
+
+ public void deleteSubscription(String subscriptionId){
+ subscriberRepository.delete(subscriptionId);
+ }
+
+ public long countSubscription(){
+ return subscriberRepository.count();
+ }
+
+}