All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.kawanfw.sql.api.client.RemoteDriverUtil Maven / Gradle / Ivy

/*
 * This file is part of AceQL. 
 * AceQL: Remote JDBC access over HTTP.                                     
 * Copyright (C) 2015,  KawanSoft SAS
 * (http://www.kawansoft.com). All rights reserved.                                
 *                                                                               
 * AceQL 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.            
 *                                                                               
 * AceQL 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, write to the Free Software           
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  
 * 02110-1301  USA
 *
 * Any modifications to this file must keep this entire header
 * intact.
 */
package org.kawanfw.sql.api.client;

import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.Proxy.Type;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.logging.Level;
import java.util.regex.Pattern;

import org.apache.commons.lang3.StringUtils;
import org.kawanfw.commons.util.ClientLogger;
import org.kawanfw.commons.util.FrameworkDebug;

/**
 * 
 * Utility method for RemoteDriver class
 * 
 * @author Nicolas de Pomereu
 *
 */
class RemoteDriverUtil {
	
    /** The debug flag */
    private static boolean DEBUG = FrameworkDebug.isSet(RemoteDriverUtil.class);
    
    /**
     * No constructor
     */
    protected RemoteDriverUtil() {

    }

    /**
     * Extract from an URL query part the parameters and build a map
     * @param query the URL query part to extract parmaters
     * @return 	the Map of [parameter name, parameter value]
     */
    public static Map getQueryMap(String query) {
        String[] params = query.split("&");
        Map map = new HashMap();
        for (String param : params) {
            String[] p = param.split("=");
            String name = p[0];
            if (p.length > 1) {
        	String value = p[1];
        	map.put(name, value);
        	debug("name / value: " + name + " / " + value);
            }
        }
        return map;
    }

    /**
     * Copy a set of properties from one Property to another.
     * 

* * @param srcProp Source set of properties to copy from. * @param destProp Dest Properties to copy into. * **/ public static void copyProperties(Properties srcProp, Properties destProp) { for (Enumeration propertyNames = srcProp.propertyNames(); propertyNames.hasMoreElements(); ) { Object key = propertyNames.nextElement(); destProp.put(key, srcProp.get(key)); } } /** IP pattern */ private static final Pattern PATTERN = Pattern .compile("^(([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.){3}([01]?\\d\\d?|2[0-4]\\d|25[0-5])$"); /** * Allows to validate an IP format * * @param ip the IP to test * @return true if the string contains an IP format */ public static boolean validateIpFormat(final String ip) { if (ip == null) { throw new NullPointerException("ip is null!"); } return PATTERN.matcher(ip).matches(); } /* * Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress( * "localhost", 8080)); * * System.out.println(proxy.toString()); * //HTTP @ localhost/127.0.0.1:8080 */ /** * Create a Proxy instance from a Proxy.toString() representation * Example: HTTP @ www.kawansoft.com/195.154.226.82:8080 * @param proxyToString the proxy in Proxy.toString() format * @return the build proxy */ public static Proxy buildProxy(String proxyToString) { if (proxyToString == null) { throw new NullPointerException("ip is null!"); } if (! proxyToString.contains(" @ ")) { throw new IllegalArgumentException("Malformed Proxy.toString() format: @ separator is missing."); } // Get the type String type = StringUtils.substringBefore(proxyToString, " @ "); if (type== null) { throw new IllegalArgumentException("Malformed Proxy.toString() format: no Type"); } type = type.trim(); debug("Proxy.Type.DIRECT: " + Proxy.Type.DIRECT.toString()); if (! type.equals(Proxy.Type.DIRECT.toString()) && ! type.equals(Proxy.Type.HTTP.toString()) && ! type.equals(Proxy.Type.SOCKS.toString())) { throw new IllegalArgumentException("Malformed Proxy.toString() format: Type does not contain DIRECT / HTTP / SOCKS: " + type + ":"); } String hostname =null; String portStr = null; int port = 0; if (proxyToString.contains("@ /")) { // Case 1 : HTTP @ /195.154.226.82:8080 // no hostname IP only hostname = StringUtils.substringBetween(proxyToString, "/", ":"); } else { // Case 2 : HTTP @ localhost/127.0.0.1:8080 // hostname followed by ip or /subaddress hostname = StringUtils.substringBetween(proxyToString, " @ ", "/"); String ip = StringUtils.substringBetween(proxyToString, "/", ":"); // if ip string is in IP format, dont take in account the ip after / // If not, following / is the hostname if (validateIpFormat(ip)) { hostname = StringUtils.substringBetween(proxyToString, " @ ", "/"); } else { hostname = StringUtils.substringBetween(proxyToString, " @ ", ":"); } } portStr = StringUtils.substringAfter(proxyToString, ":"); if (StringUtils.isNumeric(portStr)) { port = Integer.parseInt(portStr); } else { throw new IllegalArgumentException("Malformed Proxy.toString() format: does not contain numeric port: " + proxyToString); } Proxy proxy = new Proxy(Type.valueOf(type), new InetSocketAddress(hostname, port)); return proxy; } /** * debug tool */ private static void debug(String s) { if (DEBUG) { ClientLogger.getLogger().log(Level.WARNING, s); } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy