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}