* ============LICENSE_START=======================================================
* ONAP CLAMP
* ================================================================================
- * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights
+ * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights
* reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* limitations under the License.
* ============LICENSE_END============================================
* ===================================================================
- *
+ *
*/
package org.onap.clamp.clds.model;
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import com.fasterxml.jackson.databind.JsonNode;
+import com.google.gson.annotations.Expose;
-import java.io.IOException;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.List;
import javax.ws.rs.BadRequestException;
import javax.ws.rs.NotFoundException;
import org.onap.clamp.clds.dao.CldsDao;
-import org.onap.clamp.clds.util.JacksonUtils;
+import org.onap.clamp.clds.model.actions.ActionsHandler;
+import org.onap.clamp.clds.model.actions.ActionsHandlerImpl;
+import org.onap.clamp.clds.model.status.StatusHandler;
+import org.onap.clamp.clds.model.status.StatusHandlerImpl;
/**
* Represent a CLDS Model.
*/
public class CldsModel {
- private static final EELFLogger logger = EELFManager.getInstance().getLogger(CldsModel.class);
private static final int UUID_LENGTH = 36;
- private static final String STATUS_DESIGN = "DESIGN";
- private static final String STATUS_DISTRIBUTED = "DISTRIBUTED";
- private static final String STATUS_ACTIVE = "ACTIVE";
- private static final String STATUS_STOPPED = "STOPPED";
- private static final String STATUS_DELETING = "DELETING";
- private static final String STATUS_ERROR = "ERROR";
- private static final String STATUS_UNKNOWN = "UNKNOWN";
+ /**
+ * The constant STATUS_DESIGN.
+ */
+ public static final String STATUS_DESIGN = "DESIGN";
+ /**
+ * The constant STATUS_DISTRIBUTED.
+ */
+ public static final String STATUS_DISTRIBUTED = "DISTRIBUTED";
+ /**
+ * The constant STATUS_ACTIVE.
+ */
+ public static final String STATUS_ACTIVE = "ACTIVE";
+ /**
+ * The constant STATUS_STOPPED.
+ */
+ public static final String STATUS_STOPPED = "STOPPED";
+ /**
+ * The constant STATUS_DELETING.
+ */
+ public static final String STATUS_DELETING = "DELETING";
+ /**
+ * The constant STATUS_ERROR.
+ */
+ public static final String STATUS_ERROR = "ERROR";
+ /**
+ * The constant STATUS_UNKNOWN.
+ */
+ public static final String STATUS_UNKNOWN = "UNKNOWN";
+
+ @Expose
private String id;
+ @Expose
private String templateId;
+ @Expose
private String templateName;
+ @Expose
private String name;
+ @Expose
private String controlNamePrefix;
+ @Expose
private String controlNameUuid;
+ @Expose
private String bpmnText;
+ @Expose
private String propText;
+ @Expose
private String imageText;
+ @Expose
private String docText;
+ @Expose
private String blueprintText;
+ @Expose
private CldsEvent event;
+ @Expose
private String status;
+ @Expose
private List<String> permittedActionCd;
+ @Expose
private List<CldsModelInstance> cldsModelInstanceList;
+ // This is a transient value used to return the failure message to UI
+ @Expose
+ private String errorMessageForUi;
/**
- * The service type Id received from DCAE by querying it
+ * The service type Id received from DCAE by querying it.
*/
+ @Expose
private String typeId;
+ @Expose
private String typeName;
+ @Expose
private String deploymentId;
+ @Expose
+ private String deploymentStatusUrl;
+
+ // Set default handlers but this can be changed if needed.
+ private static StatusHandler statusHandler = new StatusHandlerImpl();
+ private static ActionsHandler actionsHandler = new ActionsHandlerImpl();
+
+ /**
+ * Sets status handler.
+ *
+ * @param statHandler the stat handler
+ */
+ public static synchronized void setStatusHandler(StatusHandler statHandler) {
+ statusHandler = statHandler;
+ }
+
+ /**
+ * Sets actions handler.
+ *
+ * @param cdHandler the cd handler
+ */
+ public static synchronized void setActionsHandler(ActionsHandler cdHandler) {
+ actionsHandler = cdHandler;
+ }
/**
* Construct empty model.
/**
* Retrieve from DB.
+ *
+ * @param cldsDao the clds dao
+ * @param name the name
+ * @param okIfNotFound the ok if not found
+ * @return the clds model
*/
public static CldsModel retrieve(CldsDao cldsDao, String name, boolean okIfNotFound) {
// get from db
return model;
}
- public boolean canInventoryCall() {
+ /**
+ * Can dcae inventory call boolean.
+ *
+ * @return the boolean
+ */
+ public boolean canDcaeInventoryCall() {
boolean canCall = false;
/* Below checks the clds event is submit/resubmit/distribute */
if (event.isActionCd(CldsEvent.ACTION_SUBMIT) || event.isActionCd(CldsEvent.ACTION_RESUBMIT)
/**
* Save model to DB.
+ *
+ * @param cldsDao the clds dao
+ * @param userid the userid
+ * @return the clds model
*/
public CldsModel save(CldsDao cldsDao, String userid) {
CldsModel cldsModel = cldsDao.setModel(this, userid);
}
/**
- * set the status in the model
- */
- private void determineStatus() {
- status = STATUS_UNKNOWN;
- if (event == null || event.getActionCd() == null) {
- status = STATUS_DESIGN;
- } else if (event.isActionStateCd(CldsEvent.ACTION_STATE_ERROR)) {
- status = STATUS_ERROR;
- } else if (event.isActionAndStateCd(CldsEvent.ACTION_CREATE, CldsEvent.ACTION_STATE_ANY)
- || event.isActionAndStateCd(CldsEvent.ACTION_SUBMIT, CldsEvent.ACTION_STATE_ANY)
- || event.isActionAndStateCd(CldsEvent.ACTION_RESUBMIT, CldsEvent.ACTION_STATE_ANY)
- || event.isActionAndStateCd(CldsEvent.ACTION_SUBMITDCAE, CldsEvent.ACTION_STATE_ANY)
- || event.isActionAndStateCd(CldsEvent.ACTION_DELETE, CldsEvent.ACTION_STATE_RECEIVED)
- || event.isActionAndStateCd(CldsEvent.ACTION_MODIFY, CldsEvent.ACTION_STATE_ANY)) {
- status = STATUS_DESIGN;
- } else if (event.isActionAndStateCd(CldsEvent.ACTION_DISTRIBUTE, CldsEvent.ACTION_STATE_RECEIVED)
- || event.isActionAndStateCd(CldsEvent.ACTION_UNDEPLOY, CldsEvent.ACTION_STATE_RECEIVED)) {
- status = STATUS_DISTRIBUTED;
- } else if (event.isActionAndStateCd(CldsEvent.ACTION_DELETE, CldsEvent.ACTION_STATE_SENT)) {
- status = STATUS_DELETING;
- } else if (event.isActionAndStateCd(CldsEvent.ACTION_DEPLOY, CldsEvent.ACTION_STATE_RECEIVED)
- || event.isActionAndStateCd(CldsEvent.ACTION_RESTART, CldsEvent.ACTION_STATE_ANY)
- || event.isActionAndStateCd(CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_STATE_ANY)
- || event.isActionAndStateCd(CldsEvent.ACTION_DEPLOY, CldsEvent.ACTION_STATE_ANY)
- || event.isActionAndStateCd(CldsEvent.ACTION_SUBMITPOLICY, CldsEvent.ACTION_STATE_ANY)) {
- status = STATUS_ACTIVE;
- } else if (event.isActionAndStateCd(CldsEvent.ACTION_STOP, CldsEvent.ACTION_STATE_ANY)) {
- status = STATUS_STOPPED;
- }
- }
-
- /**
- * Get the actionCd from current event. If none, default value is
- * CldsEvent.ACTION_CREATE
+ * set the status in the model.
*/
- private String getCurrentActionCd() {
- // current default actionCd is CREATE
- String actionCd = CldsEvent.ACTION_CREATE;
- if (event != null && event.getActionCd() != null) {
- actionCd = event.getActionCd();
- }
- return actionCd;
+ public void determineStatus() {
+ status = statusHandler.determineStatusOnLastEvent(event);
}
/**
- * Get the actionStateCd from current event. If none, default value is
- * CldsEvent.ACTION_STATE_COMPLETED
+ * Determine permittedActionCd list using the actionCd from the current event.
+ * It's a states graph, given the next action that can be executed from the one
+ * that has been executed (described in the event object). ACTION_CREATE being
+ * the first one.
*/
- private String getCurrentActionStateCd() {
- // current default actionStateCd is CREATE
- String actionStateCd = CldsEvent.ACTION_STATE_COMPLETED;
- if (event != null && event.getActionStateCd() != null) {
- actionStateCd = event.getActionStateCd();
- }
- return actionStateCd;
- }
-
- /**
- * Determine permittedActionCd list using the actionCd from the current
- * event. It's a states graph, given the next action that can be executed
- * from the one that has been executed (described in the event object).
- * ACTION_CREATE being the first one.
- */
- private void determinePermittedActionCd() {
- String actionCd = getCurrentActionCd();
- switch (actionCd) {
- case CldsEvent.ACTION_CREATE:
- permittedActionCd = Arrays.asList(CldsEvent.ACTION_SUBMIT, CldsEvent.ACTION_TEST,
- CldsEvent.ACTION_DELETE);
- if (isSimplifiedModel()) {
- permittedActionCd = Arrays.asList(CldsEvent.ACTION_SUBMITDCAE, CldsEvent.ACTION_SUBMITPOLICY,
- CldsEvent.ACTION_TEST, CldsEvent.ACTION_DELETE);
- }
- break;
- case CldsEvent.ACTION_MODIFY:
- permittedActionCd = Arrays.asList(CldsEvent.ACTION_RESUBMIT, CldsEvent.ACTION_DELETE);
- if (isSimplifiedModel()) {
- permittedActionCd = Arrays.asList(CldsEvent.ACTION_SUBMITDCAE, CldsEvent.ACTION_SUBMITPOLICY,
- CldsEvent.ACTION_DELETE);
- }
- break;
- case CldsEvent.ACTION_SUBMIT:
- case CldsEvent.ACTION_RESUBMIT:
- permittedActionCd = Arrays.asList(CldsEvent.ACTION_RESUBMIT, CldsEvent.ACTION_DELETE);
- break;
- case CldsEvent.ACTION_SUBMITDCAE:
- permittedActionCd = Arrays.asList(CldsEvent.ACTION_SUBMITDCAE, CldsEvent.ACTION_DELETE);
- break;
- case CldsEvent.ACTION_SUBMITPOLICY:
- permittedActionCd = Arrays.asList(CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_STOP);
- break;
- case CldsEvent.ACTION_DISTRIBUTE:
- permittedActionCd = Arrays.asList(CldsEvent.ACTION_DEPLOY, CldsEvent.ACTION_RESUBMIT,
- CldsEvent.ACTION_DELETE);
- if (isSimplifiedModel()) {
- permittedActionCd = Arrays.asList(CldsEvent.ACTION_DEPLOY, CldsEvent.ACTION_SUBMITDCAE,
- CldsEvent.ACTION_DELETE);
- }
- break;
- case CldsEvent.ACTION_UNDEPLOY:
- permittedActionCd = Arrays.asList(CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_DEPLOY,
- CldsEvent.ACTION_RESUBMIT, CldsEvent.ACTION_DELETE);
- if (isSimplifiedModel()) {
- permittedActionCd = Arrays.asList(CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_DEPLOY,
- CldsEvent.ACTION_SUBMITDCAE, CldsEvent.ACTION_DELETE);
- }
- break;
- case CldsEvent.ACTION_DEPLOY:
- permittedActionCd = Arrays.asList(CldsEvent.ACTION_DEPLOY, CldsEvent.ACTION_UNDEPLOY,
- CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_STOP);
- break;
- case CldsEvent.ACTION_RESTART:
- case CldsEvent.ACTION_UPDATE:
- permittedActionCd = Arrays.asList(CldsEvent.ACTION_DEPLOY, CldsEvent.ACTION_UPDATE,
- CldsEvent.ACTION_STOP, CldsEvent.ACTION_UNDEPLOY);
- if (isPolicyOnly()) {
- permittedActionCd = Arrays.asList(CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_STOP);
- }
- break;
- case CldsEvent.ACTION_STOP:
- permittedActionCd = Arrays.asList(CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_RESTART,
- CldsEvent.ACTION_UNDEPLOY);
- if (isPolicyOnly()) {
- permittedActionCd = Arrays.asList(CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_RESTART,
- CldsEvent.ACTION_DELETE);
- }
- break;
- default:
- logger.warn("Invalid current actionCd: " + actionCd);
- }
- }
-
- private boolean isSimplifiedModel() {
- boolean result = false;
- try {
- if (propText != null) {
- JsonNode modelJson = JacksonUtils.getObjectMapperInstance().readTree(propText);
- JsonNode simpleModelJson = modelJson.get("simpleModel");
- if (simpleModelJson != null && simpleModelJson.asBoolean()) {
- result = true;
- }
- }
- } catch (IOException e) {
- logger.error("Error while parsing propText json", e);
- }
- return result;
- }
-
- private boolean isPolicyOnly() {
- boolean result = false;
- try {
- if (propText != null) {
- JsonNode modelJson = JacksonUtils.getObjectMapperInstance().readTree(propText);
- JsonNode policyOnlyJson = modelJson.get("policyOnly");
- if (policyOnlyJson != null && policyOnlyJson.asBoolean()) {
- result = true;
- }
- }
- } catch (IOException e) {
- logger.error("Error while parsing propText json", e);
- }
- return result;
+ public void determinePermittedActionCd() {
+ permittedActionCd = actionsHandler.determinePermittedActionsOnLastEvent(event, propText);
}
/**
- * Validate requestedActionCd - determine permittedActionCd and then check
- * if contained in permittedActionCd Throw IllegalArgumentException if
- * requested actionCd is not permitted.
+ * Validate requestedActionCd - determine permittedActionCd and then check if
+ * contained in permittedActionCd Throw IllegalArgumentException if requested
+ * actionCd is not permitted.
+ *
+ * @param requestedActionCd the requested action cd
*/
public void validateAction(String requestedActionCd) {
determinePermittedActionCd();
if (!permittedActionCd.contains(requestedActionCd)) {
- throw new IllegalArgumentException(
- "Invalid requestedActionCd: " + requestedActionCd + ". Given current actionCd: "
- + getCurrentActionCd() + ", the permittedActionCd: " + permittedActionCd);
+ throw new IllegalArgumentException("Invalid requestedActionCd: " + requestedActionCd
+ + ". Given current actionCd: " + actionsHandler.getCurrentActionCd(event)
+ + ", the permittedActionCd: " + permittedActionCd);
}
}
/**
- * Extract the UUID portion of a given full control name (controlNamePrefix
- * + controlNameUuid). No fields are populated other than controlNamePrefix
- * and controlNameUuid. Throws BadRequestException if length of given
- * control name is less than UUID_LENGTH.
+ * Extract the UUID portion of a given full control name (controlNamePrefix +
+ * controlNameUuid). No fields are populated other than controlNamePrefix and
+ * controlNameUuid. Throws BadRequestException if length of given control name
+ * is less than UUID_LENGTH.
+ *
+ * @param fullControlName the full control name
+ * @return the clds model
*/
public static CldsModel createUsingControlName(String fullControlName) {
if (fullControlName == null || fullControlName.length() < UUID_LENGTH) {
}
/**
+ * Gets control name.
+ *
* @return the controlName (controlNamePrefix + controlNameUuid)
*/
public String getControlName() {
}
/**
- * To insert modelInstance to the database
+ * To insert modelInstance to the database.
+ *
+ * @param cldsDao the clds dao
+ * @param dcaeEvent the dcae event
+ * @param userid the userid
+ * @return the clds model
*/
public static CldsModel insertModelInstance(CldsDao cldsDao, DcaeEvent dcaeEvent, String userid) {
String controlName = dcaeEvent.getControlName();
}
/**
+ * Gets name.
+ *
* @return the name
*/
public String getName() {
}
/**
- * @param name
- * the name to set
+ * Sets name.
+ *
+ * @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
+ * Gets type name.
+ *
* @return the typeName
*/
public String getTypeName() {
return typeName;
}
+ /**
+ * Sets type name.
+ *
+ * @param typeName the type name
+ */
public void setTypeName(String typeName) {
this.typeName = typeName;
}
+ /**
+ * Gets template id.
+ *
+ * @return the template id
+ */
public String getTemplateId() {
return templateId;
}
+ /**
+ * Sets template id.
+ *
+ * @param templateId the template id
+ */
public void setTemplateId(String templateId) {
this.templateId = templateId;
}
/**
+ * Gets control name prefix.
+ *
* @return the controlNamePrefix
*/
public String getControlNamePrefix() {
}
/**
- * @param controlNamePrefix
- * the controlNamePrefix to set
+ * Sets control name prefix.
+ *
+ * @param controlNamePrefix the controlNamePrefix to set
*/
public void setControlNamePrefix(String controlNamePrefix) {
this.controlNamePrefix = controlNamePrefix;
}
/**
+ * Gets control name uuid.
+ *
* @return the controlNameUuid
*/
public String getControlNameUuid() {
}
/**
- * @param controlNameUuid
- * the controlNameUuid to set
+ * Sets control name uuid.
+ *
+ * @param controlNameUuid the controlNameUuid to set
*/
public void setControlNameUuid(String controlNameUuid) {
this.controlNameUuid = controlNameUuid;
}
/**
+ * Gets prop text.
+ *
* @return the propText
*/
public String getPropText() {
}
/**
- * @param propText
- * the propText to set
+ * Sets prop text.
+ *
+ * @param propText the propText to set
*/
public void setPropText(String propText) {
this.propText = propText;
}
/**
+ * Gets event.
+ *
* @return the event
*/
public CldsEvent getEvent() {
return event;
}
+ /**
+ * Gets id.
+ *
+ * @return the id
+ */
public String getId() {
return id;
}
+ /**
+ * Sets id.
+ *
+ * @param id the id
+ */
public void setId(String id) {
this.id = id;
}
+ /**
+ * Gets template name.
+ *
+ * @return the template name
+ */
public String getTemplateName() {
return templateName;
}
+ /**
+ * Sets template name.
+ *
+ * @param templateName the template name
+ */
public void setTemplateName(String templateName) {
this.templateName = templateName;
}
/**
- * @param event
- * the event to set
+ * Sets event.
+ *
+ * @param event the event to set
*/
public void setEvent(CldsEvent event) {
this.event = event;
}
/**
+ * Gets status.
+ *
* @return the status
*/
public String getStatus() {
}
/**
- * @param status
- * the status to set
+ * Sets status.
+ *
+ * @param status the status to set
*/
public void setStatus(String status) {
this.status = status;
}
+ /**
+ * Gets blueprint text.
+ *
+ * @return the blueprint text
+ */
public String getBlueprintText() {
return blueprintText;
}
+ /**
+ * Sets blueprint text.
+ *
+ * @param blueprintText the blueprint text
+ */
public void setBlueprintText(String blueprintText) {
this.blueprintText = blueprintText;
}
+ /**
+ * Gets bpmn text.
+ *
+ * @return the bpmn text
+ */
public String getBpmnText() {
return bpmnText;
}
+ /**
+ * Sets bpmn text.
+ *
+ * @param bpmnText the bpmn text
+ */
public void setBpmnText(String bpmnText) {
this.bpmnText = bpmnText;
}
+ /**
+ * Gets image text.
+ *
+ * @return the image text
+ */
public String getImageText() {
return imageText;
}
+ /**
+ * Sets image text.
+ *
+ * @param imageText the image text
+ */
public void setImageText(String imageText) {
this.imageText = imageText;
}
+ /**
+ * Gets doc text.
+ *
+ * @return the doc text
+ */
public String getDocText() {
return docText;
}
+ /**
+ * Sets doc text.
+ *
+ * @param docText the doc text
+ */
public void setDocText(String docText) {
this.docText = docText;
}
+ /**
+ * Gets type id.
+ *
+ * @return the type id
+ */
public String getTypeId() {
return typeId;
}
+ /**
+ * Sets type id.
+ *
+ * @param typeId the type id
+ */
public void setTypeId(String typeId) {
this.typeId = typeId;
}
+ /**
+ * Gets clds model instance list.
+ *
+ * @return the clds model instance list
+ */
public List<CldsModelInstance> getCldsModelInstanceList() {
if (cldsModelInstanceList == null) {
cldsModelInstanceList = new ArrayList<>();
return cldsModelInstanceList;
}
+ /**
+ * Gets deployment id.
+ *
+ * @return the deployment id
+ */
public String getDeploymentId() {
return deploymentId;
}
+ /**
+ * Sets deployment id.
+ *
+ * @param deploymentId the deployment id
+ */
public void setDeploymentId(String deploymentId) {
this.deploymentId = deploymentId;
}
+ /**
+ * Gets permitted action cd.
+ *
+ * @return the permitted action cd
+ */
public List<String> getPermittedActionCd() {
return permittedActionCd;
}
+
+ /**
+ * Gets error message for ui.
+ *
+ * @return the error message for ui
+ */
+ public String getErrorMessageForUi() {
+ return errorMessageForUi;
+ }
+
+ /**
+ * Sets error message for ui.
+ *
+ * @param errorMessageForUi the error message for ui
+ */
+ public void setErrorMessageForUi(String errorMessageForUi) {
+ this.errorMessageForUi = errorMessageForUi;
+ }
+
+ /**
+ * Gets deployment status url.
+ *
+ * @return the deployment status url
+ */
+ public String getDeploymentStatusUrl() {
+ return deploymentStatusUrl;
+ }
+
+ /**
+ * Sets deployment status url.
+ *
+ * @param deploymentStatusUrl the deployment status url
+ */
+ public void setDeploymentStatusUrl(String deploymentStatusUrl) {
+ this.deploymentStatusUrl = deploymentStatusUrl;
+ }
}