示例#1
0
        private IMiramarTask LoadTaskInstance(IMiramarClientInfo info, TaskConfigurationModel model)
        {
            var factory = ObjectFactory.GetAllInstances <IMiramarTaskFactory>()
                          .FirstOrDefault(x => x.IsSatisfiedBy(model.TaskName));

            if (factory == null)
            {
                var message =
                    string.Format("No corresponding Task Factory could be found for task \"{0}\". Task will not be executed.",
                                  model.TaskName);

                throw new InvalidOperationException(message);
            }

            IMiramarTask instance;

            if (allowMetaData && model.HasMetaData)
            {
                instance = LoadTaskInstanceWithMetaData(factory, info, model);
                if (instance != null)
                {
                    return(instance);
                }
            }

            instance = factory.GetTask(info, model.TaskName);
            if (instance == null)
            {
                var message =
                    string.Format("Unable to create instance for task \"{0}\" for Client \"{1}\". Task will not be executed.",
                                  model.TaskName, info.ClientId);

                throw new InvalidOperationException(message);
            }

            return(instance);
        }
示例#2
0
        private IMiramarTask LoadTaskInstanceWithMetaData(IMiramarTaskFactory factory, IMiramarClientInfo info, TaskConfigurationModel model)
        {
            var metaDataFactory = factory as IMiramarMetaDataTaskFactory;

            if (metaDataFactory == null)
            {
                logger.WarnFormat(
                    "The corresponding Task Factory for task \"{0}\" does not support instantiation with meta data. Task will be created without meta data.",
                    model.TaskName);

                return(null);
            }

            if (!metaDataFactory.AllowsMetaDataConfiguration(model.TaskName))
            {
                logger.WarnFormat(
                    "Task \"{0}\" has been configured with meta data but is not supported. Task will be created without meta data.",
                    model.TaskName);

                return(null);
            }

            var metaDataInstance = metaDataFactory.GetTask(info, model.TaskName, model.MetaData);

            if (metaDataInstance != null)
            {
                return(metaDataInstance);
            }

            var message =
                string.Format(
                    "Unable to create instance for task \"{0}\" for Client \"{1}\" with meta data. Task will not be executed.",
                    model.TaskName, info.ClientId);

            throw new InvalidOperationException(message);
        }
示例#3
0
        public IMiramarTask GetTask(IMiramarClientInfo clientInfo, string taskId)
        {
            var adminDataAccess = new AdminDataAccess(clientInfo.AdminConnection);

            var clientId  = clientInfo.ClientId;
            var logName   = string.Format("Client-{0}", clientId);
            var logTaskId = string.Format("client.{0}.{1}", clientId, taskId);
            var logger    = InfrastructureFactory.CreateLogger(clientId, logName, logTaskId);

            if (taskId.StartsWith("market.file", StringComparison.OrdinalIgnoreCase))
            {
                var clientDataAccess = new ClientDataAccess(clientInfo.ClientConnection);

                if (taskId.Equals("market.file.decrypt", StringComparison.OrdinalIgnoreCase))
                {
                    return(new DecryptFileTask(adminDataAccess, clientDataAccess, logger, clientId));
                }

                var marketDataAccess = new MarketDataAccess(clientInfo.MarketConnection);

                if (taskId.Equals("market.file.import", StringComparison.OrdinalIgnoreCase))
                {
                    return(new ImportMarketFileTask(adminDataAccess, marketDataAccess, logger, clientId));
                }

                if (taskId.Equals("market.file.export", StringComparison.OrdinalIgnoreCase))
                {
                    return(new ExportMarketFileTask(adminDataAccess, marketDataAccess, logger, clientId));
                }

                if (taskId.Equals("market.file.encrypt", StringComparison.OrdinalIgnoreCase))
                {
                    return(new EncryptFileTask(adminDataAccess, clientDataAccess, marketDataAccess, logger, clientId));
                }

                if (taskId.Equals("market.file.transmit", StringComparison.OrdinalIgnoreCase))
                {
                    return(new TransmitFileTask(adminDataAccess, clientDataAccess, marketDataAccess, logger, clientId));
                }
            }

            if (taskId.StartsWith("ercot.cbf", StringComparison.OrdinalIgnoreCase))
            {
                var clientDataAccess = new ClientDataAccess(clientInfo.ClientConnection);
                var marketDataAccess = new MarketDataAccess(clientInfo.MarketConnection);

                if (taskId.Equals("ercot.cbf.encrypt", StringComparison.OrdinalIgnoreCase))
                {
                    return(new ErcotEncryptFileTask(adminDataAccess, clientDataAccess, marketDataAccess, logger,
                                                    clientId));
                }

                if (taskId.Equals("ercot.cbf.transmit", StringComparison.OrdinalIgnoreCase))
                {
                    return(new ErcotTransmitFileTask(adminDataAccess, clientDataAccess, marketDataAccess, logger,
                                                     clientId));
                }
            }

            var message = string.Format("No Miramar Task could be identified for task \"{0}\".", taskId);

            throw new ArgumentOutOfRangeException("taskId", message);
        }