class DefaultPluginRepository extends BasePluginRepository {

    private static final Logger log = LoggerFactory.getLogger(DefaultPluginRepository.class);

    public DefaultPluginRepository(Path... pluginsRoots) {
        this(Arrays.asList(pluginsRoots));
    }

    public DefaultPluginRepository(List<Path> pluginsRoots) {
        super(pluginsRoots);

        AndFileFilter pluginsFilter = new AndFileFilter(new DirectoryFileFilter());
        pluginsFilter.addFileFilter(new NotFileFilter(createHiddenPluginFilter()));
        setFilter(pluginsFilter);
    }

    @Override
    public List<Path> getPluginPaths() {
        extractZipFiles();
        return super.getPluginPaths();
    }

    @Override
    public boolean deletePluginPath(Path pluginPath) {
        FileUtils.optimisticDelete(FileUtils.findWithEnding(pluginPath, ".zip", ".ZIP", ".Zip"));
        return super.deletePluginPath(pluginPath);
    }

    protected FileFilter createHiddenPluginFilter() {
        return new OrFileFilter(new HiddenFilter());
    }

    private void extractZipFiles() {
        // expand plugins zip files
        pluginsRoots.stream()
            .flatMap(path -> streamFiles(path, new ZipFileFilter()))
            .map(File::toPath)
            .forEach(this::expandIfZip);
    }

    private void expandIfZip(Path filePath) {<FILL_FUNCTION_BODY>}

}

        try {
            FileUtils.expandIfZip(filePath);
        } catch (IOException e) {
            log.error("Cannot expand plugin zip '{}'", filePath);
            log.error(e.getMessage(), e);
        }
    
<methods>public transient void <init>(java.nio.file.Path[]) ,public void <init>(List<java.nio.file.Path>) ,public void <init>(List<java.nio.file.Path>, java.io.FileFilter) ,public boolean deletePluginPath(java.nio.file.Path) ,public List<java.nio.file.Path> getPluginPaths() ,public void setComparator(Comparator<java.io.File>) ,public void setFilter(java.io.FileFilter) <variables>protected Comparator<java.io.File> comparator,protected java.io.FileFilter filter,protected final non-sealed List<java.nio.file.Path> pluginsRoots