crashanalysercmd/PerfToolsSharedLibraries/Engine/SymBuildParsingLib/Parser/BuildFile/Nodes/SymNodeBuildFileExport.cs
changeset 0 818e61de6cd1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/crashanalysercmd/PerfToolsSharedLibraries/Engine/SymBuildParsingLib/Parser/BuildFile/Nodes/SymNodeBuildFileExport.cs	Thu Feb 11 15:50:58 2010 +0200
@@ -0,0 +1,146 @@
+/*
+* Copyright (c) 2004-2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+using System;
+using System.IO;
+using SymbianTree;
+using SymBuildParsingLib.Utils;
+using SymBuildParsingLib.Tree;
+using SymBuildParsingLib.Parser.BuildFile.Document;
+
+namespace SymBuildParsingLib.Parser.BuildFile.Nodes
+{
+	public sealed class SymNodeBuildFileExport : SymNodeAddAsChild
+	{
+		#region Enumerations
+		public enum TType
+		{
+			ETypeFile = 0,
+			ETypeZipFile
+		}
+		#endregion
+
+		#region Constructors & destructor
+		public SymNodeBuildFileExport()
+		{
+		}
+
+		public SymNodeBuildFileExport( TType aType )
+		{
+			iType = aType;
+		}
+		#endregion
+
+		#region API
+		public TType Type
+		{
+			get { return iType; }
+			set { iType = value; }
+		}
+
+		public string FileName
+		{
+			get { return iFileName; }
+			set
+			{
+				if	( !( Root is SymBuildFileDocument ) )
+				{
+					throw new ArgumentException( "Node must be added to tree before using this API" );
+				}
+
+				// Get bld.inf file name
+				SymBuildFileDocument doc = (SymBuildFileDocument) Root;
+				string bldInfPath = Path.GetFullPath( doc.Context.FileName );
+
+				// Try to intepret MMP file name
+				bool valid = false;
+				string rootPath = Path.GetPathRoot( value );
+				bool isRooted = Path.IsPathRooted( value );
+				//
+				if	( isRooted == false || rootPath == string.Empty || rootPath == @"\" )
+				{
+					// If a source file is listed with a relative path, the path will be considered relative to the directory containing the bld.inf file. 
+
+					iFileName = SymFileSystemUtils.MergePaths( bldInfPath, value );
+					valid = true;
+				}
+				else if ( isRooted )
+				{
+					iFileName = SymFileSystemUtils.MergePaths( SymEnvironment.RootPath, value );
+					valid = true;
+				}
+
+				// Throw errors if we didn't find a valid match
+				if	( valid == false )
+				{
+					throw new ArgumentException( "Invalid file name: " + value );
+				}
+			}
+		}
+
+		public string DestinationPath
+		{
+			get { return iDestinationPath; }
+			set
+			{
+				// If a destination file is not specified, the source file will be copied to epoc32\include\. 
+				bool valid = false;
+				string rootPath = Path.GetPathRoot( value );
+				//
+				if	( Path.IsPathRooted( value ) == false || rootPath == string.Empty || rootPath == @"\" )
+				{
+					// If a destination file is specified with the relative path, the path will be considered relative to directory epoc32\include\.
+					iDestinationPath = SymFileSystemUtils.MergePaths( SymEnvironment.Epoc32IncludePath, value );
+					valid = true;
+				}
+				else if ( rootPath.Length == 2 || rootPath.Length == 3 && rootPath[1] == ':' )
+				{
+					// If a destination begins with a drive letter, then the file is copied to epoc32\data\<drive_letter>\<path>. For example,
+					// 
+					// mydata.dat e:\appdata\mydata.dat
+					// copies mydata.dat to epoc32\data\e\appdata\mydata.dat.
+					// 
+					// You can use any driveletter between A and Z.
+
+					string drive = rootPath[ 0 ].ToString().ToLower();
+					string pathWithoutDrive = SymFileSystemUtils.DirectoryFromPath( rootPath );
+
+					// Check drive letter is valid
+					bool driveIsValid = SymFileSystemUtils.IsDriveValid( drive );
+					if	( driveIsValid )
+					{
+						iDestinationPath = SymEnvironment.Epoc32DataPath + drive + pathWithoutDrive;
+						valid = true;
+					}
+				}
+
+				// Throw errors if we didn't find a valid match
+				if	( valid == false )
+				{
+					throw new ArgumentException( "Invalid destination path: " + value );
+				}
+			}
+		}
+		#endregion
+
+		#region Data members
+		private TType iType = TType.ETypeFile;
+		private string iFileName = string.Empty;
+		private string iDestinationPath = SymEnvironment.Epoc32IncludePath;
+		#endregion
+	}
+}