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

Code
Comments
Other
Rev Date Author Line
3656 13 Aug 07 nicklas 1 /**
3656 13 Aug 07 nicklas 2   $Id$
3656 13 Aug 07 nicklas 3
3675 16 Aug 07 jari 4   Copyright (C) 2007 Nicklas Nordborg
3656 13 Aug 07 nicklas 5
3656 13 Aug 07 nicklas 6   This file is part of BASE - BioArray Software Environment.
3656 13 Aug 07 nicklas 7   Available at http://base.thep.lu.se/
3656 13 Aug 07 nicklas 8
3656 13 Aug 07 nicklas 9   BASE is free software; you can redistribute it and/or
3656 13 Aug 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
3656 13 Aug 07 nicklas 12   of the License, or (at your option) any later version.
3656 13 Aug 07 nicklas 13
3656 13 Aug 07 nicklas 14   BASE is distributed in the hope that it will be useful,
3656 13 Aug 07 nicklas 15   but WITHOUT ANY WARRANTY; without even the implied warranty of
3656 13 Aug 07 nicklas 16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
3656 13 Aug 07 nicklas 17   GNU General Public License for more details.
3656 13 Aug 07 nicklas 18
3656 13 Aug 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/>.
3656 13 Aug 07 nicklas 21 */
3656 13 Aug 07 nicklas 22 package net.sf.basedb.util.jep.convert;
3656 13 Aug 07 nicklas 23
3656 13 Aug 07 nicklas 24 import org.nfunk.jep.Node;
3656 13 Aug 07 nicklas 25
3656 13 Aug 07 nicklas 26 import net.sf.basedb.core.query.Expression;
3656 13 Aug 07 nicklas 27 import net.sf.basedb.core.query.Expressions;
3656 13 Aug 07 nicklas 28 import net.sf.basedb.core.query.Restriction;
3656 13 Aug 07 nicklas 29 import net.sf.basedb.core.query.WhenStatement;
3656 13 Aug 07 nicklas 30 import net.sf.basedb.util.jep.Jep;
3656 13 Aug 07 nicklas 31
3656 13 Aug 07 nicklas 32 /**
3656 13 Aug 07 nicklas 33   Convert {@link org.nfunk.jep.function.If} function
3656 13 Aug 07 nicklas 34   to a Query API {@link Expression}.
3656 13 Aug 07 nicklas 35
3656 13 Aug 07 nicklas 36   @author nicklas
3656 13 Aug 07 nicklas 37   @version 2.4
3656 13 Aug 07 nicklas 38   @base.modified $Date$
3656 13 Aug 07 nicklas 39 */
3656 13 Aug 07 nicklas 40 public class IfConverter
3656 13 Aug 07 nicklas 41   extends AbstractJepConversionFunction<Node>
3656 13 Aug 07 nicklas 42 {
3656 13 Aug 07 nicklas 43   public IfConverter()
3656 13 Aug 07 nicklas 44   {}
3656 13 Aug 07 nicklas 45
3656 13 Aug 07 nicklas 46   /*
3656 13 Aug 07 nicklas 47     From the JepConversionFunction interface
3656 13 Aug 07 nicklas 48     -------------------------------------------
3656 13 Aug 07 nicklas 49   */
3656 13 Aug 07 nicklas 50   @Override
3656 13 Aug 07 nicklas 51   public boolean isFunction()
3656 13 Aug 07 nicklas 52   {
3656 13 Aug 07 nicklas 53     return true;
3656 13 Aug 07 nicklas 54   }
3656 13 Aug 07 nicklas 55   /**
3656 13 Aug 07 nicklas 56     @return The string 'if'
3656 13 Aug 07 nicklas 57   */
3656 13 Aug 07 nicklas 58   @Override
3656 13 Aug 07 nicklas 59   public String getName()
3656 13 Aug 07 nicklas 60   {
3656 13 Aug 07 nicklas 61     return "if";
3656 13 Aug 07 nicklas 62   }
3656 13 Aug 07 nicklas 63   @Override
3656 13 Aug 07 nicklas 64   public String getDescription()
3656 13 Aug 07 nicklas 65   {
3656 13 Aug 07 nicklas 66     return "if(condition, expressionIfTrue, expressionIfFalse)";
3656 13 Aug 07 nicklas 67   }
3656 13 Aug 07 nicklas 68   /**
3656 13 Aug 07 nicklas 69     Convert to expression by calling {@link Expressions#caseWhen(Expression, 
3656 13 Aug 07 nicklas 70       net.sf.basedb.core.query.WhenStatement[])}.
3656 13 Aug 07 nicklas 71   */
3656 13 Aug 07 nicklas 72   @Override
3656 13 Aug 07 nicklas 73   public Expression toExpression(Node node)
3656 13 Aug 07 nicklas 74   {
3656 13 Aug 07 nicklas 75     Restriction condition = Jep.nodeToRestriction(node.jjtGetChild(0));
3656 13 Aug 07 nicklas 76     Expression ifTrue = Jep.nodeToExpression(node.jjtGetChild(1));
3656 13 Aug 07 nicklas 77     Expression ifFalse = Jep.nodeToExpression(node.jjtGetChild(2));
3656 13 Aug 07 nicklas 78     return Expressions.caseWhen(ifFalse, new WhenStatement(condition, ifTrue));
3656 13 Aug 07 nicklas 79   }
3656 13 Aug 07 nicklas 80   // -------------------------------------------
3656 13 Aug 07 nicklas 81
3656 13 Aug 07 nicklas 82
3656 13 Aug 07 nicklas 83 }