Package org.araneaframework.backend.list.helper.builder.expression

Source Code of org.araneaframework.backend.list.helper.builder.expression.StandardExpressionToSqlExprBuilder$NotTranslator

/**
* Copyright 2006 Webmedia Group Ltd.
*
* 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 org.araneaframework.backend.list.helper.builder.expression;

import org.araneaframework.backend.list.SqlExpression;
import org.araneaframework.backend.list.helper.builder.ExpressionToSqlExprBuilder;
import org.araneaframework.backend.list.helper.builder.ValueConverter;
import org.araneaframework.backend.list.memorybased.Expression;
import org.araneaframework.backend.list.memorybased.Variable;
import org.araneaframework.backend.list.memorybased.expression.AlwaysTrueExpression;
import org.araneaframework.backend.list.memorybased.expression.Value;
import org.araneaframework.backend.list.memorybased.expression.VariableResolver;
import org.araneaframework.backend.list.memorybased.expression.compare.ComparedEqualsExpression;
import org.araneaframework.backend.list.memorybased.expression.compare.EqualsExpression;
import org.araneaframework.backend.list.memorybased.expression.compare.GreaterThanExpression;
import org.araneaframework.backend.list.memorybased.expression.compare.IsNullExpression;
import org.araneaframework.backend.list.memorybased.expression.compare.LikeExpression;
import org.araneaframework.backend.list.memorybased.expression.compare.LowerThanExpression;
import org.araneaframework.backend.list.memorybased.expression.constant.ValueExpression;
import org.araneaframework.backend.list.memorybased.expression.logical.AndExpression;
import org.araneaframework.backend.list.memorybased.expression.logical.NotExpression;
import org.araneaframework.backend.list.memorybased.expression.logical.OrExpression;
import org.araneaframework.backend.list.memorybased.expression.procedure.ProcedureExpression;
import org.araneaframework.backend.list.memorybased.expression.string.ConcatenationExpression;
import org.araneaframework.backend.list.memorybased.expression.variable.VariableExpression;
import org.araneaframework.backend.list.sqlexpr.SqlAlwaysTrueExpression;
import org.araneaframework.backend.list.sqlexpr.SqlBracketsExpression;
import org.araneaframework.backend.list.sqlexpr.compare.SqlEqualsExpression;
import org.araneaframework.backend.list.sqlexpr.compare.SqlGreaterThanExpression;
import org.araneaframework.backend.list.sqlexpr.compare.SqlIsNullExpression;
import org.araneaframework.backend.list.sqlexpr.compare.SqlLikeExpression;
import org.araneaframework.backend.list.sqlexpr.compare.SqlLowerThanExpression;
import org.araneaframework.backend.list.sqlexpr.constant.SqlStringExpression;
import org.araneaframework.backend.list.sqlexpr.constant.SqlValueExpression;
import org.araneaframework.backend.list.sqlexpr.logical.SqlAndExpression;
import org.araneaframework.backend.list.sqlexpr.logical.SqlNotExpression;
import org.araneaframework.backend.list.sqlexpr.logical.SqlOrExpression;
import org.araneaframework.backend.list.sqlexpr.procedure.SqlProcedureExpression;
import org.araneaframework.backend.list.sqlexpr.string.SqlConcatenationExpression;
import org.araneaframework.backend.list.sqlexpr.string.SqlUpperExpression;

public class StandardExpressionToSqlExprBuilder extends BaseExpressionToSqlExprBuilder {
 
  protected VariableResolver mapper;
 
  protected ValueConverter converter;
 
  public StandardExpressionToSqlExprBuilder() {
    addTranslator(ValueExpression.class, new ValueTranslator());
    addTranslator(VariableExpression.class, new VariableTranslator());
    addTranslator(AlwaysTrueExpression.class, new AlwaysTrueTranslator());
    addTranslator(EqualsExpression.class, new EqualsTranslator());
    addTranslator(IsNullExpression.class, new IsNullTranslator());
    addTranslator(ComparedEqualsExpression.class, new ComparedEqualsTranslator());
    addTranslator(GreaterThanExpression.class, new GreaterThanTranslator());
    addTranslator(LowerThanExpression.class, new LowerThanTranslator());
    addTranslator(AndExpression.class, new AndTranslator());
    addTranslator(OrExpression.class, new OrTranslator());
    addTranslator(NotExpression.class, new NotTranslator());
    addTranslator(LikeExpression.class, new LikeTranslator());
    addTranslator(ConcatenationExpression.class, new ConcatenationTranslator());
    addTranslator(ProcedureExpression.class, new ProcedureTranslator());
  }
 
  public void setConverter(ValueConverter converter) {
    this.converter = converter;
  }

  public void setMapper(VariableResolver mapper) {
    this.mapper = mapper;
  }

  protected Object convertValue(Value value) {
    return this.converter != null ? this.converter.convert(value) : value.getValue();
  }
 
  protected String resolveVariable(Variable variable) {
    return this.mapper != null ? (String) this.mapper.resolve(variable) : variable.getName();
  }
 
  // constant
 
  class ValueTranslator implements ExprToSqlExprTranslator {
    public SqlExpression translate(Expression expr, ExpressionToSqlExprBuilder builder) {
      return new SqlValueExpression(convertValue((Value) expr));
    }
  }
 
  class VariableTranslator implements ExprToSqlExprTranslator {
    public SqlExpression translate(Expression expr, ExpressionToSqlExprBuilder builder) {
      return new SqlStringExpression(resolveVariable((Variable) expr));
    }
  } 
 
  class AlwaysTrueTranslator implements ExprToSqlExprTranslator {
    public SqlExpression translate(Expression expr, ExpressionToSqlExprBuilder builder) {
      return new SqlAlwaysTrueExpression();
    }
  }
 
  // comparing 
 
  class EqualsTranslator extends CompositeExprToSqlExprTranslator {
    protected SqlExpression translateParent(Expression expr, SqlExpression[] sqlChildren) {
      return new SqlEqualsExpression(sqlChildren[0], sqlChildren[1]);
    }
  }
 
  class IsNullTranslator extends CompositeExprToSqlExprTranslator {
    protected SqlExpression translateParent(Expression expr, SqlExpression[] sqlChildren) {
      return new SqlIsNullExpression(sqlChildren[0]);
    }
  }
 
  class ComparedEqualsTranslator extends ComparingExprToSqlExprTranslator {
    protected SqlExpression translateComparable(Expression expr, SqlExpression sql1, SqlExpression sql2) {
      return new SqlEqualsExpression(sql1, sql2);
    }
  }
 
  class GreaterThanTranslator extends ComparingExprToSqlExprTranslator {
    protected SqlExpression translateComparable(Expression expr, SqlExpression sql1, SqlExpression sql2) {
      return new SqlGreaterThanExpression(sql1, sql2);
    }
  }
 
  class LowerThanTranslator extends ComparingExprToSqlExprTranslator {
    protected SqlExpression translateComparable(Expression expr, SqlExpression sql1, SqlExpression sql2) {
      return new SqlLowerThanExpression(sql1, sql2);
    }
  }
 
  // logical
 
  class AndTranslator extends CompositeExprToSqlExprTranslator {
    protected SqlExpression translateParent(Expression expr, SqlExpression[] sqlChildren) {
      SqlExpression temp = new SqlAndExpression().setChildren(sqlChildren);
      return sqlChildren.length > 1 ? new SqlBracketsExpression(temp) : temp;
    }
  }
 
  class OrTranslator extends CompositeExprToSqlExprTranslator {
    protected SqlExpression translateParent(Expression expr, SqlExpression[] sqlChildren) {
      SqlExpression temp = new SqlOrExpression().setChildren(sqlChildren);
      return sqlChildren.length > 1 ? new SqlBracketsExpression(temp) : temp;
    }
  }
 
  class NotTranslator extends CompositeExprToSqlExprTranslator {
    protected SqlExpression translateParent(Expression expr, SqlExpression[] sqlChildren) {
      return new SqlNotExpression(sqlChildren[0]);
    }
  }
 
  // String 
 
  class LikeTranslator extends CompositeExprToSqlExprTranslator {
    protected SqlExpression translateParent(Expression expr, SqlExpression[] sqlChildren) {
      LikeExpression like = (LikeExpression) expr;     
      SqlExpression var = sqlChildren[0];
      SqlExpression mask = new SqlValueExpression(
          "%" + convertValue(like.getMask()) + "%");
      if (like.getIgnoreCase()) {
        var = new SqlUpperExpression(var);
        mask = new SqlUpperExpression(mask);
      }
      return new SqlLikeExpression(var, mask);
    }
  }
 
  class ConcatenationTranslator extends CompositeExprToSqlExprTranslator {
    protected SqlExpression translateParent(Expression expr, SqlExpression[] sqlChildren) {
      return new SqlConcatenationExpression().setChildren(sqlChildren);
    }
  }
 
  // procedure
 
  class ProcedureTranslator extends CompositeExprToSqlExprTranslator {
    protected SqlExpression translateParent(Expression expr, SqlExpression[] sqlChildren) {
      ProcedureExpression expr0 = (ProcedureExpression) expr;
      return new SqlProcedureExpression(expr0.getName()).setChildren(sqlChildren);
    }
  }
}
TOP

Related Classes of org.araneaframework.backend.list.helper.builder.expression.StandardExpressionToSqlExprBuilder$NotTranslator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.