package com.github.czyzby.lml.vis.parser.impl.nongwt.attribute.file; import java.io.File; import java.io.FileFilter; import com.github.czyzby.kiwi.util.common.Strings; import com.github.czyzby.lml.parser.LmlParser; import com.github.czyzby.lml.parser.action.ActorConsumer; import com.github.czyzby.lml.parser.tag.LmlAttribute; import com.github.czyzby.lml.parser.tag.LmlTag; import com.kotcrab.vis.ui.widget.file.FileChooser; /** See {@link FileChooser#setFileFilter(FileFilter)}. Expects an action ID that references a method consuming * {@link File} instance and returning a boolean (boxed or unboxed). Method will be invoked each time a file is * filtered. Mapped to "fileFilter". * * @author MJ */ public class FileFilterLmlAttribute implements LmlAttribute<FileChooser> { @Override public Class<FileChooser> getHandledType() { return FileChooser.class; } @Override public void process(final LmlParser parser, final LmlTag tag, final FileChooser actor, final String rawAttributeData) { @SuppressWarnings("unchecked") final ActorConsumer<Boolean, File> filter = (ActorConsumer<Boolean, File>) parser .parseAction(rawAttributeData, new File(Strings.EMPTY_STRING)); if (filter == null) { parser.throwErrorIfStrict( "File filter attribute expects a method that consumes a File and returns boolean/Boolean. Method not found for ID: " + rawAttributeData); return; } actor.setFileFilter(new FileFilter() { @Override public boolean accept(final File pathname) { return filter.consume(pathname); } }); } }