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

Code
Comments
Other
Rev Date Author Line
6314 02 Sep 13 nicklas 1 /*
6314 02 Sep 13 nicklas 2   $Id$
6314 02 Sep 13 nicklas 3
6314 02 Sep 13 nicklas 4   Copyright (C) 2013 Nicklas Nordborg
6314 02 Sep 13 nicklas 5
6314 02 Sep 13 nicklas 6   This file is part of BASE - BioArray Software Environment.
6314 02 Sep 13 nicklas 7   Available at http://base.thep.lu.se/
6314 02 Sep 13 nicklas 8
6314 02 Sep 13 nicklas 9   BASE is free software; you can redistribute it and/or
6314 02 Sep 13 nicklas 10   modify it under the terms of the GNU General Public License
6314 02 Sep 13 nicklas 11   as published by the Free Software Foundation; either version 3
6314 02 Sep 13 nicklas 12   of the License, or (at your option) any later version.
6314 02 Sep 13 nicklas 13
6314 02 Sep 13 nicklas 14   BASE is distributed in the hope that it will be useful,
6314 02 Sep 13 nicklas 15   but WITHOUT ANY WARRANTY; without even the implied warranty of
6314 02 Sep 13 nicklas 16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
6314 02 Sep 13 nicklas 17   GNU General Public License for more details.
6314 02 Sep 13 nicklas 18
6314 02 Sep 13 nicklas 19   You should have received a copy of the GNU General Public License
6314 02 Sep 13 nicklas 20   along with BASE. If not, see <http://www.gnu.org/licenses/>.
6314 02 Sep 13 nicklas 21 */
6314 02 Sep 13 nicklas 22 package net.sf.basedb.util.jep;
6314 02 Sep 13 nicklas 23
6314 02 Sep 13 nicklas 24 import java.util.Stack;
6314 02 Sep 13 nicklas 25
6314 02 Sep 13 nicklas 26 import org.nfunk.jep.ParseException;
6314 02 Sep 13 nicklas 27
6314 02 Sep 13 nicklas 28 /**
6314 02 Sep 13 nicklas 29   A simple base class for registering a JEP function by name and number
6314 02 Sep 13 nicklas 30   of parameters. The default implementation will simply return a random
6314 02 Sep 13 nicklas 31   number between 0 and 100. This is intended to be re-implemented by 
6314 02 Sep 13 nicklas 32   subclasses.
6314 02 Sep 13 nicklas 33   
6314 02 Sep 13 nicklas 34   @author nicklas
6314 02 Sep 13 nicklas 35   @since 3.3
6314 02 Sep 13 nicklas 36 */
6314 02 Sep 13 nicklas 37 public class SimpleJepFunction 
6314 02 Sep 13 nicklas 38   implements JepFunction 
6314 02 Sep 13 nicklas 39 {
6314 02 Sep 13 nicklas 40   private final String name;
6314 02 Sep 13 nicklas 41   private final int numParameters;
6314 02 Sep 13 nicklas 42   private int actualParameters;
6314 02 Sep 13 nicklas 43   
6314 02 Sep 13 nicklas 44   public SimpleJepFunction(String name, int numParameters)
6314 02 Sep 13 nicklas 45   {
6314 02 Sep 13 nicklas 46     this.name = name;
6314 02 Sep 13 nicklas 47     this.numParameters = numParameters;
6314 02 Sep 13 nicklas 48   }
6314 02 Sep 13 nicklas 49   
6314 02 Sep 13 nicklas 50   /*
6314 02 Sep 13 nicklas 51     From the JepFunction interface
6314 02 Sep 13 nicklas 52     -------------------------------------------
6314 02 Sep 13 nicklas 53   */
6314 02 Sep 13 nicklas 54   @Override
6314 02 Sep 13 nicklas 55   public String getFunctionName()
6314 02 Sep 13 nicklas 56   {
6314 02 Sep 13 nicklas 57     return name;
6314 02 Sep 13 nicklas 58   }
6314 02 Sep 13 nicklas 59   // -------------------------------------------
6314 02 Sep 13 nicklas 60   @Override
6314 02 Sep 13 nicklas 61   public int getNumberOfParameters()
6314 02 Sep 13 nicklas 62   {
6314 02 Sep 13 nicklas 63     return numParameters;
6314 02 Sep 13 nicklas 64   }
6314 02 Sep 13 nicklas 65
6314 02 Sep 13 nicklas 66   @Override
6314 02 Sep 13 nicklas 67   public boolean checkNumberOfParameters(int n)
6314 02 Sep 13 nicklas 68   {
6314 02 Sep 13 nicklas 69     return numParameters < 0 || n == numParameters;
6314 02 Sep 13 nicklas 70   }
6314 02 Sep 13 nicklas 71
6314 02 Sep 13 nicklas 72   @Override
6314 02 Sep 13 nicklas 73   public void setCurNumberOfParameters(int actualParameters) 
6314 02 Sep 13 nicklas 74   {
6314 02 Sep 13 nicklas 75     this.actualParameters = actualParameters;
6314 02 Sep 13 nicklas 76   }
6314 02 Sep 13 nicklas 77
6875 20 Apr 15 nicklas 78   @SuppressWarnings({ "unchecked", "rawtypes" })
6314 02 Sep 13 nicklas 79   @Override
6314 02 Sep 13 nicklas 80   public void run(Stack stack) 
6314 02 Sep 13 nicklas 81     throws ParseException 
6314 02 Sep 13 nicklas 82   {
6314 02 Sep 13 nicklas 83     int parameters = numParameters < 0 ? actualParameters : numParameters;
6314 02 Sep 13 nicklas 84     for (int i = 0; i < parameters; ++i)
6314 02 Sep 13 nicklas 85     {
6314 02 Sep 13 nicklas 86       stack.pop();
6314 02 Sep 13 nicklas 87     }
6314 02 Sep 13 nicklas 88     stack.push(Math.random()*100);
6314 02 Sep 13 nicklas 89   }
6314 02 Sep 13 nicklas 90
6314 02 Sep 13 nicklas 91 }