view flys-artifacts/src/main/java/de/intevation/flys/utils/MapUtils.java @ 5462:f2371f3aaf03

Show top level folder icons only if node has no factory If you have an empty folder the folder icon is still shown. This makes it possible to add functional "Top Level" entries in the Datacage
author Andre Heinecke <aheinecke@intevation.de>
date Tue, 26 Mar 2013 18:29:13 +0100
parents eb7a3f58bdd6
children
line wrap: on
line source
package de.intevation.flys.utils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.log4j.Logger;
import org.hibernate.impl.SessionFactoryImpl;

import de.intevation.flys.backend.SessionFactoryProvider;


public class MapUtils
{
    private static final Logger logger = Logger.getLogger(MapUtils.class);

    public static final Pattern DB_URL_PATTERN =
        Pattern.compile("(.*)\\/\\/(.*):([0-9]+)\\/([\\.a-zA-Z0-9_-]+)");

    public static final Pattern DB_PSQL_URL_PATTERN =
        Pattern.compile("(.*)\\/\\/(.*):([0-9]+)\\/([a-zA-Z0-9_-]+)");

    /**
     * This method returns a connection string for databases used by
     * Mapserver's Mapfile.
     *
     * @return A connection string for Mapserver.
     */
    public static String getConnection() {
        SessionFactoryImpl sf = (SessionFactoryImpl)
        SessionFactoryProvider.getSessionFactory();

        String user = SessionFactoryProvider.getUser(sf);
        String pass = SessionFactoryProvider.getPass(sf);
        String url  = SessionFactoryProvider.getURL(sf);

        logger.debug("Parse connection url: " + url);

        Matcher m = DB_URL_PATTERN.matcher(url);
        if (!m.matches()) {
            logger.warn("Could not parse Connection string." +
                "Try to parse PostgreSQL string.");
            // maybe this is a PostgreSQL connection...
            return getPostgreSQLConnection();
        }

        logger.debug("Groups for connection string: " + m.groupCount());
        int groups = m.groupCount();


        if (logger.isDebugEnabled()) {
            for (int i = 0; i <= groups; i++) {
                logger.debug("Group " + i + ": " + m.group(i));
            }
        }

        String connection = null;

        if (FLYSUtils.isUsingOracle()) {
            if (groups < 4) {
                logger.warn("Could only partially parse connection string.");
                return null;
            }

            String host = m.group(2);
            String port = m.group(3);
            String backend = m.group(4);
            connection = user + "/" + pass + "@" + host + ":" + port + "/" + backend;
        }
        else {
            if (groups < 4) {
                logger.warn("Could only partially parse connection string.");
                return null;
            }

            String host = m.group(2);
            String port = m.group(3);
            String db   = m.group(4);

            connection = createConnectionString(user, pass, host, db, port);
        }

        return connection;
    }

    public static String createConnectionString(
        String user,
        String pass,
        String host,
        String db,
        String port
    ) {
        StringBuilder sb = new StringBuilder();
        sb.append("dbname=").append(db);
        sb.append(" host='").append(host).append("'");
        sb.append(" user=").append(user);
        sb.append(" port=").append(port);
        // XXX: We need to escape this somehow.
        sb.append(" password='").append(pass).append("'");
        sb.append(" sslmode=disable");
        return sb.toString();
    }

    protected static String getPostgreSQLConnection() {
        SessionFactoryImpl sf = (SessionFactoryImpl)
        SessionFactoryProvider.getSessionFactory();

        String user = SessionFactoryProvider.getUser(sf);
        String pass = SessionFactoryProvider.getPass(sf);
        String url  = SessionFactoryProvider.getURL(sf);

        Matcher m = DB_PSQL_URL_PATTERN.matcher(url);
        if (!m.matches()) {
            logger.warn("Could not parse PostgreSQL Connection string.");
            return null;
        }

        int groups = m.groupCount();
        logger.debug("Groups for PostgreSQL connection string: " + groups);

        if (logger.isDebugEnabled()) {
            for (int i = 0; i <= groups; i++) {
                logger.debug("Group " + i + ": " + m.group(i));
            }
        }

        String connection = null;

        if (groups < 4) {
            logger.warn("Could only partially parse connection string.");
            return null;
        }

        String host = m.group(2);
        String port = m.group(3);
        String db   = m.group(4);

        connection = createConnectionString(user, pass, host, db, port);

        logger.debug("Created connection: '" + connection + "'");

        return connection;
    }

    public static String getConnectionType() {
        return FLYSUtils.isUsingOracle() ? "oraclespatial" : "postgis";
    }
}

http://dive4elements.wald.intevation.org