Skip to content

Commit

Permalink
Fixed spring circular dependency problem.
Browse files Browse the repository at this point in the history
  • Loading branch information
mederly committed Jul 24, 2017
1 parent 5719250 commit d340836
Show file tree
Hide file tree
Showing 13 changed files with 78 additions and 83 deletions.
Expand Up @@ -51,15 +51,18 @@ public class AssignmentTargetSearchExpressionEvaluatorFactory implements Express
private ModelService modelService;
private SecurityEnforcer securityEnforcer;

public AssignmentTargetSearchExpressionEvaluatorFactory(PrismContext prismContext, Protector protector, ObjectResolver objectResolver, ModelService modelService, SecurityEnforcer securityEnforcer) {
public AssignmentTargetSearchExpressionEvaluatorFactory(PrismContext prismContext, Protector protector, ModelService modelService, SecurityEnforcer securityEnforcer) {
super();
this.prismContext = prismContext;
this.protector = protector;
this.objectResolver = objectResolver;
this.modelService = modelService;
this.securityEnforcer = securityEnforcer;
}

public void setObjectResolver(ObjectResolver objectResolver) {
this.objectResolver = objectResolver;
}

/* (non-Javadoc)
* @see com.evolveum.midpoint.common.expression.ExpressionEvaluatorFactory#getElementName()
*/
Expand Down
Expand Up @@ -48,14 +48,17 @@ public class AssociationFromLinkExpressionEvaluatorFactory implements Expression
private ObjectResolver objectResolver;
private ModelService modelService;

public AssociationFromLinkExpressionEvaluatorFactory(PrismContext prismContext, Protector protector, ObjectResolver objectResolver, ModelService modelService) {
public AssociationFromLinkExpressionEvaluatorFactory(PrismContext prismContext, Protector protector, ModelService modelService) {
super();
this.prismContext = prismContext;
this.protector = protector;
this.objectResolver = objectResolver;
this.modelService = modelService;
}

public void setObjectResolver(ObjectResolver objectResolver) {
this.objectResolver = objectResolver;
}

/* (non-Javadoc)
* @see com.evolveum.midpoint.common.expression.ExpressionEvaluatorFactory#getElementName()
*/
Expand Down
Expand Up @@ -51,15 +51,18 @@ public class AssociationTargetSearchExpressionEvaluatorFactory implements Expres
private ModelService modelService;
private SecurityEnforcer securityEnforcer;

public AssociationTargetSearchExpressionEvaluatorFactory(PrismContext prismContext, Protector protector, ObjectResolver objectResolver, ModelService modelService, SecurityEnforcer securityEnforcer) {
public AssociationTargetSearchExpressionEvaluatorFactory(PrismContext prismContext, Protector protector, ModelService modelService, SecurityEnforcer securityEnforcer) {
super();
this.prismContext = prismContext;
this.protector = protector;
this.objectResolver = objectResolver;
this.modelService = modelService;
this.securityEnforcer = securityEnforcer;
}

public void setObjectResolver(ObjectResolver objectResolver) {
this.objectResolver = objectResolver;
}

/* (non-Javadoc)
* @see com.evolveum.midpoint.common.expression.ExpressionEvaluatorFactory#getElementName()
*/
Expand Down
Expand Up @@ -48,14 +48,17 @@ public class GenerateExpressionEvaluatorFactory implements ExpressionEvaluatorFa
private ObjectResolver objectResolver;
private ValuePolicyProcessor valuePolicyGenerator;

public GenerateExpressionEvaluatorFactory(Protector protector, ObjectResolver objectResolver, ValuePolicyProcessor valuePolicyGenerator, PrismContext prismContext) {
public GenerateExpressionEvaluatorFactory(Protector protector, ValuePolicyProcessor valuePolicyGenerator, PrismContext prismContext) {
super();
this.protector = protector;
this.prismContext = prismContext;
this.objectResolver = objectResolver;
this.valuePolicyGenerator = valuePolicyGenerator;
}

public void setObjectResolver(ObjectResolver objectResolver) {
this.objectResolver = objectResolver;
}

@Override
public QName getElementName() {
return new ObjectFactory().createGenerate(new GenerateExpressionEvaluatorType()).getName();
Expand Down
Expand Up @@ -46,14 +46,16 @@ public class PathExpressionEvaluatorFactory implements ExpressionEvaluatorFactor
private ObjectResolver objectResolver;
private Protector protector;

public PathExpressionEvaluatorFactory(PrismContext prismContext, ObjectResolver objectResolver,
Protector protector) {
public PathExpressionEvaluatorFactory(PrismContext prismContext, Protector protector) {
super();
this.prismContext = prismContext;
this.objectResolver = objectResolver;
this.protector = protector;
}

public void setObjectResolver(ObjectResolver objectResolver) {
this.objectResolver = objectResolver;
}

@Override
public QName getElementName() {
return new ObjectFactory().createPath(null).getName();
Expand Down
Expand Up @@ -50,15 +50,18 @@ public class ReferenceSearchExpressionEvaluatorFactory implements ExpressionEval
private ModelService modelService;
private SecurityEnforcer securityEnforcer;

public ReferenceSearchExpressionEvaluatorFactory(PrismContext prismContext, Protector protector, ObjectResolver objectResolver, ModelService modelService, SecurityEnforcer securityEnforcer) {
public ReferenceSearchExpressionEvaluatorFactory(PrismContext prismContext, Protector protector, ModelService modelService, SecurityEnforcer securityEnforcer) {
super();
this.prismContext = prismContext;
this.protector = protector;
this.objectResolver = objectResolver;
this.modelService = modelService;
this.securityEnforcer = securityEnforcer;
}

public void setObjectResolver(ObjectResolver objectResolver) {
this.objectResolver = objectResolver;
}

/* (non-Javadoc)
* @see com.evolveum.midpoint.common.expression.ExpressionEvaluatorFactory#getElementName()
*/
Expand Down
Expand Up @@ -42,13 +42,11 @@ public class ScriptExpressionFactory {
private Collection<FunctionLibrary> functions;
private Protector protector;

public ScriptExpressionFactory(ObjectResolver objectResolver, PrismContext prismContext,
Protector protector) {
public ScriptExpressionFactory(PrismContext prismContext, Protector protector) {
this.prismContext = prismContext;
this.objectResolver = objectResolver;
this.protector = protector;
}

public ObjectResolver getObjectResolver() {
return objectResolver;
}
Expand Down
Expand Up @@ -34,7 +34,7 @@
*/
public class MappingFactory {

ObjectFactory objectFactory = new ObjectFactory();
// ObjectFactory objectFactory = new ObjectFactory();

private ExpressionFactory expressionFactory;
private ObjectResolver objectResolver;
Expand Down
Expand Up @@ -57,7 +57,8 @@ public static ProtectorImpl createInitializedProtector(PrismContext prismContext

public static ExpressionFactory createInitializedExpressionFactory(ObjectResolver resolver, ProtectorImpl protector,
PrismContext prismContext, SecurityEnforcer securityEnforcer) {
ExpressionFactory expressionFactory = new ExpressionFactory(resolver, securityEnforcer, prismContext);
ExpressionFactory expressionFactory = new ExpressionFactory(securityEnforcer, prismContext);
expressionFactory.setObjectResolver(resolver);

// asIs
AsIsExpressionEvaluatorFactory asIsFactory = new AsIsExpressionEvaluatorFactory(prismContext, protector);
Expand All @@ -74,20 +75,23 @@ public static ExpressionFactory createInitializedExpressionFactory(ObjectResolve
expressionFactory.addEvaluatorFactory(constFactory);

// path
PathExpressionEvaluatorFactory pathFactory = new PathExpressionEvaluatorFactory(prismContext, resolver, protector);
PathExpressionEvaluatorFactory pathFactory = new PathExpressionEvaluatorFactory(prismContext, protector);
pathFactory.setObjectResolver(resolver);
expressionFactory.addEvaluatorFactory(pathFactory);

// generate
ValuePolicyProcessor valuePolicyGenerator = new ValuePolicyProcessor();
valuePolicyGenerator.setExpressionFactory(expressionFactory);
GenerateExpressionEvaluatorFactory generateFactory = new GenerateExpressionEvaluatorFactory(protector, resolver, valuePolicyGenerator, prismContext);
GenerateExpressionEvaluatorFactory generateFactory = new GenerateExpressionEvaluatorFactory(protector, valuePolicyGenerator, prismContext);
generateFactory.setObjectResolver(resolver);
expressionFactory.addEvaluatorFactory(generateFactory);

// script
Collection<FunctionLibrary> functions = new ArrayList<FunctionLibrary>();
functions.add(FunctionLibraryUtil.createBasicFunctionLibrary(prismContext, protector));
functions.add(FunctionLibraryUtil.createLogFunctionLibrary(prismContext));
ScriptExpressionFactory scriptExpressionFactory = new ScriptExpressionFactory(resolver, prismContext, protector);
ScriptExpressionFactory scriptExpressionFactory = new ScriptExpressionFactory(prismContext, protector);
scriptExpressionFactory.setObjectResolver(resolver);
scriptExpressionFactory.setFunctions(functions);
XPathScriptEvaluator xpathEvaluator = new XPathScriptEvaluator(prismContext);
scriptExpressionFactory.registerEvaluator(XPathScriptEvaluator.XPATH_LANGUAGE_URL, xpathEvaluator);
Expand Down
Expand Up @@ -92,7 +92,8 @@ public void setupFactory() {
Protector protector = new ProtectorImpl();
Collection<FunctionLibrary> functions = new ArrayList<FunctionLibrary>();
functions.add(FunctionLibraryUtil.createBasicFunctionLibrary(prismContext, protector));
scriptExpressionfactory = new ScriptExpressionFactory(resolver, prismContext, protector);
scriptExpressionfactory = new ScriptExpressionFactory(prismContext, protector);
scriptExpressionfactory.setObjectResolver(resolver);
scriptExpressionfactory.setFunctions(functions);
evaluator = createEvaluator(prismContext, protector);
String languageUrl = evaluator.getLanguageUrl();
Expand Down
Expand Up @@ -83,7 +83,8 @@ public void setupFactory() {
Protector protector = new ProtectorImpl();
Collection<FunctionLibrary> functions = new ArrayList<FunctionLibrary>();
functions.add(FunctionLibraryUtil.createBasicFunctionLibrary(prismContext, protector));
scriptExpressionfactory = new ScriptExpressionFactory(resolver, prismContext, protector);
scriptExpressionfactory = new ScriptExpressionFactory(prismContext, protector);
scriptExpressionfactory.setObjectResolver(resolver);
scriptExpressionfactory.setFunctions(functions);
evaluator = new Jsr223ScriptEvaluator("groovy", prismContext, protector);
String languageUrl = evaluator.getLanguageUrl();
Expand Down
80 changes: 26 additions & 54 deletions model/model-impl/src/main/resources/ctx-model.xml
Expand Up @@ -112,7 +112,6 @@

<bean id="scriptExpressionFactory" class="com.evolveum.midpoint.model.common.expression.script.ScriptExpressionFactory"
scope="singleton">
<constructor-arg ref="modelObjectResolver"/>
<constructor-arg name="prismContext" ref="prismContext"/>
<constructor-arg name="protector" ref="protector"/>
<property name="functions">
Expand All @@ -131,6 +130,7 @@
<ref bean="velocityScriptEvaluator"/>
</list>
</property>
<property name="objectResolver" ref="modelObjectResolver"/>
</bean>

<bean id="scriptExpressionEvaluatorFactory" class="com.evolveum.midpoint.model.common.expression.script.ScriptExpressionEvaluatorFactory"
Expand All @@ -141,17 +141,17 @@

<bean id="generateExpressionEvaluatorFactory" class="com.evolveum.midpoint.model.common.expression.evaluator.GenerateExpressionEvaluatorFactory"
scope="singleton">
<constructor-arg ref="protector"/>
<constructor-arg ref="modelObjectResolver"/>
<constructor-arg ref="valuePolicyProcessor"/>
<constructor-arg name="prismContext" ref="prismContext"/>
<constructor-arg ref="protector"/>
<constructor-arg ref="valuePolicyProcessor"/>
<constructor-arg name="prismContext" ref="prismContext"/>
<property name="objectResolver" ref="modelObjectResolver"/>
</bean>

<bean id="pathExpressionEvaluatorFactory" class="com.evolveum.midpoint.model.common.expression.evaluator.PathExpressionEvaluatorFactory"
scope="singleton">
<constructor-arg name="prismContext" ref="prismContext"/>
<constructor-arg ref="modelObjectResolver"/>
<constructor-arg name="protector" ref="protector"/>
<constructor-arg name="prismContext" ref="prismContext"/>
<constructor-arg name="protector" ref="protector"/>
<property name="objectResolver" ref="modelObjectResolver"/>
</bean>

<bean id="literalExpressionEvaluatorFactory" class="com.evolveum.midpoint.repo.common.expression.evaluator.LiteralExpressionEvaluatorFactory"
Expand Down Expand Up @@ -179,38 +179,38 @@
scope="singleton">
<constructor-arg name="prismContext" ref="prismContext"/>
<constructor-arg name="protector" ref="protector"/>
<constructor-arg ref="modelObjectResolver"/>
<constructor-arg ref="modelController"/>
<constructor-arg ref="securityEnforcer"/>
<property name="objectResolver" ref="modelObjectResolver"/>
</bean>

<bean id="referenceSearchExpressionEvaluatorFactory"
class="com.evolveum.midpoint.model.common.expression.evaluator.ReferenceSearchExpressionEvaluatorFactory"
scope="singleton">
<constructor-arg name="prismContext" ref="prismContext"/>
<constructor-arg name="protector" ref="protector"/>
<constructor-arg ref="modelObjectResolver"/>
<constructor-arg ref="modelController"/>
<constructor-arg ref="securityEnforcer"/>
<property name="objectResolver" ref="modelObjectResolver"/>
</bean>

<bean id="associationTargetSearchExpressionEvaluatorFactory"
class="com.evolveum.midpoint.model.common.expression.evaluator.AssociationTargetSearchExpressionEvaluatorFactory"
scope="singleton">
<constructor-arg name="prismContext" ref="prismContext"/>
<constructor-arg name="protector" ref="protector"/>
<constructor-arg ref="modelObjectResolver"/>
<constructor-arg ref="modelController"/>
<constructor-arg ref="securityEnforcer"/>
<property name="objectResolver" ref="modelObjectResolver"/>
</bean>

<bean id="associationFromLinkExpressionEvaluatorFactory"
class="com.evolveum.midpoint.model.common.expression.evaluator.AssociationFromLinkExpressionEvaluatorFactory"
scope="singleton">
<constructor-arg name="prismContext" ref="prismContext"/>
<constructor-arg name="protector" ref="protector"/>
<constructor-arg ref="modelObjectResolver"/>
<constructor-arg ref="modelController"/>
<property name="objectResolver" ref="modelObjectResolver"/>
</bean>

<bean id="sequentialValueExpressionEvaluatorFactory" class="com.evolveum.midpoint.model.impl.expr.SequentialValueExpressionEvaluatorFactory"
Expand All @@ -222,9 +222,6 @@

<bean id="expressionFactory" class="com.evolveum.midpoint.repo.common.expression.ExpressionFactory"
scope="singleton">
<constructor-arg>
<ref bean="modelObjectResolver"/>
</constructor-arg>
<constructor-arg>
<ref bean="securityEnforcer"/>
</constructor-arg>
Expand All @@ -249,28 +246,17 @@
<property name="defaultEvaluatorFactory">
<ref bean="asisExpressionEvaluatorFactory"/>
</property>
<property name="objectResolver" ref="modelObjectResolver"/>
</bean>

<bean id="mappingFactory" class="com.evolveum.midpoint.model.common.mapping.MappingFactory"
scope="singleton">
<property name="expressionFactory">
<ref bean="expressionFactory"/>
</property>
<property name="objectResolver">
<ref bean="modelObjectResolver"/>
</property>
<property name="protector">
<ref bean="protector"/>
</property>
<property name="prismContext">
<ref bean="prismContext"/>
</property>
<property name="filterManager">
<ref bean="filterManager"/>
</property>
<property name="securityEnforcer">
<ref bean="securityEnforcer"/>
</property>
<property name="expressionFactory" ref="expressionFactory"/>
<property name="objectResolver" ref="modelObjectResolver"/>
<property name="protector" ref="protector"/>
<property name="prismContext" ref="prismContext"/>
<property name="filterManager" ref="filterManager"/>
<property name="securityEnforcer" ref="securityEnforcer"/>
</bean>

<bean id="midpointFunctionLibrary" class="com.evolveum.midpoint.model.common.expression.functions.FunctionLibrary"
Expand Down Expand Up @@ -348,27 +334,13 @@
-->
</map>
</property>
<property name="modelObjectResolver">
<ref bean="modelObjectResolver"/>
</property>
<property name="clockwork">
<ref bean="clockwork"/>
</property>
<property name="changeExecutor">
<ref bean="changeExecutor"/>
</property>
<property name="prismContext">
<ref bean="prismContext"/>
</property>
<property name="auditService">
<ref bean="auditService"/>
</property>
<property name="provisioningService">
<ref bean="provisioningService"/>
</property>
<property name="contextFactory">
<ref bean="contextFactory"/>
</property>
<property name="modelObjectResolver" ref="modelObjectResolver"/>
<property name="clockwork" ref="clockwork"/>
<property name="changeExecutor" ref="changeExecutor"/>
<property name="prismContext" ref="prismContext"/>
<property name="auditService" ref="auditService"/>
<property name="provisioningService" ref="provisioningService"/>
<property name="contextFactory" ref="contextFactory"/>
</bean>

<bean id="filterManager" class="com.evolveum.midpoint.common.filter.FilterManagerImpl">
Expand Down
Expand Up @@ -42,16 +42,18 @@ public class ExpressionFactory {
private ExpressionEvaluatorFactory defaultEvaluatorFactory;
private Map<ExpressionIdentifier, Expression<?,?>> cache = new HashMap<ExpressionIdentifier, Expression<?,?>>();
final private PrismContext prismContext;
final private ObjectResolver objectResolver;
private ObjectResolver objectResolver; // using setter to allow Spring to handle circular references
final private SecurityEnforcer securityEnforcer;

public ExpressionFactory(ObjectResolver objectResolver, SecurityEnforcer securityEnforcer, PrismContext prismContext) {
super();
this.objectResolver = objectResolver;
public ExpressionFactory(SecurityEnforcer securityEnforcer, PrismContext prismContext) {
this.prismContext = prismContext;
this.securityEnforcer = securityEnforcer;
}


public void setObjectResolver(ObjectResolver objectResolver) {
this.objectResolver = objectResolver;
}

public PrismContext getPrismContext() {
return prismContext;
}
Expand Down

0 comments on commit d340836

Please sign in to comment.