* ============LICENSE_START=======================================================
* ONAP CLAMP
* ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights
* reserved.
* ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
* limitations under the License.
* ============LICENSE_END============================================
* ===================================================================
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ *
*/
package org.onap.clamp.clds.model;
-import org.onap.clamp.clds.dao.CldsDao;
-import org.jboss.resteasy.spi.BadRequestException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+import com.fasterxml.jackson.databind.JsonNode;
-import javax.ws.rs.NotFoundException;
+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;
+
/**
* Represent a CLDS Model.
*/
public class CldsModel {
- private static final Logger logger = LoggerFactory.getLogger(CldsModel.class);
+ private static final EELFLogger logger = EELFManager.getInstance().getLogger(CldsModel.class);
private static final int UUID_LENGTH = 36;
-
- public static final String STATUS_DESIGN = "DESIGN";
- public static final String STATUS_DISTRIBUTED = "DISTRIBUTED";
- public static final String STATUS_ACTIVE = "ACTIVE";
- public static final String STATUS_STOPPED = "STOPPED";
- public static final String STATUS_DELETING = "DELETING";
- public static final String STATUS_ERROR = "ERROR"; // manual intervention required
- public static final String STATUS_UNKNOWN = "UNKNOWN";
-
+ 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";
private String id;
private String templateId;
private String templateName;
private String name;
private String controlNamePrefix;
private String controlNameUuid;
- private String bpmnId;
- private String bpmnUserid;
private String bpmnText;
- private String propId;
- private String propUserid;
private String propText;
- private String imageId;
- private String imageUserid;
private String imageText;
- private String docId;
- private String docUserid;
private String docText;
- private String blueprintId;
- private String blueprintUserid;
private String blueprintText;
private CldsEvent event;
private String status;
private List<String> permittedActionCd;
private List<CldsModelInstance> cldsModelInstanceList;
+ /**
+ * The service type Id received from DCAE by querying it
+ */
+ private String typeId;
+ private String typeName;
+ private String deploymentId;
/**
* Construct empty model.
/**
* Retrieve from DB.
- *
- * @param cldsDao
- * @param name
- * @return
*/
public static CldsModel retrieve(CldsDao cldsDao, String name, boolean okIfNotFound) {
// get from db
return model;
}
- /**
- * Save model to DB.
- *
- * @param cldsDao
- * @param userid
- */
- public void save(CldsDao cldsDao, String userid) {
- cldsDao.setModel(this, userid);
- determineStatus();
- determinePermittedActionCd();
+ public boolean canInventoryCall() {
+ boolean canCall = false;
+ /* Below checks the clds event is submit/resubmit/distribute */
+ if (event.isActionCd(CldsEvent.ACTION_SUBMIT) || event.isActionCd(CldsEvent.ACTION_RESUBMIT)
+ || event.isActionCd(CldsEvent.ACTION_DISTRIBUTE) || event.isActionCd(CldsEvent.ACTION_SUBMITDCAE)) {
+ canCall = true;
+ }
+ return canCall;
}
/**
- * Insert a new event for the new action.
- * Throw IllegalArgumentException if requested actionCd is not permitted.
- *
- * @param cldsDao
- * @param userid
- * @param actionCd
- * @param actionStateCd
+ * Save model to DB.
*/
- public void insEvent(CldsDao cldsDao, String userid, String actionCd, String actionStateCd) {
- validateAction(actionCd);
- event = CldsEvent.insEvent(cldsDao, this, actionCd, actionStateCd, null);
+ public CldsModel save(CldsDao cldsDao, String userid) {
+ CldsModel cldsModel = cldsDao.setModel(this, userid);
determineStatus();
determinePermittedActionCd();
- }
-
- /**
- * Update event with processInstanceId
- *
- * @param cldsDao
- * @param processInstanceId
- */
- public void updEvent(CldsDao cldsDao, String processInstanceId) {
- cldsDao.updEvent(event.getId(), processInstanceId);
+ return cldsModel;
}
/**
* 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_DELETE, CldsEvent.ACTION_STATE_RECEIVED)) {
+ } 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)) {
+ } 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)) {
+ } 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)) {
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
- *
- * @return
+ * Get the actionCd from current event. If none, default value is
+ * CldsEvent.ACTION_CREATE
*/
private String getCurrentActionCd() {
// current default actionCd is CREATE
}
/**
- * Get the actionStateCd from current event. If none, default value is CldsEvent.ACTION_STATE_COMPLETED
- *
- * @return
+ * Get the actionStateCd from current event. If none, default value is
+ * CldsEvent.ACTION_STATE_COMPLETED
*/
private String getCurrentActionStateCd() {
// current default actionStateCd is CREATE
}
/**
- * Determine permittedActionCd list using the actionCd from the current event.
+ * 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);
+ permittedActionCd = Arrays.asList(CldsEvent.ACTION_SUBMIT, CldsEvent.ACTION_TEST,
+ CldsEvent.ACTION_DELETE);
+ if (isSimplifiedModel()) {
+ permittedActionCd = Arrays.asList(CldsEvent.ACTION_SUBMITDCAE, 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_DELETE);
+ }
break;
case CldsEvent.ACTION_SUBMIT:
case CldsEvent.ACTION_RESUBMIT:
- // for 1702 delete is not currently implemented (and resubmit requires manually deleting artifact from asdc
- permittedActionCd = Arrays.asList(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_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);
+ 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:
- // for 1702 delete is not currently implemented
- permittedActionCd = Arrays.asList(CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_STOP);
- break;
- case CldsEvent.ACTION_DELETE:
- if (getCurrentActionStateCd().equals(CldsEvent.ACTION_STATE_SENT)) {
- permittedActionCd = Arrays.asList();
- } else {
- permittedActionCd = Arrays.asList(CldsEvent.ACTION_SUBMIT);
- }
+ permittedActionCd = Arrays.asList(CldsEvent.ACTION_DEPLOY, CldsEvent.ACTION_UPDATE,
+ CldsEvent.ACTION_STOP, CldsEvent.ACTION_UNDEPLOY);
break;
case CldsEvent.ACTION_STOP:
- // for 1702 delete is not currently implemented
- permittedActionCd = Arrays.asList(CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_RESTART);
+ permittedActionCd = Arrays.asList(CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_RESTART,
+ CldsEvent.ACTION_UNDEPLOY);
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;
+ }
+
/**
- * Validate requestedActionCd - determine permittedActionCd and then check if contained in permittedActionCd
- * Throw IllegalArgumentException if requested actionCd is not permitted.
- *
- * @param requestedActionCd
+ * Validate requestedActionCd - determine permittedActionCd and then check
+ * if contained in permittedActionCd Throw IllegalArgumentException if
+ * requested actionCd is not permitted.
*/
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: "
+ + getCurrentActionCd() + ", 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.
- *
- * @param fullControlName
- * @return
+ * 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.
*/
public static CldsModel createUsingControlName(String fullControlName) {
-
- int len = 0;
-
- if (fullControlName != null) {
- len = fullControlName.length();
- }
- if (len < UUID_LENGTH) {
- throw new BadRequestException("closed loop id / control name length, " + len + ", less than the minimum of: " + UUID_LENGTH);
+ if (fullControlName == null || fullControlName.length() < UUID_LENGTH) {
+ throw new BadRequestException(
+ "closed loop id / control name length, " + (fullControlName != null ? fullControlName.length() : 0)
+ + ", less than the minimum of: " + UUID_LENGTH);
}
CldsModel model = new CldsModel();
- model.setControlNamePrefix(fullControlName.substring(0, len - UUID_LENGTH));
- model.setControlNameUuid(fullControlName.substring(len - UUID_LENGTH));
+ model.setControlNamePrefix(fullControlName.substring(0, fullControlName.length() - UUID_LENGTH));
+ model.setControlNameUuid(fullControlName.substring(fullControlName.length() - UUID_LENGTH));
return model;
}
/**
* To insert modelInstance to the database
- *
- * @param cldsDao
- * @param dcaeEvent
*/
public static CldsModel insertModelInstance(CldsDao cldsDao, DcaeEvent dcaeEvent, String userid) {
String controlName = dcaeEvent.getControlName();
CldsModel cldsModel = createUsingControlName(controlName);
cldsModel = cldsDao.getModelByUuid(cldsModel.getControlNameUuid());
cldsModel.determineStatus();
- if (dcaeEvent.getCldsActionCd().equals(CldsEvent.ACTION_UNDEPLOY) ||
- (dcaeEvent.getCldsActionCd().equals(CldsEvent.ACTION_DEPLOY) && (cldsModel.getStatus().equals(STATUS_DISTRIBUTED) || cldsModel.getStatus().equals(STATUS_DESIGN)))) {
- CldsEvent.insEvent(cldsDao, dcaeEvent.getControlName(), userid, dcaeEvent.getCldsActionCd(), CldsEvent.ACTION_STATE_RECEIVED, null);
+ if (dcaeEvent.getCldsActionCd().equals(CldsEvent.ACTION_UNDEPLOY) || (dcaeEvent.getCldsActionCd()
+ .equals(CldsEvent.ACTION_DEPLOY)
+ && (cldsModel.getStatus().equals(STATUS_DISTRIBUTED) || cldsModel.getStatus().equals(STATUS_DESIGN)))) {
+ CldsEvent.insEvent(cldsDao, dcaeEvent.getControlName(), userid, dcaeEvent.getCldsActionCd(),
+ CldsEvent.ACTION_STATE_RECEIVED, null);
}
cldsDao.insModelInstance(cldsModel, dcaeEvent.getInstances());
return cldsModel;
}
- /**
- * To remove modelInstance from the database
- * This method is defunct - DCAE Proxy will not undeploy individual instances. It will send an empty list of
- * deployed instances to indicate all have been removed. Or it will send an updated list to indicate those that
- * are still deployed with any not on the list considered undeployed.
- *
- * @param cldsDao
- * @param dcaeEvent
- */
- @SuppressWarnings("unused")
- private static CldsModel removeModelInstance(CldsDao cldsDao, DcaeEvent dcaeEvent) {
- String controlName = dcaeEvent.getControlName();
- //cldsModel = cldsDao.delModelInstance(cldsModel.getControlNameUuid(), dcaeEvent.getInstances() );
- return createUsingControlName(controlName);
- }
-
/**
* @return the name
*/
}
/**
- * @param name the name to set
+ * @param name
+ * the name to set
*/
public void setName(String name) {
this.name = name;
}
+ /**
+ * @return the typeName
+ */
+ public String getTypeName() {
+ return typeName;
+ }
+
+ public void setTypeName(String typeName) {
+ this.typeName = typeName;
+ }
+
public String getTemplateId() {
return templateId;
}
}
/**
- * @param controlNamePrefix the controlNamePrefix to set
+ * @param controlNamePrefix
+ * the controlNamePrefix to set
*/
public void setControlNamePrefix(String controlNamePrefix) {
this.controlNamePrefix = controlNamePrefix;
}
/**
- * @param controlNameUuid the controlNameUuid to set
+ * @param controlNameUuid
+ * the controlNameUuid to set
*/
public void setControlNameUuid(String controlNameUuid) {
this.controlNameUuid = controlNameUuid;
}
-
- /**
- * @return the propUserid
- */
- public String getPropUserid() {
- return propUserid;
- }
-
- /**
- * @param propUserid the propUserid to set
- */
- public void setPropUserid(String propUserid) {
- this.propUserid = propUserid;
- }
-
/**
* @return the propText
*/
}
/**
- * @param propText the propText to set
+ * @param propText
+ * the propText to set
*/
public void setPropText(String propText) {
this.propText = propText;
this.templateName = templateName;
}
- public String getPropId() {
- return propId;
- }
-
- public void setPropId(String propId) {
- this.propId = propId;
- }
-
/**
- * @param event the event to set
+ * @param event
+ * the event to set
*/
public void setEvent(CldsEvent event) {
this.event = event;
}
/**
- * @param status the status to set
+ * @param status
+ * the status to set
*/
public void setStatus(String status) {
this.status = status;
}
- /**
- * @return the permittedActionCd
- */
- public List<String> getPermittedActionCd() {
- return permittedActionCd;
- }
-
- /**
- * @param permittedActionCd the permittedActionCd to set
- */
- public void setPermittedActionCd(List<String> permittedActionCd) {
- this.permittedActionCd = permittedActionCd;
- }
-
- public String getBlueprintId() {
- return blueprintId;
- }
-
- public void setBlueprintId(String blueprintId) {
- this.blueprintId = blueprintId;
- }
-
- public String getBlueprintUserid() {
- return blueprintUserid;
- }
-
- public void setBlueprintUserid(String blueprintUserid) {
- this.blueprintUserid = blueprintUserid;
- }
-
public String getBlueprintText() {
return blueprintText;
}
this.blueprintText = blueprintText;
}
- public String getBpmnId() {
- return bpmnId;
- }
-
- public void setBpmnId(String bpmnId) {
- this.bpmnId = bpmnId;
- }
-
- public String getBpmnUserid() {
- return bpmnUserid;
- }
-
- public void setBpmnUserid(String bpmnUserid) {
- this.bpmnUserid = bpmnUserid;
- }
-
public String getBpmnText() {
return bpmnText;
}
this.bpmnText = bpmnText;
}
- public String getImageId() {
- return imageId;
- }
-
- public void setImageId(String imageId) {
- this.imageId = imageId;
- }
-
- public String getImageUserid() {
- return imageUserid;
- }
-
- public void setImageUserid(String imageUserid) {
- this.imageUserid = imageUserid;
- }
-
public String getImageText() {
return imageText;
}
this.imageText = imageText;
}
- public String getDocId() {
- return docId;
- }
-
- public void setDocId(String docId) {
- this.docId = docId;
- }
-
- public String getDocUserid() {
- return docUserid;
- }
-
- public void setDocUserid(String docUserid) {
- this.docUserid = docUserid;
- }
-
public String getDocText() {
return docText;
}
this.docText = docText;
}
+ public String getTypeId() {
+ return typeId;
+ }
+
+ public void setTypeId(String typeId) {
+ this.typeId = typeId;
+ }
+
public List<CldsModelInstance> getCldsModelInstanceList() {
if (cldsModelInstanceList == null) {
cldsModelInstanceList = new ArrayList<>();
return cldsModelInstanceList;
}
- public void setCldsModelInstanceList(List<CldsModelInstance> cldsModelInstanceList) {
- this.cldsModelInstanceList = cldsModelInstanceList;
+ public String getDeploymentId() {
+ return deploymentId;
+ }
+
+ public void setDeploymentId(String deploymentId) {
+ this.deploymentId = deploymentId;
}
+ public List<String> getPermittedActionCd() {
+ return permittedActionCd;
+ }
}