[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.Parameter;
import li.strolch.model.parameter.StringListParameter; import li.strolch.model.parameter.StringListParameter;
import li.strolch.model.parameter.StringParameter; import li.strolch.model.parameter.StringParameter;
import li.strolch.model.policy.PolicyDef;
import li.strolch.model.query.*; import li.strolch.model.query.*;
import li.strolch.model.timedstate.StrolchTimedState; import li.strolch.model.timedstate.StrolchTimedState;
import li.strolch.model.timevalue.IValue; 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.AccessDeniedException;
import li.strolch.privilege.base.PrivilegeException; import li.strolch.privilege.base.PrivilegeException;
import li.strolch.privilege.base.PrivilegeModelException; import li.strolch.privilege.base.PrivilegeModelException;
@ -360,6 +363,11 @@ public abstract class AbstractTransaction implements StrolchTransaction {
return this.container; 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) { private void assertQueryAllowed(StrolchQuery query) {
try { try {
getPrivilegeContext().validateAction(query); 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.Parameter;
import li.strolch.model.parameter.StringListParameter; import li.strolch.model.parameter.StringListParameter;
import li.strolch.model.parameter.StringParameter; import li.strolch.model.parameter.StringParameter;
import li.strolch.model.policy.PolicyDef;
import li.strolch.model.query.ActivityQuery; import li.strolch.model.query.ActivityQuery;
import li.strolch.model.query.AuditQuery; import li.strolch.model.query.AuditQuery;
import li.strolch.model.query.OrderQuery; 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.ActivityVisitor;
import li.strolch.model.visitor.OrderVisitor; import li.strolch.model.visitor.OrderVisitor;
import li.strolch.model.visitor.ResourceVisitor; import li.strolch.model.visitor.ResourceVisitor;
import li.strolch.policy.StrolchPolicy;
import li.strolch.privilege.base.AccessDeniedException; import li.strolch.privilege.base.AccessDeniedException;
import li.strolch.privilege.model.Certificate; import li.strolch.privilege.model.Certificate;
import li.strolch.privilege.model.PrivilegeContext; import li.strolch.privilege.model.PrivilegeContext;
@ -161,6 +163,18 @@ public interface StrolchTransaction extends AutoCloseable {
*/ */
ComponentContainer getContainer(); 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} * Returns the currently set {@link TransactionCloseStrategy}
* *

View File

@ -25,17 +25,6 @@ import li.strolch.persistence.api.StrolchTransaction;
* </p> * </p>
* *
* <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} * The resolving of a policy instance is handled by a {@link PolicyDefVisitor}
* <p> * <p>
* *