Search in sources :

Example 6 with Node

use of net.luckperms.api.node.Node in project LuckPerms by lucko.

the class NodeMapMutable method addAll.

@Override
public Difference<Node> addAll(Iterable<? extends Node> set) {
    Difference<Node> result = new Difference<>();
    this.lock.lock();
    try {
        for (Node n : set) {
            result.mergeFrom(add(n));
        }
    } finally {
        this.lock.unlock();
    }
    return result;
}
Also used : Node(net.luckperms.api.node.Node) InheritanceNode(net.luckperms.api.node.types.InheritanceNode) Difference(me.lucko.luckperms.common.util.Difference)

Example 7 with Node

use of net.luckperms.api.node.Node in project LuckPerms by lucko.

the class PermissionHolder method resolveInheritedNodes.

public List<Node> resolveInheritedNodes(QueryOptions queryOptions) {
    if (!queryOptions.flag(Flag.RESOLVE_INHERITANCE)) {
        return getOwnNodes(queryOptions);
    }
    List<Node> nodes = new ArrayList<>();
    InheritanceGraph graph = this.plugin.getInheritanceGraphFactory().getGraph(queryOptions);
    for (PermissionHolder holder : graph.traverse(this)) {
        for (DataType dataType : holder.queryOrder(queryOptions)) {
            holder.getData(dataType).copyTo(nodes, queryOptions);
        }
    }
    return nodes;
}
Also used : Node(net.luckperms.api.node.Node) InheritanceNode(net.luckperms.api.node.types.InheritanceNode) ArrayList(java.util.ArrayList) DataType(net.luckperms.api.model.data.DataType) InheritanceGraph(me.lucko.luckperms.common.inheritance.InheritanceGraph)

Example 8 with Node

use of net.luckperms.api.node.Node in project LuckPerms by lucko.

the class PermissionHolder method unsetNode.

public DataMutateResult.WithMergedNode unsetNode(DataType dataType, Node node, @Nullable Duration duration) {
    if (node.getExpiry() != null && duration != null) {
        Node otherMatch = getData(dataType).nodesInContext(node.getContexts()).stream().filter(NodeEqualityPredicate.IGNORE_EXPIRY_TIME_AND_VALUE.equalTo(node)).findFirst().orElse(null);
        if (otherMatch != null && otherMatch.getExpiry() != null) {
            NodeMap data = getData(dataType);
            Instant newExpiry = otherMatch.getExpiry().minus(duration);
            if (newExpiry.isAfter(Instant.now())) {
                Node newNode = node.toBuilder().expiry(newExpiry).build();
                // Remove the old Node & add the new one.
                Difference<Node> changes = data.removeThenAdd(otherMatch, newNode);
                invalidateCache();
                this.plugin.getEventDispatcher().dispatchNodeChanges(this, dataType, changes);
                return new MergedNodeResult(DataMutateResult.SUCCESS, newNode);
            }
        }
    }
    // Fallback to the normal handling.
    return new MergedNodeResult(unsetNode(dataType, node), null);
}
Also used : Node(net.luckperms.api.node.Node) InheritanceNode(net.luckperms.api.node.types.InheritanceNode) Instant(java.time.Instant) RecordedNodeMap(me.lucko.luckperms.common.model.nodemap.RecordedNodeMap) NodeMap(me.lucko.luckperms.common.model.nodemap.NodeMap)

Example 9 with Node

use of net.luckperms.api.node.Node in project LuckPerms by lucko.

the class PermissionHolder method resolveInheritedNodesSorted.

public SortedSet<Node> resolveInheritedNodesSorted(QueryOptions queryOptions) {
    if (!queryOptions.flag(Flag.RESOLVE_INHERITANCE)) {
        return getOwnNodesSorted(queryOptions);
    }
    SortedSet<Node> nodes = new TreeSet<>(NodeWithContextComparator.reverse());
    InheritanceGraph graph = this.plugin.getInheritanceGraphFactory().getGraph(queryOptions);
    for (PermissionHolder holder : graph.traverse(this)) {
        for (DataType dataType : holder.queryOrder(queryOptions)) {
            holder.getData(dataType).copyTo(nodes, queryOptions);
        }
    }
    return nodes;
}
Also used : TreeSet(java.util.TreeSet) Node(net.luckperms.api.node.Node) InheritanceNode(net.luckperms.api.node.types.InheritanceNode) DataType(net.luckperms.api.model.data.DataType) InheritanceGraph(me.lucko.luckperms.common.inheritance.InheritanceGraph)

Example 10 with Node

use of net.luckperms.api.node.Node in project LuckPerms by lucko.

the class PermissionHolder method setNode.

public DataMutateResult.WithMergedNode setNode(DataType dataType, Node node, TemporaryNodeMergeStrategy mergeStrategy) {
    if (node.getExpiry() != null && mergeStrategy != TemporaryNodeMergeStrategy.NONE) {
        Node otherMatch = getData(dataType).nodesInContext(node.getContexts()).stream().filter(NodeEqualityPredicate.IGNORE_EXPIRY_TIME_AND_VALUE.equalTo(node)).findFirst().orElse(null);
        if (otherMatch != null && otherMatch.getExpiry() != null) {
            NodeMap data = getData(dataType);
            Node newNode = null;
            switch(mergeStrategy) {
                case ADD_NEW_DURATION_TO_EXISTING:
                    {
                        // Create a new Node with the same properties, but add the expiry dates together
                        Instant newExpiry = otherMatch.getExpiry().plus(Duration.between(Instant.now(), node.getExpiry()));
                        newNode = node.toBuilder().expiry(newExpiry).build();
                        break;
                    }
                case REPLACE_EXISTING_IF_DURATION_LONGER:
                    {
                        // Only replace if the new expiry time is greater than the old one.
                        if (node.getExpiry().compareTo(otherMatch.getExpiry()) > 0) {
                            newNode = node;
                        }
                        break;
                    }
            }
            if (newNode != null) {
                // Remove the old Node & add the new one.
                Difference<Node> changes = data.removeThenAdd(otherMatch, newNode);
                invalidateCache();
                this.plugin.getEventDispatcher().dispatchNodeChanges(this, dataType, changes);
                return new MergedNodeResult(DataMutateResult.SUCCESS, newNode);
            }
        }
    }
    // Fallback to the normal handling.
    return new MergedNodeResult(setNode(dataType, node, true), node);
}
Also used : Node(net.luckperms.api.node.Node) InheritanceNode(net.luckperms.api.node.types.InheritanceNode) Instant(java.time.Instant) RecordedNodeMap(me.lucko.luckperms.common.model.nodemap.RecordedNodeMap) NodeMap(me.lucko.luckperms.common.model.nodemap.NodeMap)

Aggregations

Node (net.luckperms.api.node.Node)74 InheritanceNode (net.luckperms.api.node.types.InheritanceNode)28 ArrayList (java.util.ArrayList)23 Map (java.util.Map)16 UUID (java.util.UUID)16 ImmutableContextSet (net.luckperms.api.context.ImmutableContextSet)13 NodeEntry (me.lucko.luckperms.common.storage.misc.NodeEntry)12 MetaNode (net.luckperms.api.node.types.MetaNode)12 Group (me.lucko.luckperms.common.model.Group)11 HashMap (java.util.HashMap)10 List (java.util.List)10 PermissionHolder (me.lucko.luckperms.common.model.PermissionHolder)9 Difference (me.lucko.luckperms.common.util.Difference)9 DataType (net.luckperms.api.model.data.DataType)9 Connection (java.sql.Connection)7 User (me.lucko.luckperms.common.model.User)7 MutableContextSet (net.luckperms.api.context.MutableContextSet)7 PrefixNode (net.luckperms.api.node.types.PrefixNode)7 SuffixNode (net.luckperms.api.node.types.SuffixNode)7 IOException (java.io.IOException)6