コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        public static Func <IMediaFile, bool> GetPredicate(SearchToken searchToken)
        {
            var predicates = new List <Func <IMediaFile, bool> >();

            if (searchToken is MediaFileSearchToken)
            {
                MediaFileSearchToken mediaFileSearchToken = (MediaFileSearchToken)searchToken;
                if (mediaFileSearchToken.MimeTypes != null && mediaFileSearchToken.MimeTypes.Length > 0)
                {
                    List <string> mimeTypes = new List <string>(mediaFileSearchToken.MimeTypes);
                    predicates.Add(x => mimeTypes.Contains(x.MimeType));
                }
                if (!string.IsNullOrEmpty(mediaFileSearchToken.Folder))
                {
                    if (mediaFileSearchToken.HideSubfolders)
                    {
                        predicates.Add(d => d.FolderPath == mediaFileSearchToken.Folder);
                    }
                    else
                    {
                        predicates.Add(d => d.FolderPath.StartsWith(mediaFileSearchToken.Folder));
                    }
                }

                if (mediaFileSearchToken.Extensions != null && mediaFileSearchToken.Extensions.Length > 0)
                {
                    System.Linq.Expressions.ParameterExpression fileParameter = Expression.Parameter(typeof(IMediaFile), "file");

                    Expression body = null;

                    foreach (string extension in mediaFileSearchToken.Extensions)
                    {
                        string suffix = extension.StartsWith(".") ? extension : "." + extension;

                        // "file.FileName"
                        Expression fileName = Expression.Property(fileParameter, typeof(IFile), "FileName");

                        // Building "file.FileName.EndsWith(suffix, StringComparison.OrdinalIgnoreCase)"
                        MethodCallExpression predicate = Expression.Call(fileName,
                                                                         EndsWithMethodInfo,
                                                                         Expression.Constant(suffix),
                                                                         IgnoreCaseConstantExpression);

                        if (body == null)
                        {
                            // file => file.FileName.EndsWith(extension, StringComparison.OrdinalIgnoreCase);
                            body = predicate;
                        }
                        else
                        {
                            // body = (.....) || file.FileName.EndsWith(extension, StringComparison.OrdinalIgnoreCase;
                            body = Expression.OrElse(body, predicate);
                        }
                    }

                    predicates.Add(Expression.Lambda <Func <IMediaFile, bool> >(body, fileParameter).Compile());
                }
            }

            if (predicates.Count == 0)
            {
                return(x => true);
            }

            Func <Func <IMediaFile, bool>, Func <IMediaFile, bool>, Func <IMediaFile, bool> >
            and = (f1, f2) => (t => f1(t) && f2(t));

            Func <IMediaFile, bool> current = (x => true);

            foreach (Func <IMediaFile, bool> predicate in predicates)
            {
                current = and(predicate, current);
            }
            return(current);
        }