@import org.silkframework.dataset.DatasetPluginAutoConfigurable
@import org.silkframework.runtime.plugin.StringParameterType._
@import org.silkframework.runtime.plugin.{AnyPlugin, PluginParameter, StringParameterType, PluginDescription}
@import org.silkframework.workspace.Project
@import org.silkframework.runtime.activity.UserContext
@import org.silkframework.runtime.plugin.PluginCategories
@import org.silkframework.runtime.plugin.PluginContext
@(project: Project,
name: String,
plugins: Seq[PluginDescription[_]],
currentObj: Option[AnyPlugin],
resources: List[String],
title: String = "Edit Properties",
submitLabel: String = "OK",
secondaryLabel: String = "Secondary",
createDialog: Boolean = false)(contents: Html)(implicit userContext: UserContext)
@dialog(title = title, submitLabel = submitLabel, secondaryLabel = secondaryLabel, width = 500, createDialog = createDialog) {
@for(plugin <- sortPlugins(plugins)) {
@pluginLabel(plugin)
}
Type
@for(plugin <- plugins) {
@createTab(plugin)
}
@contents
}
@sortPlugins(plugins: Seq[PluginDescription[_]]) = @{
plugins.filterNot(_.categories.contains(PluginCategories.deprecated))
.sortBy(_.label)
.sortBy(_.categories.headOption.getOrElse("").toLowerCase)
}
@pluginLabel(plugin: PluginDescription[_]) = {
@if(plugin.categories == Seq(PluginCategories.uncategorized)) {
@plugin.label
} else {
@plugin.label (@plugin.categories.mkString(", "))
}
}
@createTab(plugin: PluginDescription[_]) = {
@plugin.description
@if(createDialog) {
Name
}
@for(param <- plugin.parameters) {
@if(param.visibleInDialog) {
@createField(plugin.id, param)
}
}
}
@**
* Creates a new field for a plugin parameter
*@
@createField(pluginId: String, param: PluginParameter) = @{
param.parameterType match {
case StringParameterType.ResourceType | StringParameterType.WritableResourceType => createResourceField(pluginId, param)
case enum @ StringParameterType.EnumerationType(_) => createEnumerationField(pluginId, param, enum.enumerationValues, enum.displayNames)
case BooleanType => createEnumerationField(pluginId, param, Seq("true", "false"), Seq("True", "False"))
case MultilineStringParameterType => createMultilineTextField(pluginId, param)
case SparqlEndpointDatasetParameterType => createSparqlEndpointDatasetField(pluginId, param)
case PasswordParameterType => createTextField(pluginId, param, inputType = "password")
case _ => createTextField(pluginId, param)
}
}
@createTextField(pluginId: String, param: PluginParameter, inputType: String = "text") = {
}
@createMultilineTextField(pluginId: String, param: PluginParameter) = {
@widgets.multilineParameter(s"${pluginId}_${param.name}", value(pluginId, param), label = param.label, tooltip = param.description, additionalInputElementsClass = "plugin-dialog-multi-line-textfield")
}
@createSparqlEndpointDatasetField(pluginId: String, param: PluginParameter)(implicit userContext: UserContext) = {
@widgets.sparqlDatasetSelect(project.id, param.label, param.description, pluginId + "_" + param.name, if(value(pluginId, param) == "") None else Some(value(pluginId, param)))
}
@createEnumerationField(pluginId: String, param: PluginParameter, enumerationValues: Seq[String], displayNames: Seq[String]) = {
@for((enumerationValue, displayName) <- enumerationValues.zip(displayNames)) {
@displayName
}
@param.label
@param.description
Expected type: @param.parameterType.description
}
@createResourceField(pluginId: String, param: PluginParameter) = {
}
@**
* Retrieves the value of a specific parameter
*@
@value(pluginId: String, param: PluginParameter) = @{
// Retrieve parameter value as Object
val paramObj =
currentObj match {
case Some(obj) if obj.pluginSpec.id.toString == pluginId =>
Option(param(obj))
case _ =>
param.defaultValue.flatMap(Option(_))
}
// Convert parameter value to string
implicit val prefixes = project.config.prefixes
val paramType = param.parameterType.asInstanceOf[StringParameterType[AnyRef]]
val paramStr = paramObj.map(pv => paramType.toString(pv)(PluginContext.empty)).getOrElse("")
paramStr
}