aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--extra/sql/bulkload/clds-create-db-objects.sql1
-rw-r--r--extra/sql/bulkload/clds-stored-procedures.sql15
-rw-r--r--pom.xml12
-rw-r--r--src/main/java/org/onap/clamp/clds/client/CldsEventDelegate.java32
-rw-r--r--src/main/java/org/onap/clamp/clds/dao/CldsDao.java87
-rw-r--r--src/main/java/org/onap/clamp/clds/model/CldsEvent.java33
-rw-r--r--src/main/java/org/onap/clamp/clds/model/CldsModel.java113
-rw-r--r--src/main/java/org/onap/clamp/clds/model/DcaeEvent.java35
-rw-r--r--src/main/java/org/onap/clamp/clds/sdc/controller/installer/CsarInstallerImpl.java31
-rw-r--r--src/main/java/org/onap/clamp/clds/service/CldsService.java210
-rw-r--r--src/main/resources/clds/camel/routes/flexible-flow.xml15
-rw-r--r--src/test/java/org/onap/clamp/clds/model/CldsModelTest.java6
12 files changed, 284 insertions, 306 deletions
diff --git a/extra/sql/bulkload/clds-create-db-objects.sql b/extra/sql/bulkload/clds-create-db-objects.sql
index 38cc466f5..ac64b5d76 100644
--- a/extra/sql/bulkload/clds-create-db-objects.sql
+++ b/extra/sql/bulkload/clds-create-db-objects.sql
@@ -59,6 +59,7 @@ CREATE TABLE model (
control_name_uuid VARCHAR(36) NOT NULL,
service_type_id VARCHAR(80) NULL,
deployment_id VARCHAR(80) NULL,
+ deployment_status_url VARCHAR(300) NULL,
PRIMARY KEY (model_id),
UNIQUE (model_name),
UNIQUE (control_name_uuid),
diff --git a/extra/sql/bulkload/clds-stored-procedures.sql b/extra/sql/bulkload/clds-stored-procedures.sql
index aa8edb81a..b48e86afe 100644
--- a/extra/sql/bulkload/clds-stored-procedures.sql
+++ b/extra/sql/bulkload/clds-stored-procedures.sql
@@ -134,6 +134,7 @@ CREATE PROCEDURE get_model
OUT v_model_id VARCHAR(36),
OUT v_service_type_id VARCHAR(80),
OUT v_deployment_id VARCHAR(80),
+ OUT v_deployment_status_url VARCHAR(300),
OUT v_template_name VARCHAR(80),
OUT v_template_id VARCHAR(36),
OUT v_model_prop_id VARCHAR(36),
@@ -153,6 +154,7 @@ BEGIN
m.model_id,
m.service_type_id,
m.deployment_id,
+ m.deployment_status_url,
t.template_name,
m.template_id,
mp.model_prop_id,
@@ -171,6 +173,7 @@ BEGIN
v_model_id,
v_service_type_id,
v_deployment_id,
+ v_deployment_status_url,
v_template_name,
v_template_id,
v_model_prop_id,
@@ -210,6 +213,7 @@ CREATE PROCEDURE get_model_template
OUT v_model_id VARCHAR(36),
OUT v_service_type_id VARCHAR(80),
OUT v_deployment_id VARCHAR(80),
+ OUT v_deployment_status_url VARCHAR(300),
OUT v_template_name VARCHAR(80),
OUT v_template_id VARCHAR(36),
OUT v_model_prop_id VARCHAR(36),
@@ -240,6 +244,7 @@ BEGIN
v_model_id,
v_service_type_id,
v_deployment_id,
+ v_deployment_status_url,
v_template_name,
v_template_id,
v_model_prop_id,
@@ -274,6 +279,7 @@ CREATE PROCEDURE set_model
IN v_model_blueprint_text MEDIUMTEXT,
IN v_service_type_id VARCHAR(80),
IN v_deployment_id VARCHAR(80),
+ IN v_deployment_status_url VARCHAR(300),
INOUT v_control_name_prefix VARCHAR(80),
INOUT v_control_name_uuid VARCHAR(36),
OUT v_model_id VARCHAR(36),
@@ -295,6 +301,7 @@ BEGIN
DECLARE v_old_model_blueprint_text MEDIUMTEXT;
DECLARE v_old_service_type_id VARCHAR(80);
DECLARE v_old_deployment_id VARCHAR(80);
+ DECLARE v_old_deployment_status_url VARCHAR(300);
SET v_model_id = NULL;
CALL get_model(
v_model_name,
@@ -303,6 +310,7 @@ BEGIN
v_model_id,
v_old_service_type_id,
v_old_deployment_id,
+ v_old_deployment_status_url,
v_old_template_name,
v_old_template_id,
v_model_prop_id,
@@ -325,8 +333,8 @@ BEGIN
END IF;
SET v_model_id = v_control_name_uuid;
INSERT INTO model
- (model_id, model_name, template_id, control_name_prefix, control_name_uuid, service_type_id, deployment_id)
- VALUES (v_model_id, v_model_name, v_template_id, v_control_name_prefix, v_control_name_uuid, v_service_type_id, v_deployment_id);
+ (model_id, model_name, template_id, control_name_prefix, control_name_uuid, service_type_id, deployment_id, deployment_status_url)
+ VALUES (v_model_id, v_model_name, v_template_id, v_control_name_prefix, v_control_name_uuid, v_service_type_id, v_deployment_id,v_deployment_status_url);
# since just created model, insert CREATED event as initial default event
SET v_action_cd = 'CREATE';
SET v_action_state_cd = 'COMPLETED';
@@ -368,7 +376,8 @@ BEGIN
model_prop_id = v_model_prop_id,
model_blueprint_id = v_model_blueprint_id,
service_type_id = v_service_type_id,
- deployment_id = v_deployment_id
+ deployment_id = v_deployment_id,
+ deployment_status_url = v_deployment_status_url
WHERE model_id = v_model_id;
END;
CREATE PROCEDURE ins_model_instance
diff --git a/pom.xml b/pom.xml
index 72f62f03d..f95805f53 100644
--- a/pom.xml
+++ b/pom.xml
@@ -856,9 +856,9 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
- <version>2.19.1</version>
+ <version>2.22.1</version>
<configuration>
- <forkCount>1</forkCount>
+ <forkCount>0</forkCount>
<reuseForks>false</reuseForks>
</configuration>
</plugin>
@@ -866,8 +866,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
- <version>2.17</version>
-
+ <version>2.22.1</version>
<executions>
<execution>
<id>integration-tests</id>
@@ -876,10 +875,13 @@
<goal>verify</goal>
</goals>
<configuration>
+ <additionalClasspathElements>
+ <additionalClasspathElement>${project.build.directory}/classes</additionalClasspathElement>
+ </additionalClasspathElements>
<includes>
<include>**/*ItCase.java</include>
</includes>
- <forkCount>1</forkCount>
+ <forkCount>0</forkCount>
<reuseForks>false</reuseForks>
</configuration>
</execution>
diff --git a/src/main/java/org/onap/clamp/clds/client/CldsEventDelegate.java b/src/main/java/org/onap/clamp/clds/client/CldsEventDelegate.java
index 8dfa190ed..8ae10b278 100644
--- a/src/main/java/org/onap/clamp/clds/client/CldsEventDelegate.java
+++ b/src/main/java/org/onap/clamp/clds/client/CldsEventDelegate.java
@@ -27,7 +27,6 @@ import com.att.eelf.configuration.EELFLogger;
import com.att.eelf.configuration.EELFManager;
import org.apache.camel.Exchange;
-import org.apache.camel.Handler;
import org.onap.clamp.clds.dao.CldsDao;
import org.onap.clamp.clds.model.CldsEvent;
import org.springframework.beans.factory.annotation.Autowired;
@@ -49,23 +48,26 @@ public class CldsEventDelegate {
*
* @param camelExchange
* The Camel Exchange object containing the properties
+ * @param actionState
+ * The action state that is used instead of the one in exchange property
*/
- @Handler
- public void execute(Exchange camelExchange) {
+
+ public void addEvent(Exchange camelExchange, String actionState) {
String controlName = (String) camelExchange.getProperty("controlName");
String actionCd = (String) camelExchange.getProperty("actionCd");
- String actionStateCd = ((String) camelExchange.getProperty("actionStateCd")) != null
+ String actionStateCd = (actionState != null) ? actionState : CldsEvent.ACTION_STATE_COMPLETED;
+ actionStateCd = ((String) camelExchange.getProperty("actionStateCd")) != null
? ((String) camelExchange.getProperty("actionStateCd"))
- : CldsEvent.ACTION_STATE_COMPLETED;
- // Flag indicate whether it is triggered by Validation Test button from
- // UI
- boolean isTest = (boolean) camelExchange.getProperty("isTest");
- boolean isInsertTestEvent = (boolean) camelExchange.getProperty("isInsertTestEvent");
- String userid = (String) camelExchange.getProperty("userid");
- // do not insert events for test actions unless flag set to insert them
- if (!isTest || isInsertTestEvent) {
- // won't really have userid here...
- CldsEvent.insEvent(cldsDao, controlName, userid, actionCd, actionStateCd, camelExchange.getExchangeId());
- }
+ : actionStateCd;
+ // Flag indicate whether it is triggered by Validation Test button from
+ // UI
+ boolean isTest = (boolean) camelExchange.getProperty("isTest");
+ boolean isInsertTestEvent = (boolean) camelExchange.getProperty("isInsertTestEvent");
+ String userid = (String) camelExchange.getProperty("userid");
+ // do not insert events for test actions unless flag set to insert them
+ if (!isTest || isInsertTestEvent) {
+ // won't really have userid here...
+ CldsEvent.insEvent(cldsDao, controlName, userid, actionCd, actionStateCd, camelExchange.getExchangeId());
+ }
}
}
diff --git a/src/main/java/org/onap/clamp/clds/dao/CldsDao.java b/src/main/java/org/onap/clamp/clds/dao/CldsDao.java
index d3e89fb6b..121114b37 100644
--- a/src/main/java/org/onap/clamp/clds/dao/CldsDao.java
+++ b/src/main/java/org/onap/clamp/clds/dao/CldsDao.java
@@ -86,6 +86,7 @@ public class CldsDao {
private SimpleJdbcCall procInsertDictionaryElement;
private static final String DATE_FORMAT = "MM-dd-yyyy HH:mm:ss";
+
/**
* Log message when instantiating
*/
@@ -184,6 +185,7 @@ public class CldsDao {
.addValue("v_model_prop_text", model.getPropText())
.addValue("v_model_blueprint_text", model.getBlueprintText())
.addValue("v_service_type_id", model.getTypeId()).addValue("v_deployment_id", model.getDeploymentId())
+ .addValue("v_deployment_status_url", model.getDeploymentStatusUrl())
.addValue("v_control_name_prefix", model.getControlNamePrefix())
.addValue(V_CONTROL_NAME_UUID, model.getControlNameUuid());
Map<String, Object> out = logSqlExecution(procSetModel, in);
@@ -475,6 +477,7 @@ public class CldsDao {
model.getEvent().setUserid((String) out.get("v_event_user_id"));
model.setTypeId((String) out.get("v_service_type_id"));
model.setDeploymentId((String) out.get("v_deployment_id"));
+ model.setDeploymentStatusUrl((String) out.get("v_deployment_status_url"));
}
/**
@@ -525,18 +528,19 @@ public class CldsDao {
}
toscaModelSql += " AND tmr.version = (select max(version) from tosca_model_revision st where tmr.tosca_model_id=st.tosca_model_id)";
- Optional.ofNullable(jdbcTemplateObject.queryForList(toscaModelSql, params)).orElse(Collections.emptyList()).forEach(row -> {
- CldsToscaModel cldsToscaModel = new CldsToscaModel();
- cldsToscaModel.setId((String) row.get("tosca_model_id"));
- cldsToscaModel.setPolicyType((String) row.get("policy_type"));
- cldsToscaModel.setToscaModelName((String) row.get("tosca_model_name"));
- cldsToscaModel.setUserId((String) row.get("user_id"));
- cldsToscaModel.setRevisionId((String) row.get("tosca_model_revision_id"));
- cldsToscaModel.setVersion(((Double) row.get("version")));
- cldsToscaModel.setCreatedDate(sdf.format(row.get("createdTimestamp")));
- cldsToscaModel.setToscaModelYaml((String) row.get("tosca_model_yaml"));
- cldsToscaModels.add(cldsToscaModel);
- });
+ Optional.ofNullable(jdbcTemplateObject.queryForList(toscaModelSql, params)).orElse(Collections.emptyList())
+ .forEach(row -> {
+ CldsToscaModel cldsToscaModel = new CldsToscaModel();
+ cldsToscaModel.setId((String) row.get("tosca_model_id"));
+ cldsToscaModel.setPolicyType((String) row.get("policy_type"));
+ cldsToscaModel.setToscaModelName((String) row.get("tosca_model_name"));
+ cldsToscaModel.setUserId((String) row.get("user_id"));
+ cldsToscaModel.setRevisionId((String) row.get("tosca_model_revision_id"));
+ cldsToscaModel.setVersion(((Double) row.get("version")));
+ cldsToscaModel.setCreatedDate(sdf.format(row.get("createdTimestamp")));
+ cldsToscaModel.setToscaModelYaml((String) row.get("tosca_model_yaml"));
+ cldsToscaModels.add(cldsToscaModel);
+ });
return cldsToscaModels;
}
@@ -626,15 +630,16 @@ public class CldsDao {
.map(Arrays::stream).map(s -> s.map(param -> param + " = :" + param).collect(Collectors.joining(" AND ")))
.orElse("1");
- Optional.ofNullable(jdbcTemplateObject.queryForList(dictionarySql, namedParameters)).orElse(Collections.emptyList()).forEach(row -> {
- CldsDictionary cldsDictionary = new CldsDictionary();
- cldsDictionary.setDictionaryId((String) row.get("dictionary_id"));
- cldsDictionary.setDictionaryName((String) row.get("dictionary_name"));
- cldsDictionary.setCreatedBy((String) row.get("created_by"));
- cldsDictionary.setUpdatedBy((String) row.get("modified_by"));
- cldsDictionary.setLastUpdatedDate(sdf.format(row.get("timestamp")));
- dictionaries.add(cldsDictionary);
- });
+ Optional.ofNullable(jdbcTemplateObject.queryForList(dictionarySql, namedParameters))
+ .orElse(Collections.emptyList()).forEach(row -> {
+ CldsDictionary cldsDictionary = new CldsDictionary();
+ cldsDictionary.setDictionaryId((String) row.get("dictionary_id"));
+ cldsDictionary.setDictionaryName((String) row.get("dictionary_name"));
+ cldsDictionary.setCreatedBy((String) row.get("created_by"));
+ cldsDictionary.setUpdatedBy((String) row.get("modified_by"));
+ cldsDictionary.setLastUpdatedDate(sdf.format(row.get("timestamp")));
+ dictionaries.add(cldsDictionary);
+ });
return dictionaries;
}
@@ -671,8 +676,7 @@ public class CldsDao {
.addValue("dict_element_name", cldsDictionaryItem.getDictElementName())
.addValue("dict_element_short_name", cldsDictionaryItem.getDictElementShortName())
.addValue("dict_element_description", cldsDictionaryItem.getDictElementDesc())
- .addValue("dict_element_type", cldsDictionaryItem.getDictElementType())
- .addValue("modified_by", userId)
+ .addValue("dict_element_type", cldsDictionaryItem.getDictElementType()).addValue("modified_by", userId)
.addValue("dict_element_id", dictionaryElementId);
jdbcTemplateObject.update(dictionarySql, namedParameters);
cldsDictionaryItem.setUpdatedBy(userId);
@@ -695,31 +699,32 @@ public class CldsDao {
String dictionarySql = "SELECT de.dict_element_id, de.dictionary_id, de.dict_element_name, de.dict_element_short_name, de.dict_element_description, de.dict_element_type, de.created_by, de.modified_by, de.timestamp "
+ "FROM dictionary_elements de, dictionary d WHERE de.dictionary_id = d.dictionary_id ";
if (dictionaryId != null) {
- dictionarySql+=" AND d.dictionary_id = :dictionaryId";
+ dictionarySql += " AND d.dictionary_id = :dictionaryId";
namedParameters.addValue("dictionaryId", dictionaryId);
}
- if (dictElementShortName!=null) {
- dictionarySql+=" AND de.dict_element_short_name = :dictElementShortName";
+ if (dictElementShortName != null) {
+ dictionarySql += " AND de.dict_element_short_name = :dictElementShortName";
namedParameters.addValue("dictElementShortName", dictElementShortName);
}
- if (dictionaryName!=null) {
- dictionarySql+=" AND dictionary_name = :dictionaryName";
+ if (dictionaryName != null) {
+ dictionarySql += " AND dictionary_name = :dictionaryName";
namedParameters.addValue("dictionaryName", dictionaryName);
}
- Optional.ofNullable(jdbcTemplateObject.queryForList(dictionarySql,namedParameters)).orElse(Collections.emptyList()).forEach(row -> {
- CldsDictionaryItem dictionaryItem = new CldsDictionaryItem();
- dictionaryItem.setDictElementId((String) row.get("dict_element_id"));
- dictionaryItem.setDictionaryId((String) row.get("dictionary_id"));
- dictionaryItem.setDictElementName((String) row.get("dict_element_name"));
- dictionaryItem.setDictElementShortName((String) row.get("dict_element_short_name"));
- dictionaryItem.setDictElementDesc((String) row.get("dict_element_description"));
- dictionaryItem.setDictElementType((String) row.get("dict_element_type"));
- dictionaryItem.setCreatedBy((String) row.get("created_by"));
- dictionaryItem.setUpdatedBy((String) row.get("modified_by"));
- dictionaryItem.setLastUpdatedDate(sdf.format(row.get("timestamp")));
- dictionaryItems.add(dictionaryItem);
- });
+ Optional.ofNullable(jdbcTemplateObject.queryForList(dictionarySql, namedParameters))
+ .orElse(Collections.emptyList()).forEach(row -> {
+ CldsDictionaryItem dictionaryItem = new CldsDictionaryItem();
+ dictionaryItem.setDictElementId((String) row.get("dict_element_id"));
+ dictionaryItem.setDictionaryId((String) row.get("dictionary_id"));
+ dictionaryItem.setDictElementName((String) row.get("dict_element_name"));
+ dictionaryItem.setDictElementShortName((String) row.get("dict_element_short_name"));
+ dictionaryItem.setDictElementDesc((String) row.get("dict_element_description"));
+ dictionaryItem.setDictElementType((String) row.get("dict_element_type"));
+ dictionaryItem.setCreatedBy((String) row.get("created_by"));
+ dictionaryItem.setUpdatedBy((String) row.get("modified_by"));
+ dictionaryItem.setLastUpdatedDate(sdf.format(row.get("timestamp")));
+ dictionaryItems.add(dictionaryItem);
+ });
return dictionaryItems;
}
}
diff --git a/src/main/java/org/onap/clamp/clds/model/CldsEvent.java b/src/main/java/org/onap/clamp/clds/model/CldsEvent.java
index 8d3807b76..90dc996cc 100644
--- a/src/main/java/org/onap/clamp/clds/model/CldsEvent.java
+++ b/src/main/java/org/onap/clamp/clds/model/CldsEvent.java
@@ -18,7 +18,7 @@
* limitations under the License.
* ============LICENSE_END============================================
* ===================================================================
- *
+ *
*/
package org.onap.clamp.clds.model;
@@ -31,7 +31,6 @@ import org.onap.clamp.clds.dao.CldsDao;
public class CldsEvent {
public static final String ACTION_TEST = "TEST";
public static final String ACTION_CREATE = "CREATE";
- public static final String ACTION_MODIFY = "MODIFY";
public static final String ACTION_SUBMIT = "SUBMIT";
// an update before model is active
public static final String ACTION_RESUBMIT = "RESUBMIT";
@@ -80,15 +79,15 @@ public class CldsEvent {
* @return
*/
public static CldsEvent insEvent(CldsDao cldsDao, String controlName, String userid, String actionCd,
- String actionStateCd, String processInstanceId) {
+ String actionStateCd, String processInstanceId) {
CldsModel model = CldsModel.createUsingControlName(controlName);
return insEvent(cldsDao, model, userid, actionCd, actionStateCd, processInstanceId);
}
/**
- * Insert event using controlNameUuid to find the model. This method meant
- * for processing events from dcae.
- *
+ * Insert event using controlNameUuid to find the model. This method meant for
+ * processing events from dcae.
+ *
* @param cldsDao
* @param model
* @param userId
@@ -98,7 +97,7 @@ public class CldsEvent {
* @return
*/
public static CldsEvent insEvent(CldsDao cldsDao, CldsModel model, String userId, String actionCd,
- String actionStateCd, String processInstanceId) {
+ String actionStateCd, String processInstanceId) {
CldsEvent event = new CldsEvent();
event.setUserid(userId);
event.setActionCd(actionCd);
@@ -109,9 +108,9 @@ public class CldsEvent {
}
/**
- * Check if actionCd is equal to the supplied checkActionCd checkActionCd
- * should not be null.
- *
+ * Check if actionCd is equal to the supplied checkActionCd checkActionCd should
+ * not be null.
+ *
* @param checkActionCd
* @return
*/
@@ -123,9 +122,9 @@ public class CldsEvent {
}
/**
- * Check if actionCd and actionStateCd are equal to the supplied
- * checkActionCd and checkActionStateCd. Treat checkActionStateCd == null as
- * a wildcard checkActionCd should not be null.
+ * Check if actionCd and actionStateCd are equal to the supplied checkActionCd
+ * and checkActionStateCd. Treat checkActionStateCd == null as a wildcard
+ * checkActionCd should not be null.
*
* @param checkActionCd
* @param checkActionStateCd
@@ -163,7 +162,7 @@ public class CldsEvent {
/**
* @param actionCd
- * the actionCd to set
+ * the actionCd to set
*/
public void setActionCd(String actionCd) {
this.actionCd = actionCd;
@@ -178,7 +177,7 @@ public class CldsEvent {
/**
* @param actionStateCd
- * the actionStateCd to set
+ * the actionStateCd to set
*/
public void setActionStateCd(String actionStateCd) {
this.actionStateCd = actionStateCd;
@@ -193,7 +192,7 @@ public class CldsEvent {
/**
* @param processInstanceId
- * the processInstanceId to set
+ * the processInstanceId to set
*/
public void setProcessInstanceId(String processInstanceId) {
this.processInstanceId = processInstanceId;
@@ -208,7 +207,7 @@ public class CldsEvent {
/**
* @param userid
- * the userid to set
+ * the userid to set
*/
public void setUserid(String userid) {
this.userid = userid;
diff --git a/src/main/java/org/onap/clamp/clds/model/CldsModel.java b/src/main/java/org/onap/clamp/clds/model/CldsModel.java
index 1d1456256..14fe44390 100644
--- a/src/main/java/org/onap/clamp/clds/model/CldsModel.java
+++ b/src/main/java/org/onap/clamp/clds/model/CldsModel.java
@@ -75,6 +75,7 @@ public class CldsModel {
private String typeId;
private String typeName;
private String deploymentId;
+ private String deploymentStatusUrl;
/**
* Construct empty model.
@@ -97,7 +98,7 @@ public class CldsModel {
return model;
}
- public boolean canInventoryCall() {
+ 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)
@@ -120,31 +121,27 @@ public class CldsModel {
/**
* set the status in the model
*/
- private void determineStatus() {
+ public 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)) {
+ } else if (event.isActionAndStateCd(CldsEvent.ACTION_CREATE, 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)) {
+ || event.isActionAndStateCd(CldsEvent.ACTION_UNDEPLOY, CldsEvent.ACTION_STATE_COMPLETED)
+ || event.isActionAndStateCd(CldsEvent.ACTION_SUBMIT, CldsEvent.ACTION_STATE_COMPLETED)
+ || event.isActionAndStateCd(CldsEvent.ACTION_RESUBMIT, CldsEvent.ACTION_STATE_COMPLETED)) {
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)
+ } else if (event.isActionAndStateCd(CldsEvent.ACTION_DEPLOY, CldsEvent.ACTION_STATE_COMPLETED)
+ || event.isActionAndStateCd(CldsEvent.ACTION_RESTART, CldsEvent.ACTION_STATE_COMPLETED)
+ || event.isActionAndStateCd(CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_STATE_COMPLETED)
|| event.isActionAndStateCd(CldsEvent.ACTION_SUBMITPOLICY, CldsEvent.ACTION_STATE_ANY)) {
status = STATUS_ACTIVE;
- } else if (event.isActionAndStateCd(CldsEvent.ACTION_STOP, CldsEvent.ACTION_STATE_ANY)) {
+ } else if (event.isActionAndStateCd(CldsEvent.ACTION_STOP, CldsEvent.ACTION_STATE_COMPLETED)) {
status = STATUS_STOPPED;
}
}
@@ -176,39 +173,23 @@ public class CldsModel {
}
/**
- * 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.
+ * 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() {
+ public void determinePermittedActionCd() {
String actionCd = getCurrentActionCd();
switch (actionCd) {
case CldsEvent.ACTION_CREATE:
- permittedActionCd = Arrays.asList(CldsEvent.ACTION_SUBMIT, CldsEvent.ACTION_TEST,
- CldsEvent.ACTION_DELETE);
+ 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);
@@ -217,6 +198,12 @@ public class CldsModel {
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_UNDEPLOY:
permittedActionCd = Arrays.asList(CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_DEPLOY,
CldsEvent.ACTION_RESUBMIT, CldsEvent.ACTION_DELETE);
@@ -226,13 +213,13 @@ public class CldsModel {
}
break;
case CldsEvent.ACTION_DEPLOY:
- permittedActionCd = Arrays.asList(CldsEvent.ACTION_UNDEPLOY,
- CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_STOP);
+ permittedActionCd = Arrays.asList(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);
+ 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);
}
@@ -283,30 +270,30 @@ public class CldsModel {
}
/**
- * 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.
*/
public void validateAction(String requestedActionCd) {
determinePermittedActionCd();
if (!permittedActionCd.contains(requestedActionCd)) {
throw new IllegalArgumentException(
- "Invalid requestedActionCd: " + requestedActionCd + ". Given current actionCd: "
- + getCurrentActionCd() + ", the permittedActionCd: " + permittedActionCd);
+ "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.
+ * 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) {
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);
+ + ", less than the minimum of: " + UUID_LENGTH);
}
CldsModel model = new CldsModel();
model.setControlNamePrefix(fullControlName.substring(0, fullControlName.length() - UUID_LENGTH));
@@ -329,9 +316,9 @@ public class CldsModel {
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)))) {
+ 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);
}
@@ -348,7 +335,7 @@ public class CldsModel {
/**
* @param name
- * the name to set
+ * the name to set
*/
public void setName(String name) {
this.name = name;
@@ -382,7 +369,7 @@ public class CldsModel {
/**
* @param controlNamePrefix
- * the controlNamePrefix to set
+ * the controlNamePrefix to set
*/
public void setControlNamePrefix(String controlNamePrefix) {
this.controlNamePrefix = controlNamePrefix;
@@ -397,7 +384,7 @@ public class CldsModel {
/**
* @param controlNameUuid
- * the controlNameUuid to set
+ * the controlNameUuid to set
*/
public void setControlNameUuid(String controlNameUuid) {
this.controlNameUuid = controlNameUuid;
@@ -412,7 +399,7 @@ public class CldsModel {
/**
* @param propText
- * the propText to set
+ * the propText to set
*/
public void setPropText(String propText) {
this.propText = propText;
@@ -443,7 +430,7 @@ public class CldsModel {
/**
* @param event
- * the event to set
+ * the event to set
*/
public void setEvent(CldsEvent event) {
this.event = event;
@@ -458,7 +445,7 @@ public class CldsModel {
/**
* @param status
- * the status to set
+ * the status to set
*/
public void setStatus(String status) {
this.status = status;
@@ -530,4 +517,12 @@ public class CldsModel {
public void setErrorMessageForUi(String errorMessageForUi) {
this.errorMessageForUi = errorMessageForUi;
}
+
+ public String getDeploymentStatusUrl() {
+ return deploymentStatusUrl;
+ }
+
+ public void setDeploymentStatusUrl(String deploymentStatusUrl) {
+ this.deploymentStatusUrl = deploymentStatusUrl;
+ }
}
diff --git a/src/main/java/org/onap/clamp/clds/model/DcaeEvent.java b/src/main/java/org/onap/clamp/clds/model/DcaeEvent.java
index d57371193..7c76af2e1 100644
--- a/src/main/java/org/onap/clamp/clds/model/DcaeEvent.java
+++ b/src/main/java/org/onap/clamp/clds/model/DcaeEvent.java
@@ -18,7 +18,7 @@
* limitations under the License.
* ============LICENSE_END============================================
* ===================================================================
- *
+ *
*/
package org.onap.clamp.clds.model;
@@ -32,16 +32,16 @@ import javax.ws.rs.BadRequestException;
*/
public class DcaeEvent {
// this is an event we (clds) sends to dcae
- public static final String EVENT_CREATED = "created";
- public static final String EVENT_DISTRIBUTION = "distribute";
- public static final String EVENT_DEPLOYMENT = "deployment";
- public static final String EVENT_UNDEPLOYMENT = "undeployment";
- public static final String ARTIFACT_NAME_SUFFIX = ".yml";
-
- private String event;
- private String serviceUUID;
- private String resourceUUID;
- private String artifactName; // controlName.yml
+ public static final String EVENT_CREATED = "created";
+ public static final String EVENT_DISTRIBUTION = "distribute";
+ public static final String EVENT_DEPLOYMENT = "deployment";
+ public static final String EVENT_UNDEPLOYMENT = "undeployment";
+ public static final String ARTIFACT_NAME_SUFFIX = ".yml";
+
+ private String event;
+ private String serviceUUID;
+ private String resourceUUID;
+ private String artifactName; // controlName.yml
private List<CldsModelInstance> instances;
/**
@@ -56,7 +56,7 @@ public class DcaeEvent {
return CldsEvent.ACTION_CREATE;
} else if (event.equalsIgnoreCase(EVENT_DISTRIBUTION)) {
return CldsEvent.ACTION_DISTRIBUTE;
- } else if (event.equalsIgnoreCase(EVENT_DEPLOYMENT) && (instances == null || instances.size() == 0)) {
+ } else if (event.equalsIgnoreCase(EVENT_DEPLOYMENT) && (instances == null || instances.isEmpty())) {
return CldsEvent.ACTION_DEPLOY;
} else if (event.equalsIgnoreCase(EVENT_DEPLOYMENT)) {
return CldsEvent.ACTION_DEPLOY;
@@ -83,7 +83,7 @@ public class DcaeEvent {
return artifactName.substring(0, artifactName.length() - ARTIFACT_NAME_SUFFIX.length());
} else {
throw new BadRequestException("artifactName value not valid (expecting it to end with "
- + ARTIFACT_NAME_SUFFIX + "): " + artifactName);
+ + ARTIFACT_NAME_SUFFIX + "): " + artifactName);
}
}
@@ -96,7 +96,7 @@ public class DcaeEvent {
/**
* @param event
- * the event to set
+ * the event to set
*/
public void setEvent(String event) {
this.event = event;
@@ -111,7 +111,7 @@ public class DcaeEvent {
/**
* @param serviceUUID
- * the serviceUUID to set
+ * the serviceUUID to set
*/
public void setServiceUUID(String serviceUUID) {
this.serviceUUID = serviceUUID;
@@ -126,7 +126,7 @@ public class DcaeEvent {
/**
* @param resourceUUID
- * the resourceUUID to set
+ * the resourceUUID to set
*/
public void setResourceUUID(String resourceUUID) {
this.resourceUUID = resourceUUID;
@@ -141,7 +141,7 @@ public class DcaeEvent {
/**
* @param artifactName
- * the artifactName to set
+ * the artifactName to set
*/
public void setArtifactName(String artifactName) {
this.artifactName = artifactName;
@@ -154,5 +154,4 @@ public class DcaeEvent {
public void setInstances(List<CldsModelInstance> instances) {
this.instances = instances;
}
-
}
diff --git a/src/main/java/org/onap/clamp/clds/sdc/controller/installer/CsarInstallerImpl.java b/src/main/java/org/onap/clamp/clds/sdc/controller/installer/CsarInstallerImpl.java
index 56f9ee67a..36947aa99 100644
--- a/src/main/java/org/onap/clamp/clds/sdc/controller/installer/CsarInstallerImpl.java
+++ b/src/main/java/org/onap/clamp/clds/sdc/controller/installer/CsarInstallerImpl.java
@@ -93,8 +93,8 @@ public class CsarInstallerImpl implements CsarInstaller {
@PostConstruct
public void loadConfiguration() throws IOException {
BlueprintParserMappingConfiguration
- .createFromJson(appContext.getResource(blueprintMappingFile).getInputStream()).stream()
- .forEach(e -> bpmnMapping.put(e.getBlueprintKey(), e.getFiles()));
+ .createFromJson(appContext.getResource(blueprintMappingFile).getInputStream()).stream()
+ .forEach(e -> bpmnMapping.put(e.getBlueprintKey(), e.getFiles()));
}
@Override
@@ -102,8 +102,7 @@ public class CsarInstallerImpl implements CsarInstaller {
boolean alreadyInstalled = true;
for (Entry<String, BlueprintArtifact> blueprint : csar.getMapOfBlueprints().entrySet()) {
alreadyInstalled = alreadyInstalled
- && (CldsModel.retrieve(cldsDao, buildModelName(csar, blueprint.getKey()), true).getId() != null)
- ? true
+ && (CldsModel.retrieve(cldsDao, buildModelName(csar, blueprint.getKey()), true).getId() != null) ? true
: false;
}
return alreadyInstalled;
@@ -120,8 +119,8 @@ public class CsarInstallerImpl implements CsarInstaller {
policyScopePrefix = MODEL_NAME_PREFIX;
}
return policyScopePrefix + csar.getSdcCsarHelper().getServiceMetadata().getValue("name") + "_v"
- + csar.getSdcNotification().getServiceVersion().replace('.', '_') + "_"
- + resourceInstanceName.replaceAll(" ", "");
+ + csar.getSdcNotification().getServiceVersion().replace('.', '_') + "_"
+ + resourceInstanceName.replaceAll(" ", "");
}
@Override
@@ -218,9 +217,8 @@ public class CsarInstallerImpl implements CsarInstaller {
}
/**
- * This call must be done when deploying the SDC notification as this call
- * get the latest version of the artifact (version can be specified to DCAE
- * call)
+ * This call must be done when deploying the SDC notification as this call get
+ * the latest version of the artifact (version can be specified to DCAE call)
*
* @param blueprintArtifact
* @return The DcaeInventoryResponse object containing the dcae values
@@ -239,23 +237,22 @@ public class CsarInstallerImpl implements CsarInstaller {
BlueprintParserFilesConfiguration configFiles) throws IOException, SdcArtifactInstallerException {
CldsTemplate template = new CldsTemplate();
template.setBpmnId("Sdc-Generated");
- template.setBpmnText(
- IOUtils.toString(appContext.getResource(configFiles.getBpmnXmlFilePath()).getInputStream()));
+ template
+ .setBpmnText(IOUtils.toString(appContext.getResource(configFiles.getBpmnXmlFilePath()).getInputStream()));
template.setPropText(
"{\"global\":[{\"name\":\"service\",\"value\":[\"" + blueprintArtifact.getDcaeBlueprint() + "\"]}]}");
- template.setImageText(
- IOUtils.toString(appContext.getResource(configFiles.getSvgXmlFilePath()).getInputStream()));
+ template
+ .setImageText(IOUtils.toString(appContext.getResource(configFiles.getSvgXmlFilePath()).getInputStream()));
template.setName(TEMPLATE_NAME_PREFIX
+ buildModelName(csar, blueprintArtifact.getResourceAttached().getResourceInstanceName()));
template.save(cldsDao, null);
logger.info("Fake Clds Template created for blueprint " + blueprintArtifact.getBlueprintArtifactName()
- + " with name " + template.getName());
+ + " with name " + template.getName());
return template;
}
private CldsModel createFakeCldsModel(CsarHandler csar, BlueprintArtifact blueprintArtifact,
- CldsTemplate cldsTemplate, DcaeInventoryResponse dcaeInventoryResponse)
- throws SdcArtifactInstallerException {
+ CldsTemplate cldsTemplate, DcaeInventoryResponse dcaeInventoryResponse) throws SdcArtifactInstallerException {
try {
CldsModel cldsModel = new CldsModel();
cldsModel.setName(buildModelName(csar, blueprintArtifact.getResourceAttached().getResourceInstanceName()));
@@ -274,7 +271,7 @@ public class CsarInstallerImpl implements CsarInstaller {
cldsModel = cldsModel.save(cldsDao, null);
cldsModel = setModelPropText(cldsModel, blueprintArtifact, cldsTemplate);
logger.info("Fake Clds Model created for blueprint " + blueprintArtifact.getBlueprintArtifactName()
- + " with name " + cldsModel.getName());
+ + " with name " + cldsModel.getName());
return cldsModel;
} catch (TransformerException e) {
throw new SdcArtifactInstallerException("TransformerException when decoding the BpmnText", e);
diff --git a/src/main/java/org/onap/clamp/clds/service/CldsService.java b/src/main/java/org/onap/clamp/clds/service/CldsService.java
index 2342e89c0..8e7785d6a 100644
--- a/src/main/java/org/onap/clamp/clds/service/CldsService.java
+++ b/src/main/java/org/onap/clamp/clds/service/CldsService.java
@@ -248,15 +248,25 @@ public class CldsService extends SecureServiceBase {
logger.debug("GET model for modelName={}", modelName);
CldsModel cldsModel = CldsModel.retrieve(cldsDao, modelName, false);
isAuthorizedForVf(cldsModel);
+ // Try an update for DCAE status
// Checking condition whether our CLDS model can call Inventory Method
- if (cldsModel.canInventoryCall()) {
- try {
- // Method to call dcae inventory and invoke insert event method
+ try {
+ // Method to call dcae inventory and invoke insert event method
+ if (cldsModel.canDcaeInventoryCall()
+ && !cldsModel.getTemplateName().startsWith(CsarInstallerImpl.TEMPLATE_NAME_PREFIX)) {
dcaeInventoryServices.setEventInventory(cldsModel, getUserId());
- } catch (Exception e) {
- LoggingUtils.setErrorContext("900", "Set event inventory error");
- logger.error("getModel set event Inventory error:" + e);
}
+ // This is a blocking call
+ if (cldsModel.getEvent().isActionCd(CldsEvent.ACTION_DEPLOY)
+ && !CldsModel.STATUS_ACTIVE.equals(cldsModel.getStatus()) && cldsModel.getDeploymentId() != null
+ && cldsModel.getDeploymentStatusUrl() != null) {
+ checkDcaeDeploymentStatus(cldsModel, CldsEvent.ACTION_DEPLOY, false);
+ // refresh because new event may have been added
+ cldsModel = CldsModel.retrieve(cldsDao, modelName, false);
+ }
+ } catch (Exception e) {
+ LoggingUtils.setErrorContext("900", "Set event inventory error");
+ logger.error("getModel set event Inventory error:" + e);
}
// audit log
LoggingUtils.setTimeContext(startTime, new Date());
@@ -279,11 +289,9 @@ public class CldsService extends SecureServiceBase {
logger.info("PUT bpmnText={}", cldsModel.getBpmnText());
logger.info("PUT propText={}", cldsModel.getPropText());
logger.info("PUT imageText={}", cldsModel.getImageText());
- cldsModel.setName(modelName);
fillInCldsModel(cldsModel);
- updateAndInsertNewEvent(cldsModel.getName(), cldsModel.getControlNamePrefix(), cldsModel.getEvent(),
- CldsEvent.ACTION_MODIFY);
cldsModel.save(cldsDao, getUserId());
+
// audit log
LoggingUtils.setTimeContext(startTime, new Date());
auditLogger.info("PUT model completed");
@@ -344,10 +352,10 @@ public class CldsService extends SecureServiceBase {
throws TransformerException, ParseException {
util.entering(request, "CldsService: Process model action");
Date startTime = new Date();
- CldsModel retrievedModel = null;
String errorMessage = "";
+ String actionCd = "";
try {
- String actionCd = action.toUpperCase();
+ actionCd = action.toUpperCase();
SecureServicePermission permisionManage = SecureServicePermission.create(cldsPermissionTypeClManage,
cldsPermissionInstance, actionCd);
isAuthorized(permisionManage);
@@ -362,9 +370,9 @@ public class CldsService extends SecureServiceBase {
logger.info("PUT getTypeId={}", model.getTypeId());
logger.info("PUT deploymentId={}", model.getDeploymentId());
this.fillInCldsModel(model);
- // save model to db
- updateAndInsertNewEvent(modelName, model.getControlNamePrefix(), model.getEvent(), CldsEvent.ACTION_MODIFY);
+ // save model to db just in case
model.save(cldsDao, getUserId());
+
// get vars and format if necessary
String prop = model.getPropText();
String bpmn = model.getBpmnText();
@@ -388,54 +396,32 @@ public class CldsService extends SecureServiceBase {
logger.info("Starting Camel flow on request, result is: ", result);
} catch (SdcCommunicationException | PolicyClientException | BadRequestException e) {
logger.error("Exception occured during invoking Camel process", e);
- errorMessage=e.getMessage();
- }
- if (actionCd.equalsIgnoreCase(CldsEvent.ACTION_DELETE)) {
- util.exiting(HttpStatus.OK.toString(), "Successful", Level.INFO,
- ONAPLogConstants.ResponseStatus.COMPLETED);
- return new ResponseEntity<>("", HttpStatus.OK);
- } else {
- retrievedModel = CldsModel.retrieve(cldsDao, modelName, false);
- }
- if (!isTest && errorMessage.isEmpty()
- && (actionCd.equalsIgnoreCase(CldsEvent.ACTION_SUBMIT)
- || actionCd.equalsIgnoreCase(CldsEvent.ACTION_RESUBMIT)
- || actionCd.equalsIgnoreCase(CldsEvent.ACTION_SUBMITDCAE))) {
- if (retrievedModel.getTemplateName().startsWith(CsarInstallerImpl.TEMPLATE_NAME_PREFIX)) {
- // SDC artifact case
- logger.info("Skipping DCAE inventory call as closed loop has been created from SDC notification");
- DcaeEvent dcaeEvent = new DcaeEvent();
- dcaeEvent.setArtifactName(retrievedModel.getControlName() + ".yml");
- dcaeEvent.setEvent(DcaeEvent.EVENT_DISTRIBUTION);
- CldsEvent.insEvent(cldsDao, dcaeEvent.getControlName(), userId, dcaeEvent.getCldsActionCd(),
- CldsEvent.ACTION_STATE_RECEIVED, null);
- } else {
- // This should be done only when the call to DCAE
- // has not yet been done. When CL comes from SDC
- // this is not required as the DCAE inventory call is done
- // during the CL deployment.
- dcaeInventoryServices.setEventInventory(retrievedModel, getUserId());
- }
- retrievedModel.save(cldsDao, getUserId());
+ errorMessage = e.getMessage();
}
// audit log
LoggingUtils.setTimeContext(startTime, new Date());
auditLogger.info("Process model action completed");
-
} catch (Exception e) {
logger.error("Exception occured during putModelAndProcessAction", e);
- errorMessage=e.getMessage();
+ errorMessage = e.getMessage();
}
+
if (!errorMessage.isEmpty()) {
- if (retrievedModel != null) {
- retrievedModel.setErrorMessageForUi(errorMessage);
- }
+ CldsEvent.insEvent(cldsDao, model.getControlName(), getUserId(), actionCd, CldsEvent.ACTION_STATE_ERROR,
+ null);
+ // Need a refresh as new events have been inserted
+ model = CldsModel.retrieve(cldsDao, modelName, false);
+ model.setErrorMessageForUi(errorMessage);
util.exiting(HttpStatus.INTERNAL_SERVER_ERROR.toString(), "putModelAndProcessAction failed", Level.INFO,
ONAPLogConstants.ResponseStatus.ERROR);
- return new ResponseEntity<>(retrievedModel, HttpStatus.INTERNAL_SERVER_ERROR);
+ return new ResponseEntity<>(model, HttpStatus.INTERNAL_SERVER_ERROR);
+ } else {
+ // Need a refresh as new events have been inserted, could have been deleted so
+ // not blocking call
+ model = CldsModel.retrieve(cldsDao, modelName, true);
+ util.exiting(HttpStatus.OK.toString(), "Successful", Level.INFO, ONAPLogConstants.ResponseStatus.COMPLETED);
+ return new ResponseEntity<>(model, HttpStatus.OK);
}
- util.exiting(HttpStatus.OK.toString(), "Successful", Level.INFO, ONAPLogConstants.ResponseStatus.COMPLETED);
- return new ResponseEntity<>(retrievedModel, HttpStatus.OK);
}
/**
@@ -464,8 +450,8 @@ public class CldsService extends SecureServiceBase {
instanceCount = dcaeEvent.getInstances().size();
}
String msgInfo = "event=" + dcaeEvent.getEvent() + " serviceUUID=" + dcaeEvent.getServiceUUID()
- + " resourceUUID=" + dcaeEvent.getResourceUUID() + " artifactName=" + dcaeEvent.getArtifactName()
- + " instance count=" + instanceCount + " isTest=" + isTest;
+ + " resourceUUID=" + dcaeEvent.getResourceUUID() + " artifactName=" + dcaeEvent.getArtifactName()
+ + " instance count=" + instanceCount + " isTest=" + isTest;
logger.info("POST dcae event {}", msgInfo);
if (isTest) {
logger.warn("Ignorning test event from DCAE");
@@ -728,7 +714,7 @@ public class CldsService extends SecureServiceBase {
public ResponseEntity<CldsModel> deployModel(String modelName, CldsModel model) {
util.entering(request, "CldsService: Deploy model");
Date startTime = new Date();
- String errorMessage="";
+ String errorMessage = "";
try {
fillInCldsModel(model);
String bpmnJson = cldsBpmnTransformer.doXslTransformToString(model.getBpmnText());
@@ -745,37 +731,21 @@ public class CldsService extends SecureServiceBase {
if (model.getDeploymentId() != null && !model.getDeploymentId().isEmpty()) {
deploymentId = model.getDeploymentId();
} else {
- deploymentId = "closedLoop_" + UUID.randomUUID() + "_deploymentId";
+ model.setDeploymentId(deploymentId = "closedLoop_" + UUID.randomUUID() + "_deploymentId");
}
- String createNewDeploymentStatusUrl = dcaeDispatcherServices.createNewDeployment(deploymentId,
- model.getTypeId(), modelProp.getGlobal().getDeployParameters());
- String operationStatus = dcaeDispatcherServices.getOperationStatusWithRetry(createNewDeploymentStatusUrl);
- if ("succeeded".equalsIgnoreCase(operationStatus)) {
- String artifactName = model.getControlName();
- if (artifactName != null) {
- artifactName = artifactName + ".yml";
- }
- DcaeEvent dcaeEvent = new DcaeEvent();
- /* set dcae events */
- dcaeEvent.setArtifactName(artifactName);
- dcaeEvent.setEvent(DcaeEvent.EVENT_DEPLOYMENT);
- CldsEvent.insEvent(cldsDao, dcaeEvent.getControlName(), getUserId(), dcaeEvent.getCldsActionCd(),
- CldsEvent.ACTION_STATE_RECEIVED, null);
- model.setDeploymentId(deploymentId);
- model.save(cldsDao, getUserId());
- } else {
- logger.info("Deploy model (" + modelName + ") failed...Operation Status is - " + operationStatus);
- util.exiting(HttpStatus.INTERNAL_SERVER_ERROR.toString(), "DeployModel failed", Level.INFO,
- ONAPLogConstants.ResponseStatus.ERROR);
- throw new HttpClientErrorException(HttpStatus.INTERNAL_SERVER_ERROR,
- "Deploy model (" + modelName + ") failed...Operation Status is - " + operationStatus);
- }
- logger.info("Deploy model (" + modelName + ") succeeded...Deployment Id is - " + deploymentId);
+ model.setDeploymentStatusUrl(dcaeDispatcherServices.createNewDeployment(deploymentId, model.getTypeId(),
+ modelProp.getGlobal().getDeployParameters()));
+ CldsEvent.insEvent(cldsDao, model.getControlName(), getUserId(), CldsEvent.ACTION_DEPLOY,
+ CldsEvent.ACTION_STATE_INITIATED, null);
+ // This is a blocking call
+ checkDcaeDeploymentStatus(model, CldsEvent.ACTION_DEPLOY, true);
+
+ model.save(cldsDao, getUserId());
// audit log
LoggingUtils.setTimeContext(startTime, new Date());
auditLogger.info("Deploy model completed");
} catch (Exception e) {
- errorMessage=e.getMessage();
+ errorMessage = e.getMessage();
logger.error("Exception occured during deployModel", e);
}
if (!errorMessage.isEmpty()) {
@@ -783,9 +753,10 @@ public class CldsService extends SecureServiceBase {
util.exiting(HttpStatus.INTERNAL_SERVER_ERROR.toString(), "DeployModel failed", Level.INFO,
ONAPLogConstants.ResponseStatus.ERROR);
return new ResponseEntity<>(model, HttpStatus.INTERNAL_SERVER_ERROR);
+ } else {
+ util.exiting(HttpStatus.OK.toString(), "Successful", Level.INFO, ONAPLogConstants.ResponseStatus.COMPLETED);
+ return new ResponseEntity<>(model, HttpStatus.OK);
}
- util.exiting(HttpStatus.OK.toString(), "Successful", Level.INFO, ONAPLogConstants.ResponseStatus.COMPLETED);
- return new ResponseEntity<>(model, HttpStatus.OK);
}
public ResponseEntity<CldsModel> unDeployModel(String modelName, CldsModel model) {
@@ -797,30 +768,15 @@ public class CldsService extends SecureServiceBase {
cldsPermissionInstance, CldsEvent.ACTION_UNDEPLOY);
isAuthorized(permisionManage);
isAuthorizedForVf(model);
- String operationStatusUndeployUrl = dcaeDispatcherServices.deleteExistingDeployment(model.getDeploymentId(),
- model.getTypeId());
- String operationStatus = dcaeDispatcherServices.getOperationStatusWithRetry(operationStatusUndeployUrl);
- if ("succeeded".equalsIgnoreCase(operationStatus)) {
- String artifactName = model.getControlName();
- if (artifactName != null) {
- artifactName = artifactName + ".yml";
- }
- DcaeEvent dcaeEvent = new DcaeEvent();
- // set dcae events
- dcaeEvent.setArtifactName(artifactName);
- dcaeEvent.setEvent(DcaeEvent.EVENT_UNDEPLOYMENT);
- CldsEvent.insEvent(cldsDao, model.getControlName(), getUserId(), dcaeEvent.getCldsActionCd(),
- CldsEvent.ACTION_STATE_RECEIVED, null);
- model.setDeploymentId(null);
- model.save(cldsDao, getUserId());
- } else {
- logger.info("Undeploy model (" + modelName + ") failed...Operation Status is - " + operationStatus);
- util.exiting(HttpStatus.INTERNAL_SERVER_ERROR.toString(), "UndeployModel failed", Level.INFO,
- ONAPLogConstants.ResponseStatus.ERROR);
- throw new HttpClientErrorException(HttpStatus.INTERNAL_SERVER_ERROR,
- "Undeploy model (" + modelName + ") failed...Operation Status is - " + operationStatus);
- }
- logger.info("Undeploy model (" + modelName + ") succeeded.");
+ model.setDeploymentStatusUrl(
+ dcaeDispatcherServices.deleteExistingDeployment(model.getDeploymentId(), model.getTypeId()));
+ CldsEvent.insEvent(cldsDao, model.getControlName(), getUserId(), CldsEvent.ACTION_UNDEPLOY,
+ CldsEvent.ACTION_STATE_INITIATED, null);
+ // This is a blocking call
+ checkDcaeDeploymentStatus(model, CldsEvent.ACTION_UNDEPLOY, true);
+ // clean the deployment ID
+ model.setDeploymentId(null);
+ model.save(cldsDao, getUserId());
// audit log
LoggingUtils.setTimeContext(startTime, new Date());
auditLogger.info("Undeploy model completed");
@@ -833,9 +789,32 @@ public class CldsService extends SecureServiceBase {
util.exiting(HttpStatus.INTERNAL_SERVER_ERROR.toString(), "UndeployModel failed", Level.INFO,
ONAPLogConstants.ResponseStatus.ERROR);
return new ResponseEntity<>(model, HttpStatus.INTERNAL_SERVER_ERROR);
+ } else {
+ util.exiting(HttpStatus.OK.toString(), "Successful", Level.INFO, ONAPLogConstants.ResponseStatus.COMPLETED);
+ return new ResponseEntity<>(model, HttpStatus.OK);
+ }
+ }
+
+ private void checkDcaeDeploymentStatus(CldsModel model, String cldsEvent, boolean withRetry)
+ throws InterruptedException {
+ String operationStatus = withRetry
+ ? dcaeDispatcherServices.getOperationStatusWithRetry(model.getDeploymentStatusUrl())
+ : dcaeDispatcherServices.getOperationStatus(model.getDeploymentStatusUrl());
+ if ("succeeded".equalsIgnoreCase(operationStatus)) {
+ logger.info(cldsEvent + " model (" + model.getName() + ") succeeded...Deployment Id is - "
+ + model.getDeploymentId());
+ CldsEvent.insEvent(cldsDao, model.getControlName(), getUserId(), cldsEvent,
+ CldsEvent.ACTION_STATE_COMPLETED, null);
+ } else {
+ String info = "DCAE " + cldsEvent + " (" + model.getName() + ") failed...Operation Status is - "
+ + operationStatus;
+ logger.info(info);
+ CldsEvent.insEvent(cldsDao, model.getControlName(), getUserId(), cldsEvent, CldsEvent.ACTION_STATE_ERROR,
+ null);
+ util.exiting(HttpStatus.INTERNAL_SERVER_ERROR.toString(), "DCAE operation(" + cldsEvent + ") failed",
+ Level.INFO, ONAPLogConstants.ResponseStatus.ERROR);
+ throw new HttpClientErrorException(HttpStatus.INTERNAL_SERVER_ERROR, info);
}
- util.exiting(HttpStatus.OK.toString(), "Successful", Level.INFO, ONAPLogConstants.ResponseStatus.COMPLETED);
- return new ResponseEntity<>(model, HttpStatus.OK);
}
private void checkForDuplicateServiceVf(String modelName, String modelPropText) throws IOException {
@@ -853,28 +832,13 @@ public class CldsService extends SecureServiceBase {
if (!modelName.equalsIgnoreCase(cldsModelProp.getName()) && service.equalsIgnoreCase(currentService)
&& resourceVf.get(0).equalsIgnoreCase(currentVf.get(0))) {
throw new BadRequestException("Same Service/VF already exists in " + cldsModelProp.getName()
- + " model, please select different Service/VF.");
+ + " model, please select different Service/VF.");
}
}
}
}
}
- private void updateAndInsertNewEvent(String cldsModelName, String cldsControlNamePrfx, CldsEvent event,
- String newAction) {
- // If model action is in submit/resubmit/distributed and user try
- // to save then we are changing action back to create.
- if (event != null && (CldsEvent.ACTION_SUBMIT.equalsIgnoreCase(event.getActionCd())
- || CldsEvent.ACTION_RESUBMIT.equalsIgnoreCase(event.getActionCd())
- || CldsEvent.ACTION_DISTRIBUTE.equalsIgnoreCase(event.getActionCd()))) {
- CldsEvent newEvent = new CldsEvent();
- newEvent.setUserid(getUserId());
- newEvent.setActionCd(newAction);
- newEvent.setActionStateCd(CldsEvent.ACTION_STATE_COMPLETED);
- cldsDao.insEvent(cldsModelName, cldsControlNamePrfx, null, newEvent);
- }
- }
-
// Created for the integration test
public void setLoggingUtil(LoggingUtils utilP) {
util = utilP;
diff --git a/src/main/resources/clds/camel/routes/flexible-flow.xml b/src/main/resources/clds/camel/routes/flexible-flow.xml
index e84c68614..2103b4acf 100644
--- a/src/main/resources/clds/camel/routes/flexible-flow.xml
+++ b/src/main/resources/clds/camel/routes/flexible-flow.xml
@@ -4,6 +4,7 @@
<choice>
<when>
<simple> ${exchangeProperty.actionCd} == 'SUBMIT' || ${exchangeProperty.actionCd} == 'RESUBMIT'</simple>
+ <to uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'INITIATED')" />
<to uri="bean:org.onap.clamp.clds.client.TcaPolicyDelegate" />
<to uri="bean:org.onap.clamp.clds.client.HolmesPolicyDelegate" />
<delay>
@@ -11,10 +12,11 @@
</delay>
<to uri="bean:org.onap.clamp.clds.client.OperationalPolicyDelegate" />
<to uri="bean:org.onap.clamp.clds.client.GuardPolicyDelegate" />
- <to uri="bean:org.onap.clamp.clds.client.CldsEventDelegate" />
+ <to uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'COMPLETED')" />
</when>
<when>
<simple> ${exchangeProperty.actionCd} == 'DELETE'</simple>
+ <to uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'INITIATED')" />
<to uri="bean:org.onap.clamp.clds.client.TcaPolicyDeleteDelegate" />
<to uri="bean:org.onap.clamp.clds.client.HolmesPolicyDeleteDelegate" />
<delay>
@@ -24,10 +26,11 @@
uri="bean:org.onap.clamp.clds.client.OperationalPolicyDeleteDelegate" />
<to uri="bean:org.onap.clamp.clds.client.GuardPolicyDeleteDelegate" />
<to uri="bean:org.onap.clamp.clds.client.ModelDeleteDelegate" />
- <to uri="bean:org.onap.clamp.clds.client.CldsEventDelegate" />
+ <to uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'COMPLETED')" />
</when>
<when>
<simple> ${exchangeProperty.actionCd} == 'UPDATE'</simple>
+ <to uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'INITIATED')" />
<to uri="bean:org.onap.clamp.clds.client.TcaPolicyDelegate" />
<to uri="bean:org.onap.clamp.clds.client.HolmesPolicyDelegate" />
<delay>
@@ -35,20 +38,22 @@
</delay>
<to uri="bean:org.onap.clamp.clds.client.OperationalPolicyDelegate" />
<to uri="bean:org.onap.clamp.clds.client.GuardPolicyDelegate" />
- <to uri="bean:org.onap.clamp.clds.client.CldsEventDelegate" />
+ <to uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'COMPLETED')" />
</when>
<when>
<simple> ${exchangeProperty.actionCd} == 'STOP'</simple>
+ <to uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'INITIATED')" />
<to
uri="bean:org.onap.clamp.clds.client.OperationalPolicyDeleteDelegate" />
<to uri="bean:org.onap.clamp.clds.client.GuardPolicyDeleteDelegate" />
- <to uri="bean:org.onap.clamp.clds.client.CldsEventDelegate" />
+ <to uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'COMPLETED')" />
</when>
<when>
<simple> ${exchangeProperty.actionCd} == 'RESTART'</simple>
+ <to uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'INITIATED')" />
<to uri="bean:org.onap.clamp.clds.client.GuardPolicyDelegate" />
<to uri="bean:org.onap.clamp.clds.client.OperationalPolicyDelegate" />
- <to uri="bean:org.onap.clamp.clds.client.CldsEventDelegate" />
+ <to uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'COMPLETED')" />
</when>
</choice>
</route>
diff --git a/src/test/java/org/onap/clamp/clds/model/CldsModelTest.java b/src/test/java/org/onap/clamp/clds/model/CldsModelTest.java
index 6ebdc4bbf..0a6018549 100644
--- a/src/test/java/org/onap/clamp/clds/model/CldsModelTest.java
+++ b/src/test/java/org/onap/clamp/clds/model/CldsModelTest.java
@@ -18,7 +18,7 @@
* limitations under the License.
* ============LICENSE_END============================================
* ===================================================================
- *
+ *
*/
package org.onap.clamp.clds.model;
@@ -78,14 +78,14 @@ public class CldsModelTest {
cldsModel.getEvent().setActionCd(CldsEvent.ACTION_SUBMIT);
cldsModel.validateAction(CldsEvent.ACTION_RESUBMIT);
try {
- cldsModel.validateAction(CldsEvent.ACTION_DEPLOY);
+ cldsModel.validateAction(CldsEvent.ACTION_RESTART);
fail("Exception should have been sent");
} catch (IllegalArgumentException e) {
logger.error("Exception caught IllegalArgumentException as expected", e);
}
cldsModel.getEvent().setActionCd(CldsEvent.ACTION_RESUBMIT);
cldsModel.validateAction(CldsEvent.ACTION_RESUBMIT);
- cldsModel.validateAction(CldsEvent.ACTION_DEPLOY);
+ cldsModel.validateAction(CldsEvent.ACTION_RESTART);
fail("Exception should have been sent");
}