use of com.dexels.navajo.script.api.Access in project navajo by Dexels.
the class ASTReactiveScriptNode method interpretToLambda.
@Override
public ContextExpression interpretToLambda(List<String> problems, String originalExpression, Function<String, FunctionClassification> functionClassifier, Function<String, Optional<Node>> mapResolver) {
int start = hasHeader ? headers : 0;
if (hasHeader) {
for (int i = 0; i < headers; i++) {
ASTKeyValueNode hdr = (ASTKeyValueNode) jjtGetChild(i);
NamedExpression ne = (NamedExpression) hdr.interpretToLambda(problems, originalExpression, functionClassifier, mapResolver);
String key = ne.name;
headerMap.put(key, ne.apply());
}
}
int count = jjtGetNumChildren();
List<Node> unnamedPipes = new ArrayList<>();
Map<String, Node> namedPipes = new HashMap<>();
for (int i = start; i < count; i++) {
Node child = jjtGetChild(i);
// ASTReactivePipe pipe = null;
if (child instanceof ASTPipeDefinition) {
unnamedPipes.add((ASTPipeDefinition) child);
} else if (child instanceof ASTKeyValueNode) {
ASTKeyValueNode kvNode = (ASTKeyValueNode) child;
String streamName = kvNode.val;
Node namedPipe = kvNode.jjtGetChild(0);
// assert value types perhaps? TODO
namedPipes.put(streamName, namedPipe);
}
}
List<ReactivePipeNode> pipes = unnamedPipes.stream().map(p -> (ReactivePipeNode) p.interpretToLambda(problems, originalExpression, functionClassifier, name -> {
Optional<Node> initial = Optional.ofNullable(namedPipes.get(name));
if (initial.isPresent()) {
return initial;
} else {
return mapResolver.apply(name);
}
})).collect(Collectors.toList());
return new ContextExpression() {
@Override
public Optional<String> returnType() {
return Optional.of(Reactive.ReactiveItemType.REACTIVE_SCRIPT.toString());
}
@Override
public boolean isLiteral() {
return true;
}
@Override
public String expression() {
return "";
}
@Override
public Operand apply(Navajo doc, Message parentMsg, Message parentParamMsg, Selection parentSel, MappableTreeNode mapNode, TipiLink tipiLink, Access access, Optional<ImmutableMessage> immutableMessage, Optional<ImmutableMessage> paramMessage) {
return Operand.ofCustom(pipes, Reactive.ReactiveItemType.REACTIVE_SCRIPT.toString());
}
};
}
use of com.dexels.navajo.script.api.Access in project navajo by Dexels.
the class ASTDatePatternNode method interpretToLambda.
@Override
public ContextExpression interpretToLambda(List<String> problems, String expression, Function<String, FunctionClassification> functionClassifier, Function<String, Optional<Node>> mapResolver) {
ContextExpression y = jjtGetChild(0).interpretToLambda(problems, expression, functionClassifier, mapResolver);
checkOrAdd("Year (item 0) field should be an integer", problems, y.returnType(), Property.INTEGER_PROPERTY);
ContextExpression m = jjtGetChild(1).interpretToLambda(problems, expression, functionClassifier, mapResolver);
checkOrAdd("Month (item 1) field should be an integer", problems, y.returnType(), Property.INTEGER_PROPERTY);
ContextExpression d = jjtGetChild(2).interpretToLambda(problems, expression, functionClassifier, mapResolver);
checkOrAdd("Day (item 2) field should be an integer", problems, y.returnType(), Property.INTEGER_PROPERTY);
ContextExpression h = jjtGetChild(3).interpretToLambda(problems, expression, functionClassifier, mapResolver);
checkOrAdd("Hour (item 3) field should be an integer", problems, y.returnType(), Property.INTEGER_PROPERTY);
ContextExpression min = jjtGetChild(4).interpretToLambda(problems, expression, functionClassifier, mapResolver);
checkOrAdd("Minute (item 4) field should be an integer", problems, y.returnType(), Property.INTEGER_PROPERTY);
ContextExpression s = jjtGetChild(5).interpretToLambda(problems, expression, functionClassifier, mapResolver);
checkOrAdd("Second (item 5) field should be an integer", problems, y.returnType(), Property.INTEGER_PROPERTY);
final boolean isLiteral = y.isLiteral() && m.isLiteral() && d.isLiteral() && h.isLiteral() && min.isLiteral() && s.isLiteral();
return new ContextExpression() {
@Override
public boolean isLiteral() {
return isLiteral;
}
@Override
public Operand apply(Navajo doc, Message parentMsg, Message parentParamMsg, Selection parentSel, MappableTreeNode mapNode, TipiLink tipiLink, Access access, Optional<ImmutableMessage> immutableMessage, Optional<ImmutableMessage> paramMessage) {
int yearT = ((Integer) y.apply(doc, parentMsg, parentParamMsg, parentSel, mapNode, tipiLink, access, immutableMessage, paramMessage).value).intValue();
int monthT = ((Integer) m.apply(doc, parentMsg, parentParamMsg, parentSel, mapNode, tipiLink, access, immutableMessage, paramMessage).value).intValue();
int dayT = ((Integer) d.apply(doc, parentMsg, parentParamMsg, parentSel, mapNode, tipiLink, access, immutableMessage, paramMessage).value).intValue();
int hourT = ((Integer) h.apply(doc, parentMsg, parentParamMsg, parentSel, mapNode, tipiLink, access, immutableMessage, paramMessage).value).intValue();
int minT = ((Integer) min.apply(doc, parentMsg, parentParamMsg, parentSel, mapNode, tipiLink, access, immutableMessage, paramMessage).value).intValue();
int secT = ((Integer) s.apply(doc, parentMsg, parentParamMsg, parentSel, mapNode, tipiLink, access, immutableMessage, paramMessage).value).intValue();
return Operand.ofDatePattern(new DatePattern(yearT, monthT, dayT, hourT, minT, secT, true));
}
@Override
public Optional<String> returnType() {
return Optional.of(Property.DATE_PATTERN_PROPERTY);
}
@Override
public String expression() {
return expression;
}
};
}
use of com.dexels.navajo.script.api.Access in project navajo by Dexels.
the class ASTForAllNode method interpretToLambda.
@Override
public ContextExpression interpretToLambda(List<String> problems, String expression, Function<String, FunctionClassification> functionClassifier, Function<String, Optional<Node>> mapResolver) {
return new ContextExpression() {
@Override
public boolean isLiteral() {
return false;
}
@Override
public Operand apply(Navajo doc, Message parentMsg, Message parentParamMsg, Selection parentSel, MappableTreeNode mapNode, TipiLink tipiLink, Access access, Optional<ImmutableMessage> immutableMessage, Optional<ImmutableMessage> paramMessage) {
List<String> problems = new ArrayList<>();
ContextExpression a = jjtGetChild(0).interpretToLambda(problems, expression, functionClassifier, mapResolver);
ContextExpression b = jjtGetChild(1).interpretToLambda(problems, expression, functionClassifier, mapResolver);
if (!problems.isEmpty()) {
throw new TMLExpressionException(problems, expression);
}
return interpret(doc, parentMsg, parentParamMsg, parentSel, mapNode, tipiLink, access, immutableMessage, paramMessage, a, b);
}
@Override
public Optional<String> returnType() {
return Optional.empty();
}
@Override
public String expression() {
return expression;
}
};
}
use of com.dexels.navajo.script.api.Access in project navajo by Dexels.
the class OAuthArticleServlet method doServiceImpl.
@Override
protected void doServiceImpl(HttpServletRequest req, HttpServletResponse resp) throws APIException {
String token = getToken(req);
OAuthToken oauthToken = null;
Client client = null;
if (token != null) {
oauthToken = getOAuthToken(token);
client = getClient(oauthToken);
} else {
client = getClient(req);
}
String username = client.getUsername();
if (oauthToken != null && oauthToken.getUsername() != null && !oauthToken.getUsername().equals("")) {
username = oauthToken.getUsername();
}
String pathInfo = req.getPathInfo();
String instance = client.getInstance();
if (pathInfo == null) {
throw new APIException("Pathinfo is null, we cannot find an article then", null, APIErrorCode.ArticleNotFound);
}
String articleName = determineArticleFromRequest(req);
File article = getContext().resolveArticle(articleName);
if (!article.exists()) {
throw new APIException("Article does not exist", null, APIErrorCode.ArticleNotFound);
}
try {
String ip = req.getHeader("X-Forwarded-For");
if (ip == null || ip.equals("")) {
ip = req.getRemoteAddr();
}
Access access = new Access(-1, -1, username, ACCESS_PREFIX + articleName, "", "", "", null, false, null);
access.setTenant(instance);
access.rpcPwd = token;
access.created = new Date();
access.ipAddress = ip;
access.setClientDescription("Article");
access.setClientToken("Client id: " + client.getId());
ArticleRuntime runtime = new ServletArticleRuntimeImpl(req, resp, "", username, article, pathInfo, req.getParameterMap(), instance, oauthToken);
runtime.setAccess(access);
runtime.setUsername(username);
ArticleTmlRunnable runner = new ArticleTmlRunnable(req, resp, client, runtime, getContext(), requestTimeout);
if (!runner.isAborted()) {
tmlScheduler.submit(runner, false);
}
} catch (Throwable e) {
throw new APIException(e.getMessage(), e, APIErrorCode.InternalError);
}
}
use of com.dexels.navajo.script.api.Access in project navajo by Dexels.
the class DomainObjectMapperTest method testStoreWithMultipleSelectionProperty.
@Test
public void testStoreWithMultipleSelectionProperty() throws Exception {
// The other way around, with an input Navajo with property that does
// have an associated attribute.
Navajo doc = NavajoFactory.getInstance().createNavajo();
Message m = NavajoFactory.getInstance().createMessage(doc, "MyMessage");
doc.addMessage(m);
Property p1 = NavajoFactory.getInstance().createProperty(doc, "Id", "string", "hello", 0, "", "in");
Property p2 = NavajoFactory.getInstance().createProperty(doc, "Selection", "+", "", "in");
m.addProperty(p1);
m.addProperty(p2);
// Add selections...
Selection s1 = NavajoFactory.getInstance().createSelection(doc, "aap", "AAP", true);
Selection s2 = NavajoFactory.getInstance().createSelection(doc, "noot", "NOOT", true);
Selection s3 = NavajoFactory.getInstance().createSelection(doc, "mies", "MIES", false);
p2.addSelection(s1);
p2.addSelection(s2);
p2.addSelection(s3);
Access a = new Access();
a.setInDoc(doc);
DomainObjectMapper dom2 = new DomainObjectMapper();
dom2.setCurrentMessageName("MyMessage");
dom2.load(a);
dom2.setObjectName("com.dexels.navajo.mapping.bean.Relation");
boolean exception = false;
try {
dom2.store();
} catch (Exception e) {
exception = true;
}
// Multiple cardinality is not yet supported, hence exception.
assertTrue(exception);
// Object o = dom2.getMyObject();
// assertNotNull(o);
// assertEquals(Relation.class, o.getClass());
// assertEquals("hello", ((Relation) o).getId());
// assertEquals("NOOT", ((Relation) o).getSelection());
}
Aggregations