fix: enable newly added plugins with existing config
This commit is contained in:
@@ -256,25 +256,31 @@ public class PluginManager {
|
||||
String orderStr = props.getProperty("plugins.order");
|
||||
String disabledStr = props.getProperty("plugins.disabled");
|
||||
|
||||
if (orderStr == null || orderStr.trim().isEmpty()) return null;
|
||||
|
||||
String[] ids = orderStr.split(",");
|
||||
List<String> disabledList = new ArrayList<>();
|
||||
Set<String> disabledIds = new HashSet<>();
|
||||
if (disabledStr != null && !disabledStr.trim().isEmpty()) {
|
||||
for (String s : disabledStr.split(",")) {
|
||||
disabledList.add(s.trim());
|
||||
disabledIds.add(s.trim());
|
||||
}
|
||||
}
|
||||
|
||||
java.util.Set<String> result = new java.util.LinkedHashSet<>();
|
||||
for (String id : ids) {
|
||||
id = id.trim();
|
||||
if (id.isEmpty()) continue;
|
||||
if (!disabledList.contains(id)) {
|
||||
result.add(id);
|
||||
if (orderStr != null && !orderStr.trim().isEmpty()) {
|
||||
for (String rawId : orderStr.split(",")) {
|
||||
String id = rawId.trim();
|
||||
if (!id.isEmpty() && !disabledIds.contains(id)) {
|
||||
result.add(id);
|
||||
}
|
||||
}
|
||||
}
|
||||
return result.isEmpty() ? null : result;
|
||||
|
||||
// plugins.order only controls ordering. A plugin introduced by a newer
|
||||
// WorkUtils version is enabled by default unless explicitly disabled.
|
||||
allPlugins.stream()
|
||||
.sorted(Comparator.comparingInt(plugin -> plugin.getDescriptor().getOrder()))
|
||||
.map(Plugin::getId)
|
||||
.filter(id -> !disabledIds.contains(id))
|
||||
.forEach(result::add);
|
||||
return result;
|
||||
} catch (IOException e) {
|
||||
log.warn("读取插件配置文件失败: {}", file.toAbsolutePath(), e);
|
||||
return null;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# ====== WorkUtils 插件配置文件 ======
|
||||
# 插件顺序(按逗号分隔,顺序即菜单显示顺序)
|
||||
# 插件状态(disabled 列表,不在列表中的即为启用)
|
||||
plugins.order=git-sync,git-review,diff,mybatisexport,mybatisgenerator,scan,api-doc
|
||||
plugins.order=git-sync,git-review,diff,ai-unit-test,mybatisexport,mybatisgenerator,scan,api-doc
|
||||
plugins.disabled=mobile-ui-auto
|
||||
|
||||
+8
-8
@@ -4,7 +4,6 @@ import com.example.workutils.system.config.WorkUtilsProperties;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.io.TempDir;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.List;
|
||||
@@ -17,12 +16,12 @@ class DefaultPluginConfigurationTest {
|
||||
Path tempDir;
|
||||
|
||||
@Test
|
||||
void defaultConfigurationLoadsEveryPluginExceptMobileAutomation() throws Exception {
|
||||
void existingConfigurationAutomaticallyEnablesNewPluginsUnlessExplicitlyDisabled() throws Exception {
|
||||
Path configFile = tempDir.resolve("plugins.config");
|
||||
try (InputStream input = getClass().getClassLoader()
|
||||
.getResourceAsStream("templates/plugins.config")) {
|
||||
Files.copy(input, configFile);
|
||||
}
|
||||
Files.writeString(configFile, """
|
||||
plugins.order=git-sync,git-review,diff,mybatisexport,mybatisgenerator,scan,api-doc
|
||||
plugins.disabled=mobile-ui-auto
|
||||
""");
|
||||
|
||||
WorkUtilsProperties properties = new WorkUtilsProperties();
|
||||
properties.setPluginsConfigFile(configFile.toString());
|
||||
@@ -30,6 +29,7 @@ class DefaultPluginConfigurationTest {
|
||||
plugin("scan"),
|
||||
plugin("diff"),
|
||||
plugin("api-doc"),
|
||||
plugin("ai-unit-test"),
|
||||
plugin("git-sync"),
|
||||
plugin("git-review"),
|
||||
plugin("mobile-ui-auto"),
|
||||
@@ -39,10 +39,10 @@ class DefaultPluginConfigurationTest {
|
||||
PluginManager manager = new PluginManager(plugins, properties);
|
||||
manager.init();
|
||||
|
||||
assertEquals(7, manager.getEnabledPlugins().size());
|
||||
assertEquals(8, manager.getEnabledPlugins().size());
|
||||
assertEquals(
|
||||
List.of("git-sync", "git-review", "diff", "mybatisexport",
|
||||
"mybatisgenerator", "scan", "api-doc"),
|
||||
"mybatisgenerator", "scan", "api-doc", "ai-unit-test"),
|
||||
manager.getEnabledPlugins().stream().map(Plugin::getId).toList());
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user