+ /**
+ * Testing endpoint for checking that notifications have been received
+ *
+ * @param vnfPkgId
+ * @return
+ */
+ @GetMapping(value = Constant.NOTIFICATION_CACHE_TEST_ENDPOINT)
+ public ResponseEntity<?> getVnfPackageNotification(@PathVariable("vnfPkgId") final String vnfPkgId) {
+ logger.info("Getting notification with vnfPkgId: {}", vnfPkgId);
+ final Optional<VnfPackageOnboardingNotification> optionalVnfPackageOnboardingNotification =
+ vnfPkgOnboardingNotificationCacheServiceProvider.getVnfPkgOnboardingNotification(vnfPkgId);
+ if(optionalVnfPackageOnboardingNotification.isPresent()) {
+ VnfPackageOnboardingNotification vnfPackageOnboardingNotification =
+ optionalVnfPackageOnboardingNotification.get();
+ logger.info("Return notification with vnfPkgId: {} and body {}", vnfPkgId, vnfPackageOnboardingNotification);
+ return ResponseEntity.ok().body(vnfPackageOnboardingNotification);
+ }
+ final String errorMessage = "No notification found with vnfPkgId: " + vnfPkgId;
+ logger.error(errorMessage);
+ return ResponseEntity.status(HttpStatus.NOT_FOUND).body(errorMessage);
+ }
+
+ private void addNotificationObjectToCache(final String notification) {
+ logger.info("addNotificationObjectToCache(): {}", notification);
+ final String notificationType = getNotificationType(notification);
+ if (VnfPackageOnboardingNotification.NotificationTypeEnum.VNFPACKAGEONBOARDINGNOTIFICATION.getValue()
+ .equals(notificationType)) {
+ final VnfPackageOnboardingNotification pkgOnboardingNotification =
+ gson.fromJson(notification, VnfPackageOnboardingNotification.class);
+ logger.info("Onboarding notification received:\n{}", pkgOnboardingNotification);
+ final String vnfPkgId = pkgOnboardingNotification.getVnfPkgId();
+ vnfPkgOnboardingNotificationCacheServiceProvider.addVnfPkgOnboardingNotification(vnfPkgId, pkgOnboardingNotification);
+ } else if (VnfPackageChangeNotification.NotificationTypeEnum.VNFPACKAGECHANGENOTIFICATION.getValue()
+ .equals(notificationType)) {
+ final VnfPackageChangeNotification pkgChangeNotification =
+ gson.fromJson(notification, VnfPackageChangeNotification.class);
+ logger.info("Change notification received:\n{}", pkgChangeNotification);
+ } else {
+ final String errorMessage = "An error occurred. Notification type not supported for: " + notificationType;
+ logger.error(errorMessage);
+ throw new RuntimeException(errorMessage);
+ }
+ }
+
+ private String getNotificationType(final String notification) {
+ try {
+ logger.info("getNotificationType() notification: {}", notification);
+ final JsonParser parser = new JsonParser();
+ final JsonObject element = (JsonObject) parser.parse(notification);
+ return element.get("notificationType").getAsString();
+ } catch (final Exception e) {
+ logger.error("An error occurred processing notificiation: {}", e.getMessage());
+ }
+ throw new RuntimeException(
+ "Unable to parse notification type in object \n" + notification);
+ }
+
+ public static class LocalDateTimeTypeAdapter extends TypeAdapter<LocalDateTime> {
+
+ private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+
+ @Override
+ public void write(final JsonWriter out, final LocalDateTime localDateTime) throws IOException {
+ if (localDateTime == null) {
+ out.nullValue();
+ } else {
+ out.value(FORMATTER.format(localDateTime));
+ }
+ }
+
+ @Override
+ public LocalDateTime read(final JsonReader in) throws IOException {
+ switch (in.peek()) {
+ case NULL:
+ in.nextNull();
+ return null;
+ default:
+ final String dateTime = in.nextString();
+ return LocalDateTime.parse(dateTime, FORMATTER);
+ }
+ }
+ }
+