view Postarc/Postarc/PostGISConnection.cs @ 0:1aca3d413885 tip

Initial import of Postarc
author Christian Lins <christian.lins@intevation.de>
date Fri, 05 Oct 2012 23:55:06 +0200
parents
children
line wrap: on
line source
/*
 * Postarc
 *
 * Author:
 * Christian Lins <christian.lins@intevation.de>
 *
 * Copyright:
 * Copyright (C) 2012 Intevation GmbH <http://www.intevation.de/>
 *
 * This program 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 3 of the License, or
 * (at your option) any later version.
 *
 * This program 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 General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;
using Npgsql;

namespace Postarc
{
    [Serializable]
    public class PostGISConnection 
    {
        private string name = "<new profile>";
        private string host;
        private int port = 5432;
        private string user;
        private string password;
        private string database;

        public string Name
        {
            get
            {
                return this.name;
            }
            set
            {
                this.name = value;
            }
        }

        public string Host
        {
            get
            {
                return this.host;
            }
            set
            {
                this.host = value;
            }
        }

        public int Port
        {
            get
            {
                return this.port;
            }
            set
            {
                this.port = value;
            }
        }

        public string User
        {
            get
            {
                return this.user;
            }
            set
            {
                this.user = value;
            }
        }

        public string Password
        {
            get
            {
                return this.password;
            }
            set
            {
                this.password = value;
            }
        }

        public string Database
        {
            get
            {
                return "postgis"; // this.database;
            }
            set
            {
                this.database = value;
            }
        }

        public PostGISConnection()
        {
        }

        public string CreateConnectionString()
        {
            StringBuilder cs = new StringBuilder();
            cs.Append("Server="); cs.Append(host);
            cs.Append(";Port="); cs.Append(port);
            cs.Append(";User Id="); cs.Append(user);
            cs.Append(";Password="); cs.Append(password);
            cs.Append(";Database="); cs.Append(database);
            cs.Append(";");
            return cs.ToString();
        }

        /// <summary>
        /// Creates and opens an NpgsqlConnection to the PostGIS database
        /// described by this PostGISConnection instance.
        /// </summary>
        /// <returns></returns>
        public NpgsqlConnection Open()
        {
            NpgsqlConnection conn = new NpgsqlConnection(CreateConnectionString());
            conn.ChangeDatabase(this.Database);
            return conn;
        }

        /// <summary>
        /// Queries the table names from the information_schema.tables table
        /// of the PostgreSQL system.
        /// </summary>
        /// <returns></returns>
        public List<string> QueryTables()
        {
            List<string> tables = new List<string>();

            NpgsqlConnection conn = Open();
            NpgsqlCommand cmd = new NpgsqlCommand(
                "SELECT table_name FROM information_schema.tables WHERE table_schema = 'public';", 
                conn);
            NpgsqlDataReader reader = cmd.ExecuteReader();
            while (reader.Read())
            {
                string str = reader.GetString(0);
                if (!str.Equals("spatial_ref_sys") &&
                    !str.Equals("geography_columns") &&
                    !str.Equals("geometry_columns") &&
                    !str.Equals("raster_columns") &&
                    !str.Equals("raster_overviews"))
                {
                    tables.Add(str);
                }
            }

            conn.Close();
            return tables;
        }

        public override string ToString()
        {
            return Name;
        }
    }
}
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)