Skip to content

Commit 393ffca

Browse files
committed
1.添加加载本地调试插件功能
1 parent 44fc416 commit 393ffca

9 files changed

Lines changed: 134 additions & 148 deletions

File tree

src/main/java/com/xwintop/xJavaFxTool/controller/IndexController.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,8 @@ private void initEvent() {
9393
}
9494

9595
private void initService() {
96+
PluginManager pluginManager = PluginManager.getInstance();
97+
pluginManager.loadLocalDevPluginConfiguration();
9698
loadPlugins(); // 加载插件列表到界面上
9799
AppEvents.addEventHandler(PluginEvent.PLUGIN_DOWNLOADED, pluginEvent -> {
98100
loadPlugins();
@@ -112,6 +114,7 @@ public void loadPlugins() {
112114
PluginManager pluginManager = PluginManager.getInstance();
113115
pluginManager.loadLocalPlugins();
114116
pluginManager.getEnabledPluginList().forEach(this::loadPlugin);
117+
pluginManager.getDevPluginList().forEach(this::loadPlugin);
115118
}
116119

117120
/**
@@ -275,6 +278,11 @@ private void openConfigFolderAction() {
275278
private void openPluginFolderAction() {
276279
JavaFxSystemUtil.openDirectory("libs/");
277280
}
281+
282+
@FXML
283+
private void openDevPluginFolderAction() {
284+
JavaFxSystemUtil.openDirectory("devLibs/");
285+
}
278286

279287
@FXML
280288
private void xwintopLinkOnAction() throws Exception {

src/main/java/com/xwintop/xJavaFxTool/controller/index/PluginManageController.java

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,12 @@
44
import com.xwintop.xJavaFxTool.event.AppEvents;
55
import com.xwintop.xJavaFxTool.event.PluginEvent;
66
import com.xwintop.xJavaFxTool.model.PluginJarInfo;
7-
import com.xwintop.xJavaFxTool.plugin.AddPluginResult;
87
import com.xwintop.xJavaFxTool.plugin.PluginClassLoader;
98
import com.xwintop.xJavaFxTool.plugin.PluginManager;
109
import com.xwintop.xJavaFxTool.plugin.PluginParser;
1110
import com.xwintop.xJavaFxTool.services.index.PluginManageService;
1211
import com.xwintop.xJavaFxTool.view.index.PluginManageView;
1312
import com.xwintop.xcore.javafx.dialog.FxAlerts;
14-
import com.xwintop.xcore.util.javafx.FileChooserUtil;
1513
import com.xwintop.xcore.util.javafx.JavaFxViewUtil;
1614
import com.xwintop.xcore.util.javafx.TooltipUtil;
1715
import javafx.application.Platform;
@@ -20,14 +18,12 @@
2018
import javafx.collections.transformation.FilteredList;
2119
import javafx.fxml.FXMLLoader;
2220
import javafx.scene.control.*;
23-
import javafx.stage.FileChooser.ExtensionFilter;
2421
import javafx.util.Callback;
2522
import lombok.Getter;
2623
import lombok.Setter;
2724
import lombok.extern.slf4j.Slf4j;
2825
import org.apache.commons.io.FileUtils;
2926

30-
import java.io.File;
3127
import java.io.IOException;
3228
import java.net.URL;
3329
import java.util.Map;
@@ -169,13 +165,13 @@ public void searchPlugin() {
169165
}
170166

171167
public void addLocalPlugin() {
172-
File jarFile = FileChooserUtil.chooseFile(new ExtensionFilter("打包插件(*.jar)", "*.jar"));
173-
if (jarFile != null) {
174-
AddPluginResult result = PluginManager.getInstance().addPluginJar(jarFile);
175-
if (result.isNewPlugin()) {
176-
pluginManageService.addDataRow(result.getPluginJarInfo());
177-
}
178-
AppEvents.fire(new PluginEvent(PluginEvent.PLUGIN_DOWNLOADED, result.getPluginJarInfo()));
179-
}
168+
// File jarFile = FileChooserUtil.chooseFile(new ExtensionFilter("打包插件(*.jar)", "*.jar"));
169+
// if (jarFile != null) {
170+
// AddPluginResult result = PluginManager.getInstance().addPluginJar(jarFile);
171+
// if (result.isNewPlugin()) {
172+
// pluginManageService.addDataRow(result.getPluginJarInfo());
173+
// }
174+
// AppEvents.fire(new PluginEvent(PluginEvent.PLUGIN_DOWNLOADED, result.getPluginJarInfo()));
175+
// }
180176
}
181177
}

src/main/java/com/xwintop/xJavaFxTool/plugin/AddPluginResult.java

Lines changed: 0 additions & 14 deletions
This file was deleted.

src/main/java/com/xwintop/xJavaFxTool/plugin/PluginManager.java

Lines changed: 52 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.alibaba.fastjson.JSON;
44
import com.xwintop.xJavaFxTool.model.PluginJarInfo;
5+
import lombok.Data;
56
import lombok.extern.slf4j.Slf4j;
67

78
import java.io.File;
@@ -13,10 +14,10 @@
1314
import java.util.ArrayList;
1415
import java.util.List;
1516
import java.util.Objects;
16-
import java.util.function.Consumer;
1717
import java.util.stream.Collectors;
1818

1919
@Slf4j
20+
@Data
2021
public class PluginManager {
2122
public static final String LOCAL_PLUGINS_PATH = "./system_plugin_list.json";
2223

@@ -30,17 +31,13 @@ public static PluginManager getInstance() {
3031
}
3132

3233
private final List<PluginJarInfo> pluginList = new ArrayList<>(); // 插件列表
34+
private final List<PluginJarInfo> devPluginList = new ArrayList<>(); // dev插件列表
3335

3436
public PluginManager() {
3537
this.loadLocalPluginConfiguration();
3638
}
3739

3840
////////////////////////////////////////////////////////////// 查询插件
39-
40-
public List<PluginJarInfo> getPluginList() {
41-
return this.pluginList;
42-
}
43-
4441
public List<PluginJarInfo> getEnabledPluginList() {
4542
return this.pluginList.stream().filter(PluginJarInfo::getIsEnable).collect(Collectors.toList());
4643
}
@@ -62,20 +59,38 @@ private void loadLocalPluginConfiguration() {
6259
if (!Files.exists(path)) {
6360
return;
6461
}
65-
6662
String json = Files.readString(path, StandardCharsets.UTF_8);
67-
JSON.parseArray(json, PluginJarInfo.class).forEach(plugin -> {
68-
this.addOrUpdatePlugin(plugin, exist -> {
69-
exist.setLocalVersionNumber(plugin.getLocalVersionNumber());
70-
exist.setIsDownload(plugin.getIsDownload());
71-
exist.setIsEnable(plugin.getIsEnable());
72-
});
73-
});
63+
this.pluginList.addAll(JSON.parseArray(json, PluginJarInfo.class));
7464
} catch (IOException e) {
7565
log.error("读取插件配置失败", e);
7666
}
7767
}
7868

69+
public void loadLocalDevPluginConfiguration() {
70+
try {
71+
// 系统类库路径
72+
File libPath = new File("devLibs/");
73+
// 获取所有的.jar文件
74+
File[] jarFiles = libPath.listFiles((dir, name) -> name.endsWith(".jar"));
75+
if (jarFiles != null) {
76+
for (File file : jarFiles) {
77+
try {
78+
PluginJarInfo plugin = new PluginJarInfo();
79+
plugin.setLocalPath(file.getAbsolutePath());
80+
plugin.setIsEnable(true);
81+
plugin.setIsDownload(true);
82+
PluginParser.parse(file, plugin);
83+
devPluginList.add(plugin);
84+
} catch (Exception e) {
85+
log.error("解析失败", e);
86+
}
87+
}
88+
}
89+
} catch (Exception e) {
90+
log.error("添加libs中jar包到系统中异常:", e);
91+
}
92+
}
93+
7994
/**
8095
* 解析本地插件文件
8196
*/
@@ -98,48 +113,30 @@ public void loadLocalPlugins() {
98113

99114
/**
100115
* 添加本地插件。如果与已有插件同名,则替换已有插件信息
101-
*
102-
* @param jarFile 插件文件
103116
*/
104-
public AddPluginResult addPluginJar(File jarFile) {
105-
PluginClassLoader tmpClassLoader = PluginClassLoader.create(jarFile);
106-
PluginJarInfo newJarInfo = new PluginJarInfo();
107-
newJarInfo.setLocalPath(jarFile.getAbsolutePath());
108-
newJarInfo.setIsEnable(true);
109-
newJarInfo.setIsDownload(true);
110-
PluginParser.parse(jarFile, newJarInfo, tmpClassLoader);
111-
112-
for (int i = 0; i < pluginList.size(); i++) {
113-
PluginJarInfo jarInfo = pluginList.get(i);
114-
if (Objects.equals(jarInfo.getFxmlPath(), newJarInfo.getFxmlPath())) {
115-
newJarInfo.setVersion(jarInfo.getVersion());
116-
newJarInfo.setSynopsis(jarInfo.getSynopsis());
117-
pluginList.set(i, newJarInfo);
118-
saveToFileQuietly();
119-
return new AddPluginResult(newJarInfo, false);
120-
}
121-
}
122-
123-
pluginList.add(newJarInfo);
124-
saveToFileQuietly();
125-
return new AddPluginResult(newJarInfo, true);
126-
}
127-
128-
/**
129-
* 向插件列表添加插件信息或更改插件列表中已有的插件信息
130-
*
131-
* @param pluginJarInfo 需要添加的插件信息
132-
* @param ifExists 如果插件已存在,则不会将 pluginJarInfo 加入,
133-
* 而是提供已有的插件信息对象供调用者更新其属性
134-
*/
135-
public void addOrUpdatePlugin(PluginJarInfo pluginJarInfo, Consumer<PluginJarInfo> ifExists) {
136-
PluginJarInfo exists = getPlugin(pluginJarInfo.getJarName());
137-
if (exists == null) {
138-
this.pluginList.add(pluginJarInfo);
139-
} else {
140-
ifExists.accept(exists);
141-
}
142-
}
117+
// public AddPluginResult addPluginJar(File jarFile) {
118+
// PluginClassLoader tmpClassLoader = PluginClassLoader.create(jarFile);
119+
// PluginJarInfo newJarInfo = new PluginJarInfo();
120+
// newJarInfo.setLocalPath(jarFile.getAbsolutePath());
121+
// newJarInfo.setIsEnable(true);
122+
// newJarInfo.setIsDownload(true);
123+
// PluginParser.parse(jarFile, newJarInfo, tmpClassLoader);
124+
//
125+
// for (int i = 0; i < pluginList.size(); i++) {
126+
// PluginJarInfo jarInfo = pluginList.get(i);
127+
// if (Objects.equals(jarInfo.getFxmlPath(), newJarInfo.getFxmlPath())) {
128+
// newJarInfo.setVersion(jarInfo.getVersion());
129+
// newJarInfo.setSynopsis(jarInfo.getSynopsis());
130+
// pluginList.set(i, newJarInfo);
131+
// saveToFileQuietly();
132+
// return new AddPluginResult(newJarInfo, false);
133+
// }
134+
// }
135+
//
136+
// pluginList.add(newJarInfo);
137+
// saveToFileQuietly();
138+
// return new AddPluginResult(newJarInfo, true);
139+
// }
143140

144141
// 保存配置,如果失败则抛出异常
145142
public void saveToFile() throws IOException {

src/main/java/com/xwintop/xJavaFxTool/services/index/PluginManageService.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ public void deletePlugin() {
192192
Map<String, String> dataRow = pluginManageController.getOriginPluginData().get(index);
193193
String jarName = dataRow.get("jarName");
194194
PluginJarInfo pluginJarInfo = this.pluginManager.getPlugin(jarName);
195-
if (BooleanUtils.isNotTrue(pluginJarInfo.getIsDownload())) {
195+
if (pluginJarInfo == null || BooleanUtils.isNotTrue(pluginJarInfo.getIsDownload())) {
196196
FxAlerts.info("提示", pluginJarInfo.getName() + " 该插件未下载");
197197
return;
198198
}
@@ -204,8 +204,10 @@ public void deletePlugin() {
204204
FileUtils.delete(pluginJarInfo.getFile());
205205
dataRow.put("isEnableTableColumn", "false");
206206
dataRow.put("isDownloadTableColumn", "下载");
207-
pluginJarInfo.setIsEnable(false);
208-
pluginJarInfo.setIsDownload(false);
207+
PluginJarInfo pluginJarInfo1 = this.pluginJarInfoMap.get(jarName);
208+
pluginJarInfo1.setIsEnable(false);
209+
pluginJarInfo1.setIsDownload(false);
210+
this.pluginManager.getPluginList().remove(pluginJarInfo);
209211
PluginManager.getInstance().saveToFile();
210212
pluginManageController.getPluginDataTableView().refresh();
211213
AppEvents.fire(new PluginEvent(PluginEvent.PLUGIN_DOWNLOADED, pluginJarInfo));

0 commit comments

Comments
 (0)