/*
* libosinfo:
*
* Copyright (C) 2009-2020 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see
* .
*/
#include
#include
/**
* SECTION:osinfo_install_config_param
* @short_description: OS install configuration parameters (and its policies)
* @see_also: #OsinfoInstallScript, #OsinfoInstallConfig
*
* #OsinfoInstallConfigParam is an entity for describing all parameters that
* can be set in an automated installation. It is used to help applications to
* generate an automated installation script. The actual parameter values
* for an #OsinfoInstallScript must be set using an #OsinfoInstallConfig
* object.
*/
struct _OsinfoInstallConfigParamPrivate
{
OsinfoDatamap *value_map;
};
G_DEFINE_TYPE_WITH_PRIVATE(OsinfoInstallConfigParam, osinfo_install_config_param, OSINFO_TYPE_ENTITY);
enum {
PROP_0,
PROP_NAME,
PROP_POLICY,
PROP_VALUE_MAP,
LAST_PROP
};
static GParamSpec *properties[LAST_PROP];
static void
osinfo_install_config_param_set_property(GObject *object,
guint property_id,
const GValue *value,
GParamSpec *pspec)
{
OsinfoInstallConfigParam *config_param =
OSINFO_INSTALL_CONFIG_PARAM(object);
switch (property_id) {
case PROP_NAME:
osinfo_entity_set_param(OSINFO_ENTITY(config_param),
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);
break;
}
}
static void
osinfo_install_config_param_get_property(GObject *object,
guint property_id,
GValue *value,
GParamSpec *pspec)
{
OsinfoInstallConfigParam *config_param =
OSINFO_INSTALL_CONFIG_PARAM(object);
switch (property_id) {
case PROP_NAME:
{
const gchar *name;
name = osinfo_install_config_param_get_name(config_param);
g_value_set_string(value, name);
break;
}
case PROP_POLICY:
{
OsinfoInstallConfigParamPolicy policy;
policy = osinfo_install_config_param_get_policy(config_param);
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);
break;
}
}
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)
{
GObjectClass *g_klass = G_OBJECT_CLASS(klass);
g_klass->set_property = osinfo_install_config_param_set_property;
g_klass->get_property = osinfo_install_config_param_get_property;
g_klass->finalize = osinfo_install_config_param_finalize;
/**
* OsinfoInstallConfigParam:name:
*
* The name of the configuration parameter.
**/
properties[PROP_NAME] = g_param_spec_string("name",
"Name",
_("Parameter name"),
NULL,
G_PARAM_WRITABLE |
G_PARAM_READABLE |
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS);
/**
* OsinfoInstallConfigParam:policy:
*
* The policy of the configuration parameter.
**/
properties[PROP_POLICY] = g_param_spec_enum("policy",
"Policy",
_("Parameter policy"),
OSINFO_TYPE_INSTALL_CONFIG_PARAM_POLICY,
OSINFO_INSTALL_CONFIG_PARAM_POLICY_OPTIONAL,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
/**
* OsinfoInstallConfigParam:value-map:
*
* The mapping between generic values and OS-specific values for this
* configuration parameter
**/
properties[PROP_VALUE_MAP] = 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_properties(g_klass, LAST_PROP, properties);
}
static void
osinfo_install_config_param_init(OsinfoInstallConfigParam *config_param)
{
config_param->priv = osinfo_install_config_param_get_instance_private(config_param);
}
/**
* osinfo_install_config_param_new:
* @name: the configuration parameter name
*
* Construct a new configuration parameter for an #OsinfoInstallScript.
*
* Returns: (transfer full): the new configuration parameter
*
* Since: 0.2.0
*/
OsinfoInstallConfigParam *osinfo_install_config_param_new(const gchar *name)
{
return g_object_new(OSINFO_TYPE_INSTALL_CONFIG_PARAM,
"id", name,
"name", name,
NULL);
}
/**
* osinfo_install_config_param_get_name:
* @config_param: the configuration parameter
*
* Returns: (transfer none): the name of the configuration parameter
*
* Since: 0.2.0
*/
const gchar *osinfo_install_config_param_get_name(OsinfoInstallConfigParam *config_param)
{
return osinfo_entity_get_param_value(OSINFO_ENTITY(config_param),
OSINFO_INSTALL_CONFIG_PARAM_PROP_NAME);
}
/**
* osinfo_install_config_param_get_policy:
* @config_param: the configuration parameter
*
* Returns: the policy of the configuration parameter
*
* Since: 0.2.0
*/
OsinfoInstallConfigParamPolicy osinfo_install_config_param_get_policy(OsinfoInstallConfigParam *config_param)
{
return osinfo_entity_get_param_value_enum(OSINFO_ENTITY(config_param),
OSINFO_INSTALL_CONFIG_PARAM_PROP_POLICY,
OSINFO_TYPE_INSTALL_CONFIG_PARAM_POLICY,
OSINFO_INSTALL_CONFIG_PARAM_POLICY_OPTIONAL);
}
/**
* osinfo_install_config_param_is_required:
* @config_param: the configuration parameter
*
* Returns: TRUE if the config_param is required. FALSE otherwise.
*
* Since: 0.2.1
*/
gboolean osinfo_install_config_param_is_required(OsinfoInstallConfigParam *config_param)
{
return (osinfo_install_config_param_get_policy(config_param) ==
OSINFO_INSTALL_CONFIG_PARAM_POLICY_REQUIRED);
}
/**
* osinfo_install_config_param_is_optional:
* @config_param: the configuration parameter
*
* Returns: TRUE if the config_param is optional. FALSE otherwise.
*
* Since: 0.2.1
*/
gboolean osinfo_install_config_param_is_optional(OsinfoInstallConfigParam *config_param)
{
return (osinfo_install_config_param_get_policy(config_param) ==
OSINFO_INSTALL_CONFIG_PARAM_POLICY_OPTIONAL);
}
/**
* osinfo_install_config_param_get_value_map:
* @config_param: the configuration parameter
*
* Returns: (transfer none): The data map used to transform values set for this
* parameter to OS-specific values, or NULL.
*
* Since: 0.2.8
*/
OsinfoDatamap *osinfo_install_config_param_get_value_map(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.
*
* Since: 0.2.8
*/
void osinfo_install_config_param_set_value_map(OsinfoInstallConfigParam *config_param, OsinfoDatamap *datamap)
{
g_return_if_fail(OSINFO_IS_INSTALL_CONFIG_PARAM(config_param));
g_clear_object(&config_param->priv->value_map);
config_param->priv->value_map = g_object_ref(datamap);
}