Class DataCallbackProxy

Object
com.tailf.dp.annotations.DataCallbackProxy
All Implemented Interfaces:
DpDataCallback

public class DataCallbackProxy extends Object implements DpDataCallback
Callback proxy for Data Callbacks. Implements the DpDataCallback interface and delegates calls to the registered callback POJO with annotated methods
  • Constructor Details

    • DataCallbackProxy

      public DataCallbackProxy(Object backupObject, String callPoint)
      Constructor for Callback proxys. Used internally.
      Parameters:
      backupObject - registered callback POJO
      callPoint - string describing the callpoint for this callback
  • Method Details

    • getBackupObject

      public Object getBackupObject()
      Retrieve the callback POJO
      Returns:
      Object registered callback object
    • getCallPoint

      public String getCallPoint()
      Retrieve the callback callpoint
      Returns:
      callpoint string
    • addActionMethod

      public void addActionMethod(String name, Method method)
      Add callback action method to proxy
      Parameters:
      name - canonical action name
      method - registered callback method
    • addActionCapability

      public void addActionCapability(DataCBType dataCBType)
      Add action capability from annotated callType used to register capabilities on the server
      Parameters:
      dataCBType - action type
    • callpoint

      public String callpoint()
      Description copied from interface: DpDataCallback
      The name of the callpoint
      Specified by:
      callpoint in interface DpDataCallback
    • create

      public int create(DpTrans trans, ConfObject[] kp) throws DpCallbackException
      Description copied from interface: DpDataCallback
      This callback creates a new presence container, list entry or empty leaf. In the case of the "servers" data model, this function need to create a new "server" list entry.
      Specified by:
      create in interface DpDataCallback
      Parameters:
      trans - Transaction
      kp - The keypath
      Returns:
      Conf.REPLY_OK or Conf.REPLY_ACCUMULATE
      Throws:
      DpCallbackException - Callback method failed.
    • existsOptional

      public boolean existsOptional(DpTrans trans, ConfObject[] kp) throws DpCallbackException
      Description copied from interface: DpDataCallback
      If we have presence containers or optional leafs (empty leafs) without a type, we cannot use the getElem() callback to read such a leaf - since the element is typeless.

      Additionally, the getElem() callback cannot be used as an existence test by requesting a key leaf for entries in operational data lists without keys, or for leaf-list entries, since there are no key leafs in those cases.

      In all the above cases, we need to implement the existsOptional() callback method.

      Specified by:
      existsOptional in interface DpDataCallback
      Parameters:
      trans - Transaction
      kp - The keypath
      Returns:
      true or false
      Throws:
      DpCallbackException - Callback method failed.
    • getCase

      public ConfObject getCase(DpTrans trans, ConfObject[] kp, ConfObject[] choice) throws DpCallbackException
      Description copied from interface: DpDataCallback
      This callback method needs to return the currently chosen 'case' for a 'choice' construct. The choice construct is an array of ConfTag values. The reason for this when nestled choice in choice definitions are addressed, for the "non-nestled" scenario the array is of length 1. The callback must return either a ConfTag containing the selected case or ConfDefault or ConfNoExist. A null return value is equivalent to ConfNoExist. success.
      Specified by:
      getCase in interface DpDataCallback
      Parameters:
      trans - Transaction
      kp - The keypath
      choice - The choice name(s) as an array of ConfTag
      Returns:
      The ConfTag, ConfDefault, ConfNoExist or null.
      Throws:
      DpCallbackException - Callback method failed.
    • getElem

      public ConfValue getElem(DpTrans trans, ConfObject[] kp) throws DpCallbackException
      Description copied from interface: DpDataCallback
      This callback method needs to return a specific leaf value.

      The callback must return a ConfValue on success. The implementation of getElem must be prepared to return all the leafs including the key(s).

      When ConfD/NCS invokes getElem on a key leaf it is an existence test. The application should verify whether the object exists or not. If an object doesn't exists this method must return null.

      Specified by:
      getElem in interface DpDataCallback
      Parameters:
      trans - Transaction
      kp - The keypath structured as a reversed array of ConfTag and/or ConfKey objects
      Returns:
      The value of the element
      Throws:
      DpCallbackException - Callback method failure.
    • getIteratorKey

      public ConfKey getIteratorKey(DpTrans trans, ConfObject[] kp, Object obj) throws DpCallbackException
      Description copied from interface: DpDataCallback
      The following callback is used with the iterators above. For each object returned by the iterator the getKey method will be invoked which must return the ConfKey for the given object.
      Specified by:
      getIteratorKey in interface DpDataCallback
      Parameters:
      trans - Transaction
      kp - The keypath
      obj - The object returned by the iterator
      Returns:
      The configuration key of the provided object.
      Throws:
      DpCallbackException - Callback method failed.
    • getIteratorObject

      public ConfObject[] getIteratorObject(DpTrans trans, ConfObject[] kp, Object obj) throws DpCallbackException
      Description copied from interface: DpDataCallback
      The following callback is used with the iterators above. For each object returned by the iterator, the getIteratorObject method will be invoked and it must return either of the following: If a ConfValue array is used, unset values must be represented by a ConfNoExists element. Each list contained within the object must also be represented by a single ConfNoExists, regardless of whether it contains any elements or not. If a ConfXMLParam array is used, lists and missing values should simply be omitted from the array.
      Specified by:
      getIteratorObject in interface DpDataCallback
      Parameters:
      trans - Transaction
      kp - The keypath
      obj - The object returned by the iterator
      Returns:
      An array of all values in the object.
      Throws:
      DpCallbackException - Callback method failed.
    • getObject

      public ConfObject[] getObject(DpTrans trans, ConfObject[] kp) throws DpCallbackException
      Description copied from interface: DpDataCallback
      The purpose of the callback is to return an array of values, corresponding to a complete list entry in one swoop. The callback will only be called for list entries (i.e. getElem() is still needed for elements that are not sub-elements of a list entry). If the returned array is also ConfValue[] the complete list of values in there defined order is expected. However, as an option, it is possible to return an array of type ConfXMLParam[] instead. The difference being that the values are tagged with the node names from the data model - this means that non-existing values can simply be omitted from the array. Additionally the key leafs can be omitted, since they are already known by the server. - if the key leafs are included, they will be ignored. Finally, in e.g. the case of a container with both config and non-config data, where the config data is in CDB and only the non-config data provided by the callback, the config elements can be omitted (for the ConfValue[] return type they must be included as ConfNoExists elements). However, although the ConfXMLParam array format can represent nested lists, these must not be passed via this function, since the get_object() callback only pertains to a single entry of one list. Nodes representing sub-lists must thus be omitted from the array, and the server will issue separate get_object() invocations to retrieve the data for those. If the requested entry does not exist this callback should return null.
      Specified by:
      getObject in interface DpDataCallback
      Parameters:
      trans - Transaction
      kp - The keypath
      Returns:
      An array of all values.
      Throws:
      DpCallbackException - Callback method failed.
    • iterator

      public Iterator<Object> iterator(DpTrans trans, ConfObject[] kp) throws DpCallbackException
      Description copied from interface: DpDataCallback
      This callback makes it possible for ConfD/NCS to traverse a set of list entries.

      This method is a specific java construct which is actually not registered on the server side. Instead it is a mandatory tool for the GET_NEXT/GET_NEXT_OBJECT functionality to work. If either the DpDataCallback.getIteratorKey(DpTrans, ConfObject[], Object) or the DpDataCallback.getIteratorObject(DpTrans, ConfObject[], Object) is registered this method must also be registered.

      The Iterator is stored internally by Dp and when a GET_NEXT/GET_NEXT_OBJECT request is issued the iterator is called to get the next element in the list.

      Note that the iterator is free to return any POJO Object and it is instead the responsibility of the getIteratorKey or getIteratorObject to render the return values.

      Specified by:
      iterator in interface DpDataCallback
      Parameters:
      trans - DpTrans object for current transaction
      kp - Keypath for the list that is subject for traversal
      Returns:
      An Java Iterator for traversing objects in the table.
      Throws:
      DpCallbackException - if Callback method failed.
    • iterator

      public Iterator<Object> iterator(DpTrans trans, ConfObject[] kp, DpListFilter filter) throws DpCallbackException
      Description copied from interface: DpDataCallback
      Variant of iterator that may receive a DpListFilter which can be used to filter the list. Filtering the list is optional, if it is not done by the callback, it will be done server-side. If the callback implementation guarantees that the returned iterator is filtered, it can indicate this to the server by calling honorFilter(true) on the trans object. Note that this iterator will take precedence over its non-filtering counterpart.
      Specified by:
      iterator in interface DpDataCallback
      Parameters:
      trans - DpTrans object for current transaction
      kp - Keypath for the list that is subject for traversal
      filter - DpListFilter instance for filtering elements, or null if no filtering is requested
      Returns:
      An Java Iterator for traversing objects in the table.
      Throws:
      DpCallbackException - if Callback method failed.
    • iterator

      public DpDataFindNextIterator iterator(DpTrans trans, ConfObject[] kp, ConfFindNextType type, ConfKey key) throws DpCallbackException
      Description copied from interface: DpDataCallback
      This iterator method is a specialization of DpDataCallback.iterator(DpTrans, ConfObject[]) in that it returns an extended iterator i.e. DpFindNextIterator. This iterator does the same job as the normal Java Iterator but it also has a DpDataFindNextIterator.findNext(DpTrans, ConfObject[], ConfFindNextType, ConfKey) method that is called if FIND_NEXT/FIND_NEXT_OBJECT is called. Note that this iterator is expected to be able to traverse using next()/hasNext() functions after a initial findNext(...) has been called and it will take precedence over the standard iterator method.
      Specified by:
      iterator in interface DpDataCallback
      Parameters:
      trans - DpTrans object for current transaction
      kp - Keypath for the list that is subject for traversal
      type - ConfFindNextType describing the findNext behavior
      key - ConfKey which constitutes the search criteria
      Returns:
      An Java Iterator subclass DpFindNextIterator.
      Throws:
      DpCallbackException - if Callback method failed.
    • iterator

      public DpDataFindNextIterator iterator(DpTrans trans, ConfObject[] kp, ConfFindNextType type, ConfKey key, DpListFilter filter) throws DpCallbackException
      Description copied from interface: DpDataCallback
      Variant of the DpDataFindNextIterator-returning iterator above that may receive a DpListFilter instance which can be used to filter the list. Filtering the list is optional, if it is not done by the callback, it will be done server-side. If the callback implementation guarantees that the returned iterator is filtered, it can indicate this to the server by calling honorFilter(true) on the trans object. Note that this iterator will take precedence over all other iterators.
      Specified by:
      iterator in interface DpDataCallback
      Parameters:
      trans - DpTrans object for current transaction
      kp - Keypath for the list that is subject for traversal
      type - ConfFindNextType describing the findNext behavior
      key - ConfKey which constitutes the search criteria
      filter - DpListFilter instance for filtering elements, or null if no filtering is requested
      Returns:
      An Java Iterator subclass DpFindNextIterator.
      Throws:
      DpCallbackException - if Callback method failed.
    • mask

      public int mask()
      Description copied from interface: DpDataCallback
      Specified by:
      mask in interface DpDataCallback
    • numInstances

      public int numInstances(DpTrans trans, ConfObject[] kp) throws DpCallbackException
      Description copied from interface: DpDataCallback
      This callback can optionally be implemented. The purpose is to return the number of instances of a list. Must return number of list entries on success
      Specified by:
      numInstances in interface DpDataCallback
      Parameters:
      trans - Transaction
      kp - The keypath
      Returns:
      The number of instances
      Throws:
      DpCallbackException - Callback method failed.
    • remove

      public int remove(DpTrans trans, ConfObject[] kp) throws DpCallbackException
      Description copied from interface: DpDataCallback
      This callback is used to remove a presence container, list entry or empty leaf and all its sub elements.
      Specified by:
      remove in interface DpDataCallback
      Parameters:
      trans - Transaction
      kp - The keypath
      Returns:
      Conf.REPLY_OK or Conf.REPLY_ACCUMULATE
      Throws:
      DpCallbackException - Callback method failed.
    • setCase

      public int setCase(DpTrans trans, ConfObject[] kp, ConfObject[] choice, ConfTag caseval) throws DpCallbackException
      Description copied from interface: DpDataCallback
      This callback method sets the currently chosen 'case' for a 'choice' construct. The choice construct is an array of ConfTag values. The reason for this when nestled choice in choice definitions are addressed, for the "non-nestled" scenario the array is of length 1.
      Specified by:
      setCase in interface DpDataCallback
      Parameters:
      trans - Transaction
      kp - The keypath
      choice - The choice name(s) as an array of ConfTag
      caseval - The name of the case
      Returns:
      Conf.REPLY_OK
      Throws:
      DpCallbackException - Callback method failed.
    • setElem

      public int setElem(DpTrans trans, ConfObject[] kp, ConfValue newval) throws DpCallbackException
      Description copied from interface: DpDataCallback
      This callback writes a data leaf. Note that an optional leaf (i.e. a leaf "type empty;" is created by a call to this method.
      Specified by:
      setElem in interface DpDataCallback
      Parameters:
      trans - Transaction
      kp - The keypath
      newval - The new value to be set
      Returns:
      Conf.REPLY_OK or Conf.REPLY_ACCUMULATE
      Throws:
      DpCallbackException - Callback method failed.
    • getAttrs

      public int getAttrs(DpTrans trans, ConfObject[] kp, List<ConfAttributeValue> attrList) throws DpCallbackException
      Description copied from interface: DpDataCallback
      This callback only needs to be implemented for callpoints specified for configuration data, and only if attributes are enabled in the server configuration (/confdConfig/enableAttributes set to true). These are the currently supported attributes: ConfAttributeType.TAGS (values are ConfList of ConfBuf) ConfAttributeType.ANNOTATION (value is ConfBuf) ConfAttributeType.INACTIVE (not used) ConfAttributeType.ORIGIN (value is Confidentityref) The attrs parameter is an list of ConfAttributeValue objects with attributeType set to requested attribute and attributeValue set to null. If the list is empty all attributes are requested. If the node given by kp does not exist, the callback should throw an IllegalArgumentException, otherwise it should set values to the elements of the attrs list, or even add attributes if the list was empty. Must return Conf.REPLY_OK on success or Conf.REPLY_DELAYED_RESPONSE. On error a DpCallbackException should be thrown
      Specified by:
      getAttrs in interface DpDataCallback
      Parameters:
      trans - current transaction
      kp - keypath for node to set attributes on
      attrList - list of ConfAttributeValue to populate as result
      Returns:
      Conf.REPLY_OK or Conf.REPLY_DELAYED_RESPONSE on successful call
      Throws:
      DpCallbackException - on unsuccessful call
    • setAttr

      public int setAttr(DpTrans trans, ConfObject[] kp, ConfAttributeValue attr) throws DpCallbackException
      Description copied from interface: DpDataCallback
      This callback also only needs to be implemented for callpoints specified for configuration data, and only if attributes are enabled in the server configuration (/confdConfig/enableAttributes set to true). See get_attrs() above for the supported attributes. The callback should set the attribute attr for the node given by kp to the value v. If the callback is invoked with NULL for the value argument, it means that the attribute should be deleted. The callback must return Conf.REPLY_OK on success, Conf.REPLY_DELAYED_RESPONSE or Conf.REPLY_ACCUMULATE. On error an DpCallbackException should be thrown.
      Specified by:
      setAttr in interface DpDataCallback
      Parameters:
      trans - current transaction
      kp - keypath for node to set attributes on
      attr - ConfAttributeValue to set value
      Returns:
      int
      Throws:
      DpCallbackException
    • moveAfter

      public int moveAfter(DpTrans trans, ConfObject[] kp, ConfKey prevkey) throws DpCallbackException
      Description copied from interface: DpDataCallback
      This callback only needs to be implemented if we provide configuration data that has YANG lists with a ordered-by user statement. The callback moves the list entry given by kp. If prevkey is NULL, the entry is moved first in the list, otherwise it is moved after the entry given by prevkey. In this case prevkey identifies an entry in the list. The callback must return Conf.REPLY_OK on success, Conf.REPLY_DELAYED_RESPONSE or Conf.REPLY_ACCUMULATE. On error an DpCallbackException should be thrown.
      Specified by:
      moveAfter in interface DpDataCallback
      Parameters:
      trans - current transaction
      kp - keypath for entry to move
      prevkey - position to entry which should be before the entry to move
      Returns:
      Conf.REPLY_OK
      Throws:
      DpCallbackException
    • writeAll

      public int writeAll(DpTrans trans, ConfObject[] kp) throws DpCallbackException
      Description copied from interface: DpDataCallback
      This callback method sets the currently chosen 'case' for a 'choice' construct.
      Specified by:
      writeAll in interface DpDataCallback
      Parameters:
      trans - Transaction
      kp - The keypath
      Returns:
      Conf.REPLY_OK
      Throws:
      DpCallbackException - Callback method failed.
    • getIteratorObjectList

      public List<ConfObject[]> getIteratorObjectList(DpTrans trans, ConfObject[] kp, Object obj, Iterator<? extends Object> iterator) throws DpCallbackException
      Description copied from interface: DpDataCallback

      This callback is used in place of getIteratorObject when a List of objects is requested rather than a single instance. This is of interest when lists are big and performance requires larger chunks to be sent at once.

      The first object from the iterator is already retrieved and delivered in the obj parameter. It is mandatory to put this object first in the list. An arbitrary number of additional objects can then be retrieved using the iterator.

      The returned list should contain either ConfValue arrays or ConfXMLParam arrays. See DpDataCallback.getIteratorObject(com.tailf.dp.DpTrans, com.tailf.conf.ConfObject[], java.lang.Object) for more information on how to format the return values.

      It is important to return all objects retrieved by the iterator. Any item that is retrieved but not returned will be lost.

      To override the global object cache timeout for the response, return an object of the type NextObjectList<ConfObject[]>, for example an instance of NextObjectArrayList<ConfObject[]> where you have set the desired timeout via the NextObjectArrayList.setTimeout(int) method.

      For backwards compatibility reasons, you can return a List<ConfObject[]> instance of a class that doesn't implement the NextObjectList interface, in which case the default object cache timeout will be in effect for the response.

      Also for backwards compatibility reasons, it is acceptable for this method to return a List<ConfValue[]> instead of a List<ConfObject[]>.

      Specified by:
      getIteratorObjectList in interface DpDataCallback
      Parameters:
      trans - Transaction
      kp - The keypath
      obj - The first object returned by the iterator
      iterator - The iterator to optionally retrieve more objects from
      Returns:
      A List of objects where each object is represented as an array of ConfValues or ConfXMLParams.
      Throws:
      DpCallbackException - Callback method fails
    • getDataCallbackProxys

      public static DataCallbackProxy[] getDataCallbackProxys(String mountId, Object obj) throws DpCallbackException
      Get array of proxy objects from registered POJO callback. Used internally at callback registration
      Parameters:
      obj - registered Callback POJO
      Returns:
      array of DataCallbackProxy
      Throws:
      DpCallbackException
    • getFlags

      public EnumSet<DpFlag> getFlags()