public Level[] GetLevels()
        {
            _Trace.TraceEvent(TraceEventType.Verbose, -1, "GetAllLevels");

            LevelEntity[] entities = new CriticalResultsEntityManager().GetLevels();
            List<Level> levels = new List<Level>();
            foreach (LevelEntity entity in entities)
            {
                Level level = new Level(entity);
                level.ResolveTransports();
                levels.Add(level);
            }
            return levels.ToArray();
        }
        public bool ResolveLevels()
        {
            if (_Entity == null)
                return false;
            if (_Entity.Levels == null)
            {
                return false;
            }

            _Levels = new List<Level>();
            foreach (LevelEntity e in _Entity.Levels)
            {
                Level level = new Level(e);
                _Levels.Add(level);
            }
            return true;
        }
        public Level CreateLevel(Level level)
        {
            _Trace.TraceEvent(TraceEventType.Verbose, -1, "CreateLevel");

            CriticalResultsEntityManager manager = new CriticalResultsEntityManager();
            LevelEntity entity = manager.CreateLevel(level.Name, level.Description, level.ShortDescription, level.ColorValue, level.EscalationTimeout, level.DueTimeout, level.DirectContactRequired);
            if (level.Transports != null)
            {
                foreach(Transport t in level.Transports){
                    bool mandatory = false;
                    foreach(Transport mT in level.MandatoryTransports)
                    {
                        if(mT.Name == t.Name)
                        {
                            mandatory = true;
                        }
                    }
                    manager.CreateTransportLevelEntity(entity.Uuid, t.Name, mandatory);
                }
                UserEntity[] ues = manager.GetAllUsers();
                entity.TransportLevels.Load();
                foreach (UserEntity ue in ues)
                {
                    ue.UserTransports.Load();

                    foreach (UserTransportEntity te in ue.UserTransports)
                    {

                        foreach (TransportLevelEntity t in entity.TransportLevels)
                        {
                            if (te.Transport != null)
                            {
                                if (t.Transport.Name == te.Transport.Name)
                                {
                                    te.Levels.Add(entity);
                                }
                            }
                        }
                    }
                }
                manager.SaveChanges();
            }
            return new Level(entity);
        }
 public Level CreateLevel_Json(Level level)
 {
     return CreateLevel(level);
 }
 public Level UpdateLevel_Json(Level level)
 {
     return UpdateLevel(level);
 }
        public Level UpdateLevel(Level level)
        {
            _Trace.TraceEvent(TraceEventType.Verbose, -1, "UpdateLevel");

            CriticalResultsEntityManager manager = new CriticalResultsEntityManager();
            LevelEntity entity = manager.UpdateLevel(level.Uuid, level.Name, level.Description, level.ShortDescription, level.ColorValue, level.EscalationTimeout, level.DueTimeout, level.DirectContactRequired);
            if (level.Transports != null)
            {
                List<TransportLevelEntity> transportsToRemove = new List<TransportLevelEntity>();
                transportsToRemove.AddRange(entity.TransportLevels);
                foreach(TransportLevelEntity tle in transportsToRemove)
                {
                    if (!tle.TransportReference.IsLoaded)
                    {
                        tle.TransportReference.Load();
                    }
                    manager.RemoveTransportFromLevel(level.Uuid, tle.Transport.Name);
                }

                foreach (Transport t in level.Transports)
                {
                    bool mandatory = false;
                    foreach (Transport mT in level.MandatoryTransports)
                    {
                        if (t.Name == mT.Name)
                        {
                            mandatory = true;
                        }
                    }
                    manager.CreateTransportLevelEntity(level.Uuid, t.Name, mandatory);
                }

            }
            return new Level(entity);
        }
        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        /// <remarks>
        /// Change: 2009-05-31, Jeremy R.
        ///		Mandatory flag was added to TransportLevelEntity.  This change has been propagated by adding a bool? Mandatory flag to the Transport and Level.
        ///		The mandatory flag from the TransportLevelEntity is applied to either of these objects to hide the changes to the Entities and avoid changing the object model.
        ///	Change: 2009-06-01, John C.
        ///		Manadaroty flag removed and replaced with _MandatoryLevels array.
        /// </remarks>
        public bool ResolveLevels()
        {
            if (_Entity == null)
                return false;
            if (_Entity.TransportLevels == null)
                return false;

            _Levels = new List<Level>();
            _MandatoryLevels = new List<Level>();
            foreach (TransportLevelEntity e in _Entity.TransportLevels)
            {
                Level level = new Level(e.Level);
                if (e.Mandatory)
                {
                    _MandatoryLevels.Add(level);
                }
                _Levels.Add(level);
            }
            return true;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        /// <remarks>
        /// Change: 2009-05-31, Jeremy R
        ///		Removed internal call to automatically resolve any level transports.  This doesn't belong in the Result.  
        ///		This can be done by calling Result.ResolveLevel() followed by Result.Levels.ResolveTransport();
        /// 
        /// </remarks>
        public bool ResolveLevel()
        {
            if(_Entity == null )
            {
                return false;
            }
            else if( _Entity.Level == null )
            {
                return false;
            }

            _Level = new Level(_Entity.Level);

            return true;
        }
 public virtual void ExtendUserFromExternalDirectory(User user, Transport[] transports, Level[] levels, string email, string[] proxyAddresses)
 {
 }