2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2018 AT&T Intellectual Property. All rights
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
12 * http://www.apache.org/licenses/LICENSE-2.0
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 * ===================================================================
24 package org.onap.clamp.clds.model.actions;
26 import com.att.eelf.configuration.EELFLogger;
27 import com.fasterxml.jackson.databind.JsonNode;
29 import java.io.IOException;
30 import java.util.Arrays;
31 import java.util.List;
33 import org.onap.clamp.clds.model.CldsEvent;
34 import org.onap.clamp.clds.util.JacksonUtils;
37 * Interface for actions that the user can do according to the last event.
41 public interface ActionsHandler {
44 SIMPLE_MODEL("simpleModel"), POLICY_MODEL("policyModel");
45 private final String type;
47 private ModelType(String type) {
51 public final String getType() {
56 public EELFLogger getLogger();
59 * This method determines a list of actions that the user can do according to
65 * The Json properties string
66 * @return A list of actions
68 default List<String> determinePermittedActionsOnLastEvent(CldsEvent event, String propText) {
69 List<String> permittedActions;
70 String actionCd = getCurrentActionCd(event);
72 case CldsEvent.ACTION_CREATE:
73 permittedActions = Arrays.asList(CldsEvent.ACTION_SUBMIT, CldsEvent.ACTION_TEST, CldsEvent.ACTION_DELETE);
74 if (isTypeModel(propText, ModelType.SIMPLE_MODEL)) {
75 permittedActions = Arrays.asList(CldsEvent.ACTION_SUBMITDCAE, CldsEvent.ACTION_SUBMITPOLICY,
76 CldsEvent.ACTION_TEST, CldsEvent.ACTION_DELETE);
79 case CldsEvent.ACTION_SUBMIT:
80 case CldsEvent.ACTION_RESUBMIT:
81 case CldsEvent.ACTION_DISTRIBUTE:
82 permittedActions = Arrays.asList(CldsEvent.ACTION_DEPLOY, CldsEvent.ACTION_RESUBMIT,
83 CldsEvent.ACTION_DELETE);
84 if (isTypeModel(propText, ModelType.SIMPLE_MODEL)) {
85 permittedActions = Arrays.asList(CldsEvent.ACTION_DEPLOY, CldsEvent.ACTION_SUBMITDCAE,
86 CldsEvent.ACTION_DELETE);
89 case CldsEvent.ACTION_SUBMITDCAE:
90 permittedActions = Arrays.asList(CldsEvent.ACTION_SUBMITDCAE, CldsEvent.ACTION_DELETE);
92 case CldsEvent.ACTION_SUBMITPOLICY:
93 permittedActions = Arrays.asList(CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_STOP);
95 case CldsEvent.ACTION_UNDEPLOY:
96 permittedActions = Arrays.asList(CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_DEPLOY,
97 CldsEvent.ACTION_RESUBMIT, CldsEvent.ACTION_DELETE);
98 if (isTypeModel(propText, ModelType.SIMPLE_MODEL)) {
99 permittedActions = Arrays.asList(CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_DEPLOY,
100 CldsEvent.ACTION_SUBMITDCAE, CldsEvent.ACTION_DELETE);
103 case CldsEvent.ACTION_DEPLOY:
104 permittedActions = Arrays.asList(CldsEvent.ACTION_UNDEPLOY, CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_STOP);
106 case CldsEvent.ACTION_RESTART:
107 case CldsEvent.ACTION_UPDATE:
108 permittedActions = Arrays.asList(CldsEvent.ACTION_DEPLOY, CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_STOP,
109 CldsEvent.ACTION_UNDEPLOY);
110 if (isTypeModel(propText, ModelType.POLICY_MODEL)) {
111 permittedActions = Arrays.asList(CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_STOP);
114 case CldsEvent.ACTION_STOP:
115 permittedActions = Arrays.asList(CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_RESTART,
116 CldsEvent.ACTION_UNDEPLOY);
117 if (isTypeModel(propText, ModelType.POLICY_MODEL)) {
118 permittedActions = Arrays.asList(CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_RESTART,
119 CldsEvent.ACTION_DELETE);
123 getLogger().warn("Invalid current actionCd: " + actionCd);
124 permittedActions = Arrays.asList();
126 return permittedActions;
130 * This method returns the action of the event or a default one if not found.
136 default String getCurrentActionCd(CldsEvent event) {
137 // current default actionCd is CREATE
138 String actionCd = CldsEvent.ACTION_CREATE;
139 if (event != null && event.getActionCd() != null) {
140 actionCd = event.getActionCd();
146 * Check whether the text properties is of specified type ModelType.
149 * The Clamp Json properties
152 * @return True if matches the right type specified
154 default boolean isTypeModel(String propText, ModelType key) {
155 boolean result = false;
157 if (propText != null) {
158 JsonNode modelJson = JacksonUtils.getObjectMapperInstance().readTree(propText);
159 JsonNode modelJsonOfType = modelJson.get(key.getType());
160 if (modelJsonOfType != null && modelJsonOfType.asBoolean()) {
164 } catch (IOException e) {
165 getLogger().error("Error while parsing propText json", e);