PageRenderTime 28ms CodeModel.GetById 11ms RepoModel.GetById 0ms app.codeStats 1ms

/Groups/src/main/java/com/elmakers/mine/bukkit/groups/GroupManager.java

https://github.com/elBukkit/PersistencePlugin
Java | 403 lines | 311 code | 74 blank | 18 comment | 41 complexity | 66f35faf041d941e34987585ebc6815d MD5 | raw file
  1. package com.elmakers.mine.bukkit.groups;
  2. import java.io.File;
  3. import java.io.FileNotFoundException;
  4. import java.io.FileReader;
  5. import java.io.Reader;
  6. import java.util.ArrayList;
  7. import java.util.List;
  8. import java.util.Map;
  9. import java.util.Set;
  10. import java.util.logging.Logger;
  11. import org.bukkit.Server;
  12. import org.bukkit.command.CommandSender;
  13. import org.bukkit.entity.Player;
  14. import org.yaml.snakeyaml.Yaml;
  15. import org.yaml.snakeyaml.constructor.SafeConstructor;
  16. import com.elmakers.mine.bukkit.permission.dao.ProfileData;
  17. import com.elmakers.mine.bukkit.persisted.Persistence;
  18. import com.elmakers.mine.bukkit.persistence.dao.Group;
  19. import com.elmakers.mine.bukkit.persistence.dao.Message;
  20. import com.elmakers.mine.bukkit.persistence.dao.PlayerData;
  21. import com.elmakers.mine.bukkit.persistence.dao.PluginCommand;
  22. import com.elmakers.mine.bukkit.utilities.PluginUtilities;
  23. public class GroupManager
  24. {
  25. protected static final Logger log = Logger.getLogger("Minecraft");
  26. private static final Yaml yaml = new Yaml(new SafeConstructor());
  27. private Message addedPlayerToGroupMessage;
  28. private Message createdGroupMessage;
  29. private Message denyAccessMessage;
  30. private PluginCommand denyCommand;
  31. private PluginCommand denyGroupCommand;
  32. private PluginCommand denyPlayerCommand;
  33. private Message grantAccessMessage;
  34. private PluginCommand grantCommand;
  35. private PluginCommand grantGroupCommand;
  36. private PluginCommand grantPlayerCommand;
  37. private PluginCommand groupAddCommand;
  38. private PluginCommand groupCommand;
  39. private PluginCommand groupCreateCommand;
  40. private Message groupExistsMessage;
  41. private Message groupNotFoundMessage;
  42. private PluginCommand groupRemoveCommand;
  43. protected final Persistence persistence;
  44. private Message playerNotFoundMessage;
  45. private Message removedPlayerFromGroupMessage;
  46. protected final Server server;
  47. private Message unknownProfileMessage;
  48. protected final PluginUtilities utilities;
  49. public GroupManager(Server server, Persistence persistence, PluginUtilities utilities, File dataFolder)
  50. {
  51. this.persistence = persistence;
  52. this.server = server;
  53. this.utilities = utilities;
  54. initialize();
  55. }
  56. public void initialize()
  57. {
  58. GroupManagerDefaults d = new GroupManagerDefaults();
  59. // Messages
  60. addedPlayerToGroupMessage = utilities.getMessage("addedPlayerToGroup", d.addedPlayerToGroupMessage);
  61. removedPlayerFromGroupMessage = utilities.getMessage("removedPlayerFromGroup", d.removedPlayerFromGroupMessage);
  62. createdGroupMessage = utilities.getMessage("createdGroup", d.createdGroupMessage);
  63. denyAccessMessage = utilities.getMessage("denyAccess", d.denyAccessMessage);
  64. grantAccessMessage = utilities.getMessage("grantAccess", d.grantAccessMessage);
  65. groupExistsMessage = utilities.getMessage("groupExistss", d.groupExistsMessage);
  66. playerNotFoundMessage = utilities.getMessage("playerNotFound", d.playerNotFoundMessage);
  67. groupNotFoundMessage = utilities.getMessage("groupNotFound", d.groupNotFoundMessage);
  68. unknownProfileMessage = utilities.getMessage("unknownProfile", d.unknownProfileMessage);
  69. // Commands
  70. groupCommand = utilities.getGeneralCommand(d.groupCommand[0], d.groupCommand[1], d.groupCommand[2]);
  71. groupCreateCommand = groupCommand.getSubCommand(d.groupCreateCommand[0], d.groupCreateCommand[1], d.groupCreateCommand[2]);
  72. groupAddCommand = groupCommand.getSubCommand(d.groupAddCommand[0], d.groupAddCommand[1], d.groupAddCommand[2]);
  73. groupRemoveCommand = groupCommand.getSubCommand(d.groupRemoveCommand[0], d.groupRemoveCommand[1], d.groupRemoveCommand[2]);
  74. denyCommand = utilities.getGeneralCommand(d.denyCommand[0], d.denyCommand[1], d.denyCommand[2]);
  75. denyPlayerCommand = denyCommand.getSubCommand(d.denyPlayerCommand[0], d.denyPlayerCommand[1], d.denyPlayerCommand[2]);
  76. denyGroupCommand = denyCommand.getSubCommand(d.denyGroupCommand[0], d.denyGroupCommand[1], d.denyGroupCommand[2]);
  77. grantCommand = utilities.getGeneralCommand(d.grantCommand[0], d.grantCommand[1], d.grantCommand[2]);
  78. grantPlayerCommand = grantCommand.getSubCommand(d.grantPlayerCommand[0], d.grantPlayerCommand[1], d.grantPlayerCommand[2]);
  79. grantGroupCommand = grantCommand.getSubCommand(d.grantGroupCommand[0], d.grantGroupCommand[1], d.grantGroupCommand[2]);
  80. // Bind commands
  81. groupCreateCommand.bind("onCreateGroup");
  82. groupAddCommand.bind("onAddToGroup");
  83. groupRemoveCommand.bind("onRemoveFromGroup");
  84. denyPlayerCommand.bind("onDenyPlayer");
  85. denyGroupCommand.bind("onDenyGroupr");
  86. grantPlayerCommand.bind("onGrantPlayer");
  87. grantGroupCommand.bind("onGrantGroup");
  88. }
  89. public boolean onAddToGroup(CommandSender messageOutput, String[] parameters)
  90. {
  91. if (parameters.length < 2)
  92. {
  93. return false;
  94. }
  95. String playerName = parameters[0];
  96. String groupName = parameters[1];
  97. // First check for group
  98. Group group = persistence.get(groupName, Group.class);
  99. if (group == null)
  100. {
  101. groupNotFoundMessage.sendTo(messageOutput, groupName);
  102. return true;
  103. }
  104. // Check for player data
  105. PlayerData user = persistence.get(playerName, PlayerData.class);
  106. if (user == null)
  107. {
  108. playerNotFoundMessage.sendTo(messageOutput, playerName);
  109. return true;
  110. }
  111. user.addToGroup(group);
  112. persistence.put(user);
  113. addedPlayerToGroupMessage.sendTo(messageOutput, playerName, groupName);
  114. return true;
  115. }
  116. public boolean onCreateGroup(CommandSender messageOutput, String[] parameters)
  117. {
  118. if (parameters.length == 0)
  119. {
  120. return false;
  121. }
  122. String groupName = parameters[0];
  123. // First check for existing
  124. Group group = persistence.get(groupName, Group.class);
  125. if (group != null)
  126. {
  127. groupExistsMessage.sendTo(messageOutput, groupName);
  128. return true;
  129. }
  130. group = new Group(groupName);
  131. persistence.put(group);
  132. createdGroupMessage.sendTo(messageOutput, groupName);
  133. return true;
  134. }
  135. public boolean onDenyGroup(CommandSender messageOutput, String[] parameters)
  136. {
  137. if (parameters.length < 2)
  138. {
  139. return false;
  140. }
  141. String groupName = parameters[0];
  142. String profileName = parameters[1];
  143. // First check for permission profile
  144. ProfileData profileData = persistence.get(profileName, ProfileData.class);
  145. if (profileData == null)
  146. {
  147. unknownProfileMessage.sendTo(messageOutput, profileName);
  148. return true;
  149. }
  150. // Check for group
  151. Group group = persistence.get(groupName, Group.class);
  152. if (group == null)
  153. {
  154. groupNotFoundMessage.sendTo(messageOutput, groupName);
  155. return true;
  156. }
  157. group.denyPermission(profileData);
  158. persistence.put(group);
  159. denyAccessMessage.sendTo(messageOutput, profileName, "group", groupName);
  160. return true;
  161. }
  162. public boolean onDenyPlayer(CommandSender messageOutput, String[] parameters)
  163. {
  164. if (parameters.length < 2)
  165. {
  166. return false;
  167. }
  168. String playerName = parameters[0];
  169. String profileName = parameters[1];
  170. // First check for permission profile
  171. ProfileData profileData = persistence.get(profileName, ProfileData.class);
  172. if (profileData == null)
  173. {
  174. unknownProfileMessage.sendTo(messageOutput, profileName);
  175. return true;
  176. }
  177. // Check for player data
  178. PlayerData user = persistence.get(playerName, PlayerData.class);
  179. if (user == null)
  180. {
  181. playerNotFoundMessage.sendTo(messageOutput, playerName);
  182. return true;
  183. }
  184. user.denyPermission(profileData);
  185. persistence.put(user);
  186. denyAccessMessage.sendTo(messageOutput, profileName, "player", playerName);
  187. return true;
  188. }
  189. public boolean onGrantGroup(CommandSender messageOutput, String[] parameters)
  190. {
  191. if (parameters.length < 2)
  192. {
  193. return false;
  194. }
  195. String groupName = parameters[0];
  196. String profileName = parameters[1];
  197. // First check for permission profile
  198. ProfileData profileData = persistence.get(profileName, ProfileData.class);
  199. if (profileData == null)
  200. {
  201. unknownProfileMessage.sendTo(messageOutput, profileName);
  202. return true;
  203. }
  204. // Check for group
  205. Group group = persistence.get(groupName, Group.class);
  206. if (group == null)
  207. {
  208. groupNotFoundMessage.sendTo(messageOutput, groupName);
  209. return true;
  210. }
  211. group.grantPermission(profileData);
  212. persistence.put(group);
  213. grantAccessMessage.sendTo(messageOutput, profileName, "group", groupName);
  214. return true;
  215. }
  216. public boolean onGrantPlayer(CommandSender messageOutput, String[] parameters)
  217. {
  218. if (parameters.length < 2)
  219. {
  220. return false;
  221. }
  222. String playerName = parameters[0];
  223. String profileName = parameters[1];
  224. // First check for permission profile
  225. ProfileData profileData = persistence.get(profileName, ProfileData.class);
  226. if (profileData == null)
  227. {
  228. unknownProfileMessage.sendTo(messageOutput, profileName);
  229. return true;
  230. }
  231. // Check for player data
  232. PlayerData user = persistence.get(playerName, PlayerData.class);
  233. if (user == null)
  234. {
  235. playerNotFoundMessage.sendTo(messageOutput, playerName);
  236. return true;
  237. }
  238. user.grantPermission(profileData);
  239. persistence.put(user);
  240. grantAccessMessage.sendTo(messageOutput, profileName, "player", playerName);
  241. return true;
  242. }
  243. // TODO: Less copy+paste! In a hurry....
  244. public boolean onRemoveFromGroup(CommandSender messageOutput, String[] parameters)
  245. {
  246. if (parameters.length < 2)
  247. {
  248. return false;
  249. }
  250. String playerName = parameters[0];
  251. String groupName = parameters[1];
  252. // First check for group
  253. Group group = persistence.get(groupName, Group.class);
  254. if (group == null)
  255. {
  256. groupNotFoundMessage.sendTo(messageOutput, group);
  257. return true;
  258. }
  259. // Check for player data
  260. PlayerData user = persistence.get(playerName, PlayerData.class);
  261. if (user == null)
  262. {
  263. playerNotFoundMessage.sendTo(messageOutput, playerName);
  264. return true;
  265. }
  266. user.removeFromGroup(group);
  267. persistence.put(user);
  268. removedPlayerFromGroupMessage.sendTo(messageOutput, playerName, groupName);
  269. return true;
  270. }
  271. public void loadUsers(File usersFile)
  272. {
  273. // Import players and groups
  274. FileReader loader = null;
  275. try
  276. {
  277. loader = new FileReader(usersFile);
  278. if (!loadGroups(loader, usersFile))
  279. {
  280. log.info("Persistence: There's an error with " + usersFile + " - hopefully more info about that above.");
  281. }
  282. }
  283. catch (FileNotFoundException ex)
  284. {
  285. log.info("Persistence: Create a plugins/Persistence/" + usersFile + " to use internal groups");
  286. loader = null;
  287. }
  288. }
  289. protected boolean loadGroups(Reader reader, File usersFile)
  290. {
  291. @SuppressWarnings("unchecked")
  292. Map<String, Object> map = (Map<String, Object>)yaml.load(reader);
  293. Set<String> keys = map.keySet();
  294. List<PlayerData> players = new ArrayList<PlayerData>();
  295. for (String key : keys)
  296. {
  297. try
  298. {
  299. String playerName = key;
  300. PlayerData playerData = utilities.getPlayer(playerName);
  301. if (playerData != null)
  302. {
  303. playerData.clearPermissions();
  304. players.add(playerData);
  305. Object checkList = map.get(key);
  306. if (checkList == null || !(checkList instanceof List))
  307. {
  308. log.warning("Persistence: Player '" + playerName + "' not a list in " + usersFile.getName());
  309. }
  310. else
  311. {
  312. List<Object> playerPermissions = (List<Object>)checkList;
  313. persistence.put(playerData);
  314. }
  315. }
  316. else
  317. {
  318. log.warning("Persistence: Unknown player '" + playerName + "' in " + usersFile.getName());
  319. }
  320. }
  321. catch (ClassCastException ex)
  322. {
  323. return false;
  324. }
  325. }
  326. log.info("Persistence: loaded " + players.size() + " players from " + usersFile.getName());
  327. return true;
  328. }
  329. }