18 #define AFW_IMPLEMENTATION_ID "adaptor_impl"
23 #define AFW_IMPLEMENTATION_INF_SPECIFIER AFW_DEFINE_CONST_DATA
24 #define AFW_IMPLEMENTATION_INF_LABEL afw_adaptor_impl_object_type_cache_inf
26 #undef AFW_IMPLEMENTATION_INF_SPECIFIER
27 #undef AFW_IMPLEMENTATION_INF_LABEL
32 void *original_context;
34 void *impl_callback_context;
47 impl_set_trace_flag_fields(
60 adaptor->trace_flag_id =
66 adaptor->detail_flag_id =
73 adaptor->detail_flag_id, xctx);
76 adaptor->detail_flag_id,
84 "This produces a basic plus detail trace "
93 included_by_flag_id, xctx);
96 adaptor->detail_flag_id, xctx);
103 adaptor->trace_flag_id, xctx);
106 adaptor->trace_flag_id,
114 "This produces a basic trace of adaptor id %" AFW_UTF8_FMT ".",
122 included_by_flag_id, xctx);
125 adaptor->detail_flag_id, xctx);
128 adaptor->trace_flag_id, xctx);
145 "Configuration type=adaptor, adaptorType=%"
165 " Configuration type=adaptor, adaptorType=%" AFW_UTF8_FMT
177 impl_adaptor_common_variable_get_cb(
199 adaptor->properties,
true, xctx->p, xctx);
201 impl_adaptor_common_variable_get_cb, (
void *)adaptor,
203 if (adaptor->impl->custom_variables) {
205 adaptor->impl->custom_variables,
true,
228 (instance_size != 0) ? instance_size :
sizeof(
afw_adaptor_t),
230 adaptor->inf = &impl_afw_adaptor_inf;
233 properties, &afw_s_adaptorType, xctx);
235 adaptor->impl = impl;
245 properties, &afw_s_adaptorType, xctx);
249 properties, &afw_s_sourceLocation, xctx);
256 &afw_s_adaptorId, p, xctx);
277 "Read/write lock used internally by adaptor id %" AFW_UTF8_FMT " implementation.",
288 impl_set_trace_flag_fields(adaptor, xctx);
291 afw_trace_fz(1, adaptor->trace_flag_index, adaptor, xctx,
299 &afw_s__AdaptiveObjectType_,
true,
false, xctx);
304 &afw_s_authorizationHandlerId, xctx);
307 authorization_handler = NULL;
313 if (authorization_handler) {
318 if (!authorization_handler) {
330 adaptor->properties, &afw_s_journalAdaptorId, xctx);
353 " specified in journalAdaptorId property is not startable"
354 " or does not support journaling.",
369 properties, &afw_s_authorization, xctx);
374 &afw_s__AdaptiveAdaptorMetrics_,
375 &adaptor->adaptor_id, impl, xctx->env->p, xctx);
378 if (xctx->env->layout_adaptor_id &&
379 afw_utf8_equal(xctx->env->layout_adaptor_id, &adaptor->adaptor_id))
382 &afw_s__AdaptiveLayoutComponentType_,
true,
true, xctx);
384 &afw_s__AdaptiveLayoutComponent_,
false,
true, xctx);
389 &afw_s_isModelLocation, xctx);
391 impl->
model_location = afw_model_location_create(adaptor, p, xctx);
393 &afw_s__AdaptiveHybridProperties_,
false,
true, xctx);
395 &afw_s__AdaptiveModel_,
true,
true, xctx);
397 &afw_s__AdaptiveModelObjectTypes_,
false,
true, xctx);
399 &afw_s__AdaptiveModelObjectType_,
false,
true, xctx);
401 &afw_s__AdaptiveModelPropertyTypes_,
false,
true, xctx);
403 &afw_s__AdaptiveModelPropertyType_,
false,
true, xctx);
456 for (iterator = NULL;;) {
458 list, &iterator, xctx);
460 callback(obj, context, xctx);
464 callback(NULL, context, xctx);
481 is_applicable =
true;
484 &afw_s_peerId, xctx);
487 &afw_s_peerId, xctx);
488 if (!peerIdInConsumer) {
490 "Missing peerId property in "
499 return is_applicable;
543 ht = adaptor->impl->supported_core_object_types;
545 e = apr_hash_get(ht, object_type_id->s, object_type_id->len);
547 e->allow_entity = allow_entity;
548 e->allow_write = allow_write;
549 impl_update_allow(e->object, allow_entity, allow_write, xctx);
554 e->object_type_id = object_type_id;
556 object_type_id, xctx);
564 &afw_s__AdaptiveObjectType_, object_type_id, xctx);
570 impl_update_allow(e->object, allow_entity, allow_write, xctx);
572 apr_hash_set(ht, e->object_type_id->s, e->object_type_id->len, e);
595 &afw_s__AdaptiveObjectType_, objectType, xctx);
605 &afw_s_otherProperties, xctx);
625 object_type_cache->inf = inf;
626 object_type_cache->session = session;
627 object_type_cache->all_object_types_immutable =
628 all_object_types_immutable;
649 impl_afw_adaptor_object_type_cache_get(
659 adaptor = instance->session->adaptor;
669 object_type_id->s, object_type_id->len);
682 impl_afw_adaptor_object_type_cache_set(
690 adaptor = instance->session->adaptor;
700 object_type->object_type_id->s,
701 object_type->object_type_id->len,
742 result->pub.adaptor = instance;
743 result->pub.inf = &impl_afw_adaptor_session_inf;
744 result->pub.p = xctx->p;
749 result->wrapped_session =
750 impl->
wrapped_inf->create_adaptor_session(instance, xctx);
775 result = impl->
wrapped_inf->get_additional_metrics(instance,
807 impl_check_authorization(
834 impl_authorization_cb(
845 return ctx->impl_callback(
object, ctx->impl_callback_context, xctx);
855 resource_id_value, object_value,
858 return ctx->impl_callback(
object, ctx->impl_callback_context, xctx);
864 impl_special_object_handling_cb(
881 &afw_s__AdaptiveServiceConf_))
904 object_type_id, xctx);
914 return ctx->original_callback(
object, ctx->original_context, xctx);
919 impl_no_duplicate_object_type_cb(
931 e = apr_hash_get(ctx->ht, object_id->s, object_id->len);
938 return ctx->original_callback(
object, ctx->original_context,
944 impl_limit_returned_objects_cb(
952 ctx->retrieved_object_count++;
953 if (ctx->retrieved_object_count > 100) {
964 return ctx->original_callback(
object, ctx->original_context,
989 apr_hash_index_t *hi;
998 ctx.original_context = context;
999 ctx.original_callback = callback;
1000 ctx.impl_request = impl_request;
1014 afw_trace_fz(1, adaptor->trace_flag_index, self->wrapped_session, xctx,
1015 "begin retrieve_objects "
1037 hi = apr_hash_next(hi))
1040 (
const void **)& object_id.s, (apr_ssize_t *)& object_id.len,
1044 callback(e->object, context, xctx);
1048 ctx.impl_callback_context = &ctx;
1049 ctx.impl_callback = impl_no_duplicate_object_type_cb;
1051 self->wrapped_session, impl_request,
1052 object_type_id, criteria,
1053 &ctx, impl_authorization_cb,
1054 adaptor_type_specific,
1060 ctx.impl_callback_context = &ctx;
1061 ctx.impl_callback = impl_special_object_handling_cb;
1063 self->wrapped_session, impl_request,
1064 object_type_id, criteria,
1065 &ctx, impl_authorization_cb,
1066 adaptor_type_specific,
1071 ctx.impl_callback_context = &ctx;
1072 ctx.impl_callback = impl_limit_returned_objects_cb;
1074 self->wrapped_session, impl_request,
1075 object_type_id, criteria,
1076 &ctx, impl_authorization_cb,
1077 adaptor_type_specific,
1085 afw_trace_fz(1, adaptor->trace_flag_index, self->wrapped_session, xctx,
1086 "end retrieve_objects "
1131 ctx.original_context = context;
1132 ctx.original_callback = callback;
1133 ctx.impl_request = impl_request;
1136 afw_trace_fz(1, adaptor->trace_flag_index, self->wrapped_session, xctx,
1145 if (
afw_utf8_equal(object_type_id, &afw_s__AdaptiveObjectType_) &&
1150 object_id->s, object_id->len);
1152 ctx.impl_callback_context = context;
1153 ctx.impl_callback = callback;
1154 impl_authorization_cb(e->object, &ctx, xctx);
1160 object_type_id, object_id, xctx);
1161 if (object_type_object) {
1162 ctx.impl_callback_context = context;
1163 ctx.impl_callback = callback;
1164 impl_authorization_cb(object_type_object, &ctx, xctx);
1169 ctx.impl_callback_context = context;
1170 ctx.impl_callback = callback;
1172 self->wrapped_session, impl_request,
1173 object_type_id, object_id,
1174 &ctx, impl_authorization_cb,
1175 adaptor_type_specific,
1182 ctx.impl_callback_context = &ctx;
1183 ctx.impl_callback = impl_special_object_handling_cb;
1185 self->wrapped_session, impl_request,
1186 object_type_id, object_id,
1187 &ctx, impl_authorization_cb,
1188 adaptor_type_specific,
1194 ctx.impl_callback_context = context;
1195 ctx.impl_callback = callback;
1197 self->wrapped_session, impl_request,
1198 object_type_id, object_id,
1199 &ctx, impl_authorization_cb,
1200 adaptor_type_specific,
1208 afw_trace_fz(1, adaptor->trace_flag_index, self->wrapped_session, xctx,
1250 ctx.p = instance->p;
1251 ctx.impl_request = impl_request;
1254 afw_trace_fz(1, adaptor->trace_flag_index, self->wrapped_session, xctx,
1263 impl_check_authorization(&ctx,
1268 self->wrapped_session, impl_request,
1269 object_type_id, suggested_object_id,
object,
1270 adaptor_type_specific, xctx);
1275 afw_trace_fz(1, adaptor->trace_flag_index, self->wrapped_session, xctx,
1305 resource_id = (impl_request)
1307 : &afw_s_a_empty_string;
1323 ctx.p = instance->p;
1324 ctx.impl_request = impl_request;
1327 afw_trace_fz(1, adaptor->trace_flag_index, self->wrapped_session, xctx,
1328 "begin modify_object "
1336 impl_check_authorization(&ctx,
1341 self->wrapped_session, impl_request,
1342 object_type_id, object_id, entry, adaptor_type_specific,
1348 afw_trace_fz(1, adaptor->trace_flag_index, self->wrapped_session, xctx,
1349 "end modify_object "
1389 ctx.p = instance->p;
1390 ctx.impl_request = impl_request;
1393 afw_trace_fz(1, adaptor->trace_flag_index, self->wrapped_session, xctx,
1394 "begin replace_object "
1402 impl_check_authorization(&ctx,
1407 self->wrapped_session, impl_request,
1408 object_type_id, object_id, replacement_object,
1409 adaptor_type_specific, xctx);
1414 afw_trace_fz(1, adaptor->trace_flag_index, self->wrapped_session, xctx,
1415 "end replace_object "
1440 resource_id = (impl_request)
1442 : &afw_s_a_empty_string;
1446 ctx.p = instance->p;
1447 ctx.impl_request = impl_request;
1450 afw_trace_fz(1, adaptor->trace_flag_index, self->wrapped_session, xctx,
1451 "begin delete_object "
1459 impl_check_authorization(&ctx,
1464 self->wrapped_session, impl_request,
1465 object_type_id, object_id, adaptor_type_specific, xctx);
1470 afw_trace_fz(1, adaptor->trace_flag_index, self->wrapped_session, xctx,
1471 "end delete_object "
1494 self->wrapped_session,
1509 impl_afw_adaptor_session_get_journal_interface(
1516 if (!self->wrapped_journal) {
1518 self->wrapped_session, xctx);
1519 if (self->wrapped_journal) {
1520 self->journal_pub.inf = &impl_afw_adaptor_journal_inf;
1521 self->journal_pub.session = instance;
1526 return (self->wrapped_journal)
1527 ? &
self->journal_pub
1589 impl_afw_adaptor_session_get_object_type_cache_interface(
1597 self->wrapped_session, xctx);
1620 impl_request, entry, xctx);
1644 impl_request, option, consumer_id, entry_cursor,
1645 limit, response, xctx);
1666 impl_request, consumer_id, entry_cursor, xctx);
Interface afw_interface implementation declares.
AFW_DEFINE(const afw_object_t *)
Interface afw_interface implementation declares.
Interface afw_interface implementation declares.
Interface afw_interface implementation declares.
Adaptive Framework Core Internal.
Header file for Adaptive Framework model location.
const afw_object_t * impl_afw_adaptor_get_additional_metrics(const afw_adaptor_t *instance, const afw_pool_t *p, afw_xctx_t *xctx)
void impl_afw_adaptor_destroy(const afw_adaptor_t *instance, afw_xctx_t *xctx)
const afw_adaptor_session_t * impl_afw_adaptor_create_adaptor_session(const afw_adaptor_t *instance, afw_xctx_t *xctx)
afw_adaptor_impl_throw_property_invalid(const afw_adaptor_t *adaptor, const afw_utf8_t *property_name, afw_xctx_t *xctx)
Developers should call this for configuration property errors.
afw_adaptor_impl_throw_property_required(const afw_adaptor_t *adaptor, const afw_utf8_t *property_name, afw_xctx_t *xctx)
Developers should call this for missing required configuration property.
#define AFW_ADAPTOR_IMPL_LOCK_WRITE_END
Macro to end an adaptor write lock section.
afw_adaptor_impl_generic_object_type_object_get(const afw_adaptor_t *adaptor, const afw_utf8_t *object_type_id, const afw_pool_t *p, afw_xctx_t *xctx)
Create a generic object type object.
afw_adaptor_impl_push_qualifiers(const afw_adaptor_t *adaptor, afw_xctx_t *xctx)
Push adaptor qualifiers to xctx.
afw_adaptor_impl_call_object_cb_from_list(const afw_list_t *list, void *context, afw_object_cb_t callback, afw_xctx_t *xctx)
Call object cb from list.
afw_adaptor_impl_object_type_cache_initialize(afw_adaptor_object_type_cache_t *object_type_cache, const afw_adaptor_object_type_cache_inf_t *inf, const afw_adaptor_session_t *session, afw_boolean_t all_object_types_immutable, afw_xctx_t *xctx)
Initialize object type cache instance.
#define AFW_ADAPTOR_IMPL_LOCK_READ_END
Macro to end an adaptor read lock section.
afw_adaptor_impl_create_cede_p(const afw_adaptor_inf_t *inf, afw_size_t instance_size, const afw_object_t *properties, const afw_pool_t *p, afw_xctx_t *xctx)
Developers should call this in all create functions for afw_adaptor.
#define AFW_ADAPTOR_IMPL_LOCK_READ_BEGIN(adaptor)
Macro to begin an adaptor read lock section.
#define AFW_ADAPTOR_IMPL_LOCK_WRITE_BEGIN(adaptor)
Macro to begin an adaptor write lock section.
afw_adaptor_impl_set_object_types_fully_loaded(const afw_adaptor_t *adaptor, afw_xctx_t *xctx)
Set object types fully loaded.
afw_adaptor_impl_set_supported_core_object_type(const afw_adaptor_t *adaptor, const afw_utf8_t *object_type_id, afw_boolean_t allow_entity, afw_boolean_t allow_write, afw_xctx_t *xctx)
Indicates support of a core object type.
afw_adaptor_impl_is_journal_entry_applicable(const afw_adaptor_journal_t *instance, const afw_object_t *entry, const afw_object_t *consumer, const afw_value_t *const *filter, afw_xctx_t *xctx)
Determine whether a journal entry is applicable to a consumer.
void impl_afw_adaptor_journal_get_entry(const afw_adaptor_journal_t *instance, const afw_adaptor_impl_request_t *impl_request, afw_adaptor_journal_option_t option, const afw_utf8_t *consumer_id, const afw_utf8_t *entry_cursor, afw_size_t limit, const afw_object_t *response, afw_xctx_t *xctx)
const afw_utf8_t * impl_afw_adaptor_journal_add_entry(const afw_adaptor_journal_t *instance, const afw_adaptor_impl_request_t *impl_request, const afw_object_t *entry, afw_xctx_t *xctx)
void impl_afw_adaptor_journal_mark_entry_consumed(const afw_adaptor_journal_t *instance, const afw_adaptor_impl_request_t *impl_request, const afw_utf8_t *consumer_id, const afw_utf8_t *entry_cursor, afw_xctx_t *xctx)
#define afw_adaptor_journal_add_entry(instance, impl_request, entry, xctx)
Call method add_entry of interface afw_adaptor_journal.
#define afw_adaptor_journal_mark_entry_consumed(instance, impl_request, consumer_id, entry_cursor, xctx)
Call method mark_entry_consumed of interface afw_adaptor_journal.
#define afw_adaptor_journal_get_entry(instance, impl_request, option, consumer_id, entry_cursor, limit, response, xctx)
Call method get_entry of interface afw_adaptor_journal.
void impl_afw_adaptor_session_modify_object(const afw_adaptor_session_t *instance, const afw_adaptor_impl_request_t *impl_request, const afw_utf8_t *object_type_id, const afw_utf8_t *object_id, const afw_adaptor_modify_entry_t *const *entry, const afw_object_t *adaptor_type_specific, afw_xctx_t *xctx)
void impl_afw_adaptor_session_replace_object(const afw_adaptor_session_t *instance, const afw_adaptor_impl_request_t *impl_request, const afw_utf8_t *object_type_id, const afw_utf8_t *object_id, const afw_object_t *replacement_object, const afw_object_t *adaptor_type_specific, afw_xctx_t *xctx)
void impl_afw_adaptor_session_delete_object(const afw_adaptor_session_t *instance, const afw_adaptor_impl_request_t *impl_request, const afw_utf8_t *object_type_id, const afw_utf8_t *object_id, const afw_object_t *adaptor_type_specific, afw_xctx_t *xctx)
void impl_afw_adaptor_session_retrieve_objects(const afw_adaptor_session_t *instance, const afw_adaptor_impl_request_t *impl_request, const afw_utf8_t *object_type_id, const afw_query_criteria_t *criteria, void *context, afw_object_cb_t callback, const afw_object_t *adaptor_type_specific, const afw_pool_t *p, afw_xctx_t *xctx)
const afw_adaptor_transaction_t * impl_afw_adaptor_session_begin_transaction(const afw_adaptor_session_t *instance, afw_xctx_t *xctx)
void impl_afw_adaptor_session_destroy(const afw_adaptor_session_t *instance, afw_xctx_t *xctx)
const afw_adaptor_impl_index_t * impl_afw_adaptor_session_get_index_interface(const afw_adaptor_session_t *instance, afw_xctx_t *xctx)
const afw_utf8_t * impl_afw_adaptor_session_add_object(const afw_adaptor_session_t *instance, const afw_adaptor_impl_request_t *impl_request, const afw_utf8_t *object_type_id, const afw_utf8_t *suggested_object_id, const afw_object_t *object, const afw_object_t *adaptor_type_specific, afw_xctx_t *xctx)
void impl_afw_adaptor_session_get_object(const afw_adaptor_session_t *instance, const afw_adaptor_impl_request_t *impl_request, const afw_utf8_t *object_type_id, const afw_utf8_t *object_id, void *context, afw_object_cb_t callback, const afw_object_t *adaptor_type_specific, const afw_pool_t *p, afw_xctx_t *xctx)
const afw_adaptor_key_value_t * impl_afw_adaptor_session_get_key_value_interface(const afw_adaptor_session_t *instance, afw_xctx_t *xctx)
#define afw_adaptor_session_retrieve_objects(instance, impl_request, object_type_id, criteria, context, callback, adaptor_type_specific, p, xctx)
Call method retrieve_objects of interface afw_adaptor_session.
#define afw_adaptor_session_replace_object(instance, impl_request, object_type_id, object_id, replacement_object, adaptor_type_specific, xctx)
Call method replace_object of interface afw_adaptor_session.
#define afw_adaptor_session_add_object(instance, impl_request, object_type_id, suggested_object_id, object, adaptor_type_specific, xctx)
Call method add_object of interface afw_adaptor_session.
#define afw_adaptor_session_begin_transaction(instance, xctx)
Call method begin_transaction of interface afw_adaptor_session.
#define afw_adaptor_session_modify_object(instance, impl_request, object_type_id, object_id, entry, adaptor_type_specific, xctx)
Call method modify_object of interface afw_adaptor_session.
#define afw_adaptor_session_get_index_interface(instance, xctx)
Call method get_index_interface of interface afw_adaptor_session.
#define afw_adaptor_session_get_key_value_interface(instance, xctx)
Call method get_key_value_interface of interface afw_adaptor_session.
#define afw_adaptor_session_destroy(instance, xctx)
Call method destroy of interface afw_adaptor_session.
#define afw_adaptor_session_get_journal_interface(instance, xctx)
Call method get_journal_interface of interface afw_adaptor_session.
#define afw_adaptor_session_delete_object(instance, impl_request, object_type_id, object_id, adaptor_type_specific, xctx)
Call method delete_object of interface afw_adaptor_session.
#define afw_adaptor_session_get_object(instance, impl_request, object_type_id, object_id, context, callback, adaptor_type_specific, p, xctx)
Call method get_object of interface afw_adaptor_session.
#define afw_adaptor_session_get_object_type_cache_interface(instance, xctx)
Call method get_object_type_cache_interface of interface afw_adaptor_session.
afw_adaptor_session_release(const afw_adaptor_session_t *session, afw_xctx_t *xctx)
Release an adaptor session created by afw_adaptor_session_create().
afw_adaptor_session_create(const afw_utf8_t *adaptor_id, afw_xctx_t *xctx)
Create an adaptor session.
afw_integer_t afw_atomic_integer_increment(AFW_ATOMIC afw_integer_t *mem)
Integer atomic increment.
#define afw_authorization_handler_destroy(instance, xctx)
Call method destroy of interface afw_authorization_handler.
afw_authorization_action_id_read
actionId value read.
afw_authorization_action_id_create
actionId value create.
afw_authorization_handler_get_reference(const afw_utf8_t *authorization_handler_id, afw_xctx_t *xctx)
Get reference to authorization handler.
afw_authorization_action_id_modify
actionId value modify.
afw_authorization_check(afw_boolean_t enforce, const afw_value_t *request_id_value, const afw_value_t *resource_id_value, const afw_value_t *object_value, const afw_value_t *action_id_value, const afw_pool_t *p, afw_xctx_t *xctx)
Perform authorization check.
afw_authorization_action_id_delete
actionId value delete.
afw_data_type_anyURI
Data type struct for anyURI.
afw_object_set_property_as_boolean(const afw_object_t *object, const afw_utf8_t *property_name, afw_boolean_t internal, afw_xctx_t *xctx)
Set property function for data type boolean values.
afw_value_allocate_list(const afw_pool_t *p, afw_xctx_t *xctx)
Allocate function for unmanaged data type list value.
#define afw_object_old_get_property_as_object(object, property_name, xctx)
Get property function for data type object value.
afw_value_create_object(const afw_object_t *internal, const afw_pool_t *p, afw_xctx_t *xctx)
Create function for unmanaged data type object value.
#define afw_list_of_object_get_next(list, iterator, xctx)
Get next value from list of object.
afw_value_create_string(const afw_utf8_t *internal, const afw_pool_t *p, afw_xctx_t *xctx)
Create function for unmanaged data type string value.
#define afw_object_old_get_property_as_string(object, property_name, xctx)
Get property function for data type string value.
afw_object_set_property_as_string(const afw_object_t *object, const afw_utf8_t *property_name, const afw_utf8_t *internal, afw_xctx_t *xctx)
Set property function for data type string values.
#define AFW_UTF8_FMT_ARG(A_STRING)
Convenience Macro for use with AFW_UTF8_FMT to specify arg.
afw_boolean_t(* afw_object_cb_t)(const afw_object_t *object, void *context, afw_xctx_t *xctx)
Typedef for afw_adaptor_session_object callback.
struct afw_iterator_s afw_iterator_t
#define AFW_UTF8_FMT_OPTIONAL_ARG(A_STRING)
Convenience Macro for use with AFW_UTF8_FMT to specify optional arg.
#define AFW_UTF8_FMT
Format string specifier used for afw_utf8_t.
apr_size_t afw_size_t
size_t.
apr_int64_t afw_integer_t
typedef for big signed int.
enum afw_adaptor_journal_option_e afw_adaptor_journal_option_t
Typedef for afw_adaptor_journal get_entry options enum.
const afw_object_t * afw_environment_prepare_conf_type_properties(const afw_object_t *properties, afw_xctx_t *xctx)
Prepare properties for a conf type.
#define afw_environment_register_flag(flag_id, brief, description, included_by_flag_id, xctx)
Register a flag.
const afw_lock_t * afw_environment_get_lock(const afw_utf8_t *log_type, afw_xctx_t *xctx)
Get the lock instance associated a lock id.
const afw_flag_t * afw_environment_get_flag(const afw_utf8_t *flag_id, afw_xctx_t *xctx)
Get the flag instance associated with flag_id.
const afw_service_type_t * afw_environment_get_service_type(const afw_utf8_t *service_type_id, afw_xctx_t *xctx)
Get the service type instance associated with service_type_id.
#define AFW_FINALLY
Always executed regardless of error.
#define AFW_ENDTRY
Ends an AFW try block.
#define AFW_TRY
Begin an AFW TRY block.
#define AFW_THROW_ERROR_FZ(code, xctx, format_z,...)
Macro used to set error and 0 rv in xctx and throw it.
#define AFW_THROW_ERROR_Z(code, message_z, xctx)
Macro used to set error and 0 rv in xctx and throw it.
void afw_flag_add_included_by(const afw_utf8_t *flag_id, const afw_utf8_t *included_by_flag_id, afw_xctx_t *xctx)
Add another include_by flag to a registered flag.
afw_list_create_wrapper_for_array(const void *array, afw_boolean_t indirect, const afw_data_type_t *data_type, afw_size_t count, const afw_pool_t *p, afw_xctx_t *xctx)
Create a immutable list wrapper for an array.
afw_lock_create_rw_and_register(const afw_utf8_t *lock_id, const afw_utf8_t *brief, const afw_utf8_t *description, afw_xctx_t *xctx)
Create a read/write lock and register in environment.
#define AFW_LOG_FZ(priority, xctx, format_z,...)
Log an message to environment's log using a printf style format and parameters.
#define afw_memory_clear(to)
Clear preallocated memory for sizeof(*(to)).
#define afw_memory_copy(to, from)
Copy to preallocated memory of same type.
#define afw_object_get_property(instance, property_name, xctx)
Call method get_property of interface afw_object.
afw_object_create_clone(const afw_object_t *object, const afw_pool_t *p, afw_xctx_t *xctx)
Clone an object to a specified pool.
afw_object_old_get_property_as_utf8(const afw_object_t *instance, const afw_utf8_t *property_name, const afw_pool_t *p, afw_xctx_t *xctx)
Get an object's property value as a string in specified pool.
#define AFW_OBJECT_Q_OBJECT_TYPE_ID_PROVISIONING_PEER
Quoted object type id for Provisioning Peer object.
#define afw_object_create_managed(p, xctx)
Create an empty entity object in its own pool.
afw_object_old_get_property_as_boolean_deprecated(const afw_object_t *instance, const afw_utf8_t *property_name, afw_xctx_t *xctx)
Get an object's property value as a boolean.
afw_object_set_property(const afw_object_t *instance, const afw_utf8_t *property_name, const afw_value_t *value, afw_xctx_t *xctx)
Set the value of an object's property.
const afw_object_t * afw_object_create_embedded(const afw_object_t *embedding_object, const afw_utf8_t *property_name, afw_xctx_t *xctx)
Create an empty embedded object in a memory object.
#define afw_pool_calloc(instance, size, xctx)
Call method calloc of interface afw_pool.
#define afw_pool_get_apr_pool(instance)
Call method get_apr_pool of interface afw_pool.
#define afw_pool_calloc_type(instance, type, xctx)
Macro to allocate cleared memory to hold type in pool.
afw_query_criteria_test_object(const afw_object_t *obj, const afw_query_criteria_t *criteria, const afw_pool_t *p, afw_xctx_t *xctx)
Test object against query criteria.
afw_runtime_object_create_indirect(const afw_utf8_t *object_type_id, const afw_utf8_t *object_id, void *internal, const afw_pool_t *p, afw_xctx_t *xctx)
Create an indirect runtime object.
afw_runtime_get_object(const afw_utf8_t *object_type_id, const afw_utf8_t *object_id, afw_xctx_t *xctx)
Get a runtime object.
#define afw_trace_fz(trace_level, flag_index, instance, xctx, format_z,...)
If applicable, write trace using a printf style format.
afw_boolean_t afw_utf8_equal(const afw_utf8_t *s1, const afw_utf8_t *s2)
Check to see if a string equals another string.
const afw_utf8_t * afw_utf8_clone(const afw_utf8_t *string, const afw_pool_t *p, afw_xctx_t *xctx)
Clone a utf-8 string into a specific pool.
afw_utf8_printf(const afw_pool_t *p, afw_xctx_t *xctx, const afw_utf8_z_t *format,...)
Create a utf-8 string using a c format string in specified pool.
afw_boolean_t afw_utf8_starts_with(const afw_utf8_t *string, const afw_utf8_t *starts_with)
Check to see if a string starts with another string.
afw_value_false
Adaptive value false.
afw_value_true
Adaptive value true.
afw_xctx_push_qualifier_object(const afw_utf8_t *qualifier_name, const afw_object_t *qualifier_object, afw_boolean_t secure, const afw_pool_t *p, afw_xctx_t *xctx)
Push qualifier object on to stack.
#define afw_xctx_calloc_type(type, xctx)
Macro to allocate cleared memory to hold type in xctx's pool.
afw_xctx_push_qualifier(const afw_utf8_t *qualifier, const afw_object_t *qualifier_object, afw_boolean_t secure, afw_xctx_get_variable_t get, void *data, const afw_pool_t *p, afw_xctx_t *xctx)
Push qualifier on to stack.
afw_adaptor_impl_t supported_core_object_types entry.
Interface afw_adaptor_impl_index public struct.
Internal request info used by afw_adaptor_impl*() functions.
const afw_utf8_t * resource_id
resource id
const afw_object_t * request
Request object.
Internal struct used by common adaptor code for all adaptors.
apr_hash_t * object_types_ht
If not NULL, object types that last for the life of the adaptor.
AFW_ATOMIC afw_integer_t modify_object_count
modify_object() count.
const afw_utf8_t * authorization_handler_id
Authorization handler id.
const afw_object_t * metrics_object
Metrics object.
const afw_model_location_t * model_location
Model location struct if this adaptor is a model location.
AFW_ATOMIC afw_integer_t add_object_count
add_object() count.
AFW_ATOMIC afw_integer_t get_object_count
get_object() count.
apr_hash_t * supported_core_object_types
See afw_adaptor_impl_core_object_type_t.
const afw_lock_rw_t * adaptor_lock_rw
Read/write lock used for changing adaptor related structs.
AFW_ATOMIC afw_integer_t delete_object_count
delete_object() count.
const afw_utf8_t * source_location
Source location associated with this adaptor.
afw_boolean_t object_types_fully_loaded
Object types fully loaded.
const afw_value_t * authorization
Adaptor level authorization.
const afw_adaptor_inf_t * wrapped_inf
Wrapped inf.
AFW_ATOMIC afw_integer_t replace_object_count
replace_object() count.
AFW_ATOMIC afw_integer_t retrieve_objects_count
retrieve_objects() count.
const afw_adaptor_t * adaptor
Associated adaptor instance.
const afw_utf8_t * adaptor_id
Pointer to adaptor id.
const afw_utf8_t * journal_adaptor_id
Journal adaptor id (FIXME Going away)
Internal session info used by afw_adaptor_impl*() functions.
const afw_adaptor_journal_t * wrapped_journal
Journal this common impl wraps.
Interface afw_adaptor_inf_s struct.
Interface afw_adaptor_journal public struct.
Interface afw_adaptor_key_value public struct.
Interface afw_adaptor_object_type_cache_inf_s struct.
Interface afw_adaptor_object_type_cache public struct.
Interface afw_adaptor public struct.
Interface afw_adaptor_session public struct.
Interface afw_adaptor_transaction public struct.
Interface afw_authorization_handler public struct.
const afw_utf8_t * subtype_property_name
Subtype property name for instances of this conf type.
const afw_pool_t * p
Pool used to hold environment.
Struct used for a registered flag.
afw_size_t flag_index
Index of this flag in flags array.
Interface afw_list public struct.
Interface afw_object public struct.
Struct for afw_object_type_t.
Interface afw_pool public struct.
Interface afw_service_type public struct.
NFC normalized UTF-8 string.
struct for data type list values.
Interface afw_value public struct.
Interface afw_xctx public struct.