/* * libosinfo: An installed image of a (guest) OS * * Copyright (C) 2018 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 * . * * Authors: * Fabiano FidĂȘncio */ #include #include #include #include #include #include G_DEFINE_TYPE(OsinfoImage, osinfo_image, OSINFO_TYPE_ENTITY); #define OSINFO_IMAGE_GET_PRIVATE(obj) \ (G_TYPE_INSTANCE_GET_PRIVATE((obj), \ OSINFO_TYPE_IMAGE, \ OsinfoImagePrivate)) /** * SECTION:osinfo_image * @short_description: A pre-installed image for a (guest) OS * @see_also: #OsinfoOs * * #OsinfoImage is an entity representing an installation image * a (guest) operating system. */ struct _OsinfoImagePrivate { gboolean unused; }; enum { PROP_0, PROP_ARCHITECTURE, PROP_FORMAT, PROP_URL, PROP_CLOUD_INIT, }; static void osinfo_image_get_property(GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { OsinfoImage *image = OSINFO_IMAGE(object); switch (property_id) { case PROP_ARCHITECTURE: g_value_set_string(value, osinfo_image_get_architecture(image)); break; case PROP_FORMAT: g_value_set_string(value, osinfo_image_get_format(image)); break; case PROP_URL: g_value_set_string(value, osinfo_image_get_url(image)); break; case PROP_CLOUD_INIT: g_value_set_boolean(value, osinfo_image_get_cloud_init(image)); break; default: /* We don't have any other property... */ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec); break; } } static void osinfo_image_set_property(GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { OsinfoImage *image = OSINFO_IMAGE(object); switch (property_id) { case PROP_ARCHITECTURE: osinfo_entity_set_param(OSINFO_ENTITY(image), OSINFO_IMAGE_PROP_ARCHITECTURE, g_value_get_string(value)); break; case PROP_FORMAT: osinfo_entity_set_param(OSINFO_ENTITY(image), OSINFO_IMAGE_PROP_FORMAT, g_value_get_string(value)); break; case PROP_URL: osinfo_entity_set_param(OSINFO_ENTITY(image), OSINFO_IMAGE_PROP_URL, g_value_get_string(value)); break; case PROP_CLOUD_INIT: osinfo_entity_set_param_boolean(OSINFO_ENTITY(image), OSINFO_IMAGE_PROP_CLOUD_INIT, g_value_get_boolean(value)); break; default: /* We don't have any other property... */ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec); break; } } static void osinfo_image_finalize(GObject *object) { /* Chain up to the parent class */ G_OBJECT_CLASS(osinfo_image_parent_class)->finalize(object); } /* Init functions */ static void osinfo_image_class_init(OsinfoImageClass *klass) { GObjectClass *g_klass = G_OBJECT_CLASS(klass); GParamSpec *pspec; g_klass->finalize = osinfo_image_finalize; g_klass->get_property = osinfo_image_get_property; g_klass->set_property = osinfo_image_set_property; g_type_class_add_private(klass, sizeof(OsinfoImagePrivate)); /** * OsinfoImage:architecture: * * The target hardware architecture of this image. */ pspec = g_param_spec_string("architecture", "ARCHITECTURE", _("CPU Architecture"), NULL /* default value */, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property(g_klass, PROP_ARCHITECTURE, pspec); /** * OsinfoImage:format: * * The image format. */ pspec = g_param_spec_string("format", "FORMAT", _("The image format"), NULL /* default value */, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property(g_klass, PROP_FORMAT, pspec); /** * OsinfoImage:url: * * The URL to this image. */ pspec = g_param_spec_string("url", "URL", _("The URL to this image"), NULL /* default value */, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property(g_klass, PROP_URL, pspec); } static void osinfo_image_init(OsinfoImage *image) { image->priv = OSINFO_IMAGE_GET_PRIVATE(image); } OsinfoImage *osinfo_image_new(const gchar *id, const gchar *architecture, const gchar *format) { OsinfoImage *image; image = g_object_new(OSINFO_TYPE_IMAGE, "id", id, OSINFO_IMAGE_PROP_ARCHITECTURE, architecture, OSINFO_IMAGE_PROP_FORMAT, format, NULL); return image; } /** * osinfo_image_get_architecture: * @image: an #OsinfoImage instance * * Retrieves the target hardware architecture of the OS @image provides. * * Returns: (transfer none): the hardware architecture, or NULL */ const gchar *osinfo_image_get_architecture(OsinfoImage *image) { return osinfo_entity_get_param_value(OSINFO_ENTITY(image), OSINFO_IMAGE_PROP_ARCHITECTURE); } /** * osinfo_image_get_format: * @image: an #OsinfoImage instance * * The format of the @image * * Returns: (transfer none): the format, or NULL */ const gchar *osinfo_image_get_format(OsinfoImage *image) { return osinfo_entity_get_param_value(OSINFO_ENTITY(image), OSINFO_IMAGE_PROP_FORMAT); } /** * osinfo_image_get_url: * @image: an #OsinfoImage instance * * The URL to the @image * * Returns: (transfer none): the URL, or NULL */ const gchar *osinfo_image_get_url(OsinfoImage *image) { return osinfo_entity_get_param_value(OSINFO_ENTITY(image), OSINFO_IMAGE_PROP_URL); } /** * osinfo_image_get_cloud_init: * @image: an #OsinfoImage instance * * Whether @image supports cloud init customizations * * Returns: #TRUE if @image supports cloud init customizations, #FALSE * otherwise. */ gboolean osinfo_image_get_cloud_init(OsinfoImage *image) { return osinfo_entity_get_param_value_boolean_with_default (OSINFO_ENTITY(image), OSINFO_IMAGE_PROP_CLOUD_INIT, FALSE); } /* * Local variables: * indent-tabs-mode: nil * c-indent-level: 4 * c-basic-offset: 4 * End: */