Adaptive Framework  0.9.0
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
afw_adaptor_delete.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 Delete Object
4  *
5  * Copyright (c) 2010-2023 Clemson University
6  *
7  */
8 
14 #include "afw_internal.h"
15 
16 
17 /* Delete object from cache and via adaptor. */
18 AFW_DEFINE(void)
20  const afw_utf8_t *adaptor_id,
21  const afw_utf8_t *object_type_id,
22  const afw_utf8_t *object_id,
23  const afw_object_t *journal_entry,
24  const afw_object_t *adaptor_type_specific,
25  afw_xctx_t *xctx)
26 {
27  const afw_adaptor_session_t *session;
28  const afw_object_t *request;
29  afw_adaptor_impl_request_t impl_request;
30 
31  /* Set request in journal entry. */
32  afw_memory_clear(&impl_request);
33  impl_request.request = request = afw_object_create_embedded(
34  journal_entry, &afw_s_request, xctx);
35  impl_request.p = request->p;
36  impl_request.journal_entry = journal_entry;
37  impl_request.resource_id = afw_utf8_printf(impl_request.p, xctx,
38  "/"
39  "%" AFW_UTF8_FMT "/"
40  "%" AFW_UTF8_FMT "/"
41  "%" AFW_UTF8_FMT,
42  AFW_UTF8_FMT_ARG(adaptor_id),
43  AFW_UTF8_FMT_ARG(object_type_id),
44  AFW_UTF8_FMT_ARG(object_id));
46  &afw_s_resourceId, impl_request.resource_id, xctx);
48  &afw_s_function, &afw_s_delete_object, xctx);
50  &afw_s_adaptorId, adaptor_id, xctx);
52  &afw_s_objectType, object_type_id, xctx);
54  &afw_s_objectId, object_id, xctx);
55 
56  /* Get an active session with adaptor. */
57  session = afw_adaptor_session_get_cached(adaptor_id, true, xctx);
58 
59  /* Action prologue. */
60  afw_adaptor_internal_journal_prologue(session, journal_entry, xctx);
61 
62  /* If one of the core object types, handle special */
63  if (afw_utf8_starts_with(object_type_id, &AFW_OBJECT_S_CORE_ID_PREFIX)) {
64 
65  /* Journal entry. */
66  if (afw_utf8_equal(object_type_id,
68  {
69  AFW_THROW_ERROR_Z(general,
70  "delete_object() is not supported for "
72  xctx);
73  }
74  }
75 
76 
77  /* Delete object. */
78  afw_adaptor_session_delete_object(session, &impl_request,
79  object_type_id, object_id, adaptor_type_specific, xctx);
80 
81  /* Action epilogue. */
82  afw_adaptor_internal_journal_epilogue(session, journal_entry, true, xctx);
83 }
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_delete_object(instance, impl_request, object_type_id, object_id, adaptor_type_specific, xctx)
Call method delete_object of interface afw_adaptor_session.
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_adaptor_delete_object(const afw_utf8_t *adaptor_id, const afw_utf8_t *object_type_id, const afw_utf8_t *object_id, const afw_object_t *journal_entry, const afw_object_t *adaptor_type_specific, afw_xctx_t *xctx)
Delete object from cache and via adaptor.
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.