/// <summary>
        /// Aktualisiert einen Auftrag oder legt einen Auftrag neu an.
        /// </summary>
        /// <param name="job">Der neue oder veränderte Auftrag.</param>
        /// <param name="scheduleIdentifier">Die eindeutige Kennung der veränderten Aufzeichnung.</param>
        public void Update( VCRJob job, Guid? scheduleIdentifier )
        {
            // Report
            if (job != null)
                Tools.ExtendedLogging( "Updating Job {0}", job.UniqueID );

            // Load default profile name
            job.SetProfile();

            // Validate
            job.Validate( scheduleIdentifier );

            // Cleanup schedules
            job.CleanupExceptions();

            // Remove from archive - if job has been recovered
            job.Delete( ArchiveDirectory );

            // Try to store to disk - actually this is inside the lock because the directory virtually is part of our map
            lock (m_Jobs)
                if (job.Save( JobDirectory ).GetValueOrDefault())
                    m_Jobs[job.UniqueID.Value] = job;
                else
                    throw new ArgumentException( string.Format( Properties.Resources.SaveJobFailed, job.UniqueID ), "job" );
        }
        /// <summary>
        /// Löscht einen aktiven oder archivierten Auftrag.
        /// </summary>
        /// <param name="job">Der zu löschende Auftrag.</param>
        public void Delete( VCRJob job )
        {
            // Check unique identifier
            if (!job.UniqueID.HasValue)
                throw new InvalidJobDataException( Properties.Resources.BadUniqueID );

            // Report
            Tools.ExtendedLogging( "Deleting Job {0}", job.UniqueID );

            // Must synchronize
            lock (m_Jobs)
            {
                // Load from the map
                var internalJob = this[job.UniqueID.Value];

                // See if this is active
                if (internalJob != null)
                {
                    // Delete it
                    internalJob.Delete( JobDirectory );

                    // Remove from map
                    m_Jobs.Remove( internalJob.UniqueID.Value );

                    // Save to file
                    internalJob.Save( ArchiveDirectory );
                }
                else
                {
                    // Report
                    Tools.ExtendedLogging( "Job not found in Active Directory - trying Archive" );

                    // Must be archived               
                    job.Delete( ArchiveDirectory );
                }
            }
        }