/*
* Copyright (c) 2013-2017 Evolveum
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.evolveum.midpoint.model.common.expression;
import java.util.ArrayList;
import java.util.Collection;
import com.evolveum.midpoint.model.common.expression.ExpressionFactory;
import com.evolveum.midpoint.model.common.expression.ExpressionUtil;
import com.evolveum.midpoint.model.common.expression.evaluator.AsIsExpressionEvaluatorFactory;
import com.evolveum.midpoint.model.common.expression.evaluator.GenerateExpressionEvaluatorFactory;
import com.evolveum.midpoint.model.common.expression.evaluator.LiteralExpressionEvaluatorFactory;
import com.evolveum.midpoint.model.common.expression.evaluator.PathExpressionEvaluatorFactory;
import com.evolveum.midpoint.model.common.expression.functions.FunctionLibrary;
import com.evolveum.midpoint.model.common.expression.script.ScriptExpressionEvaluatorFactory;
import com.evolveum.midpoint.model.common.expression.script.ScriptExpressionFactory;
import com.evolveum.midpoint.model.common.expression.script.jsr223.Jsr223ScriptEvaluator;
import com.evolveum.midpoint.model.common.expression.script.xpath.XPathScriptEvaluator;
import com.evolveum.midpoint.model.common.stringpolicy.ValuePolicyProcessor;
import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.prism.crypto.ProtectorImpl;
import com.evolveum.midpoint.schema.util.ObjectResolver;
import com.evolveum.midpoint.security.api.SecurityEnforcer;
import com.evolveum.midpoint.test.util.MidPointTestConstants;
/**
* @author Radovan Semancik
*
*/
public class ExpressionTestUtil {
public static ProtectorImpl createInitializedProtector(PrismContext prismContext) {
ProtectorImpl protector = new ProtectorImpl();
protector.setKeyStorePath(MidPointTestConstants.KEYSTORE_PATH);
protector.setKeyStorePassword(MidPointTestConstants.KEYSTORE_PASSWORD);
//protector.setPrismContext(prismContext);
protector.init();
return protector;
}
public static ExpressionFactory createInitializedExpressionFactory(ObjectResolver resolver, ProtectorImpl protector,
PrismContext prismContext, SecurityEnforcer securityEnforcer) {
ExpressionFactory expressionFactory = new ExpressionFactory(resolver, securityEnforcer, prismContext);
// asIs
AsIsExpressionEvaluatorFactory asIsFactory = new AsIsExpressionEvaluatorFactory(prismContext, protector);
expressionFactory.addEvaluatorFactory(asIsFactory);
expressionFactory.setDefaultEvaluatorFactory(asIsFactory);
// value
LiteralExpressionEvaluatorFactory valueFactory = new LiteralExpressionEvaluatorFactory(prismContext);
expressionFactory.addEvaluatorFactory(valueFactory);
// path
PathExpressionEvaluatorFactory pathFactory = new PathExpressionEvaluatorFactory(prismContext, resolver, protector);
expressionFactory.addEvaluatorFactory(pathFactory);
// generate
ValuePolicyProcessor valuePolicyGenerator = new ValuePolicyProcessor();
valuePolicyGenerator.setExpressionFactory(expressionFactory);
GenerateExpressionEvaluatorFactory generateFactory = new GenerateExpressionEvaluatorFactory(protector, resolver, valuePolicyGenerator, prismContext);
expressionFactory.addEvaluatorFactory(generateFactory);
// script
Collection<FunctionLibrary> functions = new ArrayList<FunctionLibrary>();
functions.add(ExpressionUtil.createBasicFunctionLibrary(prismContext, protector));
functions.add(ExpressionUtil.createLogFunctionLibrary(prismContext));
ScriptExpressionFactory scriptExpressionFactory = new ScriptExpressionFactory(resolver, prismContext, protector);
scriptExpressionFactory.setFunctions(functions);
XPathScriptEvaluator xpathEvaluator = new XPathScriptEvaluator(prismContext);
scriptExpressionFactory.registerEvaluator(XPathScriptEvaluator.XPATH_LANGUAGE_URL, xpathEvaluator);
Jsr223ScriptEvaluator groovyEvaluator = new Jsr223ScriptEvaluator("Groovy", prismContext, protector);
scriptExpressionFactory.registerEvaluator(groovyEvaluator.getLanguageUrl(), groovyEvaluator);
ScriptExpressionEvaluatorFactory scriptExpressionEvaluatorFactory = new ScriptExpressionEvaluatorFactory(scriptExpressionFactory, securityEnforcer);
expressionFactory.addEvaluatorFactory(scriptExpressionEvaluatorFactory);
return expressionFactory;
}
}