Skip to content

Commit

Permalink
Merge pull request Sunbird-Knowlg#780 from krgauraw/sl-4.6.0_temp
Browse files Browse the repository at this point in the history
Merge Branch sl-4.6.0 to sl-4.7.0
  • Loading branch information
AmiableAnil authored Jan 11, 2022
2 parents afa533d + 44e8aaf commit aa6b680
Show file tree
Hide file tree
Showing 17 changed files with 669 additions and 55 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,8 @@ class QuestionSetActor @Inject()(implicit oec: OntologyEngineContext) extends Ba
request.getRequest.put("mode", "edit")
AssessmentManager.getValidatedNodeForReview(request, "ERR_QUESTION_SET_REVIEW").flatMap(node => {
AssessmentManager.getQuestionSetHierarchy(request, node).flatMap(hierarchyString => {
AssessmentManager.validateQuestionSetHierarchy(hierarchyString.asInstanceOf[String])
val (updatedHierarchy, nodeIds) = AssessmentManager.updateHierarchy(hierarchyString.asInstanceOf[String], "Review")
AssessmentManager.validateQuestionSetHierarchy(hierarchyString.asInstanceOf[String], node.getMetadata.getOrDefault("createdBy", "").asInstanceOf[String])
val (updatedHierarchy, nodeIds) = AssessmentManager.updateHierarchy(hierarchyString.asInstanceOf[String], "Review", node.getMetadata.getOrDefault("createdBy", "").asInstanceOf[String])
val updateReq = new Request(request)
val date = DateUtils.formatCurrentDate
updateReq.putAll(Map("identifiers" -> nodeIds, "metadata" -> Map("status" -> "Review", "prevStatus" -> node.getMetadata.get("status"), "lastStatusChangedOn" -> date, "lastUpdatedOn" -> date).asJava).asJava)
Expand All @@ -68,7 +68,7 @@ class QuestionSetActor @Inject()(implicit oec: OntologyEngineContext) extends Ba
request.getRequest.put("identifier", request.getContext.get("identifier"))
AssessmentManager.getValidatedNodeForPublish(request, "ERR_QUESTION_SET_PUBLISH").flatMap(node => {
AssessmentManager.getQuestionSetHierarchy(request, node).map(hierarchyString => {
AssessmentManager.validateQuestionSetHierarchy(hierarchyString.asInstanceOf[String])
AssessmentManager.validateQuestionSetHierarchy(hierarchyString.asInstanceOf[String], node.getMetadata.getOrDefault("createdBy", "").asInstanceOf[String])
AssessmentManager.pushInstructionEvent(node.getIdentifier, node)
ResponseHandler.OK.putAll(Map[String, AnyRef]("identifier" -> node.getIdentifier.replace(".img", ""), "message" -> "Question is successfully sent for Publish").asJava)
})
Expand All @@ -93,8 +93,8 @@ class QuestionSetActor @Inject()(implicit oec: OntologyEngineContext) extends Ba
request.getRequest.put("mode", "edit")
AssessmentManager.getValidateNodeForReject(request, "ERR_QUESTION_SET_REJECT").flatMap(node => {
AssessmentManager.getQuestionSetHierarchy(request, node).flatMap(hierarchyString => {
AssessmentManager.validateQuestionSetHierarchy(hierarchyString.asInstanceOf[String])
val (updatedHierarchy, nodeIds) = AssessmentManager.updateHierarchy(hierarchyString.asInstanceOf[String], "Draft")
AssessmentManager.validateQuestionSetHierarchy(hierarchyString.asInstanceOf[String], node.getMetadata.getOrDefault("createdBy", "").asInstanceOf[String])
val (updatedHierarchy, nodeIds) = AssessmentManager.updateHierarchy(hierarchyString.asInstanceOf[String], "Draft", node.getMetadata.getOrDefault("createdBy", "").asInstanceOf[String])
val updateReq = new Request(request)
val date = DateUtils.formatCurrentDate
updateReq.putAll(Map("identifiers" -> nodeIds, "metadata" -> Map("status" -> "Draft", "prevStatus" -> node.getMetadata.get("status"), "lastStatusChangedOn" -> date, "lastUpdatedOn" -> date).asJava).asJava)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import scala.collection.JavaConverters._

object AssessmentManager {

val skipValidation: Boolean = Platform.getBoolean("assessment.skip.validation", true)
val skipValidation: Boolean = Platform.getBoolean("assessment.skip.validation", false)

def create(request: Request, errCode: String)(implicit oec: OntologyEngineContext, ec: ExecutionContext): Future[Response] = {
val visibility: String = request.getRequest.getOrDefault("visibility", "").asInstanceOf[String]
Expand Down Expand Up @@ -128,14 +128,14 @@ object AssessmentManager {
})
}

def validateQuestionSetHierarchy(hierarchyString: String)(implicit ec: ExecutionContext, oec: OntologyEngineContext): Unit = {
def validateQuestionSetHierarchy(hierarchyString: String, rootUserId: String)(implicit ec: ExecutionContext, oec: OntologyEngineContext): Unit = {
if (!skipValidation) {
val hierarchy = if (!hierarchyString.asInstanceOf[String].isEmpty) {
JsonUtils.deserialize(hierarchyString.asInstanceOf[String], classOf[java.util.Map[String, AnyRef]])
} else
new java.util.HashMap[String, AnyRef]()
val children = hierarchy.getOrDefault("children", new util.ArrayList[java.util.Map[String, AnyRef]]).asInstanceOf[util.List[java.util.Map[String, AnyRef]]]
validateChildrenRecursive(children)
validateChildrenRecursive(children, rootUserId)
}
}

Expand All @@ -152,12 +152,13 @@ object AssessmentManager {
})
}

private def validateChildrenRecursive(children: util.List[util.Map[String, AnyRef]]): Unit = {
private def validateChildrenRecursive(children: util.List[util.Map[String, AnyRef]], rootUserId: String): Unit = {
children.toList.foreach(content => {
if (!StringUtils.equalsAnyIgnoreCase(content.getOrDefault("visibility", "").asInstanceOf[String], "Parent")
if ((StringUtils.equalsAnyIgnoreCase(content.getOrDefault("visibility", "").asInstanceOf[String], "Default")
&& !StringUtils.equals(rootUserId, content.getOrDefault("createdBy", "").asInstanceOf[String]))
&& !StringUtils.equalsIgnoreCase(content.getOrDefault("status", "").asInstanceOf[String], "Live"))
throw new ClientException("ERR_QUESTION_SET", "Content with identifier: " + content.get("identifier") + "is not Live. Please Publish it.")
validateChildrenRecursive(content.getOrDefault("children", new util.ArrayList[Map[String, AnyRef]]).asInstanceOf[util.List[util.Map[String, AnyRef]]])
throw new ClientException("ERR_QUESTION_SET", "Object with identifier: " + content.get("identifier") + " is not Live. Please Publish it.")
validateChildrenRecursive(content.getOrDefault("children", new util.ArrayList[Map[String, AnyRef]]).asInstanceOf[util.List[util.Map[String, AnyRef]]], rootUserId)
})
}

Expand All @@ -169,28 +170,28 @@ object AssessmentManager {
(visibilityIdMap.getOrDefault("Default", List()), visibilityIdMap.getOrDefault("Parent", List()))
}

def updateHierarchy(hierarchyString: String, status: String): (java.util.Map[String, AnyRef], java.util.List[String]) = {
def updateHierarchy(hierarchyString: String, status: String, rootUserId: String): (java.util.Map[String, AnyRef], java.util.List[String]) = {
val hierarchy = if (!hierarchyString.asInstanceOf[String].isEmpty) {
JsonUtils.deserialize(hierarchyString.asInstanceOf[String], classOf[java.util.Map[String, AnyRef]])
} else
new java.util.HashMap[String, AnyRef]()
val children = hierarchy.getOrDefault("children", new util.ArrayList[java.util.Map[String, AnyRef]]).asInstanceOf[util.List[java.util.Map[String, AnyRef]]]
hierarchy.put("status", status)
val childrenToUpdate: List[String] = updateChildrenRecursive(children, status, List())
val childrenToUpdate: List[String] = updateChildrenRecursive(children, status, List(), rootUserId)
(hierarchy, childrenToUpdate.asJava)
}

private def updateChildrenRecursive(children: util.List[util.Map[String, AnyRef]], status: String, idList: List[String]): List[String] = {
private def updateChildrenRecursive(children: util.List[util.Map[String, AnyRef]], status: String, idList: List[String], rootUserId: String): List[String] = {
children.toList.flatMap(content => {
val updatedIdList: List[String] =
if (StringUtils.equalsAnyIgnoreCase(content.getOrDefault("visibility", "").asInstanceOf[String], "Parent")) {
if (StringUtils.equalsAnyIgnoreCase(content.getOrDefault("visibility", "").asInstanceOf[String], "Parent") || (StringUtils.equalsAnyIgnoreCase(content.getOrDefault("visibility", "").asInstanceOf[String], "Default") && StringUtils.equals(rootUserId, content.getOrDefault("createdBy", "").asInstanceOf[String]))) {
content.put("lastStatusChangedOn", DateUtils.formatCurrentDate)
content.put("status", status)
content.put("prevStatus", "Draft")
content.put("lastUpdatedOn", DateUtils.formatCurrentDate)
content.get("identifier").asInstanceOf[String] :: idList
} else idList
val list = updateChildrenRecursive(content.getOrDefault("children", new util.ArrayList[Map[String, AnyRef]]).asInstanceOf[util.List[util.Map[String, AnyRef]]], status, updatedIdList)
val list = updateChildrenRecursive(content.getOrDefault("children", new util.ArrayList[Map[String, AnyRef]]).asInstanceOf[util.List[util.Map[String, AnyRef]]], status, updatedIdList, rootUserId)
list ++ updatedIdList
})
}
Expand Down
Loading

0 comments on commit aa6b680

Please sign in to comment.