Fixed Group/User reloading

Fixed Group.clone(dataholder)
This commit is contained in:
ElgarL 2011-11-05 15:41:40 +00:00
parent 1c7e0e5b9f
commit cf9ef46182
3 changed files with 36 additions and 9 deletions

View File

@ -76,8 +76,13 @@ public class Group extends DataUnit implements Cloneable {
if (dataSource.groupExists(this.getName())) { if (dataSource.groupExists(this.getName())) {
return null; return null;
} }
Group clone = getDataSource().createGroup(this.getName());
clone.inherits = new ArrayList<String>(this.getInherits()); Group clone = dataSource.createGroup(this.getName());
// Don't add inheritance for GlobalGroups
if (getDataSource() != null) {
clone.inherits = new ArrayList<String>(this.getInherits());
}
for (String perm : this.getPermissionList()) { for (String perm : this.getPermissionList()) {
clone.addPermission(perm); clone.addPermission(perm);
} }

View File

@ -67,7 +67,7 @@ public class User extends DataUnit implements Cloneable {
if (dataSource.getGroup(group) == null) { if (dataSource.getGroup(group) == null) {
clone.setGroup(dataSource.getDefaultGroup()); clone.setGroup(dataSource.getDefaultGroup());
} else { } else {
clone.setGroup(this.getGroupName()); clone.setGroup(dataSource.getGroup(this.getGroupName()));
} }
for (String perm : this.getPermissionList()) { for (String perm : this.getPermissionList()) {
clone.addPermission(perm); clone.addPermission(perm);

View File

@ -38,7 +38,7 @@ import org.yaml.snakeyaml.reader.UnicodeReader;
public class WorldDataHolder { public class WorldDataHolder {
/** /**
* * World name
*/ */
protected String name; protected String name;
/** /**
@ -321,32 +321,54 @@ public class WorldDataHolder {
} }
} }
/**
* Refresh Group data from file
*/
public void reloadGroups() { public void reloadGroups() {
GroupManager.setLoaded(false); GroupManager.setLoaded(false);
try { try {
// temporary holder in case the load fails. // temporary holder in case the load fails.
WorldDataHolder ph = new WorldDataHolder(this.getName()); WorldDataHolder ph = new WorldDataHolder(this.getName());
loadGroups(ph, getGroupsFile()); loadGroups(ph, getGroupsFile());
this.groups = ph.getGroups(); // transfer new data
resetGroups();
for (Group tempGroup : ph.getGroupList()) {
if (tempGroup.getDataSource() != null) tempGroup.clone(this);
}
this.setDefaultGroup(this.getGroup(ph.getDefaultGroup().getName()));
this.removeGroupsChangedFlag(); this.removeGroupsChangedFlag();
this.timeStampGroups = ph.getTimeStampGroups(); this.timeStampGroups = ph.getTimeStampGroups();
} catch (Exception ex) { } catch (Exception ex) {
Logger.getLogger(WorldDataHolder.class.getName()).log(Level.SEVERE, null, ex); Logger.getLogger(WorldDataHolder.class.getName()).log(Level.WARNING, null, ex);
} }
GroupManager.setLoaded(true); GroupManager.setLoaded(true);
} }
/**
* Refresh Users data from file
*/
public void reloadUsers() { public void reloadUsers() {
GroupManager.setLoaded(false); GroupManager.setLoaded(false);
try { try {
// temporary holder in case the load fails. // temporary holder in case the load fails.
WorldDataHolder ph = new WorldDataHolder(this.getName()); WorldDataHolder ph = new WorldDataHolder(this.getName());
// copy groups for reference
for (Group tempGroup : this.getGroupList()) {
if (tempGroup.getDataSource() != null) tempGroup.clone(ph);
}
// setup the default group before loading user data.
ph.setDefaultGroup(ph.getGroup(this.getDefaultGroup().getName()));
loadUsers(ph, getUsersFile()); loadUsers(ph, getUsersFile());
this.users = ph.getUsers(); // transfer new data
resetUsers();
for (User tempUser : ph.getUserList()) {
tempUser.clone(this);
}
this.removeUsersChangedFlag(); this.removeUsersChangedFlag();
this.timeStampUsers = ph.getTimeStampUsers(); this.timeStampUsers = ph.getTimeStampUsers();
} catch (Exception ex) { } catch (Exception ex) {
Logger.getLogger(WorldDataHolder.class.getName()).log(Level.SEVERE, null, ex); Logger.getLogger(WorldDataHolder.class.getName()).log(Level.WARNING, null, ex);
} }
GroupManager.setLoaded(true); GroupManager.setLoaded(true);
} }
@ -576,7 +598,7 @@ public class WorldDataHolder {
} }
if ((Boolean.parseBoolean(thisGroupNode.get("default").toString()))) { if ((Boolean.parseBoolean(thisGroupNode.get("default").toString()))) {
if (ph.getDefaultGroup() != null) { if (ph.getDefaultGroup() != null) {
GroupManager.logger.warning("The group " + thisGrp.getName() + " is declaring be default where" + ph.getDefaultGroup().getName() + " already was."); GroupManager.logger.warning("The group " + thisGrp.getName() + " is claiming to be default where" + ph.getDefaultGroup().getName() + " already was.");
GroupManager.logger.warning("Overriding first request."); GroupManager.logger.warning("Overriding first request.");
} }
ph.setDefaultGroup(thisGrp); ph.setDefaultGroup(thisGrp);