crashanalysercmd/PerfToolsSharedLibraries/Engine/SymbianUtils/FileSystem/FSEntity.cs
changeset 0 818e61de6cd1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/crashanalysercmd/PerfToolsSharedLibraries/Engine/SymbianUtils/FileSystem/FSEntity.cs	Thu Feb 11 15:50:58 2010 +0200
@@ -0,0 +1,187 @@
+/*
+* Copyright (c) 2009 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.Collections.Generic;
+using System.Text;
+using System.IO;
+
+namespace SymbianUtils.FileSystem
+{
+    public abstract class FSEntity
+    {
+        #region Static constructors
+        public static FSEntity New( string aFSEntityName )
+        {
+            FSEntity ret = null;
+            //
+            try
+            {
+                try
+                {
+                    DirectoryInfo dir = new DirectoryInfo( aFSEntityName );
+                    if ( dir.Exists )
+                    {
+                        ret = new FSEntityDirectory( dir );
+                    }
+                    else
+                    {
+                        ret = new FSEntityFile( new FileInfo( aFSEntityName ) );
+                    }
+                }
+                catch ( Exception )
+                {
+                    ret = new FSEntityFile( new FileInfo( aFSEntityName ) );
+                }
+            }
+            catch ( Exception )
+            {
+            }
+            //
+            if ( ret == null )
+            {
+                throw new FileNotFoundException( "Could not locate suitable entity", aFSEntityName );
+            }
+            //
+            return ret;
+        }
+
+        public static FSEntity New( FSEntity aClone )
+        {
+            FSEntity ret = null;
+            //
+            if ( aClone is FSEntityFile )
+            {
+                ret = new FSEntityFile( ( (FSEntityFile) aClone ).File );
+            }
+            else if ( aClone is FSEntityDirectory )
+            {
+                ret = new FSEntityDirectory( ( (FSEntityDirectory) aClone ).Directory );
+            }
+            else
+            {
+                throw new ArgumentException( "Unsupported File System Entity Type" );
+            }
+            //
+            return ret;
+        }
+        #endregion
+
+        #region Constructors
+        protected FSEntity()
+        {
+        }
+        #endregion
+
+        #region API
+        #endregion
+
+        #region Properties
+        public bool IsFile
+        {
+            get { return this is FSEntityFile; }
+        }
+
+        public bool IsDirectory
+        {
+            get { return this is FSEntityDirectory; }
+        }
+
+        public abstract string FullName
+        {
+            get;
+        }
+
+        public abstract bool IsValid
+        {
+            get;
+        }
+
+        public abstract bool Exists
+        {
+            get;
+        }
+        #endregion
+
+        #region Internal API
+        #endregion
+
+        #region Internal methods
+        #endregion
+
+        #region Operators
+        public static bool operator ==( FSEntity aLeft, FSEntity aRight )
+        {
+            // If both are null, or both are same instance, return true.
+            if ( System.Object.ReferenceEquals( aLeft, aRight ) )
+            {
+                return true;
+            }
+
+            // If one is null, but not both, return false.
+            if ( ( (object) aLeft == null ) || ( (object) aRight == null ) )
+            {
+                return false;
+            }
+
+            // Return true if the fields match:
+            return aLeft.Equals( aRight );
+        }
+
+        public static bool operator !=( FSEntity aLeft, FSEntity aRight )
+        {
+            return !( aLeft == aRight );
+        }
+        #endregion
+
+        #region From System.Object
+        public override int GetHashCode()
+        {
+            return FullName.GetHashCode();
+        }
+
+        public override bool Equals( object aObject )
+        {
+            if ( aObject != null )
+            {
+                if ( aObject is FSEntity )
+                {
+                    FSEntity other = (FSEntity) aObject;
+                    //
+                    if ( other.IsFile && this.IsFile )
+                    {
+                        return other.FullName.Equals( this.FullName );
+                    }
+                    else if ( other.IsDirectory && this.IsDirectory )
+                    {
+                        return other.FullName.Equals( this.FullName );
+                    }
+                }
+            }
+            //
+            return base.Equals( aObject );
+        }
+
+        public override string ToString()
+        {
+            return FullName;
+        }
+        #endregion
+
+        #region Data members
+        #endregion
+    }
+}