53945f552da131e88e71a496136eeefc6b5c0dc4
[policy/drools-pdp.git] /
1 /*
2  * ============LICENSE_START=======================================================
3  * ONAP
4  * ================================================================================
5  * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.policy.drools.lifecycle;
22
23 import lombok.Getter;
24 import org.onap.policy.common.gson.annotation.GsonJsonIgnore;
25 import org.onap.policy.common.utils.coder.CoderException;
26 import org.onap.policy.drools.controller.DroolsControllerConstants;
27 import org.onap.policy.drools.domain.models.artifact.NativeArtifactPolicy;
28 import org.onap.policy.drools.protocol.configuration.ControllerConfiguration;
29 import org.onap.policy.drools.protocol.configuration.DroolsConfiguration;
30 import org.onap.policy.drools.system.PolicyController;
31 import org.onap.policy.drools.system.PolicyControllerConstants;
32 import org.onap.policy.drools.system.PolicyEngineConstants;
33 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
34 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier;
35 import org.slf4j.Logger;
36 import org.slf4j.LoggerFactory;
37
38 public class PolicyTypeNativeArtifactController implements PolicyTypeController {
39     private static final Logger logger = LoggerFactory.getLogger(PolicyTypeNativeArtifactController.class);
40
41     @Getter
42     protected final ToscaPolicyTypeIdentifier policyType;
43
44     @GsonJsonIgnore
45     protected final LifecycleFsm fsm;
46
47     public PolicyTypeNativeArtifactController(LifecycleFsm fsm, ToscaPolicyTypeIdentifier policyType) {
48         this.policyType = policyType;
49         this.fsm = fsm;
50     }
51
52     @Override
53     public boolean deploy(ToscaPolicy policy) {
54         NativeArtifactPolicy nativePolicy;
55         PolicyController controller;
56         try {
57             nativePolicy = fsm.getDomainMaker().convertTo(policy, NativeArtifactPolicy.class);
58             DroolsConfiguration droolsConfig =
59                     new DroolsConfiguration(
60                             nativePolicy.getProperties().getRulesArtifact().getArtifactId(),
61                             nativePolicy.getProperties().getRulesArtifact().getGroupId(),
62                             nativePolicy.getProperties().getRulesArtifact().getVersion());
63
64             controller =
65                     PolicyControllerConstants.getFactory().get(nativePolicy.getProperties().getController().getName());
66             if (controller.getDrools().isBrained()) {
67                 logger.warn("upgrade of a live controller is strongly discouraged (undeploy first): {} -> {}",
68                         controller, droolsConfig);
69             }
70
71             return update(nativePolicy, droolsConfig);
72         } catch (CoderException | RuntimeException e) {
73             logger.warn("Invalid Policy: {}", policy);
74             return false;
75         }
76     }
77
78     @Override
79     public boolean undeploy(ToscaPolicy policy) {
80         try {
81             NativeArtifactPolicy nativePolicy = fsm.getDomainMaker().convertTo(policy, NativeArtifactPolicy.class);
82             DroolsConfiguration noConfig =
83                     new DroolsConfiguration(
84                             DroolsControllerConstants.NO_ARTIFACT_ID,
85                             DroolsControllerConstants.NO_GROUP_ID,
86                             DroolsControllerConstants.NO_VERSION);
87
88             return update(nativePolicy, noConfig);
89         } catch (RuntimeException | CoderException e) {
90             logger.warn("Invalid Policy: {}", policy);
91             return false;
92         }
93     }
94
95     private boolean update(NativeArtifactPolicy nativePolicy, DroolsConfiguration droolsConfig) {
96         ControllerConfiguration controllerConfig =
97                 new ControllerConfiguration(nativePolicy.getProperties().getController().getName(),
98                         ControllerConfiguration.CONFIG_CONTROLLER_OPERATION_UPDATE, droolsConfig);
99         return PolicyEngineConstants.getManager().updatePolicyController(controllerConfig) != null;
100     }
101 }