IFunctionLibrary.java

  1. /*
  2.  * Portions of this software was developed by employees of the National Institute
  3.  * of Standards and Technology (NIST), an agency of the Federal Government and is
  4.  * being made available as a public service. Pursuant to title 17 United States
  5.  * Code Section 105, works of NIST employees are not subject to copyright
  6.  * protection in the United States. This software may be subject to foreign
  7.  * copyright. Permission in the United States and in foreign countries, to the
  8.  * extent that NIST may hold copyright, to use, copy, modify, create derivative
  9.  * works, and distribute this software and its documentation without fee is hereby
  10.  * granted on a non-exclusive basis, provided that this notice and disclaimer
  11.  * of warranty appears in all copies.
  12.  *
  13.  * THE SOFTWARE IS PROVIDED 'AS IS' WITHOUT ANY WARRANTY OF ANY KIND, EITHER
  14.  * EXPRESSED, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTY
  15.  * THAT THE SOFTWARE WILL CONFORM TO SPECIFICATIONS, ANY IMPLIED WARRANTIES OF
  16.  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND FREEDOM FROM
  17.  * INFRINGEMENT, AND ANY WARRANTY THAT THE DOCUMENTATION WILL CONFORM TO THE
  18.  * SOFTWARE, OR ANY WARRANTY THAT THE SOFTWARE WILL BE ERROR FREE.  IN NO EVENT
  19.  * SHALL NIST BE LIABLE FOR ANY DAMAGES, INCLUDING, BUT NOT LIMITED TO, DIRECT,
  20.  * INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES, ARISING OUT OF, RESULTING FROM,
  21.  * OR IN ANY WAY CONNECTED WITH THIS SOFTWARE, WHETHER OR NOT BASED UPON WARRANTY,
  22.  * CONTRACT, TORT, OR OTHERWISE, WHETHER OR NOT INJURY WAS SUSTAINED BY PERSONS OR
  23.  * PROPERTY OR OTHERWISE, AND WHETHER OR NOT LOSS WAS SUSTAINED FROM, OR AROSE OUT
  24.  * OF THE RESULTS OF, OR USE OF, THE SOFTWARE OR SERVICES PROVIDED HEREUNDER.
  25.  */

  26. package gov.nist.secauto.metaschema.core.metapath.function;

  27. import gov.nist.secauto.metaschema.core.metapath.IExpression;

  28. import java.util.List;
  29. import java.util.stream.Stream;

  30. import javax.xml.namespace.QName;

  31. import edu.umd.cs.findbugs.annotations.NonNull;

  32. public interface IFunctionLibrary {

  33.   /**
  34.    * Retrieve the collection of function signatures in this library as a stream.
  35.    *
  36.    * @return a stream of function signatures
  37.    */
  38.   @NonNull
  39.   Stream<IFunction> getFunctionsAsStream();

  40.   /**
  41.    * Determine if there is a function with the provided name that supports the
  42.    * signature of the provided methods.
  43.    *
  44.    * @param name
  45.    *          the name of a group of functions
  46.    * @param arguments
  47.    *          a list of argument expressions for use in determining an argument
  48.    *          signature match
  49.    * @return {@code true} if a function signature matches or {@code false}
  50.    *         otherwise
  51.    */
  52.   default boolean hasFunction(@NonNull String name, @NonNull List<IExpression> arguments) {
  53.     return getFunction(name, arguments) != null;
  54.   }

  55.   /**
  56.    * Determine if there is a function with the provided namespace qualified name
  57.    * that supports the signature of the provided methods.
  58.    *
  59.    * @param name
  60.    *          the namespace qualified name of a group of functions
  61.    * @param arguments
  62.    *          a list of argument expressions for use in determining an argument
  63.    *          signature match
  64.    * @return {@code true} if a function signature matches or {@code false}
  65.    *         otherwise
  66.    */
  67.   default boolean hasFunction(@NonNull QName name, @NonNull List<IExpression> arguments) {
  68.     return getFunction(name, arguments) != null;
  69.   }

  70.   /**
  71.    * Retrieve the function with the provided name that supports the signature of
  72.    * the provided methods, if such a function exists.
  73.    *
  74.    * @param name
  75.    *          the name of a group of functions
  76.    * @param arguments
  77.    *          a list of argument expressions for use in determining an argument
  78.    *          signature match
  79.    * @return the matching function or {@code null} if no match exists
  80.    */
  81.   IFunction getFunction(@NonNull String name, @NonNull List<IExpression> arguments);

  82.   /**
  83.    * Retrieve the function with the provided namespace qualified name that
  84.    * supports the signature of the provided methods, if such a function exists.
  85.    *
  86.    * @param name
  87.    *          the namespace qualified name of a group of functions
  88.    * @param arguments
  89.    *          a list of argument expressions for use in determining an argument
  90.    *          signature match
  91.    * @return the matching function or {@code null} if no match exists
  92.    */
  93.   IFunction getFunction(@NonNull QName name, @NonNull List<IExpression> arguments);
  94. }