diff options
Diffstat (limited to 'src/main/java/org/onap/clamp/clds/model/CldsModel.java')
-rw-r--r-- | src/main/java/org/onap/clamp/clds/model/CldsModel.java | 570 |
1 files changed, 570 insertions, 0 deletions
diff --git a/src/main/java/org/onap/clamp/clds/model/CldsModel.java b/src/main/java/org/onap/clamp/clds/model/CldsModel.java new file mode 100644 index 000000000..4d4f3aab3 --- /dev/null +++ b/src/main/java/org/onap/clamp/clds/model/CldsModel.java @@ -0,0 +1,570 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2017 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. + * 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 + * 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 javax.ws.rs.NotFoundException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * Represent a CLDS Model. + */ +public class CldsModel { + private static final Logger logger = LoggerFactory.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 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; + + /** + * Construct empty model. + */ + public CldsModel() { + event = new CldsEvent(); + } + + /** + * Retrieve from DB. + * + * @param cldsDao + * @param name + * @return + */ + public static CldsModel retrieve(CldsDao cldsDao, String name, boolean okIfNotFound) { + // get from db + CldsModel model = cldsDao.getModelTemplate(name); + if (model.getId() == null && !okIfNotFound) { + throw new NotFoundException(); + } + model.determineStatus(); + model.determinePermittedActionCd(); + return model; + } + + /** + * Save model to DB. + * + * @param cldsDao + * @param userid + */ + public void save(CldsDao cldsDao, String userid) { + cldsDao.setModel(this, userid); + determineStatus(); + determinePermittedActionCd(); + } + + /** + * Insert a new event for the new action. + * Throw IllegalArgumentException if requested actionCd is not permitted. + * + * @param cldsDao + * @param userid + * @param actionCd + * @param actionStateCd + */ + public void insEvent(CldsDao cldsDao, String userid, String actionCd, String actionStateCd) { + validateAction(actionCd); + event = CldsEvent.insEvent(cldsDao, this, actionCd, actionStateCd, null); + determineStatus(); + determinePermittedActionCd(); + } + + /** + * Update event with processInstanceId + * + * @param cldsDao + * @param processInstanceId + */ + public void updEvent(CldsDao cldsDao, String processInstanceId) { + cldsDao.updEvent(event.getId(), processInstanceId); + } + + /** + * 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)) { + 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)) { + 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 + */ + private String getCurrentActionCd() { + // current default actionCd is CREATE + String actionCd = CldsEvent.ACTION_CREATE; + if (event != null && event.getActionCd() != null) { + actionCd = event.getActionCd(); + } + return actionCd; + } + + /** + * Get the actionStateCd from current event. If none, default value is CldsEvent.ACTION_STATE_COMPLETED + * + * @return + */ + 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. + */ + private void determinePermittedActionCd() { + String actionCd = getCurrentActionCd(); + switch (actionCd) { + case CldsEvent.ACTION_CREATE: + permittedActionCd = Arrays.asList(CldsEvent.ACTION_SUBMIT); + 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); + break; + case CldsEvent.ACTION_DISTRIBUTE: + case CldsEvent.ACTION_UNDEPLOY: + permittedActionCd = Arrays.asList(CldsEvent.ACTION_UPDATE); + break; + case CldsEvent.ACTION_DEPLOY: + 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); + } + break; + case CldsEvent.ACTION_STOP: + // for 1702 delete is not currently implemented + permittedActionCd = Arrays.asList(CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_RESTART); + break; + default: + logger.warn("Invalid current actionCd: " + actionCd); + } + } + + /** + * Validate requestedActionCd - determine permittedActionCd and then check if contained in permittedActionCd + * Throw IllegalArgumentException if requested actionCd is not permitted. + * + * @param requestedActionCd + */ + public void validateAction(String requestedActionCd) { + determinePermittedActionCd(); + if (!permittedActionCd.contains(requestedActionCd)) { + 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 + */ + 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); + } + CldsModel model = new CldsModel(); + model.setControlNamePrefix(fullControlName.substring(0, len - UUID_LENGTH)); + model.setControlNameUuid(fullControlName.substring(len - UUID_LENGTH)); + return model; + } + + /** + * @return the controlName (controlNamePrefix + controlNameUuid) + */ + public String getControlName() { + return controlNamePrefix + controlNameUuid; + } + + /** + * 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); + } + 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 + */ + public String getName() { + return name; + } + + /** + * @param name the name to set + */ + public void setName(String name) { + this.name = name; + } + + public String getTemplateId() { + return templateId; + } + + public void setTemplateId(String templateId) { + this.templateId = templateId; + } + + /** + * @return the controlNamePrefix + */ + public String getControlNamePrefix() { + return controlNamePrefix; + } + + /** + * @param controlNamePrefix the controlNamePrefix to set + */ + public void setControlNamePrefix(String controlNamePrefix) { + this.controlNamePrefix = controlNamePrefix; + } + + /** + * @return the controlNameUuid + */ + public String getControlNameUuid() { + return controlNameUuid; + } + + /** + * @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 + */ + public String getPropText() { + return propText; + } + + /** + * @param propText the propText to set + */ + public void setPropText(String propText) { + this.propText = propText; + } + + /** + * @return the event + */ + public CldsEvent getEvent() { + return event; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTemplateName() { + return templateName; + } + + public void setTemplateName(String templateName) { + this.templateName = templateName; + } + + public String getPropId() { + return propId; + } + + public void setPropId(String propId) { + this.propId = propId; + } + + /** + * @param event the event to set + */ + public void setEvent(CldsEvent event) { + this.event = event; + } + + /** + * @return the status + */ + public String getStatus() { + return status; + } + + /** + * @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; + } + + public void setBlueprintText(String 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; + } + + public void setBpmnText(String 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; + } + + public void setImageText(String 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; + } + + public void setDocText(String docText) { + this.docText = docText; + } + + public List<CldsModelInstance> getCldsModelInstanceList() { + if (cldsModelInstanceList == null) { + cldsModelInstanceList = new ArrayList<>(); + } + return cldsModelInstanceList; + } + + public void setCldsModelInstanceList(List<CldsModelInstance> cldsModelInstanceList) { + this.cldsModelInstanceList = cldsModelInstanceList; + } + +} |