aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Tango.Integration/Storage/StorageFile.cs
blob: 06c9666495dfb538ccdbe0eb6b61773740949186 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tango.PMR.IO;

namespace Tango.Integration.Storage
{
    public class StorageFile : StorageItem
    {
        public long Length { get; set; }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tango.Core.Commands;
using Tango.Core.DI;
using Tango.Logging;
using Tango.PPC.Common.Connection;
using Tango.PPC.Common.Notifications;
using Tango.SharedUI;

namespace Tango.PPC.UI.Dialogs
{
    public class ThreadBreakViewVM : DialogViewVM
    {
        public enum ThreadBreakWizardResult
        {
            None,
            StartThreadLoading
        }

        public enum WizardStage
        {
            Welcome,
            GuidingUnits,
            FeedingUnits,
            Jogging,
            TheDryer,
            DryerClose,
            Fixed,
            ContactSupport,
        }

        [TangoInject]
        private IMachineProvider MachineProvider { get; set; }

        [TangoInject]
        private INotificationProvider NotificationProvider { get; set; }

        public ThreadBreakWizardResult Result { get; set; }

        private WizardStage _stage;
        public WizardStage Stage
        {
            get { return _stage; }
            set { _stage = value; RaisePropertyChangedAuto(); InvalidateRelayCommands(); }
        }

        private bool _isArcHead;
        public bool IsArcHead
        {
            get { return _isArcHead; }
            set { _isArcHead = value; RaisePropertyChangedAuto(); }
        }

        public RelayCommand BackCommand { get; set; }

        //Guiding Units
        public RelayCommand GuidingUnitsFoundCantFixCommand { get; set; }
        public RelayCommand GuidingUnitsCantFindItCommand { get; set; }
        public RelayCommand GuidingUnitsFoundAndFixedCommand { get; set; }

        //Feeding Units
        public RelayCommand FeedingUnitsCantFixCommand { get; set; }
        public RelayCommand FeedingUnitsFoundAndFixedCommand { get; set; }

        //The Dryer
        public RelayCommand TheDryerCantRemoveCommand { get; set; }
        public RelayCommand TheDryerRemovedSuccessfullyCommand { get; set; }

        //Dryer Close
        public RelayCommand OpenThreadLoadingWizardCommand { get; set; }

        public ThreadBreakViewVM()
        {
            CanClose = true;
            TangoIOC.Default.Inject(this);

            MachineProvider.MachineOperator.MachineEventsStateProvider.EventsChanged += MachineEventsStateProvider_EventsChanged;
            MachineProvider.MachineDisconnected += MachineProvider_MachineDisconnected;

            IsArcHead = MachineProvider.Machine.MachineHeadType == BL.Enumerations.HeadTypes.Arc;

            BackCommand = new RelayCommand(GoBack, CanGoBack);

            //Guiding Units Commands
            GuidingUnitsFoundCantFixCommand = new RelayCommand(GuidingUnitsFoundCantFix);
            GuidingUnitsCantFindItCommand = new RelayCommand(GuidingUnitsCantFindIt);
            GuidingUnitsFoundAndFixedCommand = new RelayCommand(GuidingUnitsFoundAndFixed);

            //Feeding Units Commands
            FeedingUnitsCantFixCommand = new RelayCommand(FeedingUnitsCantFix);
            FeedingUnitsFoundAndFixedCommand = new RelayCommand(FeedingUnitsFoundAndFixed);

            //The Dryer Commands
            TheDryerRemovedSuccessfullyCommand = new RelayCommand(TheDryerRemovedSuccessfully);
            TheDryerCantRemoveCommand = new RelayCommand(TheDryerCantRemove);

            OpenThreadLoadingWizardCommand = new RelayCommand(OpenThreadLoadingWizard, () => !MachineProvider.MachineOperator.MachineEventsStateProvider.Events.Any(x => x.Type == BL.Enumerations.EventTypes.DRYER_DOOR_OPEN));
        }

        private void MachineProvider_MachineDisconnected(object sender, EventArgs e)
        {
            InvokeUI(() =>
            {
                Cancel();
            });
        }

        private void MachineEventsStateProvider_EventsChanged(object sender, IEnumerable<BL.Entities.MachinesEvent> e)
        {
            InvalidateRelayCommands();
        }

        #region Back

        private bool CanGoBack()
        {
            return Stage != WizardStage.GuidingUnits &&
                   Stage != WizardStage.Jogging &&
                   Stage != WizardStage.Fixed;
        }

        private void GoBack()
        {
            switch (Stage)
            {
                case WizardStage.FeedingUnits:
                    Stage = WizardStage.GuidingUnits;
                    break;
                case WizardStage.TheDryer:
                    Stage = WizardStage.GuidingUnits;
                    break;
                case WizardStage.ContactSupport:
                    Stage = WizardStage.TheDryer;
                    break;
                case WizardStage.DryerClose:
                    Stage = WizardStage.TheDryer;
                    break;
            }
        }

        #endregion

        #region Guiding Units Commands

        private async void GuidingUnitsFoundAndFixed()
        {
            Stage = WizardStage.Jogging;

            try
            {
                await MachineProvider.MachineOperator.AttemptThreadJogging();
                Stage = WizardStage.Fixed;
            }
            catch (Exception ex)
            {
                LogManager.Log(ex, LogCategory.Warning, "Error occurred while attempting to perform thread jogging.");
                await NotificationProvider.ShowError($"Thread movement verification failed.\n{ex.FlattenMessage()}");
                Stage = WizardStage.FeedingUnits;
            }
        }

        private void GuidingUnitsCantFindIt()
        {
            Stage = WizardStage.FeedingUnits;
        }

        private void GuidingUnitsFoundCantFix()
        {
            Stage = WizardStage.TheDryer;
        }

        #endregion

        #region Feeding Units Commands

        private void FeedingUnitsCantFix()
        {
            Stage = WizardStage.TheDryer;
        }

        private async void FeedingUnitsFoundAndFixed()
        {
            Stage = WizardStage.Jogging;

            try
            {
                await MachineProvider.MachineOperator.AttemptThreadJogging();
                Stage = WizardStage.Fixed;
            }
            catch (Exception ex)
            {
                LogManager.Log(ex, LogCategory.Warning, "Error occurred while attempting to perform thread jogging.");
                await NotificationProvider.ShowError($"Thread movement verification failed.\n{ex.FlattenMessage()}");
                Stage = WizardStage.TheDryer;
            }
        }

        #endregion

        #region The Dryer Commands

        private void TheDryerCantRemove()
        {
            Stage = WizardStage.ContactSupport;
        }

        private void TheDryerRemovedSuccessfully()
        {
            Stage = WizardStage.DryerClose;
        }

        #endregion

        #region Dryer Close Commands

        private void OpenThreadLoadingWizard()
        {
            Result = ThreadBreakWizardResult.StartThreadLoading;
            Accept();
        }

        #endregion

        protected override void Accept()
        {
            base.Accept();
            CleanUp();
        }

        protected override void Cancel()
        {
            base.Cancel();
            CleanUp();
        }

        private void CleanUp()
        {
            MachineProvider.MachineOperator.MachineEventsStateProvider.EventsChanged -= MachineEventsStateProvider_EventsChanged;
            MachineProvider.MachineDisconnected -= MachineProvider_MachineDisconnected;
        }
    }
}