Skip to content
This repository was archived by the owner on Feb 5, 2025. It is now read-only.

Commit b70e299

Browse files
committed
доработка документации
1 parent aa58007 commit b70e299

File tree

4 files changed

+156
-3
lines changed

4 files changed

+156
-3
lines changed

README.md

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,16 @@
11
# JSPlugins
22

3-
Easy plugin system libray.
3+
Простая система плагинов, которая может быть как встроенной библиотекой, так и самостоятельным приложением.
44

5-
**[JavaDoc](https://intervi.github.io/JSPlugins/)**
5+
**[JavaDoc](https://intervi.github.io/jsplugins/)**
6+
7+
## Команды
8+
9+
* **exit** - выгрузить все плагины и выйти
10+
* **load** *[path to jar]* - загрузить плагин
11+
* **unload** *[plugin name]* - выгрузить плагин
12+
* **reload** *[plugin name]* - перезагрузить плагин
13+
* **plugins** - список плагинов
14+
* **info** *[plugin name]* - информация о плагине
15+
* **cmds** *[plugin name]* - команды плагина
16+
* **help** - вывод справки

src/ru/intervi/jsplugins/api/PluginListener.java

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,55 @@
55

66
import ru.intervi.jsplugins.manager.PluginManager;
77

8+
/**
9+
* интерфейс плагина
10+
*/
811
public interface PluginListener {
12+
/** название плагина */
913
public String getName();
14+
/** версия плагина */
1015
public int getVersion();
16+
/** имя автора */
1117
public String getAuthor();
18+
/** почта автора */
1219
public String getAuthorEmail();
20+
/** страница плагина или автора */
1321
public String getAuthorURL();
22+
/** описание плагина */
1423
public String getDescription();
24+
/**
25+
* событие загрузки плагина
26+
* @param manager
27+
*/
1528
public void onLoad(PluginManager manager);
29+
/**
30+
* событие загрузки другого плагина
31+
* @param plugin
32+
*/
1633
public void onLoadedNewPlugin(PluginListener plugin);
34+
/**
35+
* событие выгрузки другого плагина
36+
* @param plugin
37+
*/
1738
public void onUnloadPlugin(PluginListener plugin);
39+
/** событие выгрузки плагина */
1840
public void onUnload();
41+
/**
42+
* обработка команды
43+
* @param message команда
44+
* @param args аргументы
45+
* @return вывод пользователю
46+
*/
1947
public String onCommand(String message, String[] args);
48+
/**
49+
* команды плагина
50+
* @return ключ - команда, значение - описание
51+
*/
2052
public Map<String, String> getCommands();
53+
/**
54+
* универсальный метод для взаимодействия плагинов между собой
55+
* @param data
56+
* @return
57+
*/
2158
public List<? extends Object> communicate(List<? extends Object> data);
2259
}

src/ru/intervi/jsplugins/api/SimplePlugin.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55

66
import ru.intervi.jsplugins.manager.PluginManager;
77

8+
/**
9+
* класс-заглушка, чтобы не реализовывать не нужные методы
10+
*/
811
public class SimplePlugin implements PluginListener {
912
public String getName() {
1013
return "SimplePlugin";

src/ru/intervi/jsplugins/manager/PluginManager.java

Lines changed: 103 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@
1414
import ru.intervi.jsplugins.api.InvalidPluginException;
1515
import ru.intervi.jsplugins.api.PluginListener;
1616

17+
/**
18+
* управление плагинами
19+
*/
1720
public class PluginManager {
1821
public PluginManager() {
1922
STANDALONE = false;
@@ -27,6 +30,16 @@ public PluginManager(Main main) {
2730
private ConcurrentHashMap<String, String> cmdsMap = new ConcurrentHashMap<String, String>();
2831
private final boolean STANDALONE;
2932

33+
/**
34+
* загрузить плагин
35+
* @param path
36+
* @throws NullPointerException
37+
* @throws IOException
38+
* @throws InvalidPluginException
39+
* @throws ClassNotFoundException
40+
* @throws InstantiationException
41+
* @throws IllegalAccessException
42+
*/
3043
public void loadPlugin(File path) throws NullPointerException, IOException, InvalidPluginException, ClassNotFoundException, InstantiationException, IllegalAccessException {
3144
if (!path.isFile()) throw new NullPointerException("not found: " + path.getAbsolutePath());
3245
URLClassLoader loader = new URLClassLoader(new URL[] {path.toURI().toURL()});
@@ -47,20 +60,54 @@ public void loadPlugin(File path) throws NullPointerException, IOException, Inva
4760
} finally {loader.close();}
4861
}
4962

63+
/**
64+
* загрузить плагин
65+
* @param path
66+
* @throws NullPointerException
67+
* @throws IOException
68+
* @throws InvalidPluginException
69+
* @throws ClassNotFoundException
70+
* @throws InstantiationException
71+
* @throws IllegalAccessException
72+
*/
5073
public void loadPlugin(String path) throws NullPointerException, IOException, InvalidPluginException, ClassNotFoundException, InstantiationException, IllegalAccessException {
5174
loadPlugin(new File(path));
5275
}
5376

77+
/**
78+
* перезагрузить плагин
79+
* @param plugin
80+
* @throws NullPointerException
81+
* @throws ClassNotFoundException
82+
* @throws InstantiationException
83+
* @throws IllegalAccessException
84+
* @throws IOException
85+
* @throws InvalidPluginException
86+
*/
5487
public void reloadPlugin(PluginListener plugin) throws NullPointerException, ClassNotFoundException, InstantiationException, IllegalAccessException, IOException, InvalidPluginException {
5588
File path = new File(plugin.getClass().getProtectionDomain().getCodeSource().getLocation().getPath());
5689
unloadPlugin(plugin);
5790
loadPlugin(path);
5891
}
5992

93+
/**
94+
* перезагрузить плагин
95+
* @param name
96+
* @throws NullPointerException
97+
* @throws ClassNotFoundException
98+
* @throws InstantiationException
99+
* @throws IllegalAccessException
100+
* @throws IOException
101+
* @throws InvalidPluginException
102+
*/
60103
public void reloadPlugin(String name) throws NullPointerException, ClassNotFoundException, InstantiationException, IllegalAccessException, IOException, InvalidPluginException {
61104
reloadPlugin(map.get(name));
62105
}
63106

107+
/**
108+
* выгрузить плагин
109+
* @param plugin
110+
*/
64111
public void unloadPlugin(PluginListener plugin) {
65112
plugin.onUnload();
66113
for (PluginListener p : map.values()) p.onUnloadPlugin(plugin);
@@ -69,50 +116,105 @@ public void unloadPlugin(PluginListener plugin) {
69116
if (STANDALONE) Main.LOGGER.warning(plugin.getName() + " unloaded");
70117
}
71118

119+
/**
120+
* выгрузить плагин
121+
* @param name
122+
*/
72123
public void unloadPlugin(String name) {
73124
unloadPlugin(map.get(name));
74125
}
75126

127+
/**
128+
* проверка плагина на валидность
129+
* @param path
130+
* @return
131+
*/
76132
public boolean isValidPlugin(File path) {
77-
return true;
133+
return true; //будет написано позже
78134
}
79135

136+
/**
137+
* проверка плагина на валидность
138+
* @param path
139+
* @return
140+
*/
80141
public boolean isValidPlugin(String path) {
81142
return isValidPlugin(new File(path));
82143
}
83144

145+
/**
146+
* проверка, загружен ли плагин
147+
* @param plugin
148+
* @return true если да
149+
*/
84150
public boolean hasPlugin(PluginListener plugin) {
85151
return map.containsValue(plugin);
86152
}
87153

154+
/**
155+
* проверка, загружен ли плагин
156+
* @param name
157+
* @return true если да
158+
*/
88159
public boolean hasPlugin(String name) {
89160
return map.containsKey(name);
90161
}
91162

163+
/**
164+
* получить плагин по названию
165+
* @param name
166+
* @return
167+
*/
92168
public PluginListener getPluginFromName(String name) {
93169
return map.get(name);
94170
}
95171

172+
/**
173+
* получить все плагины
174+
* @return
175+
*/
96176
public Collection<PluginListener> getPlugins() {
97177
return map.values();
98178
}
99179

180+
/**
181+
* проверка, есть ли загруженные плагины
182+
* @return true если да
183+
*/
100184
public boolean isEmpty() {
101185
return map.isEmpty();
102186
}
103187

188+
/**
189+
* количество загруженных плагинов
190+
* @return
191+
*/
104192
public int size() {
105193
return map.size();
106194
}
107195

196+
/**
197+
* получить директорию с плагинами
198+
* @return
199+
*/
108200
public static File getPluginsFolder() {
109201
return new File('.' + File.separatorChar + "plugins");
110202
}
111203

204+
/**
205+
* получить JAR-файл библиотеки
206+
* @return
207+
*/
112208
public File getJarPath() {
113209
return new File(this.getClass().getProtectionDomain().getCodeSource().getLocation().getPath());
114210
}
115211

212+
/**
213+
* отправить команду
214+
* @param message команда
215+
* @param args аргументы
216+
* @return вывод пользователю
217+
*/
116218
public String sendCommand(String message, String[] args) {
117219
return map.get(cmdsMap.get(message)).onCommand(message, args);
118220
}

0 commit comments

Comments
 (0)