## dods.dap.Server
Class FunctionLibrary

    java.lang.Object
      dods.dap.Server.FunctionLibrary

public class FunctionLibrary
extends Object

Represents a library of available server-side functions for use in evaluating constraint expressions.

When created, a FunctionLibrary is empty. There are two ways to populate it, described below. Once the FunctionLibrary has been created and populated, it should be used to create a ClauseFactory, which can then be given to the CEEvaluator for use in parsing.

The most straightforward is to pass an instance of each ServerSideFunction class to the add() method. If you have a large number of ServerSideFunctions, or if you want to have choose class names for your functions independent of the actual function name, this is the approach to use. A second, more complex method resolves server-side function names at runtime. The function library automatically looks for a class whose name matches the name requested (if a prefix is set, it will look for a class whose name is prefix + name requested). If such a class exists, and it implements the ServerSideFunction interface, a new instance of the class is created using the default constructor, added to the list of available functions, and returned to the caller.

This is not quite as complicated as it sounds. For instance, say the FunctionLibrary's prefix is set to "dods.servers.test.SSF". Then the first time the server gets a constraint expression containing the function "dummy()", the FunctionLibrary will automatically load the class "dods.servers.test.SSFdummy", and return a new instance using the class's default constructor.

This avoids the need to hardcode a list of server-side functions, and allows you to create new functions at any time. For instance to create a function "newfn()" you can simply create the class "dods.servers.test.SSFnewfn" and put it somewhere in the server's classpath . Then the first CE containing this function will cause that class to be automatically loaded, just the like the dummy() function was.

Field Summary
`protected Map` `boolFunctions`
`protected Map` `btFunctions`
`protected String` `prefix`

Constructor Summary
`FunctionLibrary()` Creates a new FunctionLibrary with no prefix set.
`FunctionLibrary(String prefix)` Creates a new FunctionLibrary.

Method Summary
`void` `add(ServerSideFunction function)` Adds a function to the library.
`BoolFunction` `getBoolFunction(String name)` Retrieves a boolean function from the library.
`BTFunction` `getBTFunction(String name)` Retrieves a BaseType function from the library.
`String` `getPrefix()` Returns the prefix being used for classname lookup.
`protected void` `loadNewFunction(String name)` Tries to load a function with the given name.
`void` `setPrefix(String prefix)` Sets the prefix to use for classname lookup.

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Field Detail

### boolFunctions

    protected Map boolFunctions

### btFunctions

    protected Map btFunctions

### prefix

    protected String prefix

Constructor Detail

### FunctionLibrary

    public FunctionLibrary()

  Creates a new FunctionLibrary with no prefix set.

### FunctionLibrary

    public FunctionLibrary(String prefix)

  Creates a new FunctionLibrary.

Parameters:
  `prefix` - A string that will be prepended to function names in order to create a classname for that function. For example,

Method Detail

### setPrefix

    public void setPrefix(String prefix)

  Sets the prefix to use for classname lookup. For instance, if the prefix is "myserver.SSF", then when the library doesn't have an entry for function "xyz" it will look for a class "myserver.SSFxyz".

### getPrefix

    public String getPrefix()

  Returns the prefix being used for classname lookup.

### add

    public void add(ServerSideFunction function)

  Adds a function to the library. The function will be inspected to determine whether it is a boolean or BaseType function.

### getBoolFunction

    public BoolFunction getBoolFunction(String name)
                                 throws NoSuchFunctionException

  Retrieves a boolean function from the library. If the function is not found the library will attempt to load it using the mechanism described in the class documentation.

  Parameters:
    `name` - The name of the function being requested.
  Returns:
    Null if the function is not in the library, and the attempt to load it fails.
  Throws:
    `NoSuchFunctionException`

### getBTFunction

    public BTFunction getBTFunction(String name)
                             throws NoSuchFunctionException

  Retrieves a BaseType function from the library. If the function is not found the library will attempt to load it using the mechanism described in the class documentation.

  Parameters:
    `name` - The name of the function being requested.
  Returns:
    Null if the function is not in the library, and the attempt to load it fails.
  Throws:
    `NoSuchFunctionException`

### loadNewFunction

    protected void loadNewFunction(String name)

  Tries to load a function with the given name.