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;
 }
Example #2
0
        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);
        }
Example #3
0
 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();
         }
     }
 }
Example #4
0
        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);
        }