use of io.atlasmap.v2.Expression in project oozie by apache.
the class CoordInputLogicEvaluatorUtil method checkPullMissingDependencies.
/**
* Check pull missing dependencies.
*
* @return true, if successful
* @throws JDOMException the JDOM exception
*/
public boolean checkPullMissingDependencies() throws JDOMException {
JexlEngine jexl = new OozieJexlEngine();
String expression = CoordUtils.getInputLogic(coordAction.getActionXml().toString());
if (StringUtils.isEmpty(expression)) {
return true;
}
Expression e = jexl.createExpression(expression);
JexlContext jc = new OozieJexlParser(jexl, new CoordInputLogicBuilder(new CoordInputLogicEvaluatorPhaseOne(coordAction, coordAction.getPullInputDependencies())));
CoordInputLogicEvaluatorResult result = (CoordInputLogicEvaluatorResult) e.evaluate(jc);
log.debug("Input logic expression for [{0}] and evaluate result is [{1}]", expression, result.getStatus());
if (result.isWaiting()) {
return false;
}
return result.isTrue();
}
use of io.atlasmap.v2.Expression in project oozie by apache.
the class CoordInputLogicEvaluatorUtil method checkPushDependencies.
/**
* Check push dependencies.
*
* @return true, if successful
* @throws JDOMException the JDOM exception
*/
public boolean checkPushDependencies() throws JDOMException {
JexlEngine jexl = new OozieJexlEngine();
String expression = CoordUtils.getInputLogic(coordAction.getActionXml().toString());
if (StringUtils.isEmpty(expression)) {
return true;
}
Expression e = jexl.createExpression(expression);
JexlContext jc = new OozieJexlParser(jexl, new CoordInputLogicBuilder(new CoordInputLogicEvaluatorPhaseOne(coordAction, coordAction.getPushInputDependencies())));
CoordInputLogicEvaluatorResult result = (CoordInputLogicEvaluatorResult) e.evaluate(jc);
log.debug("Input logic expression for [{0}] and evaluate result is [{1}]", expression, result.getStatus());
if (result.isWaiting()) {
return false;
}
return result.isTrue();
}
use of io.atlasmap.v2.Expression in project oozie by apache.
the class CoordInputLogicEvaluatorUtil method checkUnResolved.
/**
* Check unresolved.
*
* @param actualTime the actual time
* @return true, if successful
* @throws JDOMException the JDOM exception
*/
public boolean checkUnResolved(Date actualTime) throws JDOMException {
JexlEngine jexl = new OozieJexlEngine();
String expression = CoordUtils.getInputLogic(coordAction.getActionXml().toString());
if (StringUtils.isEmpty(expression)) {
return true;
}
Expression e = jexl.createExpression(expression);
JexlContext jc = new OozieJexlParser(jexl, new CoordInputLogicBuilder(new CoordInputLogicEvaluatorPhaseTwo(coordAction, actualTime)));
CoordInputLogicEvaluatorResult result = (CoordInputLogicEvaluatorResult) e.evaluate(jc);
log.debug("Input logic expression for [{0}] and evaluate result is [{1}]", expression, result.getStatus());
if (result.isWaiting()) {
return false;
}
return result.isTrue();
}
use of io.atlasmap.v2.Expression in project oozie by apache.
the class CoordInputLogicEvaluatorUtil method getInputDependencies.
/**
* Get input dependencies.
*
* @param name the name
* @param syncCoordAction the sync coord action
* @return the string
* @throws JDOMException the JDOM exception
*/
public String getInputDependencies(String name, SyncCoordAction syncCoordAction) throws JDOMException {
JexlEngine jexl = new OozieJexlEngine();
CoordinatorActionBean coordAction = new CoordinatorActionBean();
ELEvaluator eval = ELEvaluator.getCurrent();
coordAction.setId(syncCoordAction.getActionId());
Element eJob = XmlUtils.parseXml(eval.getVariable(".actionInputLogic").toString());
String expression = new InputLogicParser().parseWithName(eJob, name);
Expression e = jexl.createExpression(expression);
CoordPullInputDependency pull = (CoordPullInputDependency) syncCoordAction.getPullDependencies();
CoordPushInputDependency push = (CoordPushInputDependency) syncCoordAction.getPushDependencies();
coordAction.setPushInputDependencies(push);
coordAction.setPullInputDependencies(pull);
JexlContext jc = new OozieJexlParser(jexl, new CoordInputLogicBuilder(new CoordInputLogicEvaluatorPhaseThree(coordAction, eval)));
CoordInputLogicEvaluatorResult result = (CoordInputLogicEvaluatorResult) e.evaluate(jc);
if (result == null || !result.isTrue()) {
log.debug("Input logic expression for [{0}] is [{1}] and it is not resolved", name, expression);
return "${coord:dataIn('" + name + "')}";
} else {
log.debug("Input logic expression for [{0}] is [{1}] and evaluate result is [{2}]", name, expression, result.getStatus());
return result.getDataSets();
}
}
use of io.atlasmap.v2.Expression in project javautils by jiadongpo.
the class PropsUtils method resolveVariableExpression.
/**
* Function that looks for expressions to parse. It parses backwards to capture embedded
* expressions
*/
private static String resolveVariableExpression(final String value, final int last, final JexlEngine jexl) {
final int lastIndex = value.lastIndexOf("$(", last);
if (lastIndex == -1) {
return value;
}
// Want to check that everything is well formed, and that
// we properly capture $( ...(...)...).
int bracketCount = 0;
int nextClosed = lastIndex + 2;
for (; nextClosed < value.length(); ++nextClosed) {
if (value.charAt(nextClosed) == '(') {
bracketCount++;
} else if (value.charAt(nextClosed) == ')') {
bracketCount--;
if (bracketCount == -1) {
break;
}
}
}
if (nextClosed == value.length()) {
throw new IllegalArgumentException("Expression " + value + " not well formed.");
}
final String innerExpression = value.substring(lastIndex + 2, nextClosed);
Object result = null;
try {
final Expression e = jexl.createExpression(innerExpression);
result = e.evaluate(new MapContext());
} catch (final JexlException e) {
throw new IllegalArgumentException("Expression " + value + " not well formed. " + e.getMessage(), e);
}
if (result == null) {
// for backward compatibility it is best to return value
return value;
}
final String newValue = value.substring(0, lastIndex) + result.toString() + value.substring(nextClosed + 1);
return resolveVariableExpression(newValue, lastIndex, jexl);
}
Aggregations