DataProvider::DataProviderTypeCache Class Reference

Data provider type cache class. More...

Inherits Serializable.

## Public Member Functions

| clear ()
| Clears the type hierarchy of all non-locked types.
bool | empty ()
| Returns True if the cache is empty, False if not.
RWLock | getLock ()
| Returns the RWLock to allow for external serialization.
DataProviderTypeEntry | getRoot ()
| Returns the root type entry.
*AbstractDataProviderType | getType (string path)
| Returns the given data provider type or NOTHING if not present. More...
AbstractDataProviderType | getTypeEx (string path)
| Returns the given data provider type or throws an exception if not present. More...
*AbstractDataProviderType | getTypeImpl (string path, bool throw_exception, *code type_loader)
| Returns the given data provider type and either throws an exception if not present or returns NOTHING. More...
*hash< DataProviderTypeEntryInfo > | getTypeInfo (string path, *bool rec_children_only)
| Returns the given data provider type or NOTHING if not present. More...
hash< DataProviderTypeEntryInfo > | getTypeInfoEx (string path, *bool rec_children_only)
| Returns the given data provider type or throws an exception if not present. More...
*hash< DataProviderTypeEntryInfo > | getTypeInfoImpl (string path, bool throw_exception, *bool rec_children_only)
| Returns information for the given data provider type and either throws an exception if not present or returns NOTHING. More...
*list< string > | listTypes ()
| Returns a list of registered data provider type paths. More...
| lockAll ()
| Locks all types.
bool | registerOrReplaceType (string path, AbstractDataProviderType type)
| Register or replaces a data provider type in the cache. More...
| registerType (string path, AbstractDataProviderType type, bool locked=False)
| Register a new data provider type in the cache. More...
*AbstractDataProviderType | removeType (string path)
| Removes a type from the type cache. More...
int | size ()
| Returns the number of types in the cache.

## Protected Member Functions

DataProviderTypeEntry | root ()
| Data provider data type cache.
transient RWLock | rwlock ()
| Data provider type cache lock.

## Static Protected Member Functions

static *AbstractDataProviderType | getTypeFromFields (string path, AbstractDataProviderType type, list< string > type_path, bool throw_exception)
| Returns the given data provider type and either throws an exception if not present or returns NOTHING. More...

## Protected Attributes

int | size = 0
| The size of the cache.

## Detailed Description

Data provider type cache class.

## Member Function Documentation

## getType()

*AbstractDataProviderType DataProvider::DataProviderTypeCache::getType | ( | string | path | ) |

Returns the given data provider type or NOTHING if not present.

Parameters

  path | a `"/"` separated path for the type; trailing path elements can be a path into fields

Returns
  the given data provider type; NOTHING is returned if the type cannot be resolved

Note
  types are stored based on the path provided which may differ from their type names (which may be generic and therefore not suitable for indexing)

## getTypeEx()

AbstractDataProviderType DataProvider::DataProviderTypeCache::getTypeEx | ( | string | path | ) |

Returns the given data provider type or throws an exception if not present.

Parameters

  path | a `"/"` separated path for the type; trailing path elements can be a path into fields

Returns
  the given data provider type; an exception is thrown if the data provider is unknown

Exceptions

  PROVIDER-ERROR | the given data provider type path is unknown

Note
  types are stored based on the path provided which may differ from their type names (which may be generic and therefore not suitable for indexing)

## getTypeFromFields()

static *AbstractDataProviderType DataProvider::DataProviderTypeCache::getTypeFromFields | ( | string | path,
|  | AbstractDataProviderType | type,
|  | list< string > | type_path,
|  | bool | throw_exception
| ) |  |

static protected

Returns the given data provider type and either throws an exception if not present or returns NOTHING.

Parameters

  path | a `"/"` separated path for the type
  type | the base type for the search
  type_path | the path in the type for fields leading to the final return type
  throw_exception | if True then an exception is thrown if the path cannot be resolved, otherwise NOTHING is returned

Returns
  the given data provider type or NOTHING is returned if the path cannot be resolved and the throw_exception argument is False

Exceptions

  PROVIDER-ERROR | the given data provider type path is unknown; only thrown if the throw_exception argument is True

Note
  types are stored based on the path provided which may differ from their type names (which may be generic and therefore not suitable for indexing)

## getTypeImpl()

*AbstractDataProviderType DataProvider::DataProviderTypeCache::getTypeImpl | ( | string | path,
|  | bool | throw_exception,
|  | *code | type_loader
| ) |  |

Returns the given data provider type and either throws an exception if not present or returns NOTHING.

Parameters

  path | a `"/"` separated path for the type
  throw_exception | if True then an exception is thrown if the path cannot be resolved, otherwise NOTHING is returned
  type_loader | a closure taking a list of strings giving the full path to the type and returning `*AbstractDataProviderType`

Returns
  the given data provider type or NOTHING is returned if the path cannot be resolved and the throw_exception argument is False

Exceptions

  PROVIDER-ERROR | the given data provider type path is unknown; only thrown if the throw_exception argument is True

Note
  types are stored based on the path provided which may differ from their type names (which may be generic and therefore not suitable for indexing)

## getTypeInfo()

*hash<DataProviderTypeEntryInfo> DataProvider::DataProviderTypeCache::getTypeInfo | ( | string | path,
|  | *bool | rec_children_only
| ) |  |

Returns the given data provider type or NOTHING if not present.

Parameters

  path | a `"/"` separated path for the type; trailing path elements can be a path into fields
  rec_children_only | if True, then only children with fields are returned

Returns
  the given data provider type; NOTHING is returned if the type cannot be resolved

Note
  types are stored based on the path provided which may differ from their type names (which may be generic and therefore not suitable for indexing)

## getTypeInfoEx()

hash<DataProviderTypeEntryInfo> DataProvider::DataProviderTypeCache::getTypeInfoEx | ( | string | path,
|  | *bool | rec_children_only
| ) |  |

Returns the given data provider type or throws an exception if not present.

Parameters

  path | a `"/"` separated path for the type; trailing path elements can be a path into fields
  rec_children_only | if True, then only children with fields are returned

Returns
  the given data provider type; an exception is thrown if the data provider is unknown

Exceptions

  PROVIDER-ERROR | the given data provider type path is unknown

Note
  types are stored based on the path provided which may differ from their type names (which may be generic and therefore not suitable for indexing)

## getTypeInfoImpl()

*hash<DataProviderTypeEntryInfo> DataProvider::DataProviderTypeCache::getTypeInfoImpl | ( | string | path,
|  | bool | throw_exception,
|  | *bool | rec_children_only
| ) |  |

Returns information for the given data provider type and either throws an exception if not present or returns NOTHING.

Parameters

  path | a `"/"` separated path for the type
  throw_exception | if True then an exception is thrown if the path cannot be resolved, otherwise NOTHING is returned
  rec_children_only | if True, then only children with fields are returned

Returns
  information for the given data provider type or NOTHING is returned if the path cannot be resolved and the throw_exception argument is False

Exceptions

  PROVIDER-ERROR | the given data provider type path is unknown; only thrown if the throw_exception argument is True

Note
  types are stored based on the path provided which may differ from their type names (which may be generic and therefore not suitable for indexing)

## listTypes()

*list<string> DataProvider::DataProviderTypeCache::listTypes | ( |  | ) |

Returns a list of registered data provider type paths.

Note
  types are stored based on the path provided which may differ from their type names (which may be generic and therefore not suitable for indexing)

## registerOrReplaceType()

bool DataProvider::DataProviderTypeCache::registerOrReplaceType | ( | string | path,
|  | AbstractDataProviderType | type
| ) |  |

Register or replaces a data provider type in the cache.

Parameters

  path | a `"/"` separated path for the type; this is the lookup index
  type | the new data provider type

Returns
  True if the type was replaced or added

Exceptions

  TYPE-LOCK-ERROR | type entry cannot be replaced, because it is locked

Note
  types are stored based on the path provided which may differ from their type names (which may be generic and therefore not suitable for indexing)

## registerType()

DataProvider::DataProviderTypeCache::registerType | ( | string | path,
|  | AbstractDataProviderType | type,
|  | bool | locked = `False`
| ) |  |

Register a new data provider type in the cache.

Parameters

  path | a `"/"` separated path for the type; this is the lookup index
  type | the new data provider type
  locked | if the data type should be locked, prohibiting updates and deletions

Exceptions

  PROVIDER-ERROR | the given provider has already been registered

Note
  types are stored based on the path provided which may differ from their type names (which may be generic and therefore not suitable for indexing)

## removeType()

*AbstractDataProviderType DataProvider::DataProviderTypeCache::removeType | ( | string | path | ) |

Removes a type from the type cache.

Parameters

  path | a `"/"` separated path for the type; this is the lookup index

Returns
  the type removed or NOTHING if the type was not present

Exceptions

  TYPE-LOCK-ERROR | the given type cannot be removed, because it is locked