Adaptive Framework  0.9.0
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
afw_adaptor_retrieve.c
Go to the documentation of this file.
1 // See the 'COPYING' file in the project root for licensing information.
2 /*
3  * Adaptive Framework Adaptor Add Object
4  *
5  * Copyright (c) 2010-2023 Clemson University
6  *
7  */
8 
14 #include "afw_internal.h"
15 
16 
17 
18 /* Retrieve objects callback. */
19 static afw_boolean_t
20 impl_retrieve_objects_cb(
21  const afw_object_t *object,
22  void *context,
23  afw_xctx_t *xctx)
24 {
26  const afw_object_t *adapted_object;
27  const afw_object_t *view;
28 
29  /* Process object from adaptor. */
30  view = object;
31  if (object) {
33  &adapted_object, &view, ctx, object, ctx->p, xctx);
34  }
35 
36  /* Callback with view or NULL. Callback will release view. */
37  return ctx->original_callback(view, ctx->original_context, xctx);
38 }
39 
40 
41 
42 /* Retrieve and cache objects. */
43 AFW_DEFINE(void)
45  const afw_utf8_t *adaptor_id,
46  const afw_utf8_t *object_type_id,
47  const afw_object_options_t *options,
48  const afw_query_criteria_t *criteria,
49  const afw_object_t *journal_entry,
50  void * context,
51  afw_object_cb_t callback,
52  const afw_object_t *adaptor_type_specific,
53  const afw_pool_t *p,
54  afw_xctx_t *xctx)
55 {
56  const afw_adaptor_session_t *session;
57  const afw_object_t *request;
59  afw_adaptor_impl_t *impl;
60  afw_adaptor_impl_request_t impl_request;
61 
62 
63  /* Set request in journal entry. */
64  afw_memory_clear(&impl_request);
65  impl_request.request = request = afw_object_create_embedded(
66  journal_entry, &afw_s_request, xctx);
67  impl_request.p = request->p;
68  impl_request.journal_entry = journal_entry;
69  impl_request.resource_id = afw_utf8_printf(impl_request.p, xctx,
70  "/"
71  "%" AFW_UTF8_FMT "/"
72  "%" AFW_UTF8_FMT "/",
73  AFW_UTF8_FMT_ARG(adaptor_id),
74  AFW_UTF8_FMT_ARG(object_type_id));
76  &afw_s_resourceId, impl_request.resource_id, xctx);
77  impl_request.options = options;
79  &afw_s_function, &afw_s_retrieve_objects, xctx);
81  &afw_s_adaptorId, adaptor_id, xctx);
83  &afw_s_objectType, object_type_id, xctx);
84 
85  /* Journal entry is not supported for retrieve. */
86  if (afw_utf8_equal(object_type_id,
88  {
89  AFW_THROW_ERROR_Z(general,
90  "retrieve_objects() is not supported for "
92  xctx);
93  }
94 
95  /* Get an active session with adaptor. */
96  session = afw_adaptor_session_get_cached(adaptor_id, false, xctx);
97  impl = (afw_adaptor_impl_t *)session->adaptor->impl;
98 
99  /* Retrieve objects via session using intermediate callback. */
100  afw_memory_clear(&ctx);
101  ctx.p = p;
102  ctx.session = session;
103  ctx.impl = impl;
104  ctx.adaptor_id = adaptor_id;
105  ctx.object_type_id = object_type_id;
106  ctx.original_context = context;
107  ctx.original_callback = callback;
108  ctx.journal_entry = journal_entry;
109  ctx.options = options;
110  afw_adaptor_session_retrieve_objects(session, &impl_request,
111  object_type_id, criteria,
112  &ctx, impl_retrieve_objects_cb,
113  adaptor_type_specific,
114  p, xctx);
115 }
AFW_DEFINE(const afw_object_t *)
Adaptive Framework Core Internal.
void afw_adaptor_internal_process_object_from_adaptor(const afw_object_t **adapted_object, const afw_object_t **view, afw_adaptor_internal_object_cb_context_t *ctx, const afw_object_t *object, const afw_pool_t *p, afw_xctx_t *xctx)
Definition: afw_adaptor.c:625
#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.
afw_adaptor_retrieve_objects(const afw_utf8_t *adaptor_id, const afw_utf8_t *object_type_id, const afw_object_options_t *options, const afw_query_criteria_t *criteria, const afw_object_t *journal_entry, void *context, afw_object_cb_t callback, const afw_object_t *adaptor_type_specific, const afw_pool_t *p, afw_xctx_t *xctx)
Retrieve objects.
afw_adaptor_session_get_cached(const afw_utf8_t *adaptor_id, afw_boolean_t begin_transaction, afw_xctx_t *xctx)
Get/create an active cached session for adaptor_id.
Definition: afw_adaptor.c:375
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.
Definition: afw_common.h:605
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.
Definition: afw_common.h:1176
_Bool afw_boolean_t
Definition: afw_common.h:373
#define AFW_UTF8_FMT
Format string specifier used for afw_utf8_t.
Definition: afw_common.h:588
#define AFW_THROW_ERROR_Z(code, message_z, xctx)
Macro used to set error and 0 rv in xctx and throw it.
Definition: afw_error.h:283
#define afw_memory_clear(to)
Clear preallocated memory for sizeof(*(to)).
Definition: afw_memory.h:47
#define AFW_OBJECT_Q_OBJECT_TYPE_ID_JOURNAL_ENTRY
Quoted object type id for Journal Entry object.
Definition: afw_object.h:60
#define AFW_OBJECT_S_OBJECT_TYPE_ID_JOURNAL_ENTRY
String object type id for Journal Entry object.
Definition: afw_object.h:63
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.
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.
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.
Definition: afw_utf8.c:459
Internal request info used by afw_adaptor_impl*() functions.
const afw_utf8_t * resource_id
resource id
const afw_object_t * journal_entry
Journal entry.
const afw_object_t * request
Request object.
const afw_pool_t * p
Pool used.
const afw_object_options_t * options
Object options.
Internal struct used by common adaptor code for all adaptors.
Interface afw_adaptor_session public struct.
Struct for object processing options.
Interface afw_object public struct.
Interface afw_pool public struct.
Parsed query criteria.
NFC normalized UTF-8 string.
Definition: afw_common.h:545
Interface afw_xctx public struct.