src/core/net/sf/basedb/util/jep/convert/EqualsConverter.java

Code
Comments
Other
Rev Date Author Line
3604 26 Jul 07 nicklas 1 /**
3604 26 Jul 07 nicklas 2   $Id$
3604 26 Jul 07 nicklas 3
3675 16 Aug 07 jari 4   Copyright (C) 2007 Nicklas Nordborg
3604 26 Jul 07 nicklas 5
3604 26 Jul 07 nicklas 6   This file is part of BASE - BioArray Software Environment.
3604 26 Jul 07 nicklas 7   Available at http://base.thep.lu.se/
3604 26 Jul 07 nicklas 8
3604 26 Jul 07 nicklas 9   BASE is free software; you can redistribute it and/or
3604 26 Jul 07 nicklas 10   modify it under the terms of the GNU General Public License
4479 05 Sep 08 jari 11   as published by the Free Software Foundation; either version 3
3604 26 Jul 07 nicklas 12   of the License, or (at your option) any later version.
3604 26 Jul 07 nicklas 13
3604 26 Jul 07 nicklas 14   BASE is distributed in the hope that it will be useful,
3604 26 Jul 07 nicklas 15   but WITHOUT ANY WARRANTY; without even the implied warranty of
3604 26 Jul 07 nicklas 16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
3604 26 Jul 07 nicklas 17   GNU General Public License for more details.
3604 26 Jul 07 nicklas 18
3604 26 Jul 07 nicklas 19   You should have received a copy of the GNU General Public License
4515 11 Sep 08 jari 20   along with BASE. If not, see <http://www.gnu.org/licenses/>.
3604 26 Jul 07 nicklas 21 */
3604 26 Jul 07 nicklas 22 package net.sf.basedb.util.jep.convert;
3604 26 Jul 07 nicklas 23
5401 03 Sep 10 nicklas 24 import net.sf.basedb.core.query.Expression;
3604 26 Jul 07 nicklas 25 import net.sf.basedb.core.query.Restriction;
3604 26 Jul 07 nicklas 26 import net.sf.basedb.core.query.Restrictions;
3604 26 Jul 07 nicklas 27 import net.sf.basedb.util.jep.Jep;
3604 26 Jul 07 nicklas 28
5401 03 Sep 10 nicklas 29 import org.nfunk.jep.ASTConstant;
3604 26 Jul 07 nicklas 30 import org.nfunk.jep.Node;
3604 26 Jul 07 nicklas 31
3604 26 Jul 07 nicklas 32 /**
3604 26 Jul 07 nicklas 33   Convert the '==' operator
3604 26 Jul 07 nicklas 34   to a Query API {@link Restriction}.
3604 26 Jul 07 nicklas 35
3604 26 Jul 07 nicklas 36   @author nicklas
3604 26 Jul 07 nicklas 37   @version 2.4
3604 26 Jul 07 nicklas 38   @base.modified $Date$
3604 26 Jul 07 nicklas 39 */
3604 26 Jul 07 nicklas 40 public class EqualsConverter
3604 26 Jul 07 nicklas 41   extends AbstractJepConversionFunction<Node>
3604 26 Jul 07 nicklas 42 {
3604 26 Jul 07 nicklas 43   
3604 26 Jul 07 nicklas 44   public EqualsConverter()
3604 26 Jul 07 nicklas 45   {}
3604 26 Jul 07 nicklas 46   
3604 26 Jul 07 nicklas 47   /*
3604 26 Jul 07 nicklas 48     From the JepConversionFunction interface
3604 26 Jul 07 nicklas 49     -------------------------------------------
3604 26 Jul 07 nicklas 50   */
3604 26 Jul 07 nicklas 51   @Override
3604 26 Jul 07 nicklas 52   public boolean isOperator()
3604 26 Jul 07 nicklas 53   {
3604 26 Jul 07 nicklas 54     return true;
3604 26 Jul 07 nicklas 55   }
3604 26 Jul 07 nicklas 56   /**
3604 26 Jul 07 nicklas 57     @return The string '=='
3604 26 Jul 07 nicklas 58   */
3604 26 Jul 07 nicklas 59   @Override
3604 26 Jul 07 nicklas 60   public String getName()
3604 26 Jul 07 nicklas 61   {
3604 26 Jul 07 nicklas 62     return "==";
3604 26 Jul 07 nicklas 63   }
3604 26 Jul 07 nicklas 64   @Override
3604 26 Jul 07 nicklas 65   public String getDescription()
3604 26 Jul 07 nicklas 66   {
3604 26 Jul 07 nicklas 67     return "Check if two expressions are equal";
3604 26 Jul 07 nicklas 68   }
3604 26 Jul 07 nicklas 69   /**
5401 03 Sep 10 nicklas 70     Convert to restriction by calling {@link Restrictions#eq(Expression, Expression)}.
5401 03 Sep 10 nicklas 71     If the right-hand node is string constant containing '%' 
5401 03 Sep 10 nicklas 72     {@link Restrictions#like(Expression, Expression)} is used instead (since 2.16).
3604 26 Jul 07 nicklas 73   */
3604 26 Jul 07 nicklas 74   @Override
3604 26 Jul 07 nicklas 75   public Restriction toRestriction(Node node)
3604 26 Jul 07 nicklas 76   {
5401 03 Sep 10 nicklas 77     Node lNode = node.jjtGetChild(0);
5401 03 Sep 10 nicklas 78     Node rNode = node.jjtGetChild(1);
5401 03 Sep 10 nicklas 79     Expression left = Jep.nodeToExpression(lNode);
5401 03 Sep 10 nicklas 80     Expression right = Jep.nodeToExpression(rNode);
5401 03 Sep 10 nicklas 81     boolean useLike = false;
5401 03 Sep 10 nicklas 82     if (rNode instanceof ASTConstant)
5401 03 Sep 10 nicklas 83     {
5401 03 Sep 10 nicklas 84       ASTConstant constNode = (ASTConstant)rNode;
5401 03 Sep 10 nicklas 85       Object constValue = constNode.getValue();
5401 03 Sep 10 nicklas 86       if (constValue instanceof String) 
5401 03 Sep 10 nicklas 87       {
5401 03 Sep 10 nicklas 88         useLike = ((String)constValue).contains("%");
5401 03 Sep 10 nicklas 89       }
5401 03 Sep 10 nicklas 90     }
5401 03 Sep 10 nicklas 91     return useLike ? Restrictions.like(left, right) : Restrictions.eq(left, right);
3604 26 Jul 07 nicklas 92   }
3604 26 Jul 07 nicklas 93   // -------------------------------------------
3604 26 Jul 07 nicklas 94
3604 26 Jul 07 nicklas 95 }