Class DataCallbackProxy
- All Implemented Interfaces:
DpDataCallback
DpDataCallback
interface and delegates calls to the registered callback POJO with annotated
methods-
Field Summary
Fields inherited from interface com.tailf.dp.DpDataCallback
M_ALL, M_CREATE, M_EXISTS_OPTIONAL, M_GET_ATTRS, M_GET_CASE, M_GET_ELEM, M_GET_NEXT, M_GET_NEXT_OBJECT, M_GET_OBJECT, M_MOVE_AFTER, M_NUM_INSTANCES, M_REMOVE, M_SET_ATTR, M_SET_CASE, M_SET_ELEM, M_WANT_FILTER, M_WRITE_ALL -
Constructor Summary
ConstructorsConstructorDescriptionDataCallbackProxy(Object backupObject, String callPoint) Constructor for Callback proxys. -
Method Summary
Modifier and TypeMethodDescriptionvoidaddActionCapability(DataCBType dataCBType) Add action capability from annotated callType used to register capabilities on the servervoidaddActionMethod(String name, Method method) Add callback action method to proxyThe name of the callpointintcreate(DpTrans trans, ConfObject[] kp) This callback creates a new presence container, list entry or empty leaf.booleanexistsOptional(DpTrans trans, ConfObject[] kp) 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.intgetAttrs(DpTrans trans, ConfObject[] kp, List<ConfAttributeValue> attrList) 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).Retrieve the callback POJORetrieve the callback callpointgetCase(DpTrans trans, ConfObject[] kp, ConfObject[] choice) This callback method needs to return the currently chosen 'case' for a 'choice' construct.static DataCallbackProxy[]getDataCallbackProxys(String mountId, Object obj) Get array of proxy objects from registered POJO callback.getElem(DpTrans trans, ConfObject[] kp) This callback method needs to return a specific leaf value.getFlags()getIteratorKey(DpTrans trans, ConfObject[] kp, Object obj) The following callback is used with the iterators above.getIteratorObject(DpTrans trans, ConfObject[] kp, Object obj) The following callback is used with the iterators above.List<ConfObject[]>getIteratorObjectList(DpTrans trans, ConfObject[] kp, Object obj, Iterator<? extends Object> iterator) This callback is used in place of getIteratorObject when aListof objects is requested rather than a single instance.getObject(DpTrans trans, ConfObject[] kp) The purpose of the callback is to return an array of values, corresponding to a complete list entry in one swoop.iterator(DpTrans trans, ConfObject[] kp) This callback makes it possible for ConfD/NCS to traverse a set of list entries.iterator(DpTrans trans, ConfObject[] kp, ConfFindNextType type, ConfKey key) This iterator method is a specialization ofDpDataCallback.iterator(DpTrans, ConfObject[])in that it returns an extended iterator i.e.iterator(DpTrans trans, ConfObject[] kp, ConfFindNextType type, ConfKey key, DpListFilter filter) Variant of the DpDataFindNextIterator-returning iterator above that may receive a DpListFilter instance which can be used to filter the list.iterator(DpTrans trans, ConfObject[] kp, DpListFilter filter) Variant of iterator that may receive a DpListFilter which can be used to filter the list.intmask()Mask of flags for each method that is supported by this callback:DpDataCallback.M_EXISTS_OPTIONALDpDataCallback.M_GET_ELEMDpDataCallback.M_GET_NEXTDpDataCallback.M_SET_ELEMDpDataCallback.M_CREATEDpDataCallback.M_REMOVEDpDataCallback.M_NUM_INSTANCESDpDataCallback.M_GET_OBJECTDpDataCallback.M_GET_NEXT_OBJECTDpDataCallback.M_GET_CASEDpDataCallback.M_SET_CASEDpDataCallback.M_GET_ATTRSDpDataCallback.M_SET_ATTRDpDataCallback.M_MOVE_AFTERDpDataCallback.M_WRITE_ALLDpDataCallback.M_WANT_FILTERintmoveAfter(DpTrans trans, ConfObject[] kp, ConfKey prevkey) This callback only needs to be implemented if we provide configuration data that has YANG lists with a ordered-by user statement.intnumInstances(DpTrans trans, ConfObject[] kp) This callback can optionally be implemented.intremove(DpTrans trans, ConfObject[] kp) This callback is used to remove a presence container, list entry or empty leaf and all its sub elements.intsetAttr(DpTrans trans, ConfObject[] kp, ConfAttributeValue attr) 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).intsetCase(DpTrans trans, ConfObject[] kp, ConfObject[] choice, ConfTag caseval) This callback method sets the currently chosen 'case' for a 'choice' construct.intsetElem(DpTrans trans, ConfObject[] kp, ConfValue newval) This callback writes a data leaf.intwriteAll(DpTrans trans, ConfObject[] kp) This callback method sets the currently chosen 'case' for a 'choice' construct.
-
Constructor Details
-
DataCallbackProxy
Constructor for Callback proxys. Used internally.- Parameters:
backupObject- registered callback POJOcallPoint- string describing the callpoint for this callback
-
-
Method Details
-
getBackupObject
Retrieve the callback POJO- Returns:
- Object registered callback object
-
getCallPoint
Retrieve the callback callpoint- Returns:
- callpoint string
-
addActionMethod
Add callback action method to proxy- Parameters:
name- canonical action namemethod- registered callback method
-
addActionCapability
Add action capability from annotated callType used to register capabilities on the server- Parameters:
dataCBType- action type
-
callpoint
Description copied from interface:DpDataCallbackThe name of the callpoint- Specified by:
callpointin interfaceDpDataCallback
-
create
Description copied from interface:DpDataCallbackThis 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:
createin interfaceDpDataCallback- Parameters:
trans- Transactionkp- The keypath- Returns:
Conf.REPLY_OKorConf.REPLY_ACCUMULATE- Throws:
DpCallbackException- Callback method failed.
-
existsOptional
Description copied from interface:DpDataCallbackIf 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:
existsOptionalin interfaceDpDataCallback- Parameters:
trans- Transactionkp- The keypath- Returns:
trueorfalse- Throws:
DpCallbackException- Callback method failed.
-
getCase
public ConfObject getCase(DpTrans trans, ConfObject[] kp, ConfObject[] choice) throws DpCallbackException Description copied from interface:DpDataCallbackThis 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:
getCasein interfaceDpDataCallback- Parameters:
trans- Transactionkp- The keypathchoice- The choice name(s) as an array of ConfTag- Returns:
- The ConfTag, ConfDefault, ConfNoExist or null.
- Throws:
DpCallbackException- Callback method failed.
-
getElem
Description copied from interface:DpDataCallbackThis callback method needs to return a specific leaf value.The callback must return a
ConfValueon success. The implementation ofgetElemmust be prepared to return all the leafs including the key(s).When ConfD/NCS invokes
getElemon 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:
getElemin interfaceDpDataCallback- Parameters:
trans- Transactionkp- The keypath structured as a reversed array ofConfTagand/orConfKeyobjects- 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:DpDataCallbackThe 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:
getIteratorKeyin interfaceDpDataCallback- Parameters:
trans- Transactionkp- The keypathobj- 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:DpDataCallbackThe following callback is used with the iterators above. For each object returned by the iterator, thegetIteratorObjectmethod will be invoked and it must return either of the following:- An array of
ConfValues describing the object - An array of
ConfXMLParams describing the object
ConfNoExistselement. 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:
getIteratorObjectin interfaceDpDataCallback- Parameters:
trans- Transactionkp- The keypathobj- The object returned by the iterator- Returns:
- An array of all values in the object.
- Throws:
DpCallbackException- Callback method failed.
- An array of
-
getObject
Description copied from interface:DpDataCallbackThe 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:
getObjectin interfaceDpDataCallback- Parameters:
trans- Transactionkp- The keypath- Returns:
- An array of all values.
- Throws:
DpCallbackException- Callback method failed.
-
iterator
Description copied from interface:DpDataCallbackThis 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_OBJECTfunctionality to work. If either theDpDataCallback.getIteratorKey(DpTrans, ConfObject[], Object)or theDpDataCallback.getIteratorObject(DpTrans, ConfObject[], Object)is registered this method must also be registered.The Iterator is stored internally by
Dpand when aGET_NEXT/GET_NEXT_OBJECTrequest 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
getIteratorKeyorgetIteratorObjectto render the return values.- Specified by:
iteratorin interfaceDpDataCallback- Parameters:
trans- DpTrans object for current transactionkp- 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:DpDataCallbackVariant 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:
iteratorin interfaceDpDataCallback- Parameters:
trans- DpTrans object for current transactionkp- Keypath for the list that is subject for traversalfilter- 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:DpDataCallbackThis iterator method is a specialization ofDpDataCallback.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 aDpDataFindNextIterator.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:
iteratorin interfaceDpDataCallback- Parameters:
trans- DpTrans object for current transactionkp- Keypath for the list that is subject for traversaltype-ConfFindNextTypedescribing the findNext behaviorkey- 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:DpDataCallbackVariant 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:
iteratorin interfaceDpDataCallback- Parameters:
trans- DpTrans object for current transactionkp- Keypath for the list that is subject for traversaltype-ConfFindNextTypedescribing the findNext behaviorkey- ConfKey which constitutes the search criteriafilter- 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:DpDataCallbackMask of flags for each method that is supported by this callback:-
DpDataCallback.M_EXISTS_OPTIONAL -
DpDataCallback.M_GET_ELEM -
DpDataCallback.M_GET_NEXT -
DpDataCallback.M_SET_ELEM -
DpDataCallback.M_CREATE -
DpDataCallback.M_REMOVE -
DpDataCallback.M_NUM_INSTANCES -
DpDataCallback.M_GET_OBJECT -
DpDataCallback.M_GET_NEXT_OBJECT -
DpDataCallback.M_GET_CASE -
DpDataCallback.M_SET_CASE -
DpDataCallback.M_GET_ATTRS -
DpDataCallback.M_SET_ATTR -
DpDataCallback.M_MOVE_AFTER -
DpDataCallback.M_WRITE_ALL -
DpDataCallback.M_WANT_FILTER
- Specified by:
maskin interfaceDpDataCallback
-
-
numInstances
Description copied from interface:DpDataCallbackThis 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:
numInstancesin interfaceDpDataCallback- Parameters:
trans- Transactionkp- The keypath- Returns:
- The number of instances
- Throws:
DpCallbackException- Callback method failed.
-
remove
Description copied from interface:DpDataCallbackThis callback is used to remove a presence container, list entry or empty leaf and all its sub elements.- Specified by:
removein interfaceDpDataCallback- Parameters:
trans- Transactionkp- The keypath- Returns:
Conf.REPLY_OKorConf.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:DpDataCallbackThis 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:
setCasein interfaceDpDataCallback- Parameters:
trans- Transactionkp- The keypathchoice- The choice name(s) as an array of ConfTagcaseval- The name of the case- Returns:
Conf.REPLY_OK- Throws:
DpCallbackException- Callback method failed.
-
setElem
Description copied from interface:DpDataCallbackThis 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:
setElemin interfaceDpDataCallback- Parameters:
trans- Transactionkp- The keypathnewval- The new value to be set- Returns:
Conf.REPLY_OKorConf.REPLY_ACCUMULATE- Throws:
DpCallbackException- Callback method failed.
-
getAttrs
public int getAttrs(DpTrans trans, ConfObject[] kp, List<ConfAttributeValue> attrList) throws DpCallbackException Description copied from interface:DpDataCallbackThis 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 returnConf.REPLY_OKon success orConf.REPLY_DELAYED_RESPONSE. On error aDpCallbackExceptionshould be thrown- Specified by:
getAttrsin interfaceDpDataCallback- Parameters:
trans- current transactionkp- keypath for node to set attributes onattrList- list of ConfAttributeValue to populate as result- Returns:
Conf.REPLY_OKorConf.REPLY_DELAYED_RESPONSEon successful call- Throws:
DpCallbackException- on unsuccessful call
-
setAttr
public int setAttr(DpTrans trans, ConfObject[] kp, ConfAttributeValue attr) throws DpCallbackException Description copied from interface:DpDataCallbackThis 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:
setAttrin interfaceDpDataCallback- Parameters:
trans- current transactionkp- keypath for node to set attributes onattr- ConfAttributeValue to set value- Returns:
- int
- Throws:
DpCallbackException
-
moveAfter
Description copied from interface:DpDataCallbackThis 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:
moveAfterin interfaceDpDataCallback- Parameters:
trans- current transactionkp- keypath for entry to moveprevkey- position to entry which should be before the entry to move- Returns:
Conf.REPLY_OK- Throws:
DpCallbackException
-
writeAll
Description copied from interface:DpDataCallbackThis callback method sets the currently chosen 'case' for a 'choice' construct.- Specified by:
writeAllin interfaceDpDataCallback- Parameters:
trans- Transactionkp- 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:DpDataCallbackThis callback is used in place of getIteratorObject when a
Listof 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
objparameter. 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
ConfValuearrays orConfXMLParamarrays. SeeDpDataCallback.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 ofNextObjectArrayList<ConfObject[]> where you have set the desired timeout via theNextObjectArrayList.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:
getIteratorObjectListin interfaceDpDataCallback- Parameters:
trans- Transactionkp- The keypathobj- The first object returned by the iteratoriterator- 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
-