Merge pull request #4540 from kumpera/android-changes-part1
[mono.git] / mcs / class / Microsoft.Build / Microsoft.Build.Construction / ProjectWhenElement.cs
index 9750a4dc4ab85bff1acc2b0c2d6195e3b77a314f..0d7331afcbfdee8b32467ad2e67957295e461b7c 100644 (file)
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using System.Collections.Generic;
 using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Xml;
+using Microsoft.Build.Exceptions;
+using Microsoft.Build.Internal;
 
 namespace Microsoft.Build.Construction
 {
+        [System.Diagnostics.DebuggerDisplayAttribute ("#Children={Count} Condition={Condition}")]
         public class ProjectWhenElement : ProjectElementContainer
         {
+                internal ProjectWhenElement (string condition, ProjectRootElement containingProject)
+                {
+                        Condition = condition;
+                        ContainingProject = containingProject;
+                }
                 public ICollection<ProjectPropertyGroupElement> PropertyGroups {
-                        get {
-                                throw new NotImplementedException ();
-                        }
+                        get { return new CollectionFromEnumerable<ProjectPropertyGroupElement> (
+                                new FilteredEnumerable<ProjectPropertyGroupElement> (Children)); }
                 }
                 public ICollection<ProjectItemGroupElement> ItemGroups {
-                        get {
-                                throw new NotImplementedException ();
-                        }
+                        get { return new CollectionFromEnumerable<ProjectItemGroupElement> (
+                                new FilteredEnumerable<ProjectItemGroupElement> (Children)); }
                 }
                 public ICollection<ProjectChooseElement> ChooseElements {
-                        get {
-                                throw new NotImplementedException ();
-                        }
+                        get { return new CollectionFromEnumerable<ProjectChooseElement> (
+                                new FilteredEnumerable<ProjectChooseElement> (Children));}
                 }
                 internal override string XmlName {
-                        get {
-                                throw new NotImplementedException ();
+                        get { return "When"; }
+                }
+                internal override ProjectElement LoadChildElement (XmlReader reader)
+                {
+                        switch (reader.LocalName) {
+                        case "PropertyGroup":
+                                var property = ContainingProject.CreatePropertyGroupElement ();
+                                AppendChild (property);
+                                return property;
+                        case "ItemGroup":
+                                var item = ContainingProject.CreateItemGroupElement ();
+                                AppendChild (item);
+                                return item;
+                        case "When":
+                                var when = ContainingProject.CreateWhenElement (null);
+                                AppendChild (when);
+                                return when;
+                        default:
+                                throw new InvalidProjectFileException (string.Format (
+                                        "Child \"{0}\" is not a known node type.", reader.LocalName));
                         }
                 }
         }