public FindPrinterInfoResult Execute(FindPrinterInfoParameters parameters)
        {
            FindPrinterInfoResult result = new FindPrinterInfoResult();

            result.PrinterAssociations = new List <PrinterAssociation>();
            result.Printers            = new List <Printer>();
            result.ReportGroups        = new List <ReportGroup>();
            result.TerminalGroups      = new List <TerminalGroup>();

            ConfigDataAccess.ConfigDataHandler configDataHandler = ConfigDataAccess.ConfigDataHandler.GetConfigDataHandlerInstance(string.Empty, null);

            List <Imi.SupplyChain.OM.OutputHandler.ConfigDataAccess.ConfigDataHandler.PrinterInformation>            printers;
            List <Imi.SupplyChain.OM.OutputHandler.ConfigDataAccess.ConfigDataHandler.PrinterAssociationInformation> printerAssociations;
            Dictionary <string, List <string> > terminalGroups;
            Dictionary <string, List <string> > ReportGroups;

            configDataHandler.GetPrinterInformation(out terminalGroups, out ReportGroups, out printers, out printerAssociations);

            foreach (KeyValuePair <string, List <string> > terGrp in terminalGroups)
            {
                result.TerminalGroups.Add(new TerminalGroup()
                {
                    TerminalGroupID = terGrp.Key, Terminals = terGrp.Value
                });
            }

            foreach (KeyValuePair <string, List <string> > rptGrp in ReportGroups)
            {
                result.ReportGroups.Add(new ReportGroup()
                {
                    ReportGroupID = rptGrp.Key, DocumentTypesWithSubDocType = rptGrp.Value
                });
            }

            foreach (Imi.SupplyChain.OM.OutputHandler.ConfigDataAccess.ConfigDataHandler.PrinterInformation prt in printers)
            {
                result.Printers.Add(new Printer()
                {
                    PrinterID = prt.PrinterID, PrinterDeviceName = prt.PrinterDeviceName, PrinterType = prt.PrinterType
                });
            }

            foreach (Imi.SupplyChain.OM.OutputHandler.ConfigDataAccess.ConfigDataHandler.PrinterAssociationInformation prtAssoc in printerAssociations)
            {
                result.PrinterAssociations.Add(new PrinterAssociation()
                {
                    TerminalGroupID = prtAssoc.TerminalGroupID, ReportGroupID = prtAssoc.ReportGroupID, PrinterID = prtAssoc.PrinterID
                });
            }

            return(result);
        }
        public CreateOutputAction()
        {
            System.Diagnostics.TraceSource trace = new System.Diagnostics.TraceSource(typeof(CreateOutputAction).Name);
            trace.Switch.Level = System.Diagnostics.SourceLevels.Error;
            string loggPath = Path.GetDirectoryName(Imi.Framework.Job.Configuration.InstanceConfig.CurrentInstance.Log.FileName);
            string loggFile = Path.Combine(loggPath, typeof(CreateOutputAction).FullName + ".log");

            Imi.Framework.Shared.Diagnostics.RollingFileTraceListener listener = new Imi.Framework.Shared.Diagnostics.RollingFileTraceListener(loggFile, 512000);
            trace.Listeners.Add(listener);

            try
            {
                _adapterLockDictionary = new Dictionary <string, ReaderWriterLockSlim>();
                _printerLockDictionary = new Dictionary <string, ReaderWriterLockSlim>();

                _outputManagerID = ConfigurationManager.AppSettings["OutputManagerID"];
                _mainService     = Convert.ToBoolean(ConfigurationManager.AppSettings["MainService"]);

                if (string.IsNullOrEmpty(_outputManagerID))
                {
                    trace.TraceEvent(System.Diagnostics.TraceEventType.Error, 0, "\r\n Could not find AppSettings value for OutputManagerID");
                }

                _configDataHandler = ConfigDataAccess.ConfigDataHandler.GetConfigDataHandlerInstance(_outputManagerID, trace);
            }
            catch (Exception ex)
            {
                trace.TraceEvent(System.Diagnostics.TraceEventType.Error, 0, "\r\n" + ex.Message);
            }

            _adapters = new Dictionary <string, IAdapter>();

            CreateAdapters();

            ThreadPool.QueueUserWorkItem(CheckAndUpdateAdaptersThread);
        }