/** * gdaui_dsn_editor_get_dsn * @config: * * * * Returns: a pointer to the currently configured DSN (do not modify) */ const GdaDsnInfo * gdaui_dsn_editor_get_dsn (GdauiDsnEditor *config) { GdaDsnInfo *dsn_info; g_return_val_if_fail (GDAUI_IS_DSN_EDITOR (config), NULL); dsn_info = config->priv->dsn_info; g_free (dsn_info->provider); dsn_info->provider = NULL; g_free (dsn_info->cnc_string); dsn_info->cnc_string = NULL; g_free (dsn_info->description); dsn_info->description = NULL; g_free (dsn_info->auth_string); dsn_info->auth_string = NULL; g_free (dsn_info->name); dsn_info->name = NULL; dsn_info->name = g_strdup (config->priv->name); dsn_info->provider = g_strdup (gdaui_provider_selector_get_provider (GDAUI_PROVIDER_SELECTOR (config->priv->wprovider))); dsn_info->cnc_string = _gdaui_provider_spec_editor_get_specs (GDAUI_PROVIDER_SPEC_EDITOR (config->priv->dsn_spec)); GtkTextBuffer *buf; GtkTextIter start, end; buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (config->priv->wdesc)); gtk_text_buffer_get_start_iter (buf, &start); gtk_text_buffer_get_end_iter (buf, &end); dsn_info->description = gtk_text_buffer_get_text (buf, &start, &end, FALSE); dsn_info->auth_string = _gdaui_provider_auth_editor_get_auth (GDAUI_PROVIDER_AUTH_EDITOR (config->priv->dsn_auth)); dsn_info->is_system = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (config->priv->is_system)); return dsn_info; }
/** * gdaui_login_get_connection_information: * @login: a #GdauiLogin object * * Get the information specified in @login as a pointer to a (read-only) #GdaDsnInfo. * If the connection is not specified by a DSN, then the 'name' attribute of the returned * #GdaDsnInfo will be %NULL, and otherwise it will contain the name of the selected DSN. * * Returns: (transfer none): a pointer to a (read-only) #GdaDsnInfo. * * Since: 4.2 */ const GdaDsnInfo * gdaui_login_get_connection_information (GdauiLogin *login) { g_return_val_if_fail (GDAUI_IS_LOGIN (login), NULL); GdauiLoginPrivate *priv = gdaui_login_get_instance_private (login); clear_dsn_info (login); if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->rb_dsn))) { GdaDsnInfo *info = NULL; gchar *dsn; dsn = _gdaui_dsn_selector_get_dsn (GDAUI_DSN_SELECTOR (priv->dsn_selector)); if (dsn && *dsn) info = gda_config_get_dsn_info (dsn); g_free (dsn); if (info) { priv->dsn_info.name = g_strdup (info->name); if (info->provider) priv->dsn_info.provider = g_strdup (info->provider); if (info->description) priv->dsn_info.description = g_strdup (info->description); if (info->cnc_string) priv->dsn_info.cnc_string = g_strdup (info->cnc_string); priv->dsn_info.is_system = info->is_system; } priv->dsn_info.auth_string = _gdaui_provider_auth_editor_get_auth (GDAUI_PROVIDER_AUTH_EDITOR (priv->auth_widget)); } else { const gchar *str; str = gdaui_provider_selector_get_provider (GDAUI_PROVIDER_SELECTOR (priv->prov_selector)); if (str) priv->dsn_info.provider = g_strdup (str); priv->dsn_info.cnc_string = _gdaui_provider_spec_editor_get_specs (GDAUI_PROVIDER_SPEC_EDITOR (priv->cnc_params_editor)); priv->dsn_info.auth_string = _gdaui_provider_auth_editor_get_auth (GDAUI_PROVIDER_AUTH_EDITOR (priv->auth_widget)); } return &(priv->dsn_info); }
static void assistant_applied_cb (GtkAssistant *assist, G_GNUC_UNUSED gpointer data) { gboolean allok = TRUE; GString *cnc_string = NULL; GdauiDsnAssistant *assistant = (GdauiDsnAssistant *) assist; g_return_if_fail (GDAUI_IS_DSN_ASSISTANT (assistant)); /* clear the internal dsn_info */ if (assistant->priv->dsn_info) { data_source_info_free (assistant->priv->dsn_info); assistant->priv->dsn_info = NULL; } /* New database creation first */ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (assistant->priv->choose_toggle))) { if (!gda_server_operation_is_valid (assistant->priv->create_db_op, NULL, NULL)) { _gdaui_utility_show_error (NULL, _("Missing mandatory information, to create database")); gtk_assistant_set_current_page (assist, PAGE_CREATE_DB_INFO); return; } else { GdaProviderInfo *prov_info; GSList *dsn_params; GError *error = NULL; allok = gda_server_operation_perform_create_database (assistant->priv->create_db_op, NULL, &error); if (!allok) { gchar *str; str = g_strdup_printf (_("Error creating database: %s"), error && error->message ? error->message : _("Unknown error")); _gdaui_utility_show_error (NULL, str); g_free (str); gtk_assistant_set_current_page (assist, PAGE_CREATE_DB_INFO); return; } /* make the connection string for the data source */ prov_info = gda_config_get_provider_info (gdaui_provider_selector_get_provider (GDAUI_PROVIDER_SELECTOR (assistant->priv->general_provider))); g_return_if_fail (prov_info); for (dsn_params = prov_info->dsn_params->holders; dsn_params; dsn_params = dsn_params->next) { GdaHolder *param = GDA_HOLDER (dsn_params->data); const GValue *value; value = gda_server_operation_get_value_at (assistant->priv->create_db_op, "/DB_DEF_P/%s", gda_holder_get_id (param)); if (!value) value = gda_server_operation_get_value_at (assistant->priv->create_db_op, "/SERVER_CNX_P/%s", gda_holder_get_id (param)); if (value && !gda_value_is_null ((GValue *) value)) { gchar *str; if (dsn_params == prov_info->dsn_params->holders) cnc_string = g_string_new (""); else g_string_append (cnc_string, ";"); str = gda_value_stringify ((GValue *) value); g_string_append_printf (cnc_string, "%s=%s", gda_holder_get_id (param), str); g_free (str); } } } } /* Data source declaration */ if (allok) { assistant->priv->dsn_info = g_new0 (GdaDsnInfo, 1); assistant->priv->dsn_info->name = g_strdup (gtk_entry_get_text (GTK_ENTRY (assistant->priv->general_name))); assistant->priv->dsn_info->provider = g_strdup ( gdaui_provider_selector_get_provider ( GDAUI_PROVIDER_SELECTOR (assistant->priv->general_provider))); if (cnc_string) { assistant->priv->dsn_info->cnc_string = cnc_string->str; g_string_free (cnc_string, FALSE); } else assistant->priv->dsn_info->cnc_string = _gdaui_provider_spec_editor_get_specs (GDAUI_PROVIDER_SPEC_EDITOR (assistant->priv->provider_detail)); assistant->priv->dsn_info->description = g_strdup (gtk_entry_get_text (GTK_ENTRY (assistant->priv->general_description))); assistant->priv->dsn_info->auth_string = NULL; if (assistant->priv->auth_detail) assistant->priv->dsn_info->auth_string = _gdaui_provider_auth_editor_get_auth (GDAUI_PROVIDER_AUTH_EDITOR (assistant->priv->auth_detail)); if (gda_config_can_modify_system_config ()) assistant->priv->dsn_info->is_system = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (assistant->priv->general_is_system)); else assistant->priv->dsn_info->is_system = FALSE; } /* notify listeners */ g_signal_emit (G_OBJECT (assistant), config_assistant_signals[FINISHED], 0, !allok); }