From 3436961bb5c01d659d09be134368f4f69460cef9 Mon Sep 17 00:00:00 2001
From: MW
Date: Sat, 26 May 2007 13:40:19 +0000
Subject: Start of rewrite 5279!
---
Prebuild/src/Core/Nodes/SolutionNode.cs | 284 ++++++++++++++++++++++++++++++++
1 file changed, 284 insertions(+)
create mode 100644 Prebuild/src/Core/Nodes/SolutionNode.cs
(limited to 'Prebuild/src/Core/Nodes/SolutionNode.cs')
diff --git a/Prebuild/src/Core/Nodes/SolutionNode.cs b/Prebuild/src/Core/Nodes/SolutionNode.cs
new file mode 100644
index 0000000..0121075
--- /dev/null
+++ b/Prebuild/src/Core/Nodes/SolutionNode.cs
@@ -0,0 +1,284 @@
+#region BSD License
+/*
+Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
+
+Redistribution and use in source and binary forms, with or without modification, are permitted
+provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this list of conditions
+ and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
+ and the following disclaimer in the documentation and/or other materials provided with the
+ distribution.
+* The name of the author may not be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+#endregion
+
+#region CVS Information
+/*
+ * $Source$
+ * $Author: jendave $
+ * $Date: 2006-02-28 17:15:42 +0100 (ti, 28 feb 2006) $
+ * $Revision: 92 $
+ */
+#endregion
+
+using System;
+using System.Collections;
+using System.Diagnostics;
+using System.IO;
+using System.Xml;
+
+using Prebuild.Core.Attributes;
+using Prebuild.Core.Interfaces;
+using Prebuild.Core.Utilities;
+
+namespace Prebuild.Core.Nodes
+{
+ ///
+ ///
+ ///
+ [DataNode("Solution")]
+ public class SolutionNode : DataNode
+ {
+ #region Fields
+
+ private string m_Name = "unknown";
+ private string m_Path = "";
+ private string m_FullPath = "";
+ private string m_ActiveConfig = "Debug";
+
+ private OptionsNode m_Options;
+ private FilesNode m_Files;
+ private Hashtable m_Configurations;
+ private Hashtable m_Projects;
+ private ArrayList m_ProjectsOrder;
+
+ #endregion
+
+ #region Constructors
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ public SolutionNode()
+ {
+ m_Configurations = new Hashtable();
+ m_Projects = new Hashtable();
+ m_ProjectsOrder = new ArrayList();
+ }
+
+ #endregion
+
+ #region Properties
+
+ ///
+ /// Gets or sets the active config.
+ ///
+ /// The active config.
+ public string ActiveConfig
+ {
+ get
+ {
+ return m_ActiveConfig;
+ }
+ set
+ {
+ m_ActiveConfig = value;
+ }
+ }
+
+ ///
+ /// Gets the name.
+ ///
+ /// The name.
+ public string Name
+ {
+ get
+ {
+ return m_Name;
+ }
+ }
+
+ ///
+ /// Gets the path.
+ ///
+ /// The path.
+ public string Path
+ {
+ get
+ {
+ return m_Path;
+ }
+ }
+
+ ///
+ /// Gets the full path.
+ ///
+ /// The full path.
+ public string FullPath
+ {
+ get
+ {
+ return m_FullPath;
+ }
+ }
+
+ ///
+ /// Gets the options.
+ ///
+ /// The options.
+ public OptionsNode Options
+ {
+ get
+ {
+ return m_Options;
+ }
+ }
+
+ ///
+ /// Gets the files.
+ ///
+ /// The files.
+ public FilesNode Files
+ {
+ get
+ {
+ return m_Files;
+ }
+ }
+
+ ///
+ /// Gets the configurations.
+ ///
+ /// The configurations.
+ public ICollection Configurations
+ {
+ get
+ {
+ return m_Configurations.Values;
+ }
+ }
+
+ ///
+ /// Gets the configurations table.
+ ///
+ /// The configurations table.
+ public Hashtable ConfigurationsTable
+ {
+ get
+ {
+ return m_Configurations;
+ }
+ }
+
+ ///
+ /// Gets the projects.
+ ///
+ /// The projects.
+ public ICollection Projects
+ {
+ get
+ {
+ return m_Projects.Values;
+ }
+ }
+
+ ///
+ /// Gets the projects table.
+ ///
+ /// The projects table.
+ public Hashtable ProjectsTable
+ {
+ get
+ {
+ return m_Projects;
+ }
+ }
+
+ ///
+ /// Gets the projects table.
+ ///
+ /// The projects table.
+ public ArrayList ProjectsTableOrder
+ {
+ get
+ {
+ return m_ProjectsOrder;
+ }
+ }
+
+ #endregion
+
+ #region Public Methods
+
+ ///
+ /// Parses the specified node.
+ ///
+ /// The node.
+ public override void Parse(XmlNode node)
+ {
+ m_Name = Helper.AttributeValue(node, "name", m_Name);
+ m_ActiveConfig = Helper.AttributeValue(node, "activeConfig", m_ActiveConfig);
+ m_Path = Helper.AttributeValue(node, "path", m_Path);
+
+ m_FullPath = m_Path;
+ try
+ {
+ m_FullPath = Helper.ResolvePath(m_FullPath);
+ }
+ catch
+ {
+ throw new WarningException("Could not resolve solution path: {0}", m_Path);
+ }
+
+ Kernel.Instance.CurrentWorkingDirectory.Push();
+ try
+ {
+ Helper.SetCurrentDir(m_FullPath);
+
+ if( node == null )
+ {
+ throw new ArgumentNullException("node");
+ }
+
+ foreach(XmlNode child in node.ChildNodes)
+ {
+ IDataNode dataNode = Kernel.Instance.ParseNode(child, this);
+ if(dataNode is OptionsNode)
+ {
+ m_Options = (OptionsNode)dataNode;
+ }
+ else if(dataNode is FilesNode)
+ {
+ m_Files = (FilesNode)dataNode;
+ }
+ else if(dataNode is ConfigurationNode)
+ {
+ m_Configurations[((ConfigurationNode)dataNode).Name] = dataNode;
+ }
+ else if(dataNode is ProjectNode)
+ {
+ m_Projects[((ProjectNode)dataNode).Name] = dataNode;
+ m_ProjectsOrder.Add(dataNode);
+ }
+ }
+ }
+ finally
+ {
+ Kernel.Instance.CurrentWorkingDirectory.Pop();
+ }
+ }
+
+ #endregion
+ }
+}
--
cgit v1.1