Adaptive Framework  0.9.0
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
afw_adaptor_replace.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 Replace Object
4  *
5  * Copyright (c) 2010-2023 Clemson University
6  *
7  */
8 
14 #include "afw_internal.h"
15 
16 
17 
18 /* Replace object and remove from cache. */
19 AFW_DEFINE(void)
21  const afw_utf8_t *adaptor_id,
22  const afw_utf8_t *object_type_id,
23  const afw_utf8_t *object_id,
24  const afw_object_t *replacement_object,
25  const afw_object_t *journal_entry,
26  const afw_object_t *adaptor_type_specific,
27  afw_xctx_t *xctx)
28 {
29  const afw_adaptor_session_t *session;
30  const afw_object_t *request;
31  afw_adaptor_impl_request_t impl_request;
32 
33  /* Set request in journal entry. */
34  afw_memory_clear(&impl_request);
35  impl_request.request = request = afw_object_create_embedded(
36  journal_entry, &afw_s_request, xctx);
37  impl_request.p = request->p;
38  impl_request.journal_entry = journal_entry;
39  impl_request.resource_id = afw_utf8_printf(impl_request.p, xctx,
40  "/"
41  "%" AFW_UTF8_FMT "/"
42  "%" AFW_UTF8_FMT "/"
43  "%" AFW_UTF8_FMT,
44  AFW_UTF8_FMT_ARG(adaptor_id),
45  AFW_UTF8_FMT_ARG(object_type_id),
46  AFW_UTF8_FMT_ARG(object_id));
48  &afw_s_resourceId, impl_request.resource_id, xctx);
50  &afw_s_function, &afw_s_replace_object, xctx);
52  &afw_s_adaptorId, adaptor_id, xctx);
54  &afw_s_objectType, object_type_id, xctx);
56  &afw_s_objectId, object_id, xctx);
58  &afw_s_object, replacement_object, xctx);
59 
60  /* Get an active session with adaptor. */
61  session = afw_adaptor_session_get_cached(adaptor_id, true, xctx);
62 
63  /* Action prologue. */
64  afw_adaptor_internal_journal_prologue(session, journal_entry, xctx);
65 
66  /* If one of the core object types, handle special */
67  if (afw_utf8_starts_with(object_type_id, &AFW_OBJECT_S_CORE_ID_PREFIX)) {
68 
69  /* Journal entry. */
70  if (afw_utf8_equal(object_type_id,
72  {
73  AFW_THROW_ERROR_Z(general,
74  "replace_object() is not supported for "
76  xctx);
77  }
78  }
79 
80  /* Update object. */
81  afw_adaptor_session_replace_object(session, &impl_request,
82  object_type_id, object_id,
83  replacement_object, adaptor_type_specific, xctx);
84 
85  /* Action epilogue. */
86  afw_adaptor_internal_journal_epilogue(session, journal_entry, true, xctx);
87 }
AFW_DEFINE(const afw_object_t *)
Adaptive Framework Core Internal.
void afw_adaptor_internal_journal_epilogue(const afw_adaptor_session_t *session, const afw_object_t *journal_entry, afw_boolean_t modification, afw_xctx_t *xctx)
#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.
afw_adaptor_replace_object(const afw_utf8_t *adaptor_id, const afw_utf8_t *object_type_id, const afw_utf8_t *object_id, const afw_object_t *replacement_object, const afw_object_t *journal_entry, const afw_object_t *adaptor_type_specific, afw_xctx_t *xctx)
Replace object and remove from cache.
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_object(const afw_object_t *object, const afw_utf8_t *property_name, const afw_object_t *internal, afw_xctx_t *xctx)
Set property function for data type object values.
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
#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_S_CORE_ID_PREFIX
String prefix for all core adaptive object types.
Definition: afw_object.h:33
#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
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.
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.
Interface afw_adaptor_session public struct.
Interface afw_object public struct.
NFC normalized UTF-8 string.
Definition: afw_common.h:545
Interface afw_xctx public struct.