FsItemFilterUtils.java

package cn.bluejoe.elfinder.util;

import java.util.ArrayList;
import java.util.List;

import cn.bluejoe.elfinder.controller.executor.FsItemEx;
import cn.bluejoe.elfinder.service.FsItemFilter;
import sk.iway.iwcm.DB;

public abstract class FsItemFilterUtils
{
    public static FsItemFilter FILTER_ALL = new FsItemFilter()
    {
        @Override
        public boolean accepts(FsItemEx item)
        {
            return true;
        }
    };

    public static FsItemFilter FILTER_FOLDER = new FsItemFilter()
    {
        @Override
        public boolean accepts(FsItemEx item)
        {
            return item.isFolder();
        }
    };

    public static FsItemFilter createFileNameKeywordFilter(final String keyword)
    {
        return new FsItemFilter()
        {
            @Override
            public boolean accepts(FsItemEx item)
            {
                boolean accept = false;
                try
                {
                    if(item.getPath().toLowerCase().contains(keyword) || DB.internationalToEnglish(item.getName()).toLowerCase().contains(keyword))
                    {
                        accept = true;
                    }
                }
                catch (Exception exc)
                {
                    sk.iway.iwcm.Logger.error(exc);
                    return false;
                }

                return accept;
            }
        };
    }

    public static  List<FsItemEx> filterFiles(FsItemEx[] sourceFiles,
                                         FsItemFilter filter)
    {
        List<FsItemEx> filtered = new ArrayList<FsItemEx>();
        for (FsItemEx file : sourceFiles)
        {
            if (filter.accepts(file))
                filtered.add(file);
        }

        return filtered;//.toArray(new FsItemEx[0]);
    }

    /**
     * returns a FsItemFilter according to given mimeFilters
     *
     * @param mimeFilters
     *            An array of MIME types, if <code>null</code> no filtering is
     *            done
     * @return A filter that only accepts the supplied MIME types.
     */
    public static FsItemFilter createMimeFilter(final String[] mimeFilters)
    {
        if (mimeFilters == null || mimeFilters.length == 0)
            return FILTER_ALL;

        return new FsItemFilter()
        {
            @Override
            public boolean accepts(FsItemEx item)
            {
                String mimeType = item.getMimeType().toUpperCase();

                for (String mf : mimeFilters)
                {
                    mf = mf.toUpperCase();
                    if (mimeType.startsWith(mf + "/") || mimeType.equals(mf))
                        return true;
                }
                return false;
            }
        };
    }

}