Commit 7682ab81 authored by Anil Kumar Gupta's avatar Anil Kumar Gupta
Browse files

Issue #KN-439 feat: Fixed the replacement issue.

Showing with 46 additions and 13 deletions
+46 -13
package org.sunbird.graph.util
import org.apache.commons.collections4.MapUtils
import org.apache.commons.lang3.StringUtils
import org.slf4j.LoggerFactory
import org.sunbird.common.Platform
import org.sunbird.common.{JsonUtils, Platform}
import org.sunbird.common.dto.Property
import org.sunbird.graph.dac.model.Node
......@@ -10,11 +11,9 @@ import scala.collection.JavaConverters._
object CSPMetaUtil {
private[this] val logger = LoggerFactory.getLogger(classOf[CSPMetaUtil])
private val defaultMetadataList = java.util.Arrays.asList("appIcon","posterImage","artifactUrl","downloadUrl","variants","previewUrl","pdfUrl")
private val defaultWriteBasePath = java.util.Arrays.asList("https://sunbirddev.blob.core.windows.net","https://obj.dev.sunbird.org")
def updateAbsolutePath(data: java.util.Map[String, AnyRef]): java.util.Map[String, AnyRef] = {
val cspMeta = Platform.getStringList("cloudstorage.metadata.list", defaultMetadataList).asScala.toList
val cspMeta = Platform.getStringList("cloudstorage.metadata.list", new java.util.ArrayList[String]()).asScala.toList
val absolutePath = Platform.getString("cloudstorage.read_base_path", "") + java.io.File.separator + Platform.getString("cloud_storage_container", "")
if (MapUtils.isNotEmpty(data)) {
val updatedMeta: java.util.Map[String, AnyRef] = new java.util.HashMap[String, AnyRef]
......@@ -40,7 +39,7 @@ object CSPMetaUtil {
}
def updateAbsolutePath(property: Property): Property = {
val cspMeta = Platform.getStringList("cloudstorage.metadata.list", defaultMetadataList)
val cspMeta = Platform.getStringList("cloudstorage.metadata.list", new java.util.ArrayList[String]())
val absolutePath = Platform.getString("cloudstorage.read_base_path", "") + java.io.File.separator + Platform.getString("cloud_storage_container", "")
if(cspMeta.contains(property.getPropertyName)) {
val value = property.getPropertyValue
......@@ -54,19 +53,53 @@ object CSPMetaUtil {
}
def updateRelativePath(data: java.util.Map[String, AnyRef]): java.util.Map[String, AnyRef] = {
val cspMeta: java.util.List[String] = Platform.getStringList("cloudstorage.metadata.list", defaultMetadataList)
val validCSPSource: java.util.List[String] = Platform.getStringList("cloudstorage.write_base_path", defaultWriteBasePath)
val basePath: List[String] = validCSPSource.asScala.toList.map(source => source + java.io.File.separator + Platform.getString("cloud_storage_container", ""))
if (MapUtils.isNotEmpty(data)) {
logger.info("CSPMetaUtil ::: updateRelativePath util.Map[String, AnyRef] ::: data before url replace :: " + data)
val cspMeta: java.util.List[String] = Platform.getStringList("cloudstorage.metadata.list", new java.util.ArrayList[String]())
val validCSPSource: List[String] = Platform.getStringList("cloudstorage.write_base_path", new java.util.ArrayList[String]()).asScala.toList
val basePaths: Array[String] = validCSPSource.map(source => source + java.io.File.separator + Platform.getString("cloud_storage_container", "")).toArray
val repArray = getReplacementData(basePaths, "CLOUD_STORAGE_BASE_PATH")
val result = if (MapUtils.isNotEmpty(data)) {
val updatedMeta: java.util.Map[String, AnyRef] = new java.util.HashMap[String, AnyRef]
data.asScala.map(x =>
if (cspMeta.contains(x._1)) {
val filteredPath = basePath.filter(path => x._2.asInstanceOf[String].contains(path))
updatedMeta.put(x._1, if(filteredPath.nonEmpty) x._2.asInstanceOf[String].replaceAll(filteredPath.head, "CLOUD_STORAGE_BASE_PATH") else x._2)
} else updatedMeta.put(x._1, x._2)
if (cspMeta.contains(x._1))
updatedMeta.put(x._1, getBasePath(x._1, x._2, basePaths, repArray))
else updatedMeta.put(x._1, x._2)
).asJava
updatedMeta
} else data
logger.info("CSPMetaUtil ::: updateRelativePath util.Map[String, AnyRef] ::: data after url replace :: " + result)
result
}
private def getBasePath(key: String, value: AnyRef, oldPath: Array[String], newPath: Array[String]): AnyRef = {
logger.info(s"CSPMetaUtil ::: getBasePath ::: Updating Path for Key : $key & Value : $value")
val res = if (null != value) {
value match {
case x: String => if (StringUtils.isNotBlank(x)) StringUtils.replaceEach(x, oldPath, newPath) else x
case y: Map[String, AnyRef] => {
val dStr = JsonUtils.serialize(y)
val result = StringUtils.replaceEach(dStr, oldPath, newPath)
val output: Map[String, AnyRef] = JsonUtils.deserialize(result, classOf[Map[String, AnyRef]])
output
}
case z: java.util.Map[String, AnyRef] => {
val dStr = JsonUtils.serialize(z)
val result = StringUtils.replaceEach(dStr, oldPath, newPath)
val output: java.util.Map[String, AnyRef] = JsonUtils.deserialize(result, classOf[java.util.Map[String, AnyRef]])
output
}
}
} else value
logger.info(s"CSPMetaUtil ::: getBasePath ::: Updated Path for Key : $key & Updated Value is : $res")
res
}
private def getReplacementData(oldPath: Array[String], repStr: String): Array[String] = {
val repArray = new Array[String](oldPath.length)
for (i <- oldPath.indices) {
repArray(i) = repStr
}
repArray
}
}
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment