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.google.gson.JsonElement;
28 import com.google.gson.JsonObject;
29 import com.google.gson.JsonParseException;
30 import java.util.Arrays;
31 import java.util.List;
32 import org.onap.clamp.clds.model.CldsEvent;
33 import org.onap.clamp.clds.util.JsonUtils;
36 * Interface for actions that the user can do according to the last event.
40 public interface ActionsHandler {
43 SIMPLE_MODEL("simpleModel"), POLICY_MODEL("policyModel");
44 private final String type;
46 ModelType(String type) {
50 public final String getType() {
55 EELFLogger getLogger();
58 * This method determines a list of actions that the user can do according to
64 * The Json properties string
65 * @return A list of actions
67 default List<String> determinePermittedActionsOnLastEvent(CldsEvent event, String propText) {
68 List<String> permittedActions;
69 String actionCd = getCurrentActionCd(event);
71 case CldsEvent.ACTION_CREATE:
72 permittedActions = Arrays.asList(CldsEvent.ACTION_SUBMIT, CldsEvent.ACTION_TEST, CldsEvent.ACTION_DELETE);
73 if (isTypeModel(propText, ModelType.SIMPLE_MODEL)) {
74 permittedActions = Arrays.asList(CldsEvent.ACTION_SUBMITDCAE, CldsEvent.ACTION_SUBMITPOLICY,
75 CldsEvent.ACTION_TEST, CldsEvent.ACTION_DELETE);
78 case CldsEvent.ACTION_SUBMIT:
79 case CldsEvent.ACTION_RESUBMIT:
80 case CldsEvent.ACTION_DISTRIBUTE:
81 permittedActions = Arrays.asList(CldsEvent.ACTION_DEPLOY, CldsEvent.ACTION_RESUBMIT,
82 CldsEvent.ACTION_DELETE);
83 if (isTypeModel(propText, ModelType.SIMPLE_MODEL)) {
84 permittedActions = Arrays.asList(CldsEvent.ACTION_DEPLOY, CldsEvent.ACTION_SUBMITDCAE,
85 CldsEvent.ACTION_DELETE);
88 case CldsEvent.ACTION_SUBMITDCAE:
89 permittedActions = Arrays.asList(CldsEvent.ACTION_SUBMITDCAE, CldsEvent.ACTION_DELETE);
91 case CldsEvent.ACTION_SUBMITPOLICY:
92 permittedActions = Arrays.asList(CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_STOP);
94 case CldsEvent.ACTION_UNDEPLOY:
95 permittedActions = Arrays.asList(CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_DEPLOY,
96 CldsEvent.ACTION_RESUBMIT, CldsEvent.ACTION_DELETE);
97 if (isTypeModel(propText, ModelType.SIMPLE_MODEL)) {
98 permittedActions = Arrays.asList(CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_DEPLOY,
99 CldsEvent.ACTION_SUBMITDCAE, CldsEvent.ACTION_DELETE);
102 case CldsEvent.ACTION_DEPLOY:
103 permittedActions = Arrays.asList(CldsEvent.ACTION_UNDEPLOY, CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_STOP);
105 case CldsEvent.ACTION_RESTART:
106 case CldsEvent.ACTION_UPDATE:
107 permittedActions = Arrays.asList(CldsEvent.ACTION_DEPLOY, CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_STOP,
108 CldsEvent.ACTION_UNDEPLOY);
109 if (isTypeModel(propText, ModelType.POLICY_MODEL)) {
110 permittedActions = Arrays.asList(CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_STOP);
113 case CldsEvent.ACTION_STOP:
114 permittedActions = Arrays.asList(CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_RESTART,
115 CldsEvent.ACTION_UNDEPLOY);
116 if (isTypeModel(propText, ModelType.POLICY_MODEL)) {
117 permittedActions = Arrays.asList(CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_RESTART,
118 CldsEvent.ACTION_DELETE);
122 getLogger().warn("Invalid current actionCd: " + actionCd);
123 permittedActions = Arrays.asList();
125 return permittedActions;
129 * This method returns the action of the event or a default one if not found.
135 default String getCurrentActionCd(CldsEvent event) {
136 // current default actionCd is CREATE
137 String actionCd = CldsEvent.ACTION_CREATE;
138 if (event != null && event.getActionCd() != null) {
139 actionCd = event.getActionCd();
145 * Check whether the text properties is of specified type ModelType.
148 * The Clamp Json properties
151 * @return True if matches the right type specified
153 default boolean isTypeModel(String propText, ModelType key) {
154 boolean result = false;
156 if (propText != null) {
157 JsonObject modelJson = JsonUtils.GSON.fromJson(propText, JsonObject.class);
158 JsonElement modelJsonOfType = modelJson.get(key.getType());
159 if (modelJsonOfType != null
160 && modelJsonOfType.isJsonPrimitive()
161 && modelJsonOfType.getAsJsonPrimitive().getAsBoolean()) {
165 } catch (JsonParseException e) {
166 getLogger().error("Error while parsing propText json", e);