package org.openflexo.utils; import java.io.File; import java.io.FilenameFilter; import javax.swing.Icon; import javax.swing.filechooser.FileFilter; import javax.swing.filechooser.FileView; import org.openflexo.icon.FilesIconLibrary; import org.openflexo.icon.IconLibrary; import org.openflexo.localization.FlexoLocalization; public class FlexoFileChooserUtils { public static class FlexoPaletteFileFilter extends FileFilter { @Override public boolean accept(File f) { if (f.isDirectory()) { return true; } return false; } @Override public String getDescription() { return FlexoLocalization.localizedForKey("flexo_palettes"); } } public static class FlexoPaletteFileView extends FileView { protected FlexoPaletteFileView() { } /** * Overrides isTraversable * * @see javax.swing.filechooser.FileView#isTraversable(java.io.File) */ @Override public Boolean isTraversable(File f) { if (f == null || !f.isDirectory()) { return Boolean.FALSE; } if (f.getName().toLowerCase().endsWith(".iepalette")) { return Boolean.FALSE; } File[] files = f.listFiles(new java.io.FileFilter() { @Override public boolean accept(File file) { return !file.isDirectory() && file.getName().toLowerCase().endsWith(".woxml"); } }); if (files != null && files.length > 0) { return Boolean.FALSE; } return super.isTraversable(f); } /** * Overrides getIcon * * @see javax.swing.filechooser.FileView#getIcon(java.io.File) */ @Override public Icon getIcon(File f) { if (f.getName().toLowerCase().endsWith(".iepalette")) { return FilesIconLibrary.SMALL_FOLDER_ICON; } else if (f.isDirectory()) { File[] files = f.listFiles(new java.io.FileFilter() { @Override public boolean accept(File file) { return !file.isDirectory() && file.getName().toLowerCase().endsWith(".woxml"); } }); if (files != null && files.length > 0) { return FilesIconLibrary.SMALL_FOLDER_ICON; } else { return super.getIcon(f); } } else { return super.getIcon(f); } } } public static class FlexoProjectFileFilter extends FileFilter { @Override public boolean accept(File f) { if (f.isDirectory()) { return true; } return false; } @Override public String getDescription() { return FlexoLocalization.localizedForKey("flexo_projects"); } } public static class FlexoProjectFilenameFilter implements FilenameFilter { @Override public boolean accept(File dir, String name) { if (new File(dir, name).isDirectory() && name.toLowerCase().endsWith(".prj")) { return true; } return false; } } /** * @author gpolet * */ public static class FlexoProjectFileView extends FileView { protected FlexoProjectFileView() { } /** * Overrides isTraversable * * @see javax.swing.filechooser.FileView#isTraversable(java.io.File) */ @Override public Boolean isTraversable(File f) { if (f == null || !f.isDirectory()) { return Boolean.FALSE; } if (f.getName().toLowerCase().endsWith(".prj")) { return Boolean.FALSE; } else { return super.isTraversable(f); } } /** * Overrides getIcon * * @see javax.swing.filechooser.FileView#getIcon(java.io.File) */ @Override public Icon getIcon(File f) { if (f.getName().toLowerCase().endsWith(".prj")) { return IconLibrary.OPENFLEXO_NOTEXT_16; } else { return super.getIcon(f); } } } public static final FileView PROJECT_FILE_VIEW = new FlexoProjectFileView(); public static final FileFilter PROJECT_FILE_FILTER = new FlexoProjectFileFilter(); public static final FilenameFilter PROJECT_FILE_NAME_FILTER = new FlexoProjectFilenameFilter(); public static final FileView PALETTE_FILE_VIEW = new FlexoPaletteFileView(); public static final FileFilter PALETTE_FILE_FILTER = new FlexoPaletteFileFilter(); }