src/core/net/sf/basedb/util/jep/PositionFunction.java

Code
Comments
Other
Rev Date Author Line
2986 01 Dec 06 enell 1 /*
2986 01 Dec 06 enell 2   $Id$
2986 01 Dec 06 enell 3
2986 01 Dec 06 enell 4   Copyright (C) 2006 Johan Enell
3675 16 Aug 07 jari 5   Copyright (C) 2007 Nicklas Nordborg
2986 01 Dec 06 enell 6
2986 01 Dec 06 enell 7   This file is part of BASE - BioArray Software Environment.
2986 01 Dec 06 enell 8   Available at http://base.thep.lu.se/
2986 01 Dec 06 enell 9
2986 01 Dec 06 enell 10   BASE is free software; you can redistribute it and/or modify it
2986 01 Dec 06 enell 11   under the terms of the GNU General Public License as published by
4479 05 Sep 08 jari 12   the Free Software Foundation; either version 3 of the License, or
2986 01 Dec 06 enell 13   (at your option) any later version.
2986 01 Dec 06 enell 14
2986 01 Dec 06 enell 15   BASE is distributed in the hope that it will be useful, but
2986 01 Dec 06 enell 16   WITHOUT ANY WARRANTY; without even the implied warranty of
2986 01 Dec 06 enell 17   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
2986 01 Dec 06 enell 18   General Public License for more details.
2986 01 Dec 06 enell 19
2986 01 Dec 06 enell 20   You should have received a copy of the GNU General Public License
4515 11 Sep 08 jari 21   along with BASE. If not, see <http://www.gnu.org/licenses/>.
2986 01 Dec 06 enell 22 */
2986 01 Dec 06 enell 23 package net.sf.basedb.util.jep;
2986 01 Dec 06 enell 24
5319 20 Apr 10 nicklas 25 import net.sf.basedb.core.DbControl;
5319 20 Apr 10 nicklas 26 import net.sf.basedb.core.DynamicQuery;
2986 01 Dec 06 enell 27 import net.sf.basedb.core.VirtualColumn;
2986 01 Dec 06 enell 28 import net.sf.basedb.core.query.Dynamic;
2986 01 Dec 06 enell 29 import net.sf.basedb.core.query.Expression;
2986 01 Dec 06 enell 30
2986 01 Dec 06 enell 31 import org.nfunk.jep.Node;
2986 01 Dec 06 enell 32 import org.nfunk.jep.ParseException;
2986 01 Dec 06 enell 33
2986 01 Dec 06 enell 34 import java.util.Stack;
2986 01 Dec 06 enell 35
2986 01 Dec 06 enell 36
2986 01 Dec 06 enell 37 /**
2986 01 Dec 06 enell 38   A JEP function class that adds a <code>pos</code> function to a 
2986 01 Dec 06 enell 39   JEP expression parser. The function will look up position.
2986 01 Dec 06 enell 40   For example:
3616 01 Aug 07 nicklas 41   <code>pos()</code>
2986 01 Dec 06 enell 42   <p>
2986 01 Dec 06 enell 43   To be able to use this function it must be registered with the JEP
3616 01 Aug 07 nicklas 44   parser. This function can only be used to convert a JEP expression to
3616 01 Aug 07 nicklas 45   a Query API {@link Expression}. It doesn't support dynamic evalution.
2986 01 Dec 06 enell 46   
2986 01 Dec 06 enell 47   @author Enell
2986 01 Dec 06 enell 48   @version 2.0
2986 01 Dec 06 enell 49   @base.modified $Date$
2986 01 Dec 06 enell 50   @see Jep
5319 20 Apr 10 nicklas 51   @see net.sf.basedb.util.BioAssaySetUtil#createJepExpression(DbControl, String, DynamicQuery)
2986 01 Dec 06 enell 52 */
3616 01 Aug 07 nicklas 53 public class PositionFunction 
3616 01 Aug 07 nicklas 54   implements JepExpressionFunction
2986 01 Dec 06 enell 55 {
2986 01 Dec 06 enell 56
2986 01 Dec 06 enell 57   /*
2986 01 Dec 06 enell 58     From the JepFunction interface
2986 01 Dec 06 enell 59     -------------------------------------------
2986 01 Dec 06 enell 60   */
2986 01 Dec 06 enell 61   /**
2986 01 Dec 06 enell 62     @return The string "pos"
2986 01 Dec 06 enell 63   */
6127 14 Sep 12 nicklas 64   @Override
2986 01 Dec 06 enell 65   public String getFunctionName()
2986 01 Dec 06 enell 66   {
2986 01 Dec 06 enell 67     return "pos";
2986 01 Dec 06 enell 68   }
2986 01 Dec 06 enell 69   // -------------------------------------------
2986 01 Dec 06 enell 70   /*
2986 01 Dec 06 enell 71     From the JepExpressionFunction interface
2986 01 Dec 06 enell 72     -------------------------------------------
2986 01 Dec 06 enell 73   */
2986 01 Dec 06 enell 74   /**
2986 01 Dec 06 enell 75     Use the {@link Dynamic#column(VirtualColumn)} method to create an
2986 01 Dec 06 enell 76     expression referencing a position.
2986 01 Dec 06 enell 77   */
6127 14 Sep 12 nicklas 78   @Override
2986 01 Dec 06 enell 79   public Expression toExpression(Node node)
2986 01 Dec 06 enell 80   {
2986 01 Dec 06 enell 81     return Dynamic.column(VirtualColumn.POSITION);
2986 01 Dec 06 enell 82   }
2986 01 Dec 06 enell 83   // -------------------------------------------
2986 01 Dec 06 enell 84   /*
2986 01 Dec 06 enell 85     From the PostfixMathCommandI interface
2986 01 Dec 06 enell 86     -------------------------------------------
2986 01 Dec 06 enell 87   */
2986 01 Dec 06 enell 88
2986 01 Dec 06 enell 89   /**
2986 01 Dec 06 enell 90     @return Always 0
2986 01 Dec 06 enell 91   */
6127 14 Sep 12 nicklas 92   @Override
2986 01 Dec 06 enell 93   public int getNumberOfParameters()
2986 01 Dec 06 enell 94   {
2986 01 Dec 06 enell 95     return 0;
2986 01 Dec 06 enell 96   }
2986 01 Dec 06 enell 97   /**
2986 01 Dec 06 enell 98     Can't be changed.
2986 01 Dec 06 enell 99   */
6127 14 Sep 12 nicklas 100   @Override
3616 01 Aug 07 nicklas 101   public void setCurNumberOfParameters(int n) 
3616 01 Aug 07 nicklas 102   {}
3616 01 Aug 07 nicklas 103   
6127 14 Sep 12 nicklas 104   @Override
2986 01 Dec 06 enell 105   public boolean checkNumberOfParameters(int n)
2986 01 Dec 06 enell 106   {
2986 01 Dec 06 enell 107     return n==0;
2986 01 Dec 06 enell 108   }
2986 01 Dec 06 enell 109   
6127 14 Sep 12 nicklas 110   @Override
6875 20 Apr 15 nicklas 111   @SuppressWarnings({"unchecked", "rawtypes"})
2986 01 Dec 06 enell 112   public void run(Stack stack)
2986 01 Dec 06 enell 113     throws ParseException
2986 01 Dec 06 enell 114   {
2986 01 Dec 06 enell 115     if (stack == null || stack.empty()) 
2986 01 Dec 06 enell 116     {
2986 01 Dec 06 enell 117       throw new ParseException("Stack is empty");
2986 01 Dec 06 enell 118     }
2986 01 Dec 06 enell 119     Object position = stack.pop();
2986 01 Dec 06 enell 120     if (position instanceof Number)
2986 01 Dec 06 enell 121     {
2986 01 Dec 06 enell 122       stack.push(position);
2986 01 Dec 06 enell 123     }
2986 01 Dec 06 enell 124     else
2986 01 Dec 06 enell 125     {
2986 01 Dec 06 enell 126       throw new ParseException("Invalid parameter type: " + position + "; expected integer");
2986 01 Dec 06 enell 127     }
2986 01 Dec 06 enell 128   }
2986 01 Dec 06 enell 129   // -------------------------------------------
2986 01 Dec 06 enell 130 }