001package com.ericlam.mc.eld.configurations;
002
003import com.ericlam.mc.eld.components.GroupConfiguration;
004
005import java.nio.file.Path;
006import java.util.List;
007import java.util.Optional;
008import java.util.function.Predicate;
009
010/**
011 * 文件池。內置快取功能,需要使用 fetch 方法來清除快取
012 * @param <T> 文件池類別
013 */
014public interface GroupConfig<T extends GroupConfiguration> {
015
016    /**
017     *
018     * @return 所有文件實例
019     */
020    List<T> findAll();
021
022    /**
023     * 過濾路徑
024     * @param filter 自定義過濾
025     * @return 所有符合特定條件的實例
026     */
027    List<T> findAll(Predicate<Path> filter);
028
029    /**
030     * 獲取指定頁數內的所有文件實例
031     * @param pageRequest 頁面請求
032     * @return 頁面
033     */
034    Page<T> findAll(PageRequest pageRequest);
035
036    /**
037     * 根據 id 尋找文件實例
038     * @param id 標識 id
039     * @return 文件實例
040     */
041    Optional<T> findById(String id);
042
043    /**
044     * 保存一個文件,標識 id 不能為 null
045     * @param config 文件實例
046     */
047    void save(T config);
048
049    /**
050     * 透過 id 刪除文件
051     * @param id 標識 id
052     * @return 刪除成功
053     */
054    boolean deleteById(String id);
055
056    /**
057     * 獲取文件池總數量
058     * @return 數量
059     */
060    long totalSize();
061
062    /**
063     * 刪除文件
064     * @param config 文件實例,id 不能為 null
065     * @return 刪除成功
066     */
067    boolean delete(T config);
068
069    /**
070     * 清楚所有快取
071     */
072    void fetch();
073
074    /**
075     * 清楚指定文件的快取
076     * @param id 標識 id
077     */
078    void fetchById(String id);
079
080}