blob: 9664b7e40d071d15c7a488b4a5794d06d3c4aeda [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.apache.olingo.server.core.uri.testutil;
import org.apache.olingo.commons.api.edm.EdmEnumType;
import org.apache.olingo.commons.api.edm.EdmType;
import org.apache.olingo.server.api.ODataApplicationException;
import org.apache.olingo.server.api.uri.UriInfoResource;
import org.apache.olingo.server.api.uri.UriResource;
import org.apache.olingo.server.api.uri.UriResourceLambdaAll;
import org.apache.olingo.server.api.uri.UriResourceLambdaAny;
import org.apache.olingo.server.api.uri.UriResourcePartTyped;
import org.apache.olingo.server.api.uri.queryoption.FilterOption;
import org.apache.olingo.server.api.uri.queryoption.expression.BinaryOperatorKind;
import org.apache.olingo.server.api.uri.queryoption.expression.Expression;
import org.apache.olingo.server.api.uri.queryoption.expression.ExpressionVisitException;
import org.apache.olingo.server.api.uri.queryoption.expression.ExpressionVisitor;
import org.apache.olingo.server.api.uri.queryoption.expression.MethodKind;
import org.apache.olingo.server.api.uri.queryoption.expression.UnaryOperatorKind;
import java.util.List;
public class FilterTreeToText implements ExpressionVisitor<String> {
public static String Serialize(final FilterOption filter)
throws ExpressionVisitException, ODataApplicationException {
Expression expression = filter.getExpression();
return expression.accept(new FilterTreeToText());
}
public static String Serialize(final Expression expression)
throws ExpressionVisitException, ODataApplicationException {
return expression.accept(new FilterTreeToText());
}
@Override
public String visitBinaryOperator(final BinaryOperatorKind operator, final String left, final String right)
throws ExpressionVisitException {
return "<" + left + " " + operator.toString() + " " + right + ">";
}
@Override
public String visitUnaryOperator(final UnaryOperatorKind operator, final String operand)
throws ExpressionVisitException {
return "<" + operator + " " + operand.toString() + ">";
}
@Override
public String visitMethodCall(final MethodKind methodCall, final List<String> parameters)
throws ExpressionVisitException {
String text = "<" + methodCall + "(";
int i = 0;
while (i < parameters.size()) {
if (i > 0) {
text += ",";
}
text += parameters.get(i);
i++;
}
return text + ")>";
}
@Override
public String visitLiteral(final String literal) throws ExpressionVisitException {
return "<" + literal + ">";
}
@Override
public String visitMember(final UriInfoResource resource) throws ExpressionVisitException, ODataApplicationException {
String ret = "";
UriInfoResource path = resource;
for (UriResource item : path.getUriResourceParts()) {
String tmp = "";
if (item instanceof UriResourceLambdaAll) {
UriResourceLambdaAll all = (UriResourceLambdaAll) item;
tmp = visitLambdaExpression("ALL", all.getLambdaVariable(), all.getExpression());
} else if (item instanceof UriResourceLambdaAny) {
UriResourceLambdaAny any = (UriResourceLambdaAny) item;
tmp = visitLambdaExpression("ANY", any.getLamdaVariable(), any.getExpression());
} else if (item instanceof UriResourcePartTyped) {
UriResourcePartTyped typed = (UriResourcePartTyped) item;
tmp = typed.toString(true);
}
if (ret.length() != 0) {
ret += "/";
}
ret += tmp;
}
return "<" + ret + ">";
}
@Override
public String visitAlias(final String referenceName) throws ExpressionVisitException {
return "<" + referenceName + ">";
}
@Override
public String visitLambdaExpression(final String functionText, final String string, final Expression expression)
throws ExpressionVisitException, ODataApplicationException {
return "<" + functionText + ";" + ((expression == null) ? "" : expression.accept(this)) + ">";
}
@Override
public String visitTypeLiteral(final EdmType type) {
return "<" + type.getNamespace() + "." + type.getName() + ">";
}
@Override
public String visitLambdaReference(final String variableText) {
return "<" + variableText + ">";
}
@Override
public String visitEnum(final EdmEnumType type, final List<String> enumValues)
throws ExpressionVisitException, ODataApplicationException {
String tmp = "";
for (String item : enumValues) {
if (tmp.length() > 0) {
tmp += ",";
}
tmp += item;
}
return "<" + type.getNamespace() + "." + type.getName() + "<" + tmp + ">>";
}
}