public void ProcessEvents(List <SoftwareFactoryEvent> events) { foreach (var @event in events) { switch (@event.EventIdentifier) { case SoftwareFactoryEvents.AddProjectItemEvent: var x = new AddProjectItemEvent(Project, @event.GetValue("RelativeFileName"), @event.TryGetValue("ItemType")); if (@event.TryGetValue("Depends On") != null) { x.DependentUpon(@event.TryGetValue("Depends On")); } if (@event.TryGetValue("IntentGenType") != null) { x.Generated(@event.TryGetValue("IntentGenType")); } Process(x); break; case SoftwareFactoryEvents.RemoveProjectItemEvent: var r = new RemoveProjectItemEvent(Project, @event.GetValue("RelativeFileName")); Process(r); break; case SoftwareFactoryEvents.AddTargetEvent: Process(new AddTargetEvent(Project, @event.GetValue("Name"), @event.GetValue("Condition"), @event.GetValue("Xml"))); break; case SoftwareFactoryEvents.AddTaskEvent: Process(new AddTaskEvent(Project, @event.GetValue("TaskName"), @event.GetValue("AssemblyFile"))); break; case SoftwareFactoryEvents.ChangeProjectItemTypeEvent: Process(new ChangeProjectItemTypeEvent(Project, @event.GetValue("RelativeFileName"), @event.GetValue("ItemType"))); break; default: Logging.Log.Warning($"VSProject Sync not handling {@event.EventIdentifier}"); break; } } }
private void Process(AddProjectItemEvent @event) { var projectItem = GetProjectItem(@event.RelativeFileName); if (projectItem == null) { var item = new XElement(XName.Get(@event.ItemType, _namespace.NamespaceName)); item.Add(new XAttribute("Include", @event.RelativeFileName)); foreach (var metaData in @event.MetaData) { var child = new XElement(XName.Get(metaData.Key, _namespace.NamespaceName)); child.Value = metaData.Value; item.Add(child); } _codeItems.Add(item); } else { if (projectItem.Name.LocalName != @event.ItemType) { projectItem.Name = XName.Get(@event.ItemType, projectItem.Name.NamespaceName); } var children = projectItem.Elements().ToList(); projectItem.RemoveNodes(); foreach (var metaData in @event.MetaData) { var child = new XElement(XName.Get(metaData.Key, _namespace.NamespaceName)); child.Value = metaData.Value; projectItem.Add(child); } foreach (var userAddedMetaData in children.Where(x => @event.MetaData.All(y => XName.Get(y.Key, _namespace.NamespaceName) != x.Name))) { var child = new XElement(userAddedMetaData.Name); child.Value = userAddedMetaData.Value; projectItem.Add(child); } } }