[New] Simplified instantiating policy: tx.getPolicy(PolicyDef)

This commit is contained in:
Robert von Burg 2019-04-26 15:49:59 +02:00
parent 66ac578304
commit 321d63dfb3
3 changed files with 22 additions and 11 deletions

View File

@ -39,9 +39,12 @@ import li.strolch.model.audit.Audit;
import li.strolch.model.parameter.Parameter;
import li.strolch.model.parameter.StringListParameter;
import li.strolch.model.parameter.StringParameter;
import li.strolch.model.policy.PolicyDef;
import li.strolch.model.query.*;
import li.strolch.model.timedstate.StrolchTimedState;
import li.strolch.model.timevalue.IValue;
import li.strolch.policy.PolicyHandler;
import li.strolch.policy.StrolchPolicy;
import li.strolch.privilege.base.AccessDeniedException;
import li.strolch.privilege.base.PrivilegeException;
import li.strolch.privilege.base.PrivilegeModelException;
@ -360,6 +363,11 @@ public abstract class AbstractTransaction implements StrolchTransaction {
return this.container;
}
@Override
public <T extends StrolchPolicy> T getPolicy(PolicyDef policyDef) {
return getContainer().getComponent(PolicyHandler.class).getPolicy(policyDef, this);
}
private void assertQueryAllowed(StrolchQuery query) {
try {
getPrivilegeContext().validateAction(query);

View File

@ -32,6 +32,7 @@ import li.strolch.model.audit.AuditVisitor;
import li.strolch.model.parameter.Parameter;
import li.strolch.model.parameter.StringListParameter;
import li.strolch.model.parameter.StringParameter;
import li.strolch.model.policy.PolicyDef;
import li.strolch.model.query.ActivityQuery;
import li.strolch.model.query.AuditQuery;
import li.strolch.model.query.OrderQuery;
@ -39,6 +40,7 @@ import li.strolch.model.query.ResourceQuery;
import li.strolch.model.visitor.ActivityVisitor;
import li.strolch.model.visitor.OrderVisitor;
import li.strolch.model.visitor.ResourceVisitor;
import li.strolch.policy.StrolchPolicy;
import li.strolch.privilege.base.AccessDeniedException;
import li.strolch.privilege.model.Certificate;
import li.strolch.privilege.model.PrivilegeContext;
@ -161,6 +163,18 @@ public interface StrolchTransaction extends AutoCloseable {
*/
ComponentContainer getContainer();
/**
* Instantiates the policy using the given {@link PolicyDef}
*
* @param policyDef
* the policy definition
* @param <T>
* the type of policy to return
*
* @return the policy
*/
<T extends StrolchPolicy> T getPolicy(PolicyDef policyDef);
/**
* Returns the currently set {@link TransactionCloseStrategy}
*

View File

@ -25,17 +25,6 @@ import li.strolch.persistence.api.StrolchTransaction;
* </p>
*
* <p>
* Objects which require delegation can use a {@link PolicyConfiguration} element and then retrieve a StrolchPolicy
* instance from this {@link PolicyHandler}.
* </p>
*
* <p>
* {@link PolicyConfiguration} have a mapping of a policy type, i.e. an interface for a specific delegation. This
* interface has concrete implementations which are then returned by the {@link PolicyHandler} depending on the current
* configuration
* </p>
*
* <p>
* The resolving of a policy instance is handled by a {@link PolicyDefVisitor}
* <p>
*