Skip to content

Commit c6a071b

Browse files
refactor AdminFunction Args (#210)
* remove Arg generic from AdminFunctions and just use a universal Args object for both defined functions and custom ones. ignore plugin ops and routines in ispolicyempty (#209) * fix import error
1 parent 9ac1797 commit c6a071b

File tree

114 files changed

+684
-1084
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

114 files changed

+684
-1084
lines changed

src/main/java/gov/nist/csd/pm/core/common/event/EventContext.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,20 @@
44

55
public record EventContext(EventContextUser user, String opName, Map<String, Object> args) {
66

7+
@Override
8+
public boolean equals(Object o) {
9+
if (this == o) {
10+
return true;
11+
}
12+
if (!(o instanceof EventContext that)) {
13+
return false;
14+
}
15+
return Objects.equals(opName, that.opName) && Objects.equals(user, that.user)
16+
&& Objects.equals(args, that.args);
17+
}
18+
19+
@Override
20+
public int hashCode() {
21+
return Objects.hash(user, opName, args);
22+
}
723
}

src/main/java/gov/nist/csd/pm/core/impl/memory/pap/store/MemoryOperationsStore.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public void setResourceOperations(AccessRightSet accessRightSet) throws PMExcept
2727
}
2828

2929
@Override
30-
public void createAdminOperation(Operation<?, ?> operation) throws PMException {
30+
public void createAdminOperation(Operation<?> operation) throws PMException {
3131
policy.operations.put(operation.getName(), operation);
3232
}
3333

@@ -47,7 +47,7 @@ public Collection<String> getAdminOperationNames() throws PMException {
4747
}
4848

4949
@Override
50-
public Operation<?, ?> getAdminOperation(String operationName) throws PMException {
50+
public Operation<?> getAdminOperation(String operationName) throws PMException {
5151
return policy.operations.get(operationName);
5252
}
5353
}

src/main/java/gov/nist/csd/pm/core/impl/memory/pap/store/MemoryPolicy.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ public class MemoryPolicy {
2222
protected Map<Long, Collection<Prohibition>> nodeProhibitions;
2323
protected Map<String, Collection<Prohibition>> processProhibitions;
2424
protected List<Obligation> obligations;
25-
protected Map<String, Operation<?, ?>> operations;
26-
protected Map<String, Routine<?, ?>> routines;
25+
protected Map<String, Operation<?>> operations;
26+
protected Map<String, Routine<?>> routines;
2727

2828
public MemoryPolicy() {
2929
reset();

src/main/java/gov/nist/csd/pm/core/impl/memory/pap/store/MemoryRoutinesStore.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,15 @@ public MemoryRoutinesStore(MemoryPolicy policy, MemoryTx tx, TxCmdTracker txCmdT
1313
}
1414

1515
@Override
16-
public void createAdminRoutine(Routine<?, ?> routine) throws PMException {
16+
public void createAdminRoutine(Routine<?> routine) throws PMException {
1717
policy.routines.put(routine.getName(), routine);
1818

1919
txCmdTracker.trackOp(tx, new TxCmd.CreateAdminRoutine(routine));
2020
}
2121

2222
@Override
2323
public void deleteAdminRoutine(String name) throws PMException {
24-
Routine<?, ?> routine = policy.routines.get(name);
24+
Routine<?> routine = policy.routines.get(name);
2525

2626
policy.routines.remove(name);
2727

@@ -34,7 +34,7 @@ public Collection<String> getAdminRoutineNames() throws PMException {
3434
}
3535

3636
@Override
37-
public Routine<?, ?> getAdminRoutine(String routineName) throws PMException {
37+
public Routine<?> getAdminRoutine(String routineName) throws PMException {
3838
return policy.routines.get(routineName);
3939
}
4040
}

src/main/java/gov/nist/csd/pm/core/impl/memory/pap/store/TxCmd.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -210,9 +210,9 @@ public void rollback(MemoryPolicyStore memoryPolicyStore) throws PMException {
210210

211211
static class CreateAdminRoutine extends TxCmd {
212212

213-
private final Routine<?, ?> routine;
213+
private final Routine<?> routine;
214214

215-
public CreateAdminRoutine(Routine<?, ?> routine) {
215+
public CreateAdminRoutine(Routine<?> routine) {
216216
this.routine = routine;
217217
}
218218

@@ -224,9 +224,9 @@ public void rollback(MemoryPolicyStore memoryPolicyStore) throws PMException {
224224

225225
static class DeleteAdminRoutine extends TxCmd {
226226

227-
private final Routine<?, ?> routine;
227+
private final Routine<?> routine;
228228

229-
public DeleteAdminRoutine(Routine<?, ?> routine) {
229+
public DeleteAdminRoutine(Routine<?> routine) {
230230
this.routine = routine;
231231
}
232232

src/main/java/gov/nist/csd/pm/core/impl/neo4j/embedded/pap/store/Neo4jEmbeddedOperationsStore.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public void setResourceOperations(AccessRightSet resourceOperations) throws PMEx
4242
}
4343

4444
@Override
45-
public void createAdminOperation(Operation<?, ?> operation) throws PMException {
45+
public void createAdminOperation(Operation<?> operation) throws PMException {
4646
String hex = Neo4jUtil.serialize(operation);
4747

4848
txHandler.runTx(tx -> {
@@ -98,16 +98,16 @@ public Collection<String> getAdminOperationNames() throws PMException {
9898
}
9999

100100
@Override
101-
public Operation<?, ?> getAdminOperation(String operationName) throws PMException {
102-
AtomicReference<Operation<?, ?>> operation = new AtomicReference<>();
101+
public Operation<?> getAdminOperation(String operationName) throws PMException {
102+
AtomicReference<Operation<?>> operation = new AtomicReference<>();
103103

104104
txHandler.runTx(tx -> {
105105
Node node = tx.findNode(ADMIN_OPERATION_LABEL, NAME_PROPERTY, operationName);
106106
if (node == null) {
107107
return;
108108
}
109109

110-
Operation<?, ?> op = (Operation<?, ?>) deserialize(node.getProperty(DATA_PROPERTY).toString(), classLoader);
110+
Operation<?> op = (Operation<?>) deserialize(node.getProperty(DATA_PROPERTY).toString(), classLoader);
111111
operation.set(op);
112112
});
113113

src/main/java/gov/nist/csd/pm/core/impl/neo4j/embedded/pap/store/Neo4jEmbeddedRoutinesStore.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public Neo4jEmbeddedRoutinesStore(TxHandler txHandler, ClassLoader classLoader)
2424
}
2525

2626
@Override
27-
public void createAdminRoutine(Routine<?, ?> routine) throws PMException {
27+
public void createAdminRoutine(Routine<?> routine) throws PMException {
2828
String hex = Neo4jUtil.serialize(routine);
2929

3030
txHandler.runTx(tx -> {
@@ -63,16 +63,16 @@ public Collection<String> getAdminRoutineNames() throws PMException {
6363
}
6464

6565
@Override
66-
public Routine<?, ?> getAdminRoutine(String routineName) throws PMException {
67-
AtomicReference<Routine<?, ?>> routine = new AtomicReference<>();
66+
public Routine<?> getAdminRoutine(String routineName) throws PMException {
67+
AtomicReference<Routine<?>> routine = new AtomicReference<>();
6868

6969
txHandler.runTx(tx -> {
7070
Node node = tx.findNode(ADMIN_ROUTINE_LABEL, NAME_PROPERTY, routineName);
7171
if (node == null) {
7272
return;
7373
}
7474

75-
routine.set((Routine<?, ?>) deserialize(node.getProperty(DATA_PROPERTY).toString(), classLoader));
75+
routine.set((Routine<?>) deserialize(node.getProperty(DATA_PROPERTY).toString(), classLoader));
7676
});
7777

7878
return routine.get();

src/main/java/gov/nist/csd/pm/core/pap/PAP.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import gov.nist.csd.pm.core.pap.function.AdminFunctionExecutor;
1111
import gov.nist.csd.pm.core.common.graph.node.Node;
1212
import gov.nist.csd.pm.core.common.tx.Transactional;
13-
import gov.nist.csd.pm.core.pap.function.arg.NoArgs;
1413
import gov.nist.csd.pm.core.pap.function.op.PrivilegeChecker;
1514
import gov.nist.csd.pm.core.pap.id.IdGenerator;
1615
import gov.nist.csd.pm.core.pap.modification.PolicyModification;
@@ -27,7 +26,6 @@
2726
import gov.nist.csd.pm.core.pdp.bootstrap.PolicyBootstrapper;
2827

2928
import java.util.*;
30-
import scala.concurrent.impl.FutureConvertersImpl.P;
3129

3230
import static gov.nist.csd.pm.core.common.graph.node.NodeType.ANY;
3331
import static gov.nist.csd.pm.core.common.graph.node.Properties.NO_PROPERTIES;
@@ -124,8 +122,7 @@ public void bootstrap(PolicyBootstrapper bootstrapper) throws PMException {
124122
}
125123

126124
@Override
127-
public <R, A extends Args> R executeAdminFunction(AdminFunction<R, A> adminFunction,
128-
Map<String, Object> args) throws PMException {
125+
public <R> R executeAdminFunction(AdminFunction<R> adminFunction, Map<String, Object> args) throws PMException {
129126
return adminFunction.execute(this, adminFunction.validateAndPrepareArgs(args));
130127
}
131128

@@ -172,7 +169,7 @@ public void executePML(UserContext author, String input) throws PMException {
172169

173170
ExecutionContext ctx = new ExecutionContext(author, this);
174171

175-
ctx.executeStatements(compiledPML, new NoArgs());
172+
ctx.executeStatements(compiledPML, new Args());
176173
}
177174

178175
public List<PMLStatement<?>> compilePML(String input) throws PMException {

src/main/java/gov/nist/csd/pm/core/pap/admin/AdminOperations.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
public class AdminOperations {
2121

22-
public static List<Operation<?, ?>> ADMIN_OPERATIONS = List.of(
22+
public static List<Operation<?>> ADMIN_OPERATIONS = List.of(
2323
new AssignOp(),
2424
new AssociateOp(),
2525
new CreateObjectAttributeOp(),
@@ -52,8 +52,8 @@ public static boolean isAdminOperation(String opName) {
5252
return ADMIN_OP_NAMES.contains(opName);
5353
}
5454

55-
public static Operation<?, ?> get(String opName) throws AdminOperationDoesNotExistException {
56-
for (Operation<?, ?> op : ADMIN_OPERATIONS) {
55+
public static Operation<?> get(String opName) throws AdminOperationDoesNotExistException {
56+
for (Operation<?> op : ADMIN_OPERATIONS) {
5757
if (op.getName().equals(opName)) {
5858
return op;
5959
}
@@ -64,7 +64,7 @@ public static boolean isAdminOperation(String opName) {
6464

6565
private static Set<String> adminOperationNames() {
6666
Set<String> names = new HashSet<>();
67-
for (Operation<?, ?> op : ADMIN_OPERATIONS) {
67+
for (Operation<?> op : ADMIN_OPERATIONS) {
6868
names.add(op.getName());
6969
}
7070

src/main/java/gov/nist/csd/pm/core/pap/function/AdminFunction.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
import java.util.Set;
1515
import java.util.stream.Collectors;
1616

17-
public abstract class AdminFunction<R, A extends Args> implements Serializable {
17+
public abstract class AdminFunction<R> implements Serializable {
1818

1919
private static final long serialVersionUID = 1L;
2020
protected final String name;
@@ -25,11 +25,9 @@ public AdminFunction(String name, List<FormalParameter<?>> parameters) {
2525
this.parameters = parameters;
2626
}
2727

28-
public abstract R execute(PAP pap, A args) throws PMException;
28+
public abstract R execute(PAP pap, Args args) throws PMException;
2929

30-
protected abstract A prepareArgs(Map<FormalParameter<?>, Object> argsMap);
31-
32-
public A validateAndPrepareArgs(Map<String, Object> argsMap) {
30+
public Args validateAndPrepareArgs(Map<String, Object> argsMap) {
3331
Set<String> expectedKeys = parameters.stream()
3432
.map(FormalParameter::getName)
3533
.collect(Collectors.toSet());
@@ -60,7 +58,7 @@ public A validateAndPrepareArgs(Map<String, Object> argsMap) {
6058
argsWithFormalParams.put(param, value);
6159
}
6260

63-
return prepareArgs(argsWithFormalParams);
61+
return new Args(argsWithFormalParams);
6462
}
6563

6664
public String getName() {
@@ -78,7 +76,7 @@ public <T> T prepareArg(FormalParameter<T> formalParameter, Map<FormalParameter<
7876
@Override
7977
public boolean equals(Object o) {
8078
if (this == o) return true;
81-
if (!(o instanceof AdminFunction<?, ?> that)) return false;
79+
if (!(o instanceof AdminFunction<?> that)) return false;
8280
return Objects.equals(name, that.name) && Objects.equals(parameters, that.parameters);
8381
}
8482

0 commit comments

Comments
 (0)