public override XElement GetWidgetMarkup(ParameterList parameters, string label, HelpDefinition help, string bindingSourceName)
        {
            var searchToken = new MediaFileSearchToken();
            searchToken.MimeTypes = new string[] { MimeTypeInfo.Gif, MimeTypeInfo.Jpeg, MimeTypeInfo.Png, MimeTypeInfo.Bmp, MimeTypeInfo.Svg };

            var folderReference = parameters.GetParameter<DataReference<IMediaFileFolder>>(MediaFileFolderReferenceParameterName);
            bool selectionRequired = parameters.GetParameter<bool>(RequiredParameterName);

            if (folderReference != null && folderReference.IsSet)
            {
                IMediaFileFolder folder;

                try
                {
                    folder = folderReference.Data;

                    if(folder != null)
                    {
                        searchToken.Folder = folder.Path;
                    }
                }
                catch (Exception)
                {
                    string reference = folderReference.Serialize() ?? string.Empty;
                    LoggingService.LogError(LogTitle, "Failed to get media folder by referece: '{0}'".FormatWith(reference));
                }
            }

            XElement selector = base.BuildBasicWidgetMarkup("DataReferenceTreeSelector", "Selected", label, help, bindingSourceName);

            selector.Add(
                new XAttribute("Handle", "Composite.Management.ImageSelectorDialog"),
                new XAttribute("SearchToken", searchToken.Serialize()),
                new XAttribute("DataType", TypeManager.SerializeType(typeof(IImageFile))),
                new XAttribute("NullValueAllowed", (!selectionRequired))
            );

            return selector;
        }
        public override XElement GetWidgetMarkup(ParameterList parameters, string label, HelpDefinition help, string bindingSourceName)
        {
            // TODO: config widget for optional values
            bool selectionRequired = parameters.GetParameter<bool>(RequiredParameterName);

            var searchToken = new MediaFileSearchToken();
            string extensionStr = parameters.GetParameter<string>("FileExtensionFilter");
            if(!extensionStr.IsNullOrEmpty())
            {
                searchToken.Extensions = extensionStr.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
            }

            searchToken.Folder = GetFolderPath(parameters.GetParameter<DataReference<IMediaFileFolder>>("MediaFileFolderReference"));
            searchToken.HideSubfolders = !parameters.GetParameter<bool>("IncludeSubfolders");

            XElement selector = base.BuildBasicWidgetMarkup("DataReferenceTreeSelector", "Selected", label, help, bindingSourceName);

            selector.Add(
                new XAttribute("Handle", "Composite.Management.EmbeddableMediaSelectorDialog"),
                new XAttribute("SearchToken", searchToken.Serialize()),
                new XAttribute("DataType", TypeManager.SerializeType(typeof(IMediaFile))),
                new XAttribute("NullValueAllowed", (!selectionRequired))
            );

            return selector;
        }