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