private static IActivityMachine CreateMachineForCommandExecuting(DynamicConfiguration config)
        {
            CommandExecutingMachine activityMachine;

            // If no script treenode was given yet, try to create one here.
            if (config.HasDataKey("ScriptName") && config.HasDataKey("DeviceType") && !config.HasDataValue("TreeNode"))
            {
                config.Data.TreeNode = ((IExecuterLoader)config.Data.Loader).
                                       GetScriptNode(config.Data.ScriptName, config.Data.DeviceType);
            }

            if (config.HasDataValue("IsSubmachine") && config.Data.IsSubmachine)
            {
                activityMachine = new CommandExecutingMachine(config, config.Data.Name);
            }
            else
            {
                activityMachine = new CommandExecutingMachine(config.Data.ProcessName, config);
            }

            if (config.HasDataValue(Key.Instrument))
            {
                var instrument = config.Data.Instrument as IInstrument;
                config.Data.IsInServiceMode = (instrument != null && instrument.InServiceMode);
            }

            activityMachine.Builder = ActivityMachineBuilderLoader.GetActivityMachineBuilder(config);
            activityMachine.LogType = LogType.Script;

            return(activityMachine);
        }
        public static IActivityMachine CreateMachineForTrayProcessorErrorHandling(DynamicConfiguration config)
        {
            var ae = config.Data.Exception as AtlasException;

            config.Data.Station = ae.Station;

            var activityMachine = new ErrorHandlingActivityMachine(GetErrorMachineName(ae));

            activityMachine.Builder = ActivityMachineBuilderLoader.GetActivityMachineBuilder(config);

            return(activityMachine);
        }
        internal static IActivityMachine CreateMachineForTransportOperation(DynamicConfiguration config)
        {
            var dispatcher      = config.Data.Dispatcher as SimpleDispatcher;
            var operation       = config.Data.TransportOperation;
            var activityMachine = new TransportOperationMachine(Enum.GetName(typeof(TransportOperation), operation), dispatcher);

            // Try to reuse a builder if one was supplied.
            try
            {
                activityMachine.Builder = config.Data.Builder as IActivityMachineBuilder;
            }
            catch (Exception)
            {
                //nothing to do
            }
            if (activityMachine.Builder == null)
            {
                activityMachine.Builder = ActivityMachineBuilderLoader.GetActivityMachineBuilder(config);
            }

            return(activityMachine);
        }