Skip to content

Commit

Permalink
Improvements: Process Toolbars
Browse files Browse the repository at this point in the history
  • Loading branch information
Łukasz Ciołecki committed Jul 6, 2021
1 parent 7dc1f52 commit 0ea5b66
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 11 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package pl.touk.nussknacker.engine.util

object UriUtils {

import java.net.URLEncoder

private final val Charset = "UTF-8"

def encodeURIComponent(value: String): String =
URLEncoder.encode(value, Charset)
.replaceAll("\\+", "%20")
.replaceAll("\\!", "%21")
.replaceAll("\\'", "%27")
.replaceAll("\\(", "%28")
.replaceAll("\\)", "%29")
.replaceAll("\\~", "%7E")
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package pl.touk.nussknacker.ui.service

import com.typesafe.config.Config
import io.circe.generic.JsonCodec
import pl.touk.nussknacker.engine.util.UriUtils
import pl.touk.nussknacker.restmodel.processdetails.BaseProcessDetails
import pl.touk.nussknacker.ui.config.processtoolbar.ToolbarButtonConfigType.ToolbarButtonType
import pl.touk.nussknacker.ui.config.processtoolbar.ToolbarPanelTypeConfig.ToolbarPanelType
Expand Down Expand Up @@ -78,8 +79,8 @@ object ToolbarButton {
config.`type`,
config.name.map(t => fillByProcessData(t, process)),
config.title.map(t => fillByProcessData(t, process)),
config.icon.map(i => fillByProcessData(i, process)),
config.url.map(th => fillByProcessData(th, process)),
config.icon.map(i => fillByProcessData(i, process, urlOption = true)),
config.url.map(th => fillByProcessData(th, process, urlOption = true)),
disabled = verifyCondition(config.disabled, process)
)
}
Expand All @@ -92,10 +93,13 @@ private [service] object ToolbarHelper {
def createProcessToolbarId(config: ProcessToolbarsConfig, process: BaseProcessDetails[_]): String =
s"${config.uuidCode}-${if(process.isArchived) "archived" else "not-archived"}-${if(process.isSubprocess) "subprocess" else "process"}"

def fillByProcessData(text: String, process: BaseProcessDetails[_]): String =
def fillByProcessData(text: String, process: BaseProcessDetails[_], urlOption: Boolean = false): String = {
val processName = if (urlOption) UriUtils.encodeURIComponent(process.name) else process.name

text
.replace("$processName", process.name)
.replace("$processName", processName)
.replace("$processId", process.processId.value.toString)
}

def verifyCondition(condition: Option[ToolbarCondition], process: BaseProcessDetails[_]): Boolean = {
condition.nonEmpty && condition.exists(con => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import com.typesafe.config.{Config, ConfigFactory}
import org.scalatest.{FlatSpec, Matchers}
import pl.touk.nussknacker.engine.ProcessingTypeData.ProcessingType
import pl.touk.nussknacker.engine.api.process.ProcessId
import pl.touk.nussknacker.engine.util.UriUtils
import pl.touk.nussknacker.restmodel.ProcessType
import pl.touk.nussknacker.restmodel.processdetails.BaseProcessDetails
import pl.touk.nussknacker.ui.config.processtoolbar._
Expand Down Expand Up @@ -187,7 +188,7 @@ class ConfigProcessToolbarServiceSpec extends FlatSpec with Matchers {
}

it should "properly create process toolbar configuration" in {
val process = createProcess("process", "Category1", isSubprocess = false, isArchived = false)
val process = createProcess("process with space", "Category1", isSubprocess = false, isArchived = false)
val archivedProcess = createProcess("archived-process", "Category1", isSubprocess = false, isArchived = true)
val subprocess = createProcess("subprocess", "Category1", isSubprocess = true, isArchived = false)
val archivedSubprocess = createProcess("archived-subprocess", "Category1", isSubprocess = true, isArchived = true)
Expand Down Expand Up @@ -215,6 +216,8 @@ class ConfigProcessToolbarServiceSpec extends FlatSpec with Matchers {
val processToolbarConfig = ProcessToolbarsConfigProvider.create(config, Some(process.processCategory))
val id = ToolbarHelper.createProcessToolbarId(processToolbarConfig, process)

def processName(process: BaseProcessDetails[_]) = UriUtils.encodeURIComponent(process.name)

(process.isSubprocess, process.isArchived, process.processCategory) match {
case (false, false, "Category1") => ProcessToolbarSettings(
id,
Expand All @@ -227,7 +230,7 @@ class ConfigProcessToolbarServiceSpec extends FlatSpec with Matchers {
List(
ToolbarPanel(ProcessInfoPanel, Some(s"Process Info ${process.name}"), None, Some(List(
ToolbarButton(ProcessSave, None, Some("save"), Some(s"/assets/${process.processId.value}/buttons/save.svg"), None, disabled = false),
ToolbarButton(CustomLink, Some("metrics"), Some("metrics for process"), None, Some(s"/metrics/${process.name}"), disabled = false),
ToolbarButton(CustomLink, Some("metrics"), Some("metrics for process"), None, Some(s"/metrics/${processName(process)}"), disabled = false),
ToolbarButton(CustomLink, Some("analytics"), None, None, Some(s"/analytics/${process.processId.value}"), disabled = false)
))),
ToolbarPanel("buttons2", None, None, Some(List(
Expand All @@ -246,7 +249,7 @@ class ConfigProcessToolbarServiceSpec extends FlatSpec with Matchers {
List(
ToolbarPanel(ProcessInfoPanel, Some(s"Process Info ${process.name}"), None, Some(List(
ToolbarButton(ProcessSave, None, Some("save"), Some(s"/assets/${process.processId.value}/buttons/save.svg"), None, disabled = true),
ToolbarButton(CustomLink, Some("metrics"), Some("metrics for process"), None, Some(s"/metrics/${process.name}"), disabled = false),
ToolbarButton(CustomLink, Some("metrics"), Some("metrics for process"), None, Some(s"/metrics/${processName(process)}"), disabled = false),
ToolbarButton(CustomLink, Some("analytics"), None, None, Some(s"/analytics/${process.processId.value}"), disabled = false)
)))
),
Expand All @@ -262,7 +265,7 @@ class ConfigProcessToolbarServiceSpec extends FlatSpec with Matchers {
List(
ToolbarPanel(ProcessInfoPanel, Some(s"Process Info ${process.name}"), None, Some(List(
ToolbarButton(ProcessSave, None, Some("save"), Some(s"/assets/${process.processId.value}/buttons/save.svg"), None, disabled = false),
ToolbarButton(CustomLink, Some("metrics"), Some("metrics for process"), None, Some(s"/metrics/${process.name}"), disabled = false),
ToolbarButton(CustomLink, Some("metrics"), Some("metrics for process"), None, Some(s"/metrics/${processName(process)}"), disabled = false),
ToolbarButton(CustomLink, Some("analytics"), None, None, Some(s"/analytics/${process.processId.value}"), disabled = false)
))),
ToolbarPanel("buttons1", None, Some(Small), Some(List(
Expand All @@ -285,7 +288,7 @@ class ConfigProcessToolbarServiceSpec extends FlatSpec with Matchers {
List(
ToolbarPanel(ProcessInfoPanel, Some(s"Process Info ${process.name}"), None, Some(List(
ToolbarButton(ProcessSave, None, Some("save"), Some(s"/assets/${process.processId.value}/buttons/save.svg"), None, disabled = true),
ToolbarButton(CustomLink, Some("metrics"), Some("metrics for process"), None, Some(s"/metrics/${process.name}"), disabled = false),
ToolbarButton(CustomLink, Some("metrics"), Some("metrics for process"), None, Some(s"/metrics/${processName(process)}"), disabled = false),
ToolbarButton(CustomLink, Some("analytics"), None, None, Some(s"/analytics/${process.processId.value}"), disabled = true)
))),
ToolbarPanel("buttons1", None, Some(Small), Some(List(
Expand All @@ -303,7 +306,7 @@ class ConfigProcessToolbarServiceSpec extends FlatSpec with Matchers {
List(
ToolbarPanel(ProcessInfoPanel, Some(s"Process Info ${process.name}"), None, Some(List(
ToolbarButton(ProcessSave, None, Some("save"), Some(s"/assets/${process.processId.value}/buttons/save.svg"), None, disabled = false),
ToolbarButton(CustomLink, Some("metrics"), Some("metrics for process"), None, Some(s"/metrics/${process.name}"), disabled = false),
ToolbarButton(CustomLink, Some("metrics"), Some("metrics for process"), None, Some(s"/metrics/${processName(process)}"), disabled = false),
ToolbarButton(CustomLink, Some("analytics"), None, None, Some(s"/analytics/${process.processId.value}"), disabled = false)
))),
ToolbarPanel("buttons2", None, None, Some(List(
Expand All @@ -321,7 +324,7 @@ class ConfigProcessToolbarServiceSpec extends FlatSpec with Matchers {
List(
ToolbarPanel(ProcessInfoPanel, Some(s"Process Info ${process.name}"), None, Some(List(
ToolbarButton(ProcessSave, None, Some("save"), Some(s"/assets/${process.processId.value}/buttons/save.svg"), None, disabled = false),
ToolbarButton(CustomLink, Some("metrics"), Some("metrics for process"), None, Some(s"/metrics/${process.name}"), disabled = false),
ToolbarButton(CustomLink, Some("metrics"), Some("metrics for process"), None, Some(s"/metrics/${processName(process)}"), disabled = false),
ToolbarButton(CustomLink, Some("analytics"), None, None, Some(s"/analytics/${process.processId.value}"), disabled = false)
))),
ToolbarPanel("buttons2", None, None, Some(List(
Expand Down

0 comments on commit 0ea5b66

Please sign in to comment.