@Override
    public List<Application> findAll(final String filename) {
        final String extension = Path.getExtension(filename);
        if(StringUtils.isEmpty(extension)) {
            return Collections.emptyList();
        }
        if(!defaultApplicationListCache.contains(extension)) {
            final List<Application> applications = new ArrayList<Application>();
            for(String identifier : this.findAllForType(extension)) {
                applications.add(this.getDescription(identifier));
            }
            // Because of the different API used the default opening application may not be included
            // in the above list returned. Always add the default application anyway.
            final Application defaultApplication = this.find(filename);
            if(this.isInstalled(defaultApplication)) {
                if(!applications.contains(defaultApplication)) {
                    applications.add(defaultApplication);
                }
            }
            defaultApplicationListCache.put(extension, applications);
        }
        return defaultApplicationListCache.get(extension);
    }
@Test
    public void testFindAll() {
        ApplicationFinder f = new LaunchServicesApplicationFinder();
        final List<Application> applications = f.findAll("file.txt");
        assertFalse(applications.isEmpty());
        assertTrue(applications.contains(new Application("com.apple.TextEdit", "T")));
//        assertTrue(applications.contains(new Application("com.macromates.textmate", "T")));
    }