package org.quaere.operations; import org.quaere.expressions.*; import org.quaere.dsl.LiteralExpression; import org.quaere.dsl.QueryContinuationOrQueryBodyBuilder; import org.quaere.dsl.QueryExpressionBuilderImpl; /** * @author mh14 @ jexp.de * @since 11.11.2007 02:48:06 (c) 2007 jexp.de */ public class PropertyOperation { public static Property createProperty(final String propertyName, final Expression expression) { return new Property(new Identifier(propertyName), expression); } public static Property createPropertyFromStringExpression(final String expression) { Statement statment = (Statement) LiteralExpression.parse(expression); if (statment.getExpressions().size() > 1) { // We're looking for a method call for (Expression statementExpression : statment.getExpressions()) { if (statementExpression instanceof MethodCall) { MethodCall methodCall = (MethodCall) statementExpression; String propertyName = methodCall.getIdentifier().name; if (propertyName.startsWith("get")) { propertyName = propertyName.substring("get".length()); } else if (propertyName.startsWith("is")) { propertyName = propertyName.substring("is".length()); } propertyName = propertyName.substring(0, 1).toLowerCase() + propertyName.substring(1); return createProperty(propertyName, expression); } } } else { // We're looking for an identifier Identifier identifier = (Identifier) statment.getExpressions().get(0); return createProperty(identifier.name, expression); } throw new IllegalArgumentException(String.format("\"%s\" is not a vaild property sourceExpression.", expression)); } public static <R> Property createSubQueryProperty(final String propertyName, final QueryContinuationOrQueryBodyBuilder<R> subquery) { QueryExpressionBuilderImpl subqueryBuilder = (QueryExpressionBuilderImpl) subquery; QueryExpression queryExpression = subquery.getQueryExpression(); SubqueryExpression subqueryExpression = new SubqueryExpression(queryExpression.getFrom(), queryExpression.getQueryBody()); return createProperty(propertyName, subqueryExpression); } public static Property createProperty(final String propertyName, final String expression) { return createProperty(propertyName, LiteralExpression.parse(expression)); } }