Implementation of the 2.0 session state model
[mono.git] / mcs / class / Microsoft.Build.Engine / Microsoft.Build.BuildEngine / BuildTask.cs
index c7a10113a251d1995a5b5c5cf62ff965246a2a77..ef25e6b7e9bf2dc913b2fde70ce4877effb47bed 100644 (file)
@@ -43,7 +43,6 @@ namespace Microsoft.Build.BuildEngine {
                Target                  parentTarget;
                XmlElement              taskElement;
        
-               // FIXME: implement
                internal BuildTask (XmlElement taskElement, Target parentTarget)
                {
                        if (taskElement == null)
@@ -59,12 +58,26 @@ namespace Microsoft.Build.BuildEngine {
                public void AddOutputItem (string taskParameter,
                                           string itemName)
                {
+                       XmlElement element = parentTarget.Project.XmlDocument.CreateElement ("Output", Project.XmlNamespace);
+                       taskElement.AppendChild (element);
+                       
+                       if (taskParameter != null)
+                               element.SetAttribute ("TaskParameter", taskParameter);
+                       if (itemName != null)
+                               element.SetAttribute ("ItemName", itemName);
                }
                
                [MonoTODO]
                public void AddOutputProperty (string taskParameter,
                                               string propertyName)
                {
+                       XmlElement element = parentTarget.Project.XmlDocument.CreateElement ("Output", Project.XmlNamespace);
+                       taskElement.AppendChild (element);
+                       
+                       if (taskParameter != null)
+                               element.SetAttribute ("TaskParameter", taskParameter);
+                       if (propertyName != null)
+                               element.SetAttribute ("PropertyName", propertyName);
                }
                
                [MonoTODO]
@@ -89,7 +102,6 @@ namespace Microsoft.Build.BuildEngine {
                }
 
 
-               [MonoTODO]
                public string[] GetParameterNames ()
                {
                        List <string> tempNames = new List <string> ();
@@ -105,26 +117,30 @@ namespace Microsoft.Build.BuildEngine {
                        return tempNames.ToArray ();
                }
                
-               [MonoTODO]
                public string GetParameterValue (string attributeName)
                {
+                       if (attributeName == "Condition")
+                               throw new ArgumentException ("Condition attribute cannot be accessed using this method.");
+                       if (attributeName == "ContinueOnError")
+                               throw new ArgumentException ("ContinueOnError attribute cannot be accessed using this method.");
+
                        return taskElement.GetAttribute (attributeName);
                }
                
-               [MonoTODO]
                public void SetParameterValue (string parameterName,
                                               string parameterValue)
                {
                        SetParameterValue (parameterName, parameterValue, false);
                }
                
-               [MonoTODO]
                public void SetParameterValue (string parameterName,
                                               string parameterValue,
                                               bool treatParameterValueAsLiteral)
                {
-                       // FIXME: use expression for parameterValue
-                       taskElement.SetAttribute (parameterName, parameterValue);
+                       if (treatParameterValueAsLiteral)
+                               taskElement.SetAttribute (parameterName, Utilities.Escape (parameterValue));
+                       else
+                               taskElement.SetAttribute (parameterName, parameterValue);
                }
                
                private void LogTaskStarted ()
@@ -165,7 +181,6 @@ namespace Microsoft.Build.BuildEngine {
                        return parameters;
                }
                
-               [MonoTODO]
                public string Condition {
                        get {
                                return taskElement.GetAttribute ("Condition");
@@ -179,10 +194,12 @@ namespace Microsoft.Build.BuildEngine {
                public bool ContinueOnError {
                        get {
                                string str = taskElement.GetAttribute ("ContinueOnError");
-                               if (str == String.Empty) {
+                               if (str == String.Empty)
                                        return false;
-                               } else {
-                                       return Boolean.Parse (str);
+                               else {
+                                       Expression exp = new Expression ();
+                                       exp.Parse (str);
+                                       return (bool) exp.ConvertTo (parentTarget.Project, typeof (bool));
                                }
                        }
                        set {