aboutsummaryrefslogtreecommitdiffstats
path: root/models-interactions
diff options
context:
space:
mode:
Diffstat (limited to 'models-interactions')
-rw-r--r--models-interactions/model-actors/actor.cds/src/main/java/org/onap/policy/controlloop/actor/cds/CdsActorServiceProvider.java11
-rw-r--r--models-interactions/model-actors/actor.cds/src/main/java/org/onap/policy/controlloop/actor/cds/beans/CdsActionRequest.java61
-rw-r--r--models-interactions/model-actors/actor.cds/src/main/java/org/onap/policy/controlloop/actor/cds/constants/CdsActorConstants.java3
-rw-r--r--models-interactions/model-actors/actor.cds/src/main/java/org/onap/policy/controlloop/actor/cds/request/CdsActionRequest.java83
-rw-r--r--models-interactions/model-actors/actor.cds/src/test/java/org/onap/policy/controlloop/actor/cds/request/CdsActionRequestTest.java54
-rw-r--r--models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/ControlLoopEvent.java128
-rw-r--r--models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/ControlLoopNotification.java126
-rw-r--r--models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/ControlLoopTargetType.java41
-rw-r--r--models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/VirtualControlLoopEvent.java38
-rw-r--r--models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/util/Serialization.java20
-rw-r--r--models-interactions/model-impl/events/src/test/java/org/onap/policy/controlloop/ControlLoopEventTest.java3
-rw-r--r--models-interactions/model-impl/events/src/test/java/org/onap/policy/controlloop/ControlLoopTargetTypeTest.java10
-rw-r--r--models-interactions/model-impl/events/src/test/java/org/onap/policy/controlloop/VirtualControlLoopEventTest.java3
-rw-r--r--models-interactions/model-impl/rest/src/main/java/org/onap/policy/rest/RestManager.java28
-rw-r--r--models-interactions/model-impl/rest/src/test/java/org/onap/policy/rest/RestTest.java97
15 files changed, 317 insertions, 389 deletions
diff --git a/models-interactions/model-actors/actor.cds/src/main/java/org/onap/policy/controlloop/actor/cds/CdsActorServiceProvider.java b/models-interactions/model-actors/actor.cds/src/main/java/org/onap/policy/controlloop/actor/cds/CdsActorServiceProvider.java
index 5501f8618..65cc03931 100644
--- a/models-interactions/model-actors/actor.cds/src/main/java/org/onap/policy/controlloop/actor/cds/CdsActorServiceProvider.java
+++ b/models-interactions/model-actors/actor.cds/src/main/java/org/onap/policy/controlloop/actor/cds/CdsActorServiceProvider.java
@@ -42,10 +42,11 @@ import org.onap.policy.cds.CdsResponse;
import org.onap.policy.cds.api.CdsProcessorListener;
import org.onap.policy.cds.client.CdsProcessorGrpcClient;
import org.onap.policy.cds.properties.CdsServerProperties;
+import org.onap.policy.common.utils.coder.CoderException;
import org.onap.policy.controlloop.ControlLoopOperation;
import org.onap.policy.controlloop.VirtualControlLoopEvent;
-import org.onap.policy.controlloop.actor.cds.beans.CdsActionRequest;
import org.onap.policy.controlloop.actor.cds.constants.CdsActorConstants;
+import org.onap.policy.controlloop.actor.cds.request.CdsActionRequest;
import org.onap.policy.controlloop.actorserviceprovider.spi.Actor;
import org.onap.policy.controlloop.policy.Policy;
import org.slf4j.Logger;
@@ -131,13 +132,13 @@ public class CdsActorServiceProvider implements Actor {
Builder struct = Struct.newBuilder();
try {
- String requestStr = request.toString();
+ String requestStr = request.generateCdsPayload();
Preconditions.checkState(!Strings.isNullOrEmpty(requestStr), "Unable to build "
+ "config-deploy-request from payload parameters: {}", payload);
JsonFormat.parser().merge(requestStr, struct);
- } catch (InvalidProtocolBufferException e) {
- LOGGER.error("Failed to parse received message. blueprint({}:{}) for action({})", cbaName, cbaVersion,
- cbaActionName, e);
+ } catch (InvalidProtocolBufferException | CoderException e) {
+ LOGGER.error("Failed to embed CDS payload string into the input request. blueprint({}:{}) for action({})",
+ cbaName, cbaVersion, cbaActionName, e);
return Optional.empty();
}
diff --git a/models-interactions/model-actors/actor.cds/src/main/java/org/onap/policy/controlloop/actor/cds/beans/CdsActionRequest.java b/models-interactions/model-actors/actor.cds/src/main/java/org/onap/policy/controlloop/actor/cds/beans/CdsActionRequest.java
deleted file mode 100644
index 32f102382..000000000
--- a/models-interactions/model-actors/actor.cds/src/main/java/org/onap/policy/controlloop/actor/cds/beans/CdsActionRequest.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * Copyright (C) 2019 Bell Canada. 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.onap.policy.controlloop.actor.cds.beans;
-
-import com.google.gson.annotations.SerializedName;
-
-import java.io.Serializable;
-import java.util.Map;
-import lombok.Getter;
-import lombok.Setter;
-import org.onap.policy.common.utils.coder.Coder;
-import org.onap.policy.common.utils.coder.CoderException;
-import org.onap.policy.common.utils.coder.StandardCoder;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-@Getter
-@Setter
-public class CdsActionRequest implements Serializable {
- private static final long serialVersionUID = -4172157702597791493L;
-
- private static final Logger LOGGER = LoggerFactory.getLogger(CdsActionRequest.class);
- private static final Coder CODER = new StandardCoder();
-
- @SerializedName("policy-payload")
- private Map<String, String> policyPayload;
-
- @SerializedName("aai-properties")
- private Map<String, String> aaiProperties;
-
- @SerializedName("resolution-key")
- private String resolutionKey;
-
- private transient String actionName;
-
- @Override
- public String toString() {
- try {
- return "{" + "\"" + actionName + "-request\":" + CODER.encode(this) + '}';
- } catch (CoderException e) {
- LOGGER.error("Failure serializing CdsActionRequest object: ", e);
- return "";
- }
- }
-}
diff --git a/models-interactions/model-actors/actor.cds/src/main/java/org/onap/policy/controlloop/actor/cds/constants/CdsActorConstants.java b/models-interactions/model-actors/actor.cds/src/main/java/org/onap/policy/controlloop/actor/cds/constants/CdsActorConstants.java
index 9adb69232..8f929c83e 100644
--- a/models-interactions/model-actors/actor.cds/src/main/java/org/onap/policy/controlloop/actor/cds/constants/CdsActorConstants.java
+++ b/models-interactions/model-actors/actor.cds/src/main/java/org/onap/policy/controlloop/actor/cds/constants/CdsActorConstants.java
@@ -32,6 +32,9 @@ public class CdsActorConstants {
// CDS blueprint archive parameters
public static final String KEY_CBA_NAME = "artifact_name";
public static final String KEY_CBA_VERSION = "artifact_version";
+ public static final String KEY_RESOLUTION_KEY = "resolution-key";
+ public static final String CDS_REQUEST_SUFFIX = "-request";
+ public static final String CDS_REQUEST_PROPERTIES_SUFFIX = "-properties";
public static final String ORIGINATOR_ID = "POLICY";
// Temporarily set to synchronous mode to support current rules, since callbacks aren't supported yet
public static final String CDS_MODE = "sync";
diff --git a/models-interactions/model-actors/actor.cds/src/main/java/org/onap/policy/controlloop/actor/cds/request/CdsActionRequest.java b/models-interactions/model-actors/actor.cds/src/main/java/org/onap/policy/controlloop/actor/cds/request/CdsActionRequest.java
new file mode 100644
index 000000000..38ab2bdc7
--- /dev/null
+++ b/models-interactions/model-actors/actor.cds/src/main/java/org/onap/policy/controlloop/actor/cds/request/CdsActionRequest.java
@@ -0,0 +1,83 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2019 Bell Canada. 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.onap.policy.controlloop.actor.cds.request;
+
+import java.io.Serializable;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import lombok.Getter;
+import lombok.Setter;
+import org.onap.policy.common.utils.coder.CoderException;
+import org.onap.policy.common.utils.coder.StandardCoder;
+import org.onap.policy.controlloop.actor.cds.constants.CdsActorConstants;
+
+@Getter
+@Setter
+public class CdsActionRequest implements Serializable {
+
+ private static final long serialVersionUID = -4172157702597791493L;
+ private static final StandardCoder CODER = new StandardCoder();
+
+ private String actionName;
+ private String resolutionKey;
+ private Map<String, String> aaiProperties;
+ private Map<String, String> policyPayload;
+
+ /**
+ * Generate the CDS gRPC request payload from the action-name (aka operational policy recipe).
+ * The CDS gRPC request payload generation follows the below pattern:
+ * {
+ * "{@link CdsActionRequest#getActionName()}-request": {
+ * "resolution-key": "{@link CdsActionRequest#getResolutionKey()} ()}",
+ * "{@link CdsActionRequest#getActionName()}-properties": {
+ * "{@link CdsActionRequest#getAaiProperties()} ()}",
+ * "{@link CdsActionRequest#getPolicyPayload()} ()}"
+ * }
+ * }
+ * }
+ * @return JSON string equivalent of the CDS request object
+ * @throws CoderException if error occurs when serializing to JSON string
+ */
+ public String generateCdsPayload() throws CoderException {
+ // 1. Build the innermost object to include AAI properties and policy payload information
+ Map<String, String> cdsActionPropsMap = new LinkedHashMap<>();
+ cdsActionPropsMap.putAll(aaiProperties);
+ cdsActionPropsMap.putAll(policyPayload);
+
+ // 2. Build the enclosing CDS action request properties object to contain (1) and the resolution-key
+ Map<String, Object> cdsActionRequestMap = new LinkedHashMap<>();
+ cdsActionRequestMap.put(CdsActorConstants.KEY_RESOLUTION_KEY, resolutionKey);
+ cdsActionRequestMap.put(generateCdsActionPropertiesKey(), cdsActionPropsMap);
+
+ // 3. Finally build the CDS action request object
+ Map<String, Object> cdsActionRequestObj = new LinkedHashMap<>();
+ cdsActionRequestObj.put(generateCdsActionRequestKey(), cdsActionRequestMap);
+
+ // 4. Serialize the CDS action request object
+ return CODER.encode(cdsActionRequestObj);
+ }
+
+ private String generateCdsActionPropertiesKey() {
+ return actionName + CdsActorConstants.CDS_REQUEST_PROPERTIES_SUFFIX;
+ }
+
+ private String generateCdsActionRequestKey() {
+ return actionName + CdsActorConstants.CDS_REQUEST_SUFFIX;
+ }
+}
diff --git a/models-interactions/model-actors/actor.cds/src/test/java/org/onap/policy/controlloop/actor/cds/request/CdsActionRequestTest.java b/models-interactions/model-actors/actor.cds/src/test/java/org/onap/policy/controlloop/actor/cds/request/CdsActionRequestTest.java
new file mode 100644
index 000000000..3f28bada4
--- /dev/null
+++ b/models-interactions/model-actors/actor.cds/src/test/java/org/onap/policy/controlloop/actor/cds/request/CdsActionRequestTest.java
@@ -0,0 +1,54 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2019 Bell Canada. 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.onap.policy.controlloop.actor.cds.request;
+
+import static org.junit.Assert.assertTrue;
+
+import com.google.common.collect.ImmutableMap;
+import java.util.Map;
+import org.junit.Test;
+import org.onap.policy.common.utils.coder.CoderException;
+import org.onap.policy.controlloop.actor.cds.constants.CdsActorConstants;
+
+public class CdsActionRequestTest {
+
+ private static final String TEST_ACTION_NAME = "vfw-modify-config";
+
+ @Test
+ public void testGenerateCdsPayload() throws CoderException {
+ // Setup the CdsActionRequest object
+ CdsActionRequest req = new CdsActionRequest();
+ req.setActionName(TEST_ACTION_NAME);
+ req.setResolutionKey("1234567890");
+ Map<String, String> payloadProps = ImmutableMap.of("data", "{\"active-streams\":\"5\"}");
+ req.setPolicyPayload(payloadProps);
+
+ Map<String, String> aaiParams =
+ ImmutableMap.of("service-instance.service-instance-id", "1234", "generic-vnf.vnf-id", "5678");
+ req.setAaiProperties(aaiParams);
+
+ // Act
+ String result = req.generateCdsPayload();
+
+ // Assert
+ assertTrue(result.contains(TEST_ACTION_NAME + CdsActorConstants.CDS_REQUEST_PROPERTIES_SUFFIX));
+ assertTrue(result.contains(TEST_ACTION_NAME + CdsActorConstants.CDS_REQUEST_SUFFIX));
+ assertTrue(result.contains(CdsActorConstants.KEY_RESOLUTION_KEY));
+ }
+}
diff --git a/models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/ControlLoopEvent.java b/models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/ControlLoopEvent.java
index 43cd640c0..534e843f2 100644
--- a/models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/ControlLoopEvent.java
+++ b/models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/ControlLoopEvent.java
@@ -24,47 +24,48 @@ package org.onap.policy.controlloop;
import com.google.gson.annotations.SerializedName;
import java.io.Serializable;
import java.util.UUID;
+import lombok.Getter;
+import lombok.Setter;
+@Getter
+@Setter
public abstract class ControlLoopEvent implements Serializable {
private static final long serialVersionUID = 2391252138583119195L;
-
+
@SerializedName("closedLoopControlName")
private String closedLoopControlName;
-
+
@SerializedName("version")
private String version = "1.0.2";
-
+
@SerializedName("requestID")
private UUID requestId;
-
+
@SerializedName("closedLoopEventClient")
private String closedLoopEventClient;
-
+
@SerializedName("target_type")
- private ControlLoopTargetType targetType;
-
+ private String targetType;
+
@SerializedName("target")
private String target;
-
+
@SerializedName("from")
private String from;
-
+
@SerializedName("policyScope")
private String policyScope;
-
+
@SerializedName("policyName")
private String policyName;
-
+
@SerializedName("policyVersion")
private String policyVersion;
-
+
@SerializedName("closedLoopEventStatus")
private ControlLoopEventStatus closedLoopEventStatus;
- @SerializedName("payload")
- private String payload;
-
public ControlLoopEvent() {
}
@@ -88,106 +89,9 @@ public abstract class ControlLoopEvent implements Serializable {
this.policyName = event.policyName;
this.policyVersion = event.policyVersion;
this.closedLoopEventStatus = event.closedLoopEventStatus;
- this.payload = event.payload;
}
public boolean isEventStatusValid() {
return this.closedLoopEventStatus != null;
}
-
- public String getClosedLoopControlName() {
- return closedLoopControlName;
- }
-
- public void setClosedLoopControlName(String closedLoopControlName) {
- this.closedLoopControlName = closedLoopControlName;
- }
-
- public String getVersion() {
- return version;
- }
-
- public void setVersion(String version) {
- this.version = version;
- }
-
- public UUID getRequestId() {
- return requestId;
- }
-
- public void setRequestId(UUID requestId) {
- this.requestId = requestId;
- }
-
- public String getClosedLoopEventClient() {
- return closedLoopEventClient;
- }
-
- public void setClosedLoopEventClient(String closedLoopEventClient) {
- this.closedLoopEventClient = closedLoopEventClient;
- }
-
- public ControlLoopTargetType getTargetType() {
- return targetType;
- }
-
- public void setTargetType(ControlLoopTargetType targetType) {
- this.targetType = targetType;
- }
-
- public String getTarget() {
- return target;
- }
-
- public void setTarget(String target) {
- this.target = target;
- }
-
- public String getFrom() {
- return from;
- }
-
- public void setFrom(String from) {
- this.from = from;
- }
-
- public String getPolicyScope() {
- return policyScope;
- }
-
- public void setPolicyScope(String policyScope) {
- this.policyScope = policyScope;
- }
-
- public String getPolicyName() {
- return policyName;
- }
-
- public void setPolicyName(String policyName) {
- this.policyName = policyName;
- }
-
- public String getPolicyVersion() {
- return policyVersion;
- }
-
- public void setPolicyVersion(String policyVersion) {
- this.policyVersion = policyVersion;
- }
-
- public ControlLoopEventStatus getClosedLoopEventStatus() {
- return closedLoopEventStatus;
- }
-
- public void setClosedLoopEventStatus(ControlLoopEventStatus closedLoopEventStatus) {
- this.closedLoopEventStatus = closedLoopEventStatus;
- }
-
- public String getPayload() {
- return payload;
- }
-
- public void setPayload(String payload) {
- this.payload = payload;
- }
}
diff --git a/models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/ControlLoopNotification.java b/models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/ControlLoopNotification.java
index dd1854a1c..924291709 100644
--- a/models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/ControlLoopNotification.java
+++ b/models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/ControlLoopNotification.java
@@ -27,7 +27,11 @@ import java.time.ZonedDateTime;
import java.util.LinkedList;
import java.util.List;
import java.util.UUID;
+import lombok.Getter;
+import lombok.Setter;
+@Getter
+@Setter
public abstract class ControlLoopNotification implements Serializable {
private static final long serialVersionUID = 7538596984567127915L;
@@ -36,7 +40,7 @@ public abstract class ControlLoopNotification implements Serializable {
private String version = "1.0.2";
private UUID requestId;
private String closedLoopEventClient;
- private ControlLoopTargetType targetType;
+ private String targetType;
private String target;
private String from;
private String policyScope;
@@ -68,124 +72,4 @@ public abstract class ControlLoopNotification implements Serializable {
this.setTargetType(event.getTargetType());
this.setTarget(event.getTarget());
}
-
- public String getClosedLoopControlName() {
- return closedLoopControlName;
- }
-
- public void setClosedLoopControlName(String closedLoopControlName) {
- this.closedLoopControlName = closedLoopControlName;
- }
-
- public String getVersion() {
- return version;
- }
-
- public void setVersion(String version) {
- this.version = version;
- }
-
- public UUID getRequestId() {
- return requestId;
- }
-
- public void setRequestId(UUID requestId) {
- this.requestId = requestId;
- }
-
- public String getClosedLoopEventClient() {
- return closedLoopEventClient;
- }
-
- public void setClosedLoopEventClient(String closedLoopEventClient) {
- this.closedLoopEventClient = closedLoopEventClient;
- }
-
- public ControlLoopTargetType getTargetType() {
- return targetType;
- }
-
- public void setTargetType(ControlLoopTargetType targetType) {
- this.targetType = targetType;
- }
-
- public String getTarget() {
- return target;
- }
-
- public void setTarget(String target) {
- this.target = target;
- }
-
- public String getFrom() {
- return from;
- }
-
- public void setFrom(String from) {
- this.from = from;
- }
-
- public String getPolicyScope() {
- return policyScope;
- }
-
- public void setPolicyScope(String policyScope) {
- this.policyScope = policyScope;
- }
-
- public String getPolicyName() {
- return policyName;
- }
-
- public void setPolicyName(String policyName) {
- this.policyName = policyName;
- }
-
- public String getPolicyVersion() {
- return policyVersion;
- }
-
- public void setPolicyVersion(String policyVersion) {
- this.policyVersion = policyVersion;
- }
-
- public ControlLoopNotificationType getNotification() {
- return notification;
- }
-
- public void setNotification(ControlLoopNotificationType notification) {
- this.notification = notification;
- }
-
- public String getMessage() {
- return message;
- }
-
- public void setMessage(String message) {
- this.message = message;
- }
-
- public ZonedDateTime getNotificationTime() {
- return notificationTime;
- }
-
- public void setNotificationTime(ZonedDateTime notificationTime) {
- this.notificationTime = notificationTime;
- }
-
- public Integer getOpsClTimer() {
- return opsClTimer;
- }
-
- public void setOpsClTimer(Integer opsClTimer) {
- this.opsClTimer = opsClTimer;
- }
-
- public List<ControlLoopOperation> getHistory() {
- return history;
- }
-
- public void setHistory(List<ControlLoopOperation> history) {
- this.history = history;
- }
}
diff --git a/models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/ControlLoopTargetType.java b/models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/ControlLoopTargetType.java
index fda0d0831..1ca182563 100644
--- a/models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/ControlLoopTargetType.java
+++ b/models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/ControlLoopTargetType.java
@@ -21,40 +21,9 @@
package org.onap.policy.controlloop;
-public enum ControlLoopTargetType {
- VM("VM"), VF("VF"), VFC("VFC"), VNF("VNF");
-
- private String type;
-
- private ControlLoopTargetType(String type) {
- this.type = type;
- }
-
- @Override
- public String toString() {
- return this.type;
- }
-
- /**
- * Convert a String type to a ControlLoopTargetType.
- *
- * @param type the String type
- * @return the ControlLoopTargetType
- */
- public static ControlLoopTargetType toType(String type) {
- if (VM.toString().equals(type)) {
- return VM;
- }
- if (VF.toString().equals(type)) {
- return VF;
- }
- if (VFC.toString().equals(type)) {
- return VFC;
- }
- if (VNF.toString().equals(type)) {
- return VNF;
- }
-
- return null;
- }
+public class ControlLoopTargetType {
+ public static final String VM = "VM";
+ public static final String VF = "VF";
+ public static final String VFC = "VFC";
+ public static final String VNF = "VNF";
}
diff --git a/models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/VirtualControlLoopEvent.java b/models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/VirtualControlLoopEvent.java
index 1a0969189..43026a202 100644
--- a/models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/VirtualControlLoopEvent.java
+++ b/models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/VirtualControlLoopEvent.java
@@ -26,17 +26,24 @@ import com.google.gson.annotations.SerializedName;
import java.time.Instant;
import java.util.HashMap;
import java.util.Map;
+import lombok.Getter;
+import lombok.Setter;
+@Getter
+@Setter
public class VirtualControlLoopEvent extends ControlLoopEvent {
private static final long serialVersionUID = -5752405682246066226L;
-
+
+ @SerializedName("payload")
+ private String payload;
+
@SerializedName("closedLoopAlarmStart")
private Instant closedLoopAlarmStart;
-
+
@SerializedName("closedLoopAlarmEnd")
private Instant closedLoopAlarmEnd;
-
+
@SerializedName("AAI")
private Map<String, String> aai = new HashMap<>();
@@ -56,31 +63,8 @@ public class VirtualControlLoopEvent extends ControlLoopEvent {
if (event.aai != null) {
this.aai = new HashMap<>(event.aai);
}
+ this.payload = event.payload;
this.closedLoopAlarmStart = event.closedLoopAlarmStart;
this.closedLoopAlarmEnd = event.closedLoopAlarmEnd;
}
-
- public Instant getClosedLoopAlarmStart() {
- return closedLoopAlarmStart;
- }
-
- public void setClosedLoopAlarmStart(Instant closedLoopAlarmStart) {
- this.closedLoopAlarmStart = closedLoopAlarmStart;
- }
-
- public Instant getClosedLoopAlarmEnd() {
- return closedLoopAlarmEnd;
- }
-
- public void setClosedLoopAlarmEnd(Instant closedLoopAlarmEnd) {
- this.closedLoopAlarmEnd = closedLoopAlarmEnd;
- }
-
- public Map<String, String> getAai() {
- return aai;
- }
-
- public void setAai(Map<String, String> aai) {
- this.aai = aai;
- }
}
diff --git a/models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/util/Serialization.java b/models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/util/Serialization.java
index df7dc54d3..96797ed00 100644
--- a/models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/util/Serialization.java
+++ b/models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/util/Serialization.java
@@ -36,7 +36,6 @@ import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import org.onap.policy.controlloop.ControlLoopNotificationType;
-import org.onap.policy.controlloop.ControlLoopTargetType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -45,19 +44,19 @@ public final class Serialization {
new GsonBuilder().disableHtmlEscaping().registerTypeAdapter(ZonedDateTime.class, new GsonUtcAdapter())
.registerTypeAdapter(Instant.class, new GsonInstantAdapter())
.registerTypeAdapter(ControlLoopNotificationType.class, new NotificationTypeAdapter())
- .registerTypeAdapter(ControlLoopTargetType.class, new TargetTypeAdapter()).create();
+ .create();
public static final Gson gsonPretty = new GsonBuilder().disableHtmlEscaping().setPrettyPrinting()
.registerTypeAdapter(ZonedDateTime.class, new GsonUtcAdapter())
.registerTypeAdapter(Instant.class, new GsonInstantAdapter())
.registerTypeAdapter(ControlLoopNotificationType.class, new NotificationTypeAdapter())
- .registerTypeAdapter(ControlLoopTargetType.class, new TargetTypeAdapter()).create();
+ .create();
public static final Gson gsonJunit = new GsonBuilder().disableHtmlEscaping().setPrettyPrinting()
.registerTypeAdapter(ZonedDateTime.class, new GsonUtcAdapter())
.registerTypeAdapter(Instant.class, new GsonInstantAdapter())
- .registerTypeAdapter(ControlLoopTargetType.class, new TargetTypeAdapter()).create();
+ .create();
private Serialization() {}
@@ -76,19 +75,6 @@ public final class Serialization {
}
}
- public static class TargetTypeAdapter
- implements JsonSerializer<ControlLoopTargetType>, JsonDeserializer<ControlLoopTargetType> {
- @Override
- public JsonElement serialize(ControlLoopTargetType src, Type typeOfSrc, JsonSerializationContext context) {
- return new JsonPrimitive(src.toString());
- }
-
- @Override
- public ControlLoopTargetType deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) {
- return ControlLoopTargetType.toType(json.getAsString());
- }
- }
-
public static class GsonUtcAdapter implements JsonSerializer<ZonedDateTime>, JsonDeserializer<ZonedDateTime> {
private static final Logger logger = LoggerFactory.getLogger(GsonUtcAdapter.class);
public static final DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSSxxx");
diff --git a/models-interactions/model-impl/events/src/test/java/org/onap/policy/controlloop/ControlLoopEventTest.java b/models-interactions/model-impl/events/src/test/java/org/onap/policy/controlloop/ControlLoopEventTest.java
index feaf22ee5..2def97572 100644
--- a/models-interactions/model-impl/events/src/test/java/org/onap/policy/controlloop/ControlLoopEventTest.java
+++ b/models-interactions/model-impl/events/src/test/java/org/onap/policy/controlloop/ControlLoopEventTest.java
@@ -63,9 +63,6 @@ public class ControlLoopEventTest {
event.setFrom("from");
assertEquals("from", event.getFrom());
- event.setPayload("payload");
- assertEquals("payload", event.getPayload());
-
event.setPolicyName("policyname");
assertEquals("policyname", event.getPolicyName());
diff --git a/models-interactions/model-impl/events/src/test/java/org/onap/policy/controlloop/ControlLoopTargetTypeTest.java b/models-interactions/model-impl/events/src/test/java/org/onap/policy/controlloop/ControlLoopTargetTypeTest.java
index d1412fe49..3434a591b 100644
--- a/models-interactions/model-impl/events/src/test/java/org/onap/policy/controlloop/ControlLoopTargetTypeTest.java
+++ b/models-interactions/model-impl/events/src/test/java/org/onap/policy/controlloop/ControlLoopTargetTypeTest.java
@@ -30,11 +30,9 @@ public class ControlLoopTargetTypeTest {
@Test
public void test() {
- assertEquals(ControlLoopTargetType.VM, ControlLoopTargetType.toType("VM"));
- assertEquals(ControlLoopTargetType.VF, ControlLoopTargetType.toType("VF"));
- assertEquals(ControlLoopTargetType.VFC, ControlLoopTargetType.toType("VFC"));
- assertEquals(ControlLoopTargetType.VNF, ControlLoopTargetType.toType("VNF"));
-
- assertNull(ControlLoopTargetType.toType("foo"));
+ assertEquals("VM", ControlLoopTargetType.VM);
+ assertEquals("VF", ControlLoopTargetType.VF);
+ assertEquals("VFC", ControlLoopTargetType.VFC);
+ assertEquals("VNF", ControlLoopTargetType.VNF);
}
}
diff --git a/models-interactions/model-impl/events/src/test/java/org/onap/policy/controlloop/VirtualControlLoopEventTest.java b/models-interactions/model-impl/events/src/test/java/org/onap/policy/controlloop/VirtualControlLoopEventTest.java
index 2acd3038c..3fc7d133e 100644
--- a/models-interactions/model-impl/events/src/test/java/org/onap/policy/controlloop/VirtualControlLoopEventTest.java
+++ b/models-interactions/model-impl/events/src/test/java/org/onap/policy/controlloop/VirtualControlLoopEventTest.java
@@ -37,6 +37,9 @@ public class VirtualControlLoopEventTest {
assertNotNull(event);
assertNotNull(event.getAai());
+ event.setPayload("payload");
+ assertEquals("payload", event.getPayload());
+
Instant now = Instant.now();
event.setClosedLoopAlarmStart(now);
event.setClosedLoopAlarmEnd(now);
diff --git a/models-interactions/model-impl/rest/src/main/java/org/onap/policy/rest/RestManager.java b/models-interactions/model-impl/rest/src/main/java/org/onap/policy/rest/RestManager.java
index 643c629b3..dde3aa2e2 100644
--- a/models-interactions/model-impl/rest/src/main/java/org/onap/policy/rest/RestManager.java
+++ b/models-interactions/model-impl/rest/src/main/java/org/onap/policy/rest/RestManager.java
@@ -29,6 +29,7 @@ import org.apache.http.HttpHeaders;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpDelete;
import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPatch;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.client.methods.HttpRequestBase;
@@ -172,6 +173,33 @@ public class RestManager {
}
/**
+ * Perform REST Patch.
+ *
+ * @param url the url
+ * @param username the user name
+ * @param password the password
+ * @param headers any headers
+ * @param body body to send
+ * @return the response status code and the body
+ */
+ public Pair<Integer, String> patch(String url, String username, String password,
+ Map<String, String> headers, String body) {
+ String contentType = "application/merge-patch+json";
+ HttpPatch patch = new HttpPatch(url);
+ addHeaders(patch, username, password, headers);
+ patch.addHeader(CONTENT_TYPE, contentType);
+ try {
+ StringEntity input = new StringEntity(body);
+ input.setContentType(contentType);
+ patch.setEntity(input);
+ } catch (Exception e) {
+ logger.error("patch threw: ", e);
+ return null;
+ }
+ return sendRequest(patch);
+ }
+
+ /**
* Send REST request.
*
* @param request http request to send
diff --git a/models-interactions/model-impl/rest/src/test/java/org/onap/policy/rest/RestTest.java b/models-interactions/model-impl/rest/src/test/java/org/onap/policy/rest/RestTest.java
index 903ec2fa3..21a971651 100644
--- a/models-interactions/model-impl/rest/src/test/java/org/onap/policy/rest/RestTest.java
+++ b/models-interactions/model-impl/rest/src/test/java/org/onap/policy/rest/RestTest.java
@@ -24,10 +24,17 @@ package org.onap.policy.rest;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
+import javax.ws.rs.HttpMethod;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
@@ -45,7 +52,7 @@ import org.onap.policy.rest.RestManager.Pair;
@Path("RestTest")
public class RestTest {
-
+ private static final String MERGE_PATCH_PLUS_JSON = "application/merge-patch+json";
private static final String NAME_PARAM = "Bob";
private static final String AGE_PARAM = "10";
@@ -64,6 +71,8 @@ public class RestTest {
private static String putUriBlank;
private static String postUri;
private static String postUriBlank;
+ private static String patchUri;
+ private static String patchUriBlank;
private static HttpServletServer server;
@@ -81,6 +90,8 @@ public class RestTest {
putUriBlank = baseUri + "RestTest/PutBlank";
postUri = baseUri + "RestTest/PostHello/" + NAME_PARAM + "?age=" + AGE_PARAM;
postUriBlank = baseUri + "RestTest/PostBlank";
+ patchUri = baseUri + "RestTest/PatchHello/" + NAME_PARAM + "?age=" + AGE_PARAM;
+ patchUriBlank = baseUri + "RestTest/PatchBlank";
server = HttpServletServerFactoryInstance.getServerFactory()
.build("RestTest", LOCALHOST, port, "/" + BASE, false, true);
@@ -123,6 +134,12 @@ public class RestTest {
mgr.delete(null, "user", null, null, null, null);
}
+ @Test(expected = NullPointerException.class)
+ public void testPatchUrlNull() {
+ RestManager mgr = new RestManager();
+ mgr.patch(null, "user", null, null, PAYLOAD);
+ }
+
@Test
public void testUsernameNull() {
RestManager mgr = new RestManager();
@@ -168,6 +185,18 @@ public class RestTest {
assertTrue(result.second != null);
assertTrue(result.second.length() > 0);
assertEquals("POST: " + PAYLOAD + RETURN_STRING, result.second);
+
+ result = mgr.patch(patchUri, null, null, null, PAYLOAD);
+ assertEquals((Integer)200, result.first);
+ assertTrue(result.second != null);
+ assertTrue(result.second.length() > 0);
+ assertEquals("PATCH: " + PAYLOAD + EXPECT_STRING, result.second);
+
+ result = mgr.patch(patchUriBlank, null, null, null, PAYLOAD);
+ assertEquals((Integer)200, result.first);
+ assertTrue(result.second != null);
+ assertTrue(result.second.length() > 0);
+ assertEquals("PATCH: " + PAYLOAD + RETURN_STRING, result.second);
}
@Test
@@ -209,6 +238,18 @@ public class RestTest {
assertTrue(result.second != null);
assertTrue(result.second.length() > 0);
assertEquals("POST: " + PAYLOAD + RETURN_STRING, result.second);
+
+ result = mgr.patch(patchUri, "", null, null, PAYLOAD);
+ assertEquals((Integer)200, result.first);
+ assertTrue(result.second != null);
+ assertTrue(result.second.length() > 0);
+ assertEquals("PATCH: " + PAYLOAD + EXPECT_STRING, result.second);
+
+ result = mgr.patch(patchUriBlank, "", null, null, PAYLOAD);
+ assertEquals((Integer)200, result.first);
+ assertTrue(result.second != null);
+ assertTrue(result.second.length() > 0);
+ assertEquals("PATCH: " + PAYLOAD + RETURN_STRING, result.second);
}
@Test
@@ -250,6 +291,18 @@ public class RestTest {
assertTrue(result.second != null);
assertTrue(result.second.length() > 0);
assertEquals("POST: " + PAYLOAD + RETURN_STRING, result.second);
+
+ result = mgr.patch(patchUri, "user", null, null, PAYLOAD);
+ assertEquals((Integer)200, result.first);
+ assertTrue(result.second != null);
+ assertTrue(result.second.length() > 0);
+ assertEquals("PATCH: " + PAYLOAD + EXPECT_STRING, result.second);
+
+ result = mgr.patch(patchUriBlank, "user", null, null, PAYLOAD);
+ assertEquals((Integer)200, result.first);
+ assertTrue(result.second != null);
+ assertTrue(result.second.length() > 0);
+ assertEquals("PATCH: " + PAYLOAD + RETURN_STRING, result.second);
}
@Test
@@ -267,6 +320,9 @@ public class RestTest {
result = mgr.post(baseUri + "RestTest/PostHello/", null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
assertEquals((Integer)404, result.first);
+
+ result = mgr.patch(baseUri + "RestTest/PatchHello/", null, null, null, PAYLOAD);
+ assertEquals((Integer)404, result.first);
}
@Test
@@ -297,6 +353,13 @@ public class RestTest {
assertTrue(result.second != null);
assertTrue(result.second.length() > 0);
assertEquals("POST: " + PAYLOAD + RETURN_STRING + NAME_PARAM + " aged 90", result.second);
+
+ result = mgr.patch(baseUri + "RestTest/PatchHello/" + NAME_PARAM, null, null,
+ null, PAYLOAD);
+ assertEquals((Integer)200, result.first);
+ assertTrue(result.second != null);
+ assertTrue(result.second.length() > 0);
+ assertEquals("PATCH: " + PAYLOAD + RETURN_STRING + NAME_PARAM + " aged 90", result.second);
}
@Test
@@ -314,6 +377,9 @@ public class RestTest {
result = mgr.post(baseUri + "NonExistant/URL/", null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
assertEquals((Integer)404, result.first);
+
+ result = mgr.patch(baseUri + "NonExistant/URL/", null, null, null, PAYLOAD);
+ assertEquals((Integer)404, result.first);
}
@Test
@@ -334,6 +400,9 @@ public class RestTest {
result = mgr.post(getUri, null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
assertEquals((Integer)405, result.first);
+
+ result = mgr.patch(getUri, null, null, null, PAYLOAD);
+ assertEquals((Integer)405, result.first);
}
@GET
@@ -387,4 +456,30 @@ public class RestTest {
public String postBlank( String payload) {
return "POST: " + payload + RETURN_STRING;
}
+
+ @Target({ElementType.METHOD})
+ @Retention(RetentionPolicy.RUNTIME)
+ @HttpMethod("PATCH")
+ @Documented
+ public static @interface Patch {
+ }
+
+ @Patch
+ @Path("/PatchHello/{name}")
+ @Consumes(MERGE_PATCH_PLUS_JSON)
+ @Produces(MERGE_PATCH_PLUS_JSON)
+ public String patchIt(
+ String payload,
+ @PathParam("name") String name,
+ @DefaultValue("90") @QueryParam("age") String age) {
+
+ return "PATCH: " + payload + RETURN_STRING + name + " aged " + age;
+ }
+
+ @Patch
+ @Path("/PatchBlank")
+ @Produces(MERGE_PATCH_PLUS_JSON)
+ public String patchBlank( String payload) {
+ return "PATCH: " + payload + RETURN_STRING;
+ }
}