コード例 #1
0
        public virtual Net.Vpc.Upa.Impl.Persistence.Connection.DefaultConnectionProfileData ParseDefaultConnectionProfileData(string connectionString)
        {
            //"derbyAsProduct#v12.5:defaultAsDriver#v8.699://helloAsServer:988AsPort/worldAsPath/anyThing?a=hello&b=titi;a=6;b=8"
            Net.Vpc.Upa.Impl.Util.Regexp.PortablePattern        pattern = new Net.Vpc.Upa.Impl.Util.Regexp.PortablePattern("^([^:#;]+)(#([^:;]+))?(:([^:#;]+)(#([^:;]+))?)?://((([^/:;]+)(:([^/:;]+))?)/)?([^;]*)([;](.*))?$");
            Net.Vpc.Upa.Impl.Util.Regexp.PortablePatternMatcher matcher = pattern.Matcher(connectionString);
            bool matchFound = matcher.Find();

            if (matchFound)
            {
                Net.Vpc.Upa.Impl.Persistence.Connection.DefaultConnectionProfileData d = new Net.Vpc.Upa.Impl.Persistence.Connection.DefaultConnectionProfileData();
                d.databaseProductName     = matcher.Group(1);
                d.databaseProductVersion  = matcher.Group(3);
                d.connectionDriverName    = matcher.Group(5);
                d.connectionDriverVersion = matcher.Group(7);
                d.server       = matcher.Group(10);
                d.port         = matcher.Group(12);
                d.pathAndName  = matcher.Group(13);
                d.paramsString = matcher.Group(15);
                return(d);
            }
            return(null);
        }
コード例 #2
0
        public virtual Net.Vpc.Upa.Persistence.ConnectionProfile Parse(Net.Vpc.Upa.Properties parameters, string connectionStringPropertyName)
        {
            string connectionString = parameters.GetString(connectionStringPropertyName);

            //        System.out.println(connectionString);
            if (connectionString == null)
            {
                throw new System.ArgumentException(connectionStringPropertyName + " not found in parameters");
            }
            Net.Vpc.Upa.Impl.Persistence.Connection.DefaultConnectionProfileData matchFound = ParseDefaultConnectionProfileData(connectionString);
            if (matchFound != null)
            {
                //            for (int i=0; i<=matcher.groupCount(); i++) {
                //                String groupStr = matcher.group(i);
                //                System.out.println("group "+i+" : <"+groupStr+">");
                //            }
                Net.Vpc.Upa.Impl.Persistence.Connection.DefaultConnectionProfile profile = new Net.Vpc.Upa.Impl.Persistence.Connection.DefaultConnectionProfile();
                string databaseProductName     = (string)parameters.Eval(matchFound.databaseProductName);
                string databaseProductVersion  = (string)parameters.Eval(matchFound.databaseProductVersion);
                string connectionDriverName    = (string)parameters.Eval(matchFound.connectionDriverName);
                string connectionDriverVersion = (string)parameters.Eval(matchFound.connectionDriverVersion);
                string server      = (string)parameters.Eval(matchFound.server);
                string port        = (string)parameters.Eval(matchFound.port);
                string pathAndName = (string)parameters.Eval(matchFound.pathAndName);
                string @params     = (string)parameters.Eval(matchFound.paramsString);
                profile.SetProperties(new System.Collections.Generic.Dictionary <string, string>());
                SetParam(profile, Net.Vpc.Upa.Persistence.ConnectionOption.DATABASE_PRODUCT, databaseProductName, parameters, connectionStringPropertyName);
                SetParam(profile, Net.Vpc.Upa.Persistence.ConnectionOption.DATABASE_PRODUCT_VERSION, databaseProductVersion, parameters, connectionStringPropertyName);
                SetParam(profile, Net.Vpc.Upa.Persistence.ConnectionOption.CONNECTION_DRIVER, connectionDriverName, parameters, connectionStringPropertyName);
                SetParam(profile, Net.Vpc.Upa.Persistence.ConnectionOption.CONNECTION_DRIVER_VERSION, connectionDriverVersion, parameters, connectionStringPropertyName);
                //pathAndName
                if (Net.Vpc.Upa.Impl.Util.StringUtils.IsNullOrEmpty(pathAndName))
                {
                    pathAndName = null;
                }
                pathAndName = ReplaceVars(pathAndName, parameters);
                if (pathAndName != null)
                {
                    int i = pathAndName.LastIndexOf('/');
                    if (i >= 0)
                    {
                        SetParam(profile, Net.Vpc.Upa.Persistence.ConnectionOption.DATABASE_NAME, pathAndName.Substring(i + 1), parameters, connectionStringPropertyName);
                        SetParam(profile, Net.Vpc.Upa.Persistence.ConnectionOption.DATABASE_PATH, pathAndName.Substring(0, i), parameters, connectionStringPropertyName);
                    }
                    else
                    {
                        SetParam(profile, Net.Vpc.Upa.Persistence.ConnectionOption.DATABASE_NAME, pathAndName, parameters, connectionStringPropertyName);
                    }
                }
                SetParam(profile, Net.Vpc.Upa.Persistence.ConnectionOption.SERVER_ADDRESS, server, parameters, connectionStringPropertyName);
                SetParam(profile, Net.Vpc.Upa.Persistence.ConnectionOption.SERVER_PORT, port, parameters, connectionStringPropertyName);
                if (@params != null)
                {
                    if ([email protected](";"))
                    {
                        @params = ";" + @params;
                    }
                    char[] chars = @params.ToCharArray();
                    int    i     = 0;
                    while (i < chars.Length)
                    {
                        if (chars[i] != ';')
                        {
                            throw new System.ArgumentException("Expected ;");
                        }
                        i++;
                        int j = @params.IndexOf('=', i);
                        if (j < 0)
                        {
                            SetParam(profile, @params.Substring(i), "", parameters, connectionStringPropertyName);
                            i = chars.Length + 1;
                        }
                        else
                        {
                            string n = @params.Substring(i, j);
                            i = j + 1;
                            if (i < chars.Length)
                            {
                                if (chars[i] == '\"')
                                {
                                    System.Text.StringBuilder v = new System.Text.StringBuilder();
                                    int k = i + 1;
                                    while (k < chars.Length)
                                    {
                                        if (chars[k] == '\\')
                                        {
                                            k++;
                                            v.Append(chars[k]);
                                        }
                                        else if (chars[k] == '\"')
                                        {
                                            break;
                                        }
                                        else
                                        {
                                            v.Append(chars[k]);
                                        }
                                        k++;
                                    }
                                    SetParam(profile, n, v.ToString(), parameters, connectionStringPropertyName);
                                    i = k;
                                }
                                else if (chars[i] == '\'')
                                {
                                    System.Text.StringBuilder v = new System.Text.StringBuilder();
                                    int k = i + 1;
                                    while (k < chars.Length)
                                    {
                                        if (chars[k] == '\\')
                                        {
                                            k++;
                                            v.Append(chars[k]);
                                        }
                                        else if (chars[k] == '\'')
                                        {
                                            break;
                                        }
                                        else
                                        {
                                            v.Append(chars[k]);
                                        }
                                        k++;
                                    }
                                    SetParam(profile, n, v.ToString(), parameters, connectionStringPropertyName);
                                    i = k;
                                }
                                else
                                {
                                    int e = @params.IndexOf(';', i);
                                    if (e < 0)
                                    {
                                        SetParam(profile, n, @params.Substring(i), parameters, connectionStringPropertyName);
                                        i = chars.Length + 1;
                                    }
                                    else
                                    {
                                        SetParam(profile, n, @params.Substring(i, e), parameters, connectionStringPropertyName);
                                        i = e - 1;
                                    }
                                }
                            }
                        }
                        i++;
                    }
                }
                foreach (System.Collections.Generic.KeyValuePair <string, object> e in new System.Collections.Generic.HashSet <System.Collections.Generic.KeyValuePair <string, object> >(parameters.ToMap()))
                {
                    string key = (e).Key;
                    if (key.StartsWith(connectionStringPropertyName + "."))
                    {
                        string k = key.Substring((connectionStringPropertyName).Length + 1);
                        if (!IGNORED_OPTIONS_SET.Contains(k) && !profile.GetProperties().ContainsKey(k))
                        {
                            profile.GetProperties()[k] = System.Convert.ToString((e).Value);
                        }
                    }
                }
                return(profile);
            }
            throw new System.ArgumentException("invalid connection string. Expected 'product:driver://info' Found : " + connectionString);
        }