Move to kernel style SPDX license identifiers
[babeltrace.git] / src / plugins / text / details / details.c
index 47a29326313fe5b1aba827dbc07f654bb873b3a6..7bee1ae813393df0280b9d1499084468797ec9fb 100644 (file)
@@ -1,29 +1,15 @@
 /*
- * Copyright 2019 Philippe Proulx <pproulx@efficios.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
+ * SPDX-License-Identifier: MIT
  *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
+ * Copyright 2019 Philippe Proulx <pproulx@efficios.com>
  */
 
 #define BT_COMP_LOG_SELF_COMP (details_comp->self_comp)
 #define BT_LOG_OUTPUT_LEVEL (details_comp->log_level)
 #define BT_LOG_TAG "PLUGIN/SINK.TEXT.DETAILS"
-#include "plugins/comp-logging.h"
+#include "logging/comp-logging.h"
+
+#include <stdbool.h>
 
 #include <babeltrace2/babeltrace.h>
 
 #include "common/assert.h"
 #include "details.h"
 #include "write.h"
-
-#define LOG_WRONG_PARAM_TYPE(_name, _value, _exp_type)                 \
-       do {                                                            \
-               BT_COMP_LOGE("Wrong `%s` parameter type: type=%s, "     \
-                       "expected-type=%s",                             \
-                       (_name), bt_common_value_type_string(           \
-                               bt_value_get_type(_value)),             \
-                       bt_common_value_type_string(_exp_type));        \
-       } while (0)
-
-static
-const char * const in_port_name = "in";
-
-static
-const char * const color_param_name = "color";
-
-static
-const char * const with_metadata_param_name = "with-metadata";
-
-static
-const char * const with_time_param_name = "with-time";
-
-static
-const char * const with_trace_name_param_name = "with-trace-name";
-
-static
-const char * const with_stream_class_name_param_name = "with-stream-class-name";
-
-static
-const char * const with_stream_name_param_name = "with-stream-name";
-
-static
-const char * const with_uuid_param_name = "with-uuid";
-
-static
-const char * const compact_param_name = "compact";
+#include "plugins/common/param-validation/param-validation.h"
+
+#define IN_PORT_NAME "in"
+#define COLOR_PARAM_NAME "color"
+#define WITH_METADATA_PARAM_NAME "with-metadata"
+#define WITH_DATA_PARAM_NAME "with-data"
+#define WITH_TIME_PARAM_NAME "with-time"
+#define WITH_TRACE_NAME_PARAM_NAME "with-trace-name"
+#define WITH_STREAM_CLASS_NAME_PARAM_NAME "with-stream-class-name"
+#define WITH_STREAM_NAME_PARAM_NAME "with-stream-name"
+#define WITH_UUID_PARAM_NAME "with-uuid"
+#define COMPACT_PARAM_NAME "compact"
 
 BT_HIDDEN
 void details_destroy_details_trace_class_meta(
@@ -175,7 +137,7 @@ void destroy_details_comp(struct details_comp *details_comp)
                details_comp->str = NULL;
        }
 
-       BT_SELF_COMPONENT_PORT_INPUT_MESSAGE_ITERATOR_PUT_REF_AND_RESET(
+       BT_MESSAGE_ITERATOR_PUT_REF_AND_RESET(
                details_comp->msg_iter);
        g_free(details_comp);
 
@@ -239,48 +201,63 @@ void details_finalize(bt_self_component_sink *comp)
 }
 
 static
-int configure_bool_opt(struct details_comp *details_comp,
+void configure_bool_opt(struct details_comp *details_comp,
                const bt_value *params, const char *param_name,
                bool default_value, bool *opt_value)
 {
-       int ret = 0;
        const bt_value *value;
 
        *opt_value = default_value;
        value = bt_value_map_borrow_entry_value_const(params, param_name);
        if (value) {
-               if (!bt_value_is_bool(value)) {
-                       LOG_WRONG_PARAM_TYPE(param_name, value,
-                               BT_VALUE_TYPE_BOOL);
-                       ret = -1;
-                       goto end;
-               }
-
                *opt_value = (bool) bt_value_bool_get(value);
        }
-
-end:
-       return ret;
 }
 
+static const char *color_choices[] = { "never", "auto", "always", NULL };
+
+static const struct bt_param_validation_map_value_entry_descr details_params[] = {
+       { COLOR_PARAM_NAME, BT_PARAM_VALIDATION_MAP_VALUE_ENTRY_OPTIONAL, { BT_VALUE_TYPE_STRING, .string = {
+               .choices = color_choices,
+       } } },
+       { WITH_METADATA_PARAM_NAME, BT_PARAM_VALIDATION_MAP_VALUE_ENTRY_OPTIONAL, { .type = BT_VALUE_TYPE_BOOL } },
+       { WITH_DATA_PARAM_NAME, BT_PARAM_VALIDATION_MAP_VALUE_ENTRY_OPTIONAL, { .type = BT_VALUE_TYPE_BOOL } },
+       { COMPACT_PARAM_NAME, BT_PARAM_VALIDATION_MAP_VALUE_ENTRY_OPTIONAL, { .type = BT_VALUE_TYPE_BOOL } },
+       { WITH_TIME_PARAM_NAME, BT_PARAM_VALIDATION_MAP_VALUE_ENTRY_OPTIONAL, { .type = BT_VALUE_TYPE_BOOL } },
+       { WITH_TRACE_NAME_PARAM_NAME, BT_PARAM_VALIDATION_MAP_VALUE_ENTRY_OPTIONAL, { .type = BT_VALUE_TYPE_BOOL } },
+       { WITH_STREAM_CLASS_NAME_PARAM_NAME, BT_PARAM_VALIDATION_MAP_VALUE_ENTRY_OPTIONAL, { .type = BT_VALUE_TYPE_BOOL } },
+       { WITH_STREAM_NAME_PARAM_NAME, BT_PARAM_VALIDATION_MAP_VALUE_ENTRY_OPTIONAL, { .type = BT_VALUE_TYPE_BOOL } },
+       { WITH_UUID_PARAM_NAME, BT_PARAM_VALIDATION_MAP_VALUE_ENTRY_OPTIONAL, { .type = BT_VALUE_TYPE_BOOL } },
+       BT_PARAM_VALIDATION_MAP_VALUE_ENTRY_END
+};
+
 static
-int configure_details_comp(struct details_comp *details_comp,
+bt_component_class_initialize_method_status configure_details_comp(
+               struct details_comp *details_comp,
                const bt_value *params)
 {
-       int ret = 0;
+       bt_component_class_initialize_method_status status;
        const bt_value *value;
        const char *str;
+       enum bt_param_validation_status validation_status;
+       gchar *validate_error = NULL;
+
+       validation_status = bt_param_validation_validate(params,
+               details_params, &validate_error);
+       if (validation_status == BT_PARAM_VALIDATION_STATUS_MEMORY_ERROR) {
+               status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_MEMORY_ERROR;
+               goto end;
+       } else if (validation_status == BT_PARAM_VALIDATION_STATUS_VALIDATION_ERROR) {
+               status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_ERROR;
+               BT_COMP_LOGE_APPEND_CAUSE(details_comp->self_comp,
+                       "%s", validate_error);
+               goto end;
+       }
 
        /* Colorize output? */
        details_comp->cfg.with_color = bt_common_colors_supported();
-       value = bt_value_map_borrow_entry_value_const(params, color_param_name);
+       value = bt_value_map_borrow_entry_value_const(params, COLOR_PARAM_NAME);
        if (value) {
-               if (!bt_value_is_string(value)) {
-                       LOG_WRONG_PARAM_TYPE(color_param_name, value,
-                               BT_VALUE_TYPE_STRING);
-                       goto error;
-               }
-
                str = bt_value_string_get(value);
 
                if (strcmp(str, "never") == 0) {
@@ -288,75 +265,55 @@ int configure_details_comp(struct details_comp *details_comp,
                } else if (strcmp(str, "auto") == 0) {
                        details_comp->cfg.with_color =
                                bt_common_colors_supported();
-               } else if (strcmp(str, "always") == 0) {
-                       details_comp->cfg.with_color = true;
                } else {
-                       BT_COMP_LOGE("Invalid `%s` parameter: unknown value "
-                               "(expecting `never`, `auto`, or `always`): "
-                               "value=\"%s\"", color_param_name, str);
-                       goto error;
+                       BT_ASSERT(strcmp(str, "always") == 0);
+
+                       details_comp->cfg.with_color = true;
                }
        }
 
        /* With metadata objects? */
-       ret = configure_bool_opt(details_comp, params, with_metadata_param_name,
+       configure_bool_opt(details_comp, params, WITH_METADATA_PARAM_NAME,
                true, &details_comp->cfg.with_meta);
-       if (ret) {
-               goto error;
-       }
+
+       /* With data objects? */
+       configure_bool_opt(details_comp, params, WITH_DATA_PARAM_NAME,
+               true, &details_comp->cfg.with_data);
 
        /* Compact? */
-       ret = configure_bool_opt(details_comp, params, compact_param_name,
+       configure_bool_opt(details_comp, params, COMPACT_PARAM_NAME,
                false, &details_comp->cfg.compact);
-       if (ret) {
-               goto error;
-       }
 
        /* With time? */
-       ret = configure_bool_opt(details_comp, params, with_time_param_name,
+       configure_bool_opt(details_comp, params, WITH_TIME_PARAM_NAME,
                true, &details_comp->cfg.with_time);
-       if (ret) {
-               goto error;
-       }
 
        /* With trace name? */
-       ret = configure_bool_opt(details_comp, params,
-               with_trace_name_param_name,
+       configure_bool_opt(details_comp, params,
+               WITH_TRACE_NAME_PARAM_NAME,
                true, &details_comp->cfg.with_trace_name);
-       if (ret) {
-               goto error;
-       }
 
        /* With stream class name? */
-       ret = configure_bool_opt(details_comp, params,
-               with_stream_class_name_param_name,
+       configure_bool_opt(details_comp, params,
+               WITH_STREAM_CLASS_NAME_PARAM_NAME,
                true, &details_comp->cfg.with_stream_class_name);
-       if (ret) {
-               goto error;
-       }
 
        /* With stream name? */
-       ret = configure_bool_opt(details_comp, params,
-               with_stream_name_param_name,
+       configure_bool_opt(details_comp, params,
+               WITH_STREAM_NAME_PARAM_NAME,
                true, &details_comp->cfg.with_stream_name);
-       if (ret) {
-               goto error;
-       }
 
        /* With UUID? */
-       ret = configure_bool_opt(details_comp, params,
-               with_uuid_param_name, true, &details_comp->cfg.with_uuid);
-       if (ret) {
-               goto error;
-       }
+       configure_bool_opt(details_comp, params,
+               WITH_UUID_PARAM_NAME, true, &details_comp->cfg.with_uuid);
 
+       status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_OK;
        goto end;
 
-error:
-       ret = -1;
-
 end:
-       return ret;
+       g_free(validate_error);
+
+       return status;
 }
 
 static
@@ -378,34 +335,36 @@ void log_configuration(bt_self_component_sink *comp,
 }
 
 BT_HIDDEN
-bt_component_class_init_method_status details_init(bt_self_component_sink *comp,
+bt_component_class_initialize_method_status details_init(
+               bt_self_component_sink *comp,
+               bt_self_component_sink_configuration *config,
                const bt_value *params,
                __attribute__((unused)) void *init_method_data)
 {
-       bt_component_class_init_method_status status =
-               BT_COMPONENT_CLASS_INIT_METHOD_STATUS_OK;
+       bt_component_class_initialize_method_status status =
+               BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_OK;
        bt_self_component_add_port_status add_port_status;
        struct details_comp *details_comp = NULL;
 
        add_port_status = bt_self_component_sink_add_input_port(comp,
-               in_port_name, NULL, NULL);
+               IN_PORT_NAME, NULL, NULL);
        switch (add_port_status) {
        case BT_SELF_COMPONENT_ADD_PORT_STATUS_OK:
-               status = BT_COMPONENT_CLASS_INIT_METHOD_STATUS_OK;
+               status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_OK;
                break;
        case BT_SELF_COMPONENT_ADD_PORT_STATUS_ERROR:
-               status = BT_COMPONENT_CLASS_INIT_METHOD_STATUS_ERROR;
+               status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_ERROR;
                break;
        case BT_SELF_COMPONENT_ADD_PORT_STATUS_MEMORY_ERROR:
-               status = BT_COMPONENT_CLASS_INIT_METHOD_STATUS_MEMORY_ERROR;
+               status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_MEMORY_ERROR;
                break;
        default:
-               abort();
+               bt_common_abort();
        }
 
        details_comp = create_details_comp(comp);
        if (!details_comp) {
-               status = BT_COMPONENT_CLASS_INIT_METHOD_STATUS_MEMORY_ERROR;
+               status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_MEMORY_ERROR;
                goto error;
        }
 
@@ -420,8 +379,8 @@ bt_component_class_init_method_status details_init(bt_self_component_sink *comp,
        goto end;
 
 error:
-       if (status == BT_COMPONENT_CLASS_INIT_METHOD_STATUS_OK) {
-               status = BT_COMPONENT_CLASS_INIT_METHOD_STATUS_ERROR;
+       if (status == BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_OK) {
+               status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_ERROR;
        }
 
        destroy_details_comp(details_comp);
@@ -434,9 +393,10 @@ BT_HIDDEN
 bt_component_class_sink_graph_is_configured_method_status
 details_graph_is_configured(bt_self_component_sink *comp)
 {
-       bt_component_class_sink_graph_is_configured_method_status status =
-               BT_COMPONENT_CLASS_SINK_GRAPH_IS_CONFIGURED_METHOD_STATUS_OK;
-       bt_self_component_port_input_message_iterator *iterator;
+       bt_component_class_sink_graph_is_configured_method_status status;
+       bt_message_iterator_create_from_sink_component_status
+               msg_iter_status;
+       bt_message_iterator *iterator;
        struct details_comp *details_comp;
        bt_self_component_port_input *in_port;
 
@@ -444,26 +404,28 @@ details_graph_is_configured(bt_self_component_sink *comp)
                bt_self_component_sink_as_self_component(comp));
        BT_ASSERT(details_comp);
        in_port = bt_self_component_sink_borrow_input_port_by_name(comp,
-               in_port_name);
+               IN_PORT_NAME);
        if (!bt_port_is_connected(bt_port_input_as_port_const(
                        bt_self_component_port_input_as_port_input(in_port)))) {
                BT_COMP_LOGE("Single input port is not connected: "
-                       "port-name=\"%s\"", in_port_name);
+                       "port-name=\"%s\"", IN_PORT_NAME);
                status = BT_COMPONENT_CLASS_SINK_GRAPH_IS_CONFIGURED_METHOD_STATUS_ERROR;
                goto end;
        }
 
-       iterator = bt_self_component_port_input_message_iterator_create(
-               bt_self_component_sink_borrow_input_port_by_name(comp,
-                       in_port_name));
-       if (!iterator) {
-               status = BT_COMPONENT_CLASS_SINK_GRAPH_IS_CONFIGURED_METHOD_STATUS_MEMORY_ERROR;
+       msg_iter_status = bt_message_iterator_create_from_sink_component(
+               comp, bt_self_component_sink_borrow_input_port_by_name(comp,
+                       IN_PORT_NAME), &iterator);
+       if (msg_iter_status != BT_MESSAGE_ITERATOR_CREATE_FROM_SINK_COMPONENT_STATUS_OK) {
+               status = (int) msg_iter_status;
                goto end;
        }
 
-       BT_SELF_COMPONENT_PORT_INPUT_MESSAGE_ITERATOR_MOVE_REF(
+       BT_MESSAGE_ITERATOR_MOVE_REF(
                details_comp->msg_iter, iterator);
 
+       status = BT_COMPONENT_CLASS_SINK_GRAPH_IS_CONFIGURED_METHOD_STATUS_OK;
+
 end:
        return status;
 }
@@ -482,11 +444,11 @@ details_consume(bt_self_component_sink *comp)
 
        details_comp = bt_self_component_get_data(
                bt_self_component_sink_as_self_component(comp));
-       BT_ASSERT(details_comp);
-       BT_ASSERT(details_comp->msg_iter);
+       BT_ASSERT_DBG(details_comp);
+       BT_ASSERT_DBG(details_comp->msg_iter);
 
        /* Consume messages */
-       next_status = bt_self_component_port_input_message_iterator_next(
+       next_status = bt_message_iterator_next(
                details_comp->msg_iter, &msgs, &count);
        switch (next_status) {
        case BT_MESSAGE_ITERATOR_NEXT_STATUS_OK:
@@ -531,7 +493,7 @@ details_consume(bt_self_component_sink *comp)
                ret = BT_COMPONENT_CLASS_SINK_CONSUME_METHOD_STATUS_MEMORY_ERROR;
                goto end;
        default:
-               abort();
+               bt_common_abort();
        }
 
 end:
This page took 0.028771 seconds and 4 git commands to generate.