summaryrefslogtreecommitdiffstats
path: root/feature-lifecycle/src/main/java/org
diff options
context:
space:
mode:
authorjhh <jorge.hernandez-herrero@att.com>2020-03-05 22:32:58 -0600
committerjhh <jorge.hernandez-herrero@att.com>2020-03-10 11:29:27 -0500
commit3f563fe552e35b3bc3d95c47a3cabdfe7645ad07 (patch)
tree9439dc357096b69b670e7dad666084a5cb08dcfb /feature-lifecycle/src/main/java/org
parent845cbbc74445909613aff1912d3cfc9083c57d53 (diff)
policy routing and reorg into policy-domains
- Native Drools Controller Policy support. - Move domain policies into the policy-domains project. - Route legacy/compliant operational policies to one or all controller supporting the policy's policy type. - Enhancements to scripts to invoke commands external to the container. Issue-ID: POLICY-2388 Signed-off-by: jhh <jorge.hernandez-herrero@att.com> Change-Id: Id41f04d10a28d2ea86bdd41334e499c28d0438ae Signed-off-by: jhh <jorge.hernandez-herrero@att.com>
Diffstat (limited to 'feature-lifecycle/src/main/java/org')
-rw-r--r--feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerCustomSerializer.java39
-rw-r--r--feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerPolicy.java41
-rw-r--r--feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerProperties.java52
-rw-r--r--feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerSerialization.java42
-rw-r--r--feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerSinkTopic.java45
-rw-r--r--feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerSourceTopic.java40
-rw-r--r--feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsController.java43
-rw-r--r--feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsPolicy.java41
-rw-r--r--feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsProperties.java42
-rw-r--r--feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsRulesArtifact.java46
-rw-r--r--feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/LifecycleFsm.java4
-rw-r--r--feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeDroolsController.java93
-rw-r--r--feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeNativeArtifactController.java (renamed from feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeRulesController.java)16
-rw-r--r--feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeNativeController.java66
-rw-r--r--feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeNativeDroolsController.java250
15 files changed, 346 insertions, 514 deletions
diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerCustomSerializer.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerCustomSerializer.java
deleted file mode 100644
index d7956b41..00000000
--- a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerCustomSerializer.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * Copyright (C) 2020 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.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.drools.domain.models.controller;
-
-import com.google.gson.annotations.SerializedName;
-import java.io.Serializable;
-import lombok.Builder;
-import lombok.Data;
-
-
-@Data
-@Builder
-public class ControllerCustomSerializer implements Serializable {
- private static final long serialVersionUID = 1505345574249332514L;
-
- @SerializedName("customSerializerClass")
- protected String customSerializerClass;
-
- @SerializedName("jsonParser")
- protected String jsonParser;
-}
diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerPolicy.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerPolicy.java
deleted file mode 100644
index 0d5a363e..00000000
--- a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerPolicy.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * Copyright (C) 2020 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.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.drools.domain.models.controller;
-
-import com.google.gson.annotations.SerializedName;
-import java.io.Serializable;
-import lombok.Data;
-import lombok.experimental.SuperBuilder;
-import org.onap.policy.drools.domain.models.DroolsPolicy;
-
-/**
- * Controller Policy model root object.
- */
-
-@Data
-@SuperBuilder
-public class ControllerPolicy extends DroolsPolicy implements Serializable {
-
- private static final long serialVersionUID = -8171337852833516581L;
-
- @SerializedName("properties")
- protected ControllerProperties properties;
-}
diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerProperties.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerProperties.java
deleted file mode 100644
index 692b1790..00000000
--- a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerProperties.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * Copyright (C) 2020 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.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.drools.domain.models.controller;
-
-import com.google.gson.annotations.SerializedName;
-import java.io.Serializable;
-import java.util.List;
-import java.util.Map;
-import lombok.Builder;
-import lombok.Data;
-
-
-/**
- * Controller Domain Policy.
- */
-
-@Data
-@Builder
-public class ControllerProperties implements Serializable {
- private static final long serialVersionUID = 1259434187110418986L;
-
- @SerializedName("controllerName")
- protected String controllerName;
-
- @SerializedName("sourceTopics")
- protected List<ControllerSourceTopic> sourceTopics;
-
- @SerializedName("sinkTopics")
- protected List<ControllerSinkTopic> sinkTopics;
-
- @SerializedName("customConfig")
- protected Map<String, String> customConfig;
-
-}
diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerSerialization.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerSerialization.java
deleted file mode 100644
index 8daaa31f..00000000
--- a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerSerialization.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * Copyright (C) 2020 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.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.drools.domain.models.controller;
-
-import com.google.gson.annotations.SerializedName;
-import java.io.Serializable;
-import lombok.Builder;
-import lombok.Data;
-
-
-@Data
-@Builder
-public class ControllerSerialization implements Serializable {
-
- @SerializedName("eventClass")
- public String eventClass;
-
- @SerializedName("eventFilter")
- public String eventFilter;
-
- @SerializedName("customSerializer")
- public ControllerCustomSerializer customSerializer;
-
-}
diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerSinkTopic.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerSinkTopic.java
deleted file mode 100644
index ecd66a3f..00000000
--- a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerSinkTopic.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * Copyright (C) 2020 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.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.drools.domain.models.controller;
-
-import com.google.gson.annotations.SerializedName;
-import java.io.Serializable;
-import java.util.List;
-import lombok.Builder;
-import lombok.Data;
-
-
-/**
- * Sink Topic.
- */
-
-@Data
-@Builder
-public class ControllerSinkTopic implements Serializable {
- private static final long serialVersionUID = 8770353732981476267L;
-
- @SerializedName("topicName")
- protected String topicName;
-
- @SerializedName("serialization")
- protected List<ControllerSerialization> serialization;
-
-}
diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerSourceTopic.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerSourceTopic.java
deleted file mode 100644
index 09344016..00000000
--- a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerSourceTopic.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * Copyright (C) 2020 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.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.drools.domain.models.controller;
-
-import java.io.Serializable;
-import java.util.List;
-import lombok.Builder;
-import lombok.Data;
-
-
-/**
- * Source Topics.
- */
-
-@Data
-@Builder
-public class ControllerSourceTopic implements Serializable {
- private static final long serialVersionUID = -1732598566914643612L;
-
- protected String topicName;
- protected List<ControllerSerialization> serialization;
-}
diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsController.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsController.java
deleted file mode 100644
index 0af96331..00000000
--- a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsController.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * Copyright (C) 2020 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.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.drools.domain.models.nativ.rules;
-
-import com.google.gson.annotations.SerializedName;
-import java.io.Serializable;
-import lombok.Builder;
-import lombok.Data;
-
-/**
- * Controller Model in Native Drools Policies.
- */
-
-@Data
-@Builder
-public class NativeDroolsController implements Serializable {
-
- private static final long serialVersionUID = -2070515139072136869L;
-
- @SerializedName("name")
- protected String name;
-
- @SerializedName("version")
- protected String version;
-}
diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsPolicy.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsPolicy.java
deleted file mode 100644
index fce6ca1a..00000000
--- a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsPolicy.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * Copyright (C) 2020 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.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.drools.domain.models.nativ.rules;
-
-import com.google.gson.annotations.SerializedName;
-import java.io.Serializable;
-import lombok.Data;
-import lombok.experimental.SuperBuilder;
-import org.onap.policy.drools.domain.models.DroolsPolicy;
-
-/**
- * Native Drools Policy model root object.
- */
-
-@Data
-@SuperBuilder
-public class NativeDroolsPolicy extends DroolsPolicy implements Serializable {
-
- private static final long serialVersionUID = -8171337852833516581L;
-
- @SerializedName("properties")
- protected NativeDroolsProperties properties;
-}
diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsProperties.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsProperties.java
deleted file mode 100644
index dfd25ca7..00000000
--- a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsProperties.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * Copyright (C) 2020 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.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.drools.domain.models.nativ.rules;
-
-import com.google.gson.annotations.SerializedName;
-import java.io.Serializable;
-import lombok.Builder;
-import lombok.Data;
-
-/**
- * Properties in Native Drools Policies.
- */
-
-@Data
-@Builder
-public class NativeDroolsProperties implements Serializable {
- private static final long serialVersionUID = 2360030332628276427L;
-
- @SerializedName("rulesArtifact")
- protected NativeDroolsRulesArtifact rulesArtifact;
-
- @SerializedName("controller")
- protected NativeDroolsController controller;
-}
diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsRulesArtifact.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsRulesArtifact.java
deleted file mode 100644
index 8ca33865..00000000
--- a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsRulesArtifact.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * Copyright (C) 2020 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.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.drools.domain.models.nativ.rules;
-
-import com.google.gson.annotations.SerializedName;
-import java.io.Serializable;
-import lombok.Builder;
-import lombok.Data;
-
-/**
- * Rules Artifact in Native Drools Policies.
- */
-
-@Data
-@Builder
-public class NativeDroolsRulesArtifact implements Serializable {
-
- private static final long serialVersionUID = -3519759514319217518L;
-
- @SerializedName("groupId")
- protected String groupId;
-
- @SerializedName("artifactId")
- protected String artifactId;
-
- @SerializedName("version")
- protected String version;
-}
diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/LifecycleFsm.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/LifecycleFsm.java
index 119ae7aa..a435f02e 100644
--- a/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/LifecycleFsm.java
+++ b/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/LifecycleFsm.java
@@ -132,10 +132,10 @@ public class LifecycleFsm implements Startable {
this.policyTypesMap.put(
POLICY_TYPE_DROOLS_CONTROLLER,
- new PolicyTypeNativeController(this, POLICY_TYPE_DROOLS_CONTROLLER));
+ new PolicyTypeNativeDroolsController(this, POLICY_TYPE_DROOLS_CONTROLLER));
this.policyTypesMap.put(
POLICY_TYPE_DROOLS_NATIVE_RULES,
- new PolicyTypeRulesController(this, POLICY_TYPE_DROOLS_NATIVE_RULES));
+ new PolicyTypeNativeArtifactController(this, POLICY_TYPE_DROOLS_NATIVE_RULES));
}
@JsonIgnore
diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeDroolsController.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeDroolsController.java
index f5ceafbe..36c52e2b 100644
--- a/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeDroolsController.java
+++ b/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeDroolsController.java
@@ -20,23 +20,45 @@
package org.onap.policy.drools.lifecycle;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.function.Function;
import lombok.Getter;
-
+import org.apache.commons.lang3.StringUtils;
+import org.onap.policy.common.gson.annotation.GsonJsonIgnore;
+import org.onap.policy.common.utils.coder.CoderException;
+import org.onap.policy.drools.domain.models.legacy.LegacyPolicy;
+import org.onap.policy.drools.domain.models.operational.OperationalPolicy;
import org.onap.policy.drools.system.PolicyController;
import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* Policy Type Drools Controller that delegates to a corresponding
* PolicyController that supports this policy type.
*/
-@Getter
public class PolicyTypeDroolsController implements PolicyTypeController {
+ protected static final ToscaPolicyTypeIdentifier legacyType =
+ new ToscaPolicyTypeIdentifier("onap.policies.controlloop.Operational", "1.0.0");
+
+ protected static final ToscaPolicyTypeIdentifier compliantType =
+ new ToscaPolicyTypeIdentifier("onap.policies.controlloop.operational.common.Drools", "1.0.0");
+
+ private static final Logger logger = LoggerFactory.getLogger(PolicyTypeController.class);
- protected final PolicyController controller;
+ protected final Map<String, PolicyController> controllers = new ConcurrentHashMap<>();
+
+ @Getter
protected final ToscaPolicyTypeIdentifier policyType;
- protected final LifecycleFsm fsm;
+
+ @GsonJsonIgnore
+ @JsonIgnore
+ protected final transient LifecycleFsm fsm;
/**
* Creates a Policy Type Drools Controller.
@@ -44,17 +66,74 @@ public class PolicyTypeDroolsController implements PolicyTypeController {
public PolicyTypeDroolsController(
LifecycleFsm fsm, ToscaPolicyTypeIdentifier policyType, PolicyController controller) {
this.policyType = policyType;
- this.controller = controller;
+ this.controllers.put(controller.getName(), controller);
this.fsm = fsm;
}
@Override
public boolean deploy(ToscaPolicy policy) {
- return fsm.getDomainMaker().isConformant(policy) && this.controller.offer(policy);
+ return perform(policy, (PolicyController controller) -> controller.offer(policy));
}
@Override
public boolean undeploy(ToscaPolicy policy) {
- return controller.getDrools().delete(policy);
+ return perform(policy, (PolicyController controller) -> controller.getDrools().delete(policy));
+ }
+
+ private boolean perform(ToscaPolicy policy, Function<PolicyController, Boolean> operation) {
+ try {
+ List<PolicyController> selected = selectControllers(policy);
+ boolean success = true;
+ for (PolicyController controller : selected) {
+ try {
+ success = operation.apply(controller) && success;
+ } catch (RuntimeException r) {
+ logger.warn("invalid offer to controller: {}", controller);
+ success = false;
+ }
+ }
+ return success && !selected.isEmpty();
+ } catch (CoderException e) {
+ logger.warn("perform: invalid formatted policy: {}", policy, e);
+ return false;
+ }
+ }
+
+ private List<PolicyController> selectControllers(ToscaPolicy policy) throws CoderException {
+ List<PolicyController> selected;
+ if (legacyType.equals(policyType)) {
+ selected = controllers(
+ fsm.getDomainMaker().convertTo(policy, LegacyPolicy.class)
+ .getProperties()
+ .getControllerName());
+ } else if (compliantType.equals(policyType)) {
+ selected = controllers(
+ fsm.getDomainMaker().convertTo(policy, OperationalPolicy.class)
+ .getProperties()
+ .getControllerName());
+ } else {
+ selected = List.copyOf(controllers.values());
+ }
+ return selected;
+ }
+
+ private List<PolicyController> controllers(String controllerName) {
+ if (StringUtils.isBlank(controllerName)) {
+ /* this policy applies to all controllers */
+ return controllers();
+ }
+
+ if (!this.controllers.containsKey(controllerName)) {
+ return List.of();
+ }
+
+ return List.of(this.controllers.get(controllerName));
+ }
+
+ /**
+ * Get all controllers that support the policy type.
+ */
+ public List<PolicyController> controllers() {
+ return List.copyOf(controllers.values());
}
}
diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeRulesController.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeNativeArtifactController.java
index 79e2ddb8..31e9059d 100644
--- a/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeRulesController.java
+++ b/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeNativeArtifactController.java
@@ -25,7 +25,7 @@ import lombok.Getter;
import org.onap.policy.common.gson.annotation.GsonJsonIgnore;
import org.onap.policy.common.utils.coder.CoderException;
import org.onap.policy.drools.controller.DroolsControllerConstants;
-import org.onap.policy.drools.domain.models.nativ.rules.NativeDroolsPolicy;
+import org.onap.policy.drools.domain.models.artifact.NativeArtifactPolicy;
import org.onap.policy.drools.protocol.configuration.DroolsConfiguration;
import org.onap.policy.drools.system.PolicyController;
import org.onap.policy.drools.system.PolicyControllerConstants;
@@ -34,27 +34,27 @@ import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifi
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class PolicyTypeRulesController implements PolicyTypeController {
- private static final Logger logger = LoggerFactory.getLogger(PolicyTypeRulesController.class);
+public class PolicyTypeNativeArtifactController implements PolicyTypeController {
+ private static final Logger logger = LoggerFactory.getLogger(PolicyTypeNativeArtifactController.class);
@Getter
protected final ToscaPolicyTypeIdentifier policyType;
@GsonJsonIgnore
@JsonIgnore
- protected final LifecycleFsm fsm;
+ protected final transient LifecycleFsm fsm;
- public PolicyTypeRulesController(LifecycleFsm fsm, ToscaPolicyTypeIdentifier policyType) {
+ public PolicyTypeNativeArtifactController(LifecycleFsm fsm, ToscaPolicyTypeIdentifier policyType) {
this.policyType = policyType;
this.fsm = fsm;
}
@Override
public boolean deploy(ToscaPolicy policy) {
- NativeDroolsPolicy nativePolicy;
+ NativeArtifactPolicy nativePolicy;
PolicyController controller;
try {
- nativePolicy = fsm.getDomainMaker().convertTo(policy, NativeDroolsPolicy.class);
+ nativePolicy = fsm.getDomainMaker().convertTo(policy, NativeArtifactPolicy.class);
controller =
PolicyControllerConstants.getFactory().get(nativePolicy.getProperties().getController().getName());
} catch (CoderException e) {
@@ -76,7 +76,7 @@ public class PolicyTypeRulesController implements PolicyTypeController {
public boolean undeploy(ToscaPolicy policy) {
PolicyController controller;
try {
- NativeDroolsPolicy nativePolicy = fsm.getDomainMaker().convertTo(policy, NativeDroolsPolicy.class);
+ NativeArtifactPolicy nativePolicy = fsm.getDomainMaker().convertTo(policy, NativeArtifactPolicy.class);
controller =
PolicyControllerConstants.getFactory().get(nativePolicy.getProperties().getController().getName());
} catch (RuntimeException | CoderException e) {
diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeNativeController.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeNativeController.java
deleted file mode 100644
index 1b5e7c47..00000000
--- a/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeNativeController.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * ONAP
- * ================================================================================
- * Copyright (C) 2020 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.onap.policy.drools.lifecycle;
-
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import lombok.Getter;
-import org.onap.policy.common.gson.annotation.GsonJsonIgnore;
-import org.onap.policy.common.utils.coder.CoderException;
-import org.onap.policy.drools.domain.models.controller.ControllerPolicy;
-import org.onap.policy.drools.system.PolicyControllerConstants;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class PolicyTypeNativeController implements PolicyTypeController {
- private static final Logger logger = LoggerFactory.getLogger(PolicyTypeNativeController.class);
-
- @Getter
- protected final ToscaPolicyTypeIdentifier policyType;
-
- @GsonJsonIgnore
- @JsonIgnore
- protected final LifecycleFsm fsm;
-
- public PolicyTypeNativeController(LifecycleFsm fsm, ToscaPolicyTypeIdentifier policyType) {
- this.policyType = policyType;
- this.fsm = fsm;
- }
-
- @Override
- public boolean deploy(ToscaPolicy policy) {
- // TODO
- return fsm.getDomainMaker().isConformant(policy);
- }
-
- @Override
- public boolean undeploy(ToscaPolicy policy) {
- try {
- ControllerPolicy nativePolicy = fsm.getDomainMaker().convertTo(policy, ControllerPolicy.class);
- PolicyControllerConstants.getFactory().destroy(nativePolicy.getProperties().getControllerName());
- return true;
- } catch (RuntimeException | CoderException e) {
- logger.warn("failed undeploy of policy: {}", policy);
- return false;
- }
- }
-}
diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeNativeDroolsController.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeNativeDroolsController.java
new file mode 100644
index 00000000..b0118fbe
--- /dev/null
+++ b/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeNativeDroolsController.java
@@ -0,0 +1,250 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP
+ * ================================================================================
+ * Copyright (C) 2020 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.onap.policy.drools.lifecycle;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.stream.Collectors;
+import lombok.Getter;
+import org.onap.policy.common.endpoints.event.comm.TopicEndpointManager;
+import org.onap.policy.common.endpoints.event.comm.TopicSink;
+import org.onap.policy.common.endpoints.event.comm.TopicSource;
+import org.onap.policy.common.gson.annotation.GsonJsonIgnore;
+import org.onap.policy.common.utils.coder.CoderException;
+import org.onap.policy.drools.domain.models.controller.ControllerCustomSerialization;
+import org.onap.policy.drools.domain.models.controller.ControllerEvent;
+import org.onap.policy.drools.domain.models.controller.ControllerPolicy;
+import org.onap.policy.drools.domain.models.controller.ControllerProperties;
+import org.onap.policy.drools.domain.models.controller.ControllerSinkTopic;
+import org.onap.policy.drools.domain.models.controller.ControllerSourceTopic;
+import org.onap.policy.drools.properties.DroolsPropertyConstants;
+import org.onap.policy.drools.system.PolicyController;
+import org.onap.policy.drools.system.PolicyControllerConstants;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class PolicyTypeNativeDroolsController implements PolicyTypeController {
+ private static final Logger logger = LoggerFactory.getLogger(PolicyTypeNativeDroolsController.class);
+
+ @Getter
+ protected final ToscaPolicyTypeIdentifier policyType;
+
+ @GsonJsonIgnore
+ @JsonIgnore
+ protected final transient LifecycleFsm fsm;
+
+ public PolicyTypeNativeDroolsController(LifecycleFsm fsm, ToscaPolicyTypeIdentifier policyType) {
+ this.policyType = policyType;
+ this.fsm = fsm;
+ }
+
+ @Override
+ public boolean deploy(ToscaPolicy policy) {
+ Properties controllerProps = new Properties();
+ ControllerPolicy controllerPolicy = toDomainPolicy(policy);
+ if (controllerPolicy == null) {
+ return false;
+ }
+
+ ControllerProperties controllerConfig = controllerPolicy.getProperties();
+
+ boolean success =
+ configControllerName(controllerConfig, controllerProps)
+ && configControllerSources(controllerConfig, controllerProps)
+ && configControllerSinks(controllerConfig, controllerProps)
+ && configControllerCustom(controllerConfig, controllerProps);
+
+ if (!success) {
+ return false;
+ }
+
+ PolicyController controller;
+ try {
+ controller =
+ PolicyControllerConstants.getFactory().build(
+ controllerConfig.getControllerName(), controllerProps);
+ } catch (RuntimeException e) {
+ logger.warn("failed deploy (cannot create controller) for policy: {}", policy);
+ return false;
+ }
+
+ return controller != null;
+ }
+
+ @Override
+ public boolean undeploy(ToscaPolicy policy) {
+ try {
+ ControllerPolicy nativePolicy = fsm.getDomainMaker().convertTo(policy, ControllerPolicy.class);
+ PolicyControllerConstants.getFactory()
+ .destroy(nativePolicy.getProperties().getControllerName());
+ return true;
+ } catch (RuntimeException | CoderException e) {
+ logger.warn("failed undeploy of policy: {}", policy);
+ return false;
+ }
+ }
+
+ private ControllerPolicy toDomainPolicy(ToscaPolicy policy) {
+ ControllerPolicy nativePolicy = null;
+ try {
+ nativePolicy = fsm.getDomainMaker().convertTo(policy, ControllerPolicy.class);
+ ControllerProperties config = nativePolicy.getProperties();
+
+ /* check for duplicates */
+
+ if (isDups(sourceTopics(config.getSourceTopics()))
+ || isDups(sinkTopics(config.getSinkTopics()))) {
+ logger.warn("there are duplicated topics in policy {}", policy);
+ return null;
+ }
+
+ /* check for non-existance of the controller - throws IAE if there's not */
+
+ PolicyControllerConstants.getFactory().get(nativePolicy.getProperties().getControllerName());
+
+ } catch (CoderException e) {
+ logger.warn("failed deploy of policy (invalid): {}", policy);
+ return null;
+ } catch (IllegalArgumentException e) {
+ // this is OK
+ logger.trace("proceeding with the deploy of native controller policy: {}", policy);
+ }
+
+ return nativePolicy;
+ }
+
+ private boolean configControllerName(ControllerProperties controllerConfig, Properties controllerProps) {
+ controllerProps
+ .setProperty(DroolsPropertyConstants.PROPERTY_CONTROLLER_NAME, controllerConfig.getControllerName());
+ return true;
+ }
+
+ private boolean configControllerSources(ControllerProperties controllerConfig, Properties controllerProps) {
+ for (ControllerSourceTopic configSourceTopic : controllerConfig.getSourceTopics()) {
+ List<TopicSource> sources =
+ TopicEndpointManager.getManager().getTopicSources(List.of(configSourceTopic.getTopicName()));
+ if (sources.size() != 1) {
+ logger.warn("Topic {} is not present or ambigous {}", configSourceTopic.getTopicName(), sources);
+ return false;
+ }
+
+ configSourceTopic(sources.get(0), configSourceTopic, controllerProps);
+ }
+ return true;
+ }
+
+ private void configSourceTopic(TopicSource topic, ControllerSourceTopic configTopic, Properties controllerProps) {
+ String configCommPrefix = topic.getTopicCommInfrastructure().name().toLowerCase() + ".source";
+ configTopic(configCommPrefix, topic.getTopic(), configTopic.getEvents(), controllerProps);
+ }
+
+ private boolean configControllerSinks(ControllerProperties controllerConfig, Properties controllerProps) {
+ for (ControllerSinkTopic configSinkTopic : controllerConfig.getSinkTopics()) {
+ List<TopicSink> sinks =
+ TopicEndpointManager.getManager().getTopicSinks(List.of(configSinkTopic.getTopicName()));
+ if (sinks.size() != 1) {
+ logger.warn("Topic {} is not present or ambigous {}", configSinkTopic.getTopicName(), sinks);
+ return false;
+ }
+
+ configSinkTopic(sinks.get(0), configSinkTopic, controllerProps);
+ }
+ return true;
+ }
+
+ private void configSinkTopic(TopicSink topic, ControllerSinkTopic configTopic, Properties controllerProps) {
+ String configCommPrefix = topic.getTopicCommInfrastructure().name().toLowerCase() + ".sink";
+ configTopic(configCommPrefix, topic.getTopic(), configTopic.getEvents(), controllerProps);
+ }
+
+ private void configTopic(
+ String configCommPrefix, String topicName, List<ControllerEvent> events, Properties controllerProps) {
+ String configTopicPrefix = configCommPrefix + "." + topicName;
+ configTopics(configCommPrefix, topicName, controllerProps);
+ for (ControllerEvent configEvent : events) {
+ configEvent(configTopicPrefix, configEvent, controllerProps);
+ }
+ }
+
+ private void configTopics(String propPrefix, String topicName, Properties controllerProps) {
+ String topicsPropKey = propPrefix + ".topics";
+ configTopicItemList(topicsPropKey, topicName, controllerProps);
+ }
+
+ private void configEvent(String propPrefix, ControllerEvent configEvent, Properties controllerProps) {
+ String eventPropPrefix = propPrefix + ".events";
+ controllerProps.setProperty(eventPropPrefix, configEvent.getEventClass());
+ if (configEvent.getEventFilter() != null) {
+ controllerProps.setProperty(
+ eventPropPrefix + "." + configEvent.getEventClass() + ".filter", configEvent.getEventFilter());
+ }
+ if (configEvent.getCustomSerialization() != null) {
+ configSerialization(eventPropPrefix, configEvent.getCustomSerialization(), controllerProps);
+ }
+ configTopicItemList(eventPropPrefix, configEvent.getEventClass(), controllerProps);
+ }
+
+ private void configTopicItemList(String itemPrefix, String item, Properties controllerProps) {
+ if (controllerProps.getProperty(itemPrefix) == null) {
+ controllerProps.setProperty(itemPrefix, item);
+ } else {
+ controllerProps.setProperty(itemPrefix, "," + item);
+ }
+ }
+
+ private void configSerialization(
+ String propPrefix, ControllerCustomSerialization configCustom, Properties controllerProps) {
+ String customPropPrefix = propPrefix + ".custom.gson";
+ controllerProps.setProperty(
+ customPropPrefix, configCustom.getCustomSerializerClass() + "," + configCustom.getJsonParser());
+ }
+
+ private boolean configControllerCustom(ControllerProperties controllerConfig, Properties controllerProps) {
+ Map<String, String> configCustom = controllerConfig.getCustomConfig();
+ if (configCustom == null || configCustom.isEmpty()) {
+ return true;
+ }
+
+ controllerProps.putAll(configCustom);
+ return true;
+ }
+
+ private <T> boolean isDups(List<T> items) {
+ return items.size() != items.stream().distinct().count();
+ }
+
+ private List<String> sourceTopics(List<ControllerSourceTopic> sourceTopics) {
+ return sourceTopics.stream()
+ .map(ControllerSourceTopic::getTopicName)
+ .collect(Collectors.toList());
+ }
+
+ private List<String> sinkTopics(List<ControllerSinkTopic> sourceTopics) {
+ return sourceTopics.stream()
+ .map(ControllerSinkTopic::getTopicName)
+ .collect(Collectors.toList());
+ }
+
+}