crashanalysercmd/PerfToolsSharedLibraries/Engine/SymbianDebugLib/Engine/DbgPluginManager.cs
author Matti Laitinen <matti.t.laitinen@nokia.com>
Thu, 11 Feb 2010 15:50:58 +0200
changeset 0 818e61de6cd1
permissions -rw-r--r--
Add initial version of Crash Analyser cmdline under EPL

/*
* 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 SymbianUtils;
using SymbianDebugLib.Engine;
using SymbianDebugLib.PluginAPI.Types;
using SymbianDebugLib.PluginAPI.Types.Code;
using SymbianDebugLib.PluginAPI.Types.Trace;
using SymbianDebugLib.PluginAPI.Types.Symbol;
using SymbianDebugLib.PluginAPI.Types.KeyBindings;
using SymbianDebugLib.PluginAPI.Types.MetaDataConfig;

namespace SymbianDebugLib.Engine
{
    internal class DbgPluginManager : DisposableObject
    {
        #region Constructors
        public DbgPluginManager( DbgEngine aEngine )
        {
            iEngine = aEngine;
            //
            FindImplementations();
        }
        #endregion

        #region API
        #endregion

        #region Properties
        public DbgEngineCode Code
        {
            get { return iCode; }
        }

        public DbgEngineSymbol Symbols
        {
            get { return iSymbols; } 
        }

        public DbgEngineKeyBindings KeyBindings
        {
            get { return iKeyBindings; }
        }

        public DbgEngineTrace TraceDictionaries
        {
            get { return iTraceDictionaries; }
        }

        public DbgEngineMetaDataConfig MetaDataConfig
        {
            get { return iMetaDataConfig; }
        }
        #endregion

        #region Internal methods
        private void FindImplementations()
        {
            FindImplementationCode();
            FindImplementationTraces();
            FindImplementationSymbols();
            FindImplementationKeyBindings();
            FindImplementationMetaDataConfig();
        }

        private void FindImplementationSymbols()
        {
            iSymbols = DbgEngineSymbol.New( iEngine );
            System.Diagnostics.Debug.Assert( iSymbols != null );
        }

        private void FindImplementationCode()
        {
            iCode = DbgEngineCode.New( iEngine );
            System.Diagnostics.Debug.Assert( iCode != null );
        }

        private void FindImplementationTraces()
        {
            iTraceDictionaries = DbgEngineTrace.New( iEngine );
            System.Diagnostics.Debug.Assert( iTraceDictionaries != null );
        }

        private void FindImplementationMetaDataConfig()
        {
            iMetaDataConfig = DbgEngineMetaDataConfig.New( iEngine );
            System.Diagnostics.Debug.Assert( iMetaDataConfig != null );
        }

        private void FindImplementationKeyBindings()
        {
            iKeyBindings = DbgEngineKeyBindings.New( iEngine );
            System.Diagnostics.Debug.Assert( iKeyBindings != null );
        }
        #endregion

        #region From DisposableObject
        protected override void CleanupManagedResources()
        {
            try
            {
                base.CleanupManagedResources();
            }
            finally
            {
                if ( iSymbols != null )
                {
                    iSymbols.Dispose();
                    iSymbols = null;
                }
                if ( iCode != null )
                {
                    iCode.Dispose();
                    iCode = null;
                }
                if ( iTraceDictionaries != null )
                {
                    iTraceDictionaries.Dispose();
                    iTraceDictionaries = null;
                }
                if ( iKeyBindings != null )
                {
                    iKeyBindings.Dispose();
                    iKeyBindings = null;
                }
                if ( iMetaDataConfig != null )
                {
                    iMetaDataConfig.Dispose();
                    iMetaDataConfig = null;
                }
            }
        }
        #endregion

        #region Data members
        private readonly DbgEngine iEngine;
        private DbgEngineCode iCode;
        private DbgEngineSymbol iSymbols;
        private DbgEngineTrace iTraceDictionaries;
        private DbgEngineKeyBindings iKeyBindings;
        private DbgEngineMetaDataConfig iMetaDataConfig;
        #endregion
    }
}