Search in sources :

Example 36 with Group

use of me.lucko.luckperms.common.model.Group in project LuckPerms by lucko.

the class MongoDao method createAndLoadGroup.

@Override
public Group createAndLoadGroup(String name) {
    Group group = this.plugin.getGroupManager().getOrMake(name);
    group.getIoLock().lock();
    try {
        MongoCollection<Document> c = this.database.getCollection(this.prefix + "groups");
        try (MongoCursor<Document> cursor = c.find(new Document("_id", group.getName())).iterator()) {
            if (cursor.hasNext()) {
                Document d = cursor.next();
                Set<Node> nodes = nodesFromDoc(d).stream().map(NodeModel::toNode).collect(Collectors.toSet());
                group.setEnduringNodes(nodes);
            } else {
                c.insertOne(groupToDoc(group));
            }
        }
    } finally {
        group.getIoLock().unlock();
    }
    group.getRefreshBuffer().requestDirectly();
    return group;
}
Also used : Group(me.lucko.luckperms.common.model.Group) Node(me.lucko.luckperms.api.Node) Document(org.bson.Document)

Example 37 with Group

use of me.lucko.luckperms.common.model.Group in project LuckPerms by lucko.

the class MongoDao method loadGroup.

@Override
public Optional<Group> loadGroup(String name) {
    Group group = this.plugin.getGroupManager().getIfLoaded(name);
    if (group != null) {
        group.getIoLock().lock();
    }
    try {
        MongoCollection<Document> c = this.database.getCollection(this.prefix + "groups");
        try (MongoCursor<Document> cursor = c.find(new Document("_id", name)).iterator()) {
            if (!cursor.hasNext()) {
                return Optional.empty();
            }
            if (group == null) {
                group = this.plugin.getGroupManager().getOrMake(name);
                group.getIoLock().lock();
            }
            Document d = cursor.next();
            Set<Node> nodes = nodesFromDoc(d).stream().map(NodeModel::toNode).collect(Collectors.toSet());
            group.setEnduringNodes(nodes);
        }
    } finally {
        if (group != null) {
            group.getIoLock().unlock();
        }
    }
    group.getRefreshBuffer().requestDirectly();
    return Optional.of(group);
}
Also used : Group(me.lucko.luckperms.common.model.Group) Node(me.lucko.luckperms.api.Node) Document(org.bson.Document)

Example 38 with Group

use of me.lucko.luckperms.common.model.Group in project LuckPerms by lucko.

the class SqlDao method loadGroup.

@Override
public Optional<Group> loadGroup(String name) throws SQLException {
    // Check the group actually exists
    List<String> groups = new ArrayList<>();
    try (Connection c = this.provider.getConnection()) {
        try (PreparedStatement ps = c.prepareStatement(this.prefix.apply(GROUP_SELECT_ALL))) {
            try (ResultSet rs = ps.executeQuery()) {
                while (rs.next()) {
                    groups.add(rs.getString("name").toLowerCase());
                }
            }
        }
    }
    if (!groups.contains(name)) {
        return Optional.empty();
    }
    Group group = this.plugin.getGroupManager().getOrMake(name);
    group.getIoLock().lock();
    try {
        List<NodeModel> data = new ArrayList<>();
        try (Connection c = this.provider.getConnection()) {
            try (PreparedStatement ps = c.prepareStatement(this.prefix.apply(GROUP_PERMISSIONS_SELECT))) {
                ps.setString(1, group.getName());
                try (ResultSet rs = ps.executeQuery()) {
                    while (rs.next()) {
                        String permission = rs.getString("permission");
                        boolean value = rs.getBoolean("value");
                        String server = rs.getString("server");
                        String world = rs.getString("world");
                        long expiry = rs.getLong("expiry");
                        String contexts = rs.getString("contexts");
                        data.add(deserializeNode(permission, value, server, world, expiry, contexts));
                    }
                }
            }
        }
        if (!data.isEmpty()) {
            Set<Node> nodes = data.stream().map(NodeModel::toNode).collect(Collectors.toSet());
            group.setEnduringNodes(nodes);
        } else {
            group.clearNodes();
        }
    } finally {
        group.getIoLock().unlock();
    }
    group.getRefreshBuffer().requestDirectly();
    return Optional.of(group);
}
Also used : Group(me.lucko.luckperms.common.model.Group) Node(me.lucko.luckperms.api.Node) ArrayList(java.util.ArrayList) Connection(java.sql.Connection) PreparedStatement(java.sql.PreparedStatement) NodeModel(me.lucko.luckperms.common.node.NodeModel) ResultSet(java.sql.ResultSet)

Example 39 with Group

use of me.lucko.luckperms.common.model.Group in project LuckPerms by lucko.

the class SqlDao method loadAllGroups.

@Override
public void loadAllGroups() throws SQLException {
    List<String> groups = new ArrayList<>();
    try (Connection c = this.provider.getConnection()) {
        try (PreparedStatement ps = c.prepareStatement(this.prefix.apply(GROUP_SELECT_ALL))) {
            try (ResultSet rs = ps.executeQuery()) {
                while (rs.next()) {
                    groups.add(rs.getString("name").toLowerCase());
                }
            }
        }
    }
    boolean success = true;
    for (String g : groups) {
        try {
            loadGroup(g);
        } catch (Exception e) {
            e.printStackTrace();
            success = false;
        }
    }
    if (!success) {
        throw new RuntimeException("Exception occurred whilst loading a group");
    }
    GroupManager<?> gm = this.plugin.getGroupManager();
    gm.getAll().values().stream().filter(g -> !groups.contains(g.getName())).forEach(gm::unload);
}
Also used : LogEntry(me.lucko.luckperms.api.LogEntry) AbstractDao(me.lucko.luckperms.common.storage.dao.AbstractDao) TypeToken(com.google.gson.reflect.TypeToken) Connection(java.sql.Connection) UserIdentifier(me.lucko.luckperms.common.references.UserIdentifier) AbstractConnectionFactory(me.lucko.luckperms.common.storage.dao.sql.connection.AbstractConnectionFactory) BulkUpdate(me.lucko.luckperms.common.bulkupdate.BulkUpdate) Function(java.util.function.Function) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) PlayerSaveResult(me.lucko.luckperms.common.storage.PlayerSaveResult) NodeModel(me.lucko.luckperms.common.node.NodeModel) SQLException(java.sql.SQLException) Gson(com.google.gson.Gson) ResultSet(java.sql.ResultSet) Map(java.util.Map) PostgreConnectionFactory(me.lucko.luckperms.common.storage.dao.sql.connection.hikari.PostgreConnectionFactory) LuckPermsPlugin(me.lucko.luckperms.common.plugin.LuckPermsPlugin) HeldPermission(me.lucko.luckperms.api.HeldPermission) ExtendedLogEntry(me.lucko.luckperms.common.actionlog.ExtendedLogEntry) GroupManager(me.lucko.luckperms.common.managers.group.GroupManager) NodeHeldPermission(me.lucko.luckperms.common.node.NodeHeldPermission) Set(java.util.Set) Log(me.lucko.luckperms.common.actionlog.Log) NodeFactory(me.lucko.luckperms.common.node.NodeFactory) UUID(java.util.UUID) ContextSetJsonSerializer(me.lucko.luckperms.common.contexts.ContextSetJsonSerializer) PreparedStatement(java.sql.PreparedStatement) Maps(com.google.common.collect.Maps) InputStreamReader(java.io.InputStreamReader) Collectors(java.util.stream.Collectors) StandardCharsets(java.nio.charset.StandardCharsets) Track(me.lucko.luckperms.common.model.Track) List(java.util.List) TrackManager(me.lucko.luckperms.common.managers.track.TrackManager) Type(java.lang.reflect.Type) SQLiteConnectionFactory(me.lucko.luckperms.common.storage.dao.sql.connection.file.SQLiteConnectionFactory) Statement(java.sql.Statement) Group(me.lucko.luckperms.common.model.Group) Optional(java.util.Optional) Node(me.lucko.luckperms.api.Node) BufferedReader(java.io.BufferedReader) User(me.lucko.luckperms.common.model.User) InputStream(java.io.InputStream) ArrayList(java.util.ArrayList) Connection(java.sql.Connection) ResultSet(java.sql.ResultSet) PreparedStatement(java.sql.PreparedStatement) SQLException(java.sql.SQLException)

Example 40 with Group

use of me.lucko.luckperms.common.model.Group in project LuckPerms by lucko.

the class ParentsByWeightHolder method calculateValue.

@Override
protected String calculateValue() {
    Contexts contexts = this.user.getPlugin().getContextForUser(this.user).orElse(null);
    if (contexts == null) {
        contexts = this.user.getPlugin().getContextManager().getStaticContexts();
    }
    Set<Group> groups = new LinkedHashSet<>();
    for (Node node : this.user.getOwnNodes(contexts.getContexts())) {
        if (!node.getValuePrimitive() || !node.isGroupNode()) {
            continue;
        }
        Group group = this.user.getPlugin().getGroupManager().getIfLoaded(node.getGroupName());
        if (group != null) {
            groups.add(group);
        }
    }
    Group bestGroup = null;
    if (!groups.isEmpty()) {
        int best = 0;
        for (Group g : groups) {
            int weight = g.getWeight().orElse(0);
            if (bestGroup == null || g.getWeight().orElse(0) > best) {
                bestGroup = g;
                best = weight;
            }
        }
    }
    return bestGroup == null ? null : bestGroup.getName();
}
Also used : LinkedHashSet(java.util.LinkedHashSet) Group(me.lucko.luckperms.common.model.Group) Node(me.lucko.luckperms.api.Node) Contexts(me.lucko.luckperms.api.Contexts)

Aggregations

Group (me.lucko.luckperms.common.model.Group)52 User (me.lucko.luckperms.common.model.User)20 Node (me.lucko.luckperms.api.Node)16 Set (java.util.Set)10 UUID (java.util.UUID)10 Track (me.lucko.luckperms.common.model.Track)10 NodeFactory (me.lucko.luckperms.common.node.NodeFactory)10 List (java.util.List)9 LuckPermsPlugin (me.lucko.luckperms.common.plugin.LuckPermsPlugin)9 Contexts (me.lucko.luckperms.api.Contexts)8 PermissionHolder (me.lucko.luckperms.common.model.PermissionHolder)8 Sender (me.lucko.luckperms.common.sender.Sender)8 HashSet (java.util.HashSet)7 Map (java.util.Map)7 Collectors (java.util.stream.Collectors)7 MutableContextSet (me.lucko.luckperms.api.context.MutableContextSet)7 CommandResult (me.lucko.luckperms.common.command.CommandResult)7 CommandPermission (me.lucko.luckperms.common.command.access.CommandPermission)7 LocaleManager (me.lucko.luckperms.common.locale.LocaleManager)7 CommandSpec (me.lucko.luckperms.common.locale.command.CommandSpec)7