22
33import com .alibaba .fastjson .JSON ;
44import com .xwintop .xJavaFxTool .model .PluginJarInfo ;
5+ import lombok .Data ;
56import lombok .extern .slf4j .Slf4j ;
67
78import java .io .File ;
1314import java .util .ArrayList ;
1415import java .util .List ;
1516import java .util .Objects ;
16- import java .util .function .Consumer ;
1717import java .util .stream .Collectors ;
1818
1919@ Slf4j
20+ @ Data
2021public 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 {
0 commit comments