Merge pull request #112 from skolima/master
[mono.git] / mcs / class / Microsoft.Build / Microsoft.Build.Construction / ProjectWhenElement.cs
index 9750a4dc4ab85bff1acc2b0c2d6195e3b77a314f..68040f52c210fa55a53eeb58331fda86c0925304 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 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 (string name)
+                {
+                        switch (name) {
+                        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.", name));
                         }
                 }
         }