@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 <- 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) {
} @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") = {
@param.description
Expected type: @param.parameterType.description
} @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]) = {
@param.description
Expected type: @param.parameterType.description
} @createResourceField(pluginId: String, param: PluginParameter) = {
@param.description
Expected type: @param.parameterType.description
} @** * 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 }