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); }
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); }