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