public static AdamsCarFileReplacement FromString(string input){ AdamsCarFileReplacement result = new AdamsCarFileReplacement(); string[] elems = input.Split('/'); result.EntryType = elems[0]; if (elems[1].Length > 0) { result.IdKeys = new Dictionary<string, string>(); string[] elems2 = elems[1].Split('='); result.IdKeys.Add(elems2[0], elems2[1]); } result.KeyToReplace = elems[2]; result.FileRef = false; return result; }
public static AdamsCarFileReplacement FromString(string input) { AdamsCarFileReplacement result = new AdamsCarFileReplacement(); string[] elems = input.Split('/'); result.EntryType = elems[0]; if (elems[1].Length > 0) { result.IdKeys = new Dictionary <string, string>(); string[] elems2 = elems[1].Split('='); result.IdKeys.Add(elems2[0], elems2[1]); } result.KeyToReplace = elems[2]; result.FileRef = false; return(result); }
public void Replace(AdamsCarFileReplacement replacement, string newvalue) { foreach (var block in Blocks) { if (block.Type == replacement.EntryType) { bool success = false; if (replacement.IdKeys != null) { Dictionary <string, string> dict = ParseKeyValuePairs(block); if (!dict.ContainsKey(replacement.KeyToReplace)) { continue; } success = true; foreach (KeyValuePair <string, string> key in replacement.IdKeys) { if (dict.ContainsKey(key.Key)) { if (!dict[key.Key].Contains(key.Value)) { success = false; break; } } else { success = false; break; } } } else if (replacement.IdStrings != null) { success = true; foreach (string str in replacement.IdStrings) { if (!block.Content.Contains(str)) { success = false; break; } } } if (!success) { continue; } StringReader reader = new StringReader(block.Content); StringBuilder newstr = new StringBuilder(); string line; while ((line = reader.ReadLine()) != null) { string newline = line; if (line.Contains('=')) { var elements = line.Trim().Split('='); if (elements[0].Trim() == replacement.KeyToReplace) { newline = elements[0] + '=' + (replacement.FileRef?" 'mdids://isis_test/":" ") + newvalue.Replace("\\", "/") + (replacement.FileRef?"'":""); } } newstr.AppendLine(newline); } block.Content = newstr.ToString(); } } }
private List <CarResource> CollectCarResources(List <CyPhy.CarModel> carcomps) { List <CarResource> result = new List <CarResource>(); foreach (var comp in carcomps) { foreach (var res in comp.Children.CarResourceCollection) { // Is the resource already listed? CarResource currres = null; var existingres = result.Where(r => r.FileName == res.Attributes.ResourcePath); if (existingres.Any()) { if (existingres.Count() > 1) { throw new Exception("Internal error: car resource found more than once."); } currres = existingres.First(); } else { currres = new CarResource() { FileName = res.Attributes.ResourcePath }; result.Add(currres); } foreach (var param in res.SrcConnections.CarResourceParameterCollection) { if (param.SrcEnds.CarParameter != null) { if (param.SrcEnds.CarParameter.Attributes.Value.Length == 0) { GMEConsole.Warning.WriteLine("Empty parameter value for '" + param.SrcEnds.CarParameter.Name + "', ignoring."); } else { var existingparam = currres.Parameters.Where(p => p.Name == param.SrcEnds.CarParameter.Name); if (existingparam.Any()) { GMEConsole.Warning.WriteLine("Parameter '" + existingparam.First().Name + "' set twice on resource '" + currres.FileName + "'. Ignoring second setting."); } else { var newparam = new CarFileParam() { Name = param.SrcEnds.CarParameter.Name, Value = param.SrcEnds.CarParameter.Attributes.Value, Replacement = ((param.Attributes.ParameterKey.Length > 0) ? AdamsCarFileReplacement.FromString(param.Attributes.ParameterKey) : null) }; currres.Parameters.Add(newparam); } } } } } } // Do a 2nd round to discover resource replacements foreach (var comp in carcomps) { foreach (var res in comp.Children.CarResourceCollection) { foreach (var conn in res.SrcConnections.ReferenceSwapCollection) { if (conn.SrcEnds.CarResource != null) { var referenced = result.Where(r => r.FileName == res.Attributes.ResourcePath); var referer = result.Where(r => r.FileName == conn.SrcEnds.CarResource.Attributes.ResourcePath); if (referer.Any() && referenced.Any()) { referenced.First().References.Add(conn.Attributes.ReferenceName, referer.First()); } else { GMEConsole.Error.WriteLine("Internal error, resource was not found: " + conn.DstEnds.CarResource.Attributes.ResourcePath); } } } } } return(result); }