If set, this OsinfoDatamap value will be used to map generic values to OS-specific values. --- osinfo/osinfo_install_config_param.c | 71 +++++++++++++++++++++++++++++++++++- osinfo/osinfo_install_config_param.h | 3 ++ 2 files changed, 73 insertions(+), 1 deletion(-) diff --git a/osinfo/osinfo_install_config_param.c b/osinfo/osinfo_install_config_param.c index 8ba4e04..59a0048 100644 --- a/osinfo/osinfo_install_config_param.c +++ b/osinfo/osinfo_install_config_param.c @@ -19,6 +19,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * Authors: + * Christophe Fergeau <cfergeau@xxxxxxxxxx> * Fabiano Fidêncio <fabiano@xxxxxxxxxxxx> */ @@ -43,11 +44,17 @@ G_DEFINE_TYPE (OsinfoInstallConfigParam, osinfo_install_config_param, OSINFO_TYP * object. */ +struct _OsinfoInstallConfigParamPrivate +{ + OsinfoDatamap *value_map; +}; + enum { PROP_0, PROP_NAME, PROP_POLICY, + PROP_VALUE_MAP }; static void @@ -65,6 +72,12 @@ osinfo_install_config_param_set_property(GObject *object, OSINFO_INSTALL_CONFIG_PARAM_PROP_NAME, g_value_get_string(value)); break; + + case PROP_VALUE_MAP: + osinfo_install_config_param_set_value_map(config_param, + g_value_get_object(value)); + break; + default: /* We don't have any other property... */ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); @@ -98,6 +111,9 @@ osinfo_install_config_param_get_property(GObject *object, g_value_set_enum(value, policy); break; } + case PROP_VALUE_MAP: + g_value_set_object(value, config_param->priv->value_map); + break; default: /* We don't have any other property... */ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); @@ -105,6 +121,17 @@ osinfo_install_config_param_get_property(GObject *object, } } +static void +osinfo_install_config_param_finalize(GObject *object) +{ + OsinfoInstallConfigParam *config_param; + config_param = OSINFO_INSTALL_CONFIG_PARAM(object); + g_clear_object(&config_param->priv->value_map); + + /* Chain up to the parent class */ + G_OBJECT_CLASS (osinfo_install_config_param_parent_class)->finalize (object); +} + /* Init functions */ static void osinfo_install_config_param_class_init (OsinfoInstallConfigParamClass *klass) @@ -146,12 +173,30 @@ osinfo_install_config_param_class_init (OsinfoInstallConfigParamClass *klass) g_object_class_install_property(g_klass, PROP_POLICY, pspec); + /** + * OsinfoInstallConfigParam:value-map: + * + * The mapping between generic values and OS-specific values for this + * configuration parameter + **/ + pspec = g_param_spec_object("value-map", + "Value Mapping", + _("Parameter Value Mapping"), + OSINFO_TYPE_DATAMAP, + G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS); + g_object_class_install_property(g_klass, + PROP_VALUE_MAP, + pspec); + + g_klass->finalize = osinfo_install_config_param_finalize; + g_type_class_add_private (klass, sizeof (OsinfoInstallConfigParamPrivate)); } static void osinfo_install_config_param_init (OsinfoInstallConfigParam *config_param) { - /* G_DEFINE_TYPE() needs an instance init function */ + config_param->priv = OSINFO_INSTALL_CONFIG_PARAM_GET_PRIVATE(config_param); } /** @@ -219,6 +264,30 @@ gboolean osinfo_install_config_param_is_optional(const OsinfoInstallConfigParam OSINFO_INSTALL_CONFIG_PARAM_POLICY_OPTIONAL); } +OsinfoDatamap *osinfo_install_config_param_get_value_map(const OsinfoInstallConfigParam *config_param) +{ + return config_param->priv->value_map; +} + +/** + * osinfo_install_config_param_set_value_map: + * @config_param: the configuration parameter + * @datamap: a #OsinfoDatamap to transform values this parameter is set to, + * or NULL to disable transformations for this parameter + * + * After a call to osinfo_install_config_param_set_value_map(), @datamap will + * be used to transform values set for this parameter to OS-specific + * values. A NULL @datamap will disable transformations. + */ +void osinfo_install_config_param_set_value_map(OsinfoInstallConfigParam *config_param, OsinfoDatamap *datamap) +{ + g_return_if_fail(OSINFO_IS_INSTALL_CONFIG_PARAM(config_param)); + + if (config_param->priv->value_map != NULL) + g_object_unref(G_OBJECT(config_param->priv->value_map)); + config_param->priv->value_map = g_object_ref(datamap); +} + /* * Local variables: * indent-tabs-mode: nil diff --git a/osinfo/osinfo_install_config_param.h b/osinfo/osinfo_install_config_param.h index 655c869..ba5a77c 100644 --- a/osinfo/osinfo_install_config_param.h +++ b/osinfo/osinfo_install_config_param.h @@ -88,6 +88,9 @@ gboolean osinfo_install_config_param_is_required(const OsinfoInstallConfigParam gboolean osinfo_install_config_param_is_optional(const OsinfoInstallConfigParam *config_param); +void osinfo_install_config_param_set_value_map(OsinfoInstallConfigParam *config_param, OsinfoDatamap *datamap); +OsinfoDatamap *osinfo_install_config_param_get_value_map(const OsinfoInstallConfigParam *config_param); + #endif /* __OSINFO_INSTALL_CONFIG_PARAM_H__ */ /* -- 1.8.0.2 _______________________________________________ Libosinfo mailing list Libosinfo@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libosinfo