package org.buckit.datasource.flatfile; import java.util.HashMap; import java.util.List; import java.util.Map; import org.buckit.Config; import org.buckit.access.AccessLevel; import org.buckit.access.Group; import org.buckit.datasource.DataSourceManager; import org.buckit.datasource.type.AccessDataSource; public class FlatFileAccessDataSource implements AccessDataSource{ private Map<Integer, Group> groupsint; private Map<String, Group> groups; private Map<Integer, AccessLevel> accesslevelsint; private Map<String, AccessLevel> accesslevels; private static final Group defaultGroup = new Group(0,"default","","world"); private static final AccessLevel defaultLevel = new AccessLevel(0,new Group[]{defaultGroup},"default",null,false,false); private DataSourceManager datasource; public FlatFileAccessDataSource(DataSourceManager dataSource) { datasource = dataSource; } public DataSourceManager getDataSource() { return datasource; } @Override public boolean load() { groups = new HashMap<String, Group>(); groupsint = new HashMap<Integer, Group>(); accesslevels = new HashMap<String, AccessLevel>(); accesslevelsint = new HashMap<Integer, AccessLevel>(); List<String> lines = FileHandler.getLines("groups"); Group group; LineReader r; int id; String name, commands, worlds; for (int i=0; i<lines.size(); i++) { r = new LineReader(lines.get(i)); id = r.nextInt(); name = r.nextStr(); commands = r.nextStr(); worlds = r.nextStr(); group = new Group( id, name, commands, worlds ); groups.put(group.getName(), group); groupsint.put(group.getId(), group); } FFLog.newInit("Accessgroups", groups.size()); List<String> lines2 = FileHandler.getLines("accesslevels"); AccessLevel access; String usernameformat, accessgroups; Boolean admingroup, canbuild; for (int i=0; i<lines2.size(); i++) { r = new LineReader(lines2.get(i)); id = r.nextInt(); name = r.nextStr(); usernameformat = r.nextStr(); accessgroups = r.nextStr(); admingroup = r.nextBool(); canbuild = r.nextBool(); access = new AccessLevel( id, getGroups(accessgroups), name, usernameformat, canbuild, admingroup ); accesslevels.put(access.getName(), access); accesslevelsint.put(access.getId(), access); } FFLog.newInit("Accesslevels", accesslevels.size()); return true; } @Override public AccessLevel getAccessLevel(int id) { if(accesslevelsint.containsKey(id)) return accesslevelsint.get(id); else return defaultLevel; } @Override public AccessLevel getAccessLevel(String name) { if(accesslevels.containsKey(name)) return accesslevels.get(name); else return defaultLevel; } @Override public Group getGroup(int id) { if(groupsint.containsKey(id)) return groupsint.get(id); else return defaultGroup; } @Override public Group getGroup(String name) { if(groups.containsKey(name)) return groups.get(name); else return defaultGroup; } private Group[] getGroups(String list) { String[] split = list.split(Config.DATABASE_DELIMITER); Group[] group = new Group[split.length]; for (int i = 0; i < split.length; i++) { try { group[i] = getGroup(Integer.parseInt(split[i])); } catch (NumberFormatException e) { group[i] = getGroup(split[i]); } if (group[i] == null) { } } return group; } }